Вам нравятся квестовые игры? Все делают!
Сегодня мы должны были сыграть один. Это название было «запускать тесты 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/donteventry@dev.chucknorris.com: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 — это неизбежный зверь сатаны в конце уровня. Будьте терпеливы и убейте этого босса.
