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