Статьи

Тесты SoapUI с Ant + Ivy

Вам нравятся квестовые игры? Все делают!

Сегодня мы должны были сыграть один. Это название было «запускать тесты SoapUI с помощью скрипта ANT». Это был необходимый шаг для доступа на следующий уровень: «Автоматическое тестирование наших сервисов на сервере Continuous Integration».

SoapUI — это мой де-факто инструмент для тестирования сервисов SOA. У него есть плагин Maven 2 , и он достаточно стар, чтобы иметь плагин Maven 1. Но нам не совсем повезло: у SoapUI нет задач Ant.

В этой статье показано, как запускать тесты SoapUI из сценария Ant. Мы предполагаем, что вы уже используете Apache Ivy в этом руководстве.

Итак, начнем.

Ant скрипт

Задача Ant достаточно проста:

<target name="test">
    <mkdir dir="test-results"/>
    <java classname="com.eviware.soapui.tools.SoapUITestCaseRunner" errorproperty="tests-failed" fork="yes" dir="test-results">
      <arg line="-j -f${basedir}/test-results"/>
      <arg value="-t${basedir}/soapui-settings.xml"/>
      <arg value="${basedir}/MY-SMART-soapui-project.xml"/>
      <classpath>
        <fileset dir="lib" includes="*.jar"/>
      </classpath>
    </java>

    <junitreport todir="test-results">
      <fileset dir="test-results">
        <include name="TEST-*.xml"/>
      </fileset>
      <report format="frames" todir="reports/html"/>
    </junitreport>

    <fail if="tests-failed"/>
  </target>

Конфигурация плюща

Далее вам нужно добавить соответствующие зависимости в ivy.xml:

<dependencies defaultconf="default->default">
    <dependency org="junit" name="junit" rev="4.10+" />
    <dependency org="eviware" name="maven-soapui-plugin" rev="4.0.1" />
    <dependency org="net.sf.jtidy" name="jtidy" rev="r938+"/>
    <exclude org="jtidy" module="jtidy"/>
  </dependencies>

И, наконец, вам нужно добавить
репозиторий eviware.com в ваш ivysettings.xml:

<ivysettings>
  <settings defaultResolver="default"/>

  <resolvers>
    <ibiblio name="public" m2compatible="true"/>
    <ibiblio name="eviware" m2compatible="true" root="http://www.eviware.com/repository/maven2/"/>
    <chain name="default" returnFirst="true">
      <resolver ref="eviware"/>
      <resolver ref="public"/>
    </chain>
  </resolvers>
</ivysettings>

Обратите внимание, что на
первом месте должно быть eviware , поскольку оно переопределяет некоторые артефакты из центрального репозитория, например, javax.jms: jms.

Настройки SoapUI

Обычно все тесты имеют некоторые параметры конфигурации. В случае SoapUI принято объявлять их в
глобальных свойствах . К счастью, они могут храниться в VCS в файле soapui-settings.xml:

<con:soapui-settings xmlns:con="http://eviware.com/soapui/config">
  <con:setting id="GlobalPropertySettings@properties"><![CDATA[<xml-fragment xmlns:con="http://eviware.com/soapui/config">
  <property xmlns="http://eviware.com/soapui/config">
    <name>MY_serverUrl
    <value>http://my-dev-server.chucknorris.com:8080
  </property>
  <con:property>
    <con:name>MY_dbConnectionString
    <con:value>jdbc:oracle:thin:chuck/[email protected]:1521:dev
  </con:property>
</xml-fragment>]]></con:setting>
</con:soapui-settings>

Бег

казнить

ant test

и будьте готовы загрузить ~ 60 МБ банок. Я понятия не имею, почему SoapUI так нужен (например, зачем ему javax.jms?), Но это Java, ребята. После запуска тестов Ant вы найдете HTML-отчеты в стиле JUnit в папке reports / HTML и несколько файлов журналов в папке результатов теста для более глубокой отладки.

Поиск проблемы

Отсутствующие зависимости

Поскольку eviware repo переопределяет некоторые артефакты из центрального репозитория, вы можете столкнуться с проблемами, если некоторые артефакты уже кэшированы в вашем локальном репозитории. Например, у нас была эта проблема с артефактом javax.jms: jms. Центральный репозиторий содержит только помпы, утверждающие, что такой банки нет, но в eviware repo эта банка есть. Если первый случайно загружен в ваш локальный кеш, вы получите следующую ошибку:

[ivy:retrieve] :::: WARNINGS
[ivy:retrieve]   [NOT FOUND  ] javax.jms#jms;1.1!jms.jar (0ms)
[ivy:retrieve]  ==== public: tried
[ivy:retrieve]    http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.jar
[ivy:retrieve]   ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]   ::              FAILED DOWNLOADS            ::
[ivy:retrieve]   :: ^ see resolution messages for details  ^ ::
[ivy:retrieve]   ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]   :: javax.jms#jms;1.1!jms.jar
[ivy:retrieve]   ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] 
[ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

Но обходной путь прост:

rm -fr ~/.ivy2/cache/javax.jms/jms

Вывод

Хотя я считаю, что концепции SOA являются порождением дьявола, SoapUI является отличным инструментом для тестирования, а автоматическое тестирование — отличная практика. Объединение их — хороший уровень для «квестовой игры программиста». Хранилище Maven — это неизбежный зверь сатаны в конце уровня. Будьте терпеливы и убейте этого босса.