2015-11-23 1 views
0

У меня есть мультимодульный проект Maven. В корневой pom.xml, я добавил следующие ...Как запустить модульное тестирование в параллельном режиме во всех модулях с помощью Maven?

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.18.1</version> 
     <configuration> 
     <parallel>methods</parallel> 
     <threadCount>100</threadCount> 
     </configuration> 
    </plugin> 

Команда mvn test заставит каждый модуль должен быть построен (при необходимости), а затем тесты для этого модуля будут работать параллельно. Как только все тесты будут выполнены, Maven начнет работу над следующим модулем. Maven будет работать на каждом модуле последовательно.

Внутри, Eclipse IDE Я могу запустить TestNG против набора под названием testng.xml. Этот файл указывает, что все пакеты должны запускаться параллельно. Это заставляет TestNG запускать все методы тестирования через все модули параллельно. Это именно то, что я хочу сделать, но я не уверен, как это сделать. Преимущество этого заключается в том, что все тесты выполняются в 1 процессе и могут совместно использовать состояние между ними. Это совместное использование частот значительно ускоряет тесты. Примечание. Я думал об использовании ant для выполнения команды, но тогда я не был уверен, как указать путь к классам с зависимостями из репозитория Maven.

mvn -T 8 test позволит параллелизм, но из-за зависимостей между модулями я не получаю все тесты, выполняемые параллельно. Я был бы в порядке, выполнив сначала mvn compile test-compile -DskipTests=true, а затем запустив mvn -T 8 test, если это будет проходить все тесты параллельно.

Редактировать: Пробные испытания представляют собой смесь тестов на единицу и интеграцию. С опцией -Dgroups= я могу выбрать, какой набор тестов выполняется.

+3

Вы пробовали простую сборку parrallel? Подобно 'mvn -T 8 test' – KeatsPeeks

+2

Параллельная сборка должна помочь, хотя вы не можете протестировать модуль, пока не будут созданы все его зависимости. –

+0

Являются ли эти тесты модульными испытаниями или интеграционными тестами ... я бы принял модульные тесты, что означает, что они разделены ... – khmarbaise

ответ

1

В последнем модуле, который будет построен, за исключением Root, я добавил следующее к pom.xml.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.4.0</version> 
    <executions> 
    <execution> 
     <phase>test</phase> 
     <goals> 
     <goal>java</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <classpathScope>test</classpathScope> 
    <mainClass>org.testng.TestNG</mainClass> 
    </configuration> 
</plugin> 

Затем запустить тесты, я использую следующую команду:

mvn -DskipTests=true "-Dexec.args=testng.xml" test 

-DskipTests=true говорит Maven, чтобы не выполнять тесты, но test фаза говорит Maven построить все для испытаний и запуска выше plugin. "-Dexec.args=testng.xml" является аргументом TestNG в приведенной выше конфигурации plugin. Вот содержимое testng.xml.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 

<suite name="All" verbose="1" parallel="methods" thread-count="100"> 

    <test name="All"> 
    <packages> 
     <package name=".*"/> 
    </packages> 
    </test> 

</suite> 

Атрибут parallel="methods" позволяет запускать TestNG параллельно каждому методу испытаний. Атрибут thread-count="100" ограничивает использование TestNG 100 потоками. Атрибут package name=".*" сообщает TestNG запускать все тесты во всех пакетах.