Если вы используете тесты Selenium или другие тесты на основе JUnit, для проведения которых необходим длительный период времени и немного ресурсов ЦП, однажды вы захотите сделать так, чтобы их можно было проводить одновременно. Хорошая новость в том, что это очень просто сделать, используя Apache Ant.
Именно поэтому меня очень удивляет то, что еще никто этого не делает. Большинство людей пытаются изобретать колесо и пробуют использовать другие фреймворки, например TestNG, пишут новые экспериментальные компьютерные классы для JUnit, или даже конфигурируемые версии этих классов. Все это – пустая трата времени для тех, кто просто хочет проводить несколько тестов сразу.
Вот как это можно сделать:
- Убедитесь, что у вас установлен пакет "ant-contrib". Как правило, достаточно, если соответствующий JAR файл находится в класспасе ant.
- Преобразуйте задачи библиотеки "ant-contrib". Вы можете сделать это, добавив следующие линии к вашему файлу "build.xml".
{syntaxhighlighter brush: xml;fontsize: 100; first-line: 1; }<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>{/syntaxhighlighter} - Добавьте новую target, которая выполнит точно один тест. У вас будет что-то типа следующего.
{syntaxhighlighter brush: xml;fontsize: 100; first-line: 1; }<target name="execute.test"><!-- we need to have relative path –>
<pathconvert property=“test.source.relative”>
<fileset file=“${test.source.absolute}” />
<map from=“${test.sources}/” to=“” />
</pathconvert><!-- run one particular test –>
<junit fork=“true” printsummary=“true”><classpath> <path refid="${test.classes}" /> </classpath> <formatter type="xml" /> <batchtest todir="${test.reports}"> <fileset dir="${test.sources}"> <filename name="${test.source.relative}" /> </fileset> </batchtest>
</junit>
</target>{/syntaxhighlighter}
- Теперь используйте встроенные возможности “foreach” для одновременного выполнения для того, чтобы выполнить эту цель. Вам понадобиться добавить что-то типа следующего к вашей другой цели.
{syntaxhighlighter brush: xml;fontsize: 100; first-line: 1; }<foreach
target=“execute.test”
maxthreads=“5”
inheritall=“true”
inheritrefs=“true”
parallel=“true”
param=“test.source.absolute”>
<path>
<fileset dir=“${test.sources}”>
<include name=“**/*.java”/>
</fileset>
</path>
</foreach>{/syntaxhighlighter} - Ну вот и все. Легко и просто. Все ваши тесты будут выполняться в 5 потоков. Вы можете использовать такое количество потоков, которое заходите. Нет никакой необходимости в дополнительных конфигурациях, классах, кодах.