Ответ 1
Если вы используете Maven отказоустойчивый плагин, вы можете запустить один интеграционный тест через
mvn -Dit.test=your.TestCase verify
Смотрите отказоустойчивые плагины для более подробной информации.
У нас есть сотни тестов, определенных для нашего жизненного цикла фазы интеграции-тестирования в maven, и они занимают много времени.
Я хочу выполнить только один тест в integration-test
. Я пробовал:
mvn -Dtest=<my-test> integration-test
но это не сработает. -Dtest
выполняет только те тесты в unit test цели, а не фазу интеграции-теста. Я попробовал -Dintegration-test=<my-test>
, и это было проигнорировано.
Есть ли способ сделать это?
Моя конфигурация:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/api/**</include>
</includes>
.....
Если вы используете Maven отказоустойчивый плагин, вы можете запустить один интеграционный тест через
mvn -Dit.test=your.TestCase verify
Смотрите отказоустойчивые плагины для более подробной информации.
Отказоустойчивая документация вы бы указали тест следующим образом:
mvn -Dit.test=BrokenIT verify
Однако, -Dit.test больше не работает. Скорее, тот же параметр, который использовался для определения теста Surefire, по-видимому, будет работать и для Failsafe. Например:
mvn -Dtest=WorksIT verify
Я подал ошибку ( EDIT:, которая была закрыта как "Невозможно воспроизвести" в пункте 2.12), чтобы исправьте документацию.
Я боролся с этим, и я создал дополнительный профиль для использования, когда я хотел запустить только один интеграционный тест. Я надеюсь, что я успешно извлек нужную часть здесь:
<profile>
<id>integrationTestSingle</id>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/integration/**/${test}.java</include>
</includes>
<skipTests>false</skipTests>
</configuration>
</execution>
</executions>
<configuration>
<argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skipTests>true</skipTests>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Теперь я вызываю maven с профилем integrationTestSingle и с -DfailIfNoTests=false -Dtest=NameOfTest
, и он не запускает никаких регулярных тестов во время обычной фазы тестирования и запускает только тест NameOfTest
во время теста интеграции фазы.
Я не уверен в JUnit, но для TestNG стратегия будет заключаться в том, чтобы определить XML файл пакета только с одним тестом, а затем в вашем POM настроить плагин surefire только для его запуска. В вашем POM у вас будет что-то вроде этого (отказ от ответственности, это непроверено):
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<phase>integration-test</phase>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>single-test.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
Чтобы настроить файл набора, см. http://testng.org/doc/documentation-main.html
просто добавьте -DfailIfNoTests=false
работает для меня с testNG. Что-то вроде этого:
mvn integration-test -Dtest=aITest -DfailIfNoTests=false
Просто наткнулся на это сам. Что-то вроде этого хорошо сработало для меня:
mvn -Pintegration-test -Dtest=<my-test>
Трюк состоял в том, чтобы убедиться, что тестовая группа была упомянута перед частью -Dtest.