Как ограничить TestNG для запуска только тестовых классов из тестовой директории проекта
pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="my-suite">
<test name="tests">
<packages>
<package name="com.example.*"/>
</packages>
</test>
</suite>
TestNG будет сканировать все пути к классам для тестовых классов ( PackageUtils # findClassesInPackage).
Нежелательные тесты приходят от test-jar
зависимость.
Как настроить TestNG для поиска тестовых классов только в тестовом каталоге проекта maven (src/test/java
составлен в target/test-classes
по умолчанию)?
3 ответа
Прежде всего, если в каталоге классов нет тестов, о чем беспокоиться?
Во-вторых, вы можете изменить пакет ваших тестовых классов, это также полезно для поиска, например, com.example.qa. *.
И третий - вы можете попробовать манипулировать вашим classpath в maven-surefire-plugin, см. Документацию.
Мы используем довольно хорошую настройку с отдельными модульными тестами и интеграционными тестами с использованием плагинов surefire и failsafe. Я никогда не использую suite.xml или подобные определения тестового набора. Вы можете использовать включения и исключения с шаблонами файлов, чтобы контролировать, что будет выполнено. Мы также используем пользовательский прослушиватель, потому что я хотел немного контролировать результаты теста, и мы запускаем тесты одновременно, которые не будут работать для вас, если вы не будете писать тесты, которые не взаимодействуют, что всегда является хорошей идеей.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
<exclude>**/*ApiTest.java</exclude>
</excludes>
<parallel>classes</parallel>
<threadCount>20</threadCount>
<runOrder>random</runOrder>
<properties>
<property>
<name>listener</name>
<value>io.inbot.testutil.TestProgressLogger,io.inbot.testutil.TestNgRandomizerWithSeed</value>
</property>
</properties>
<systemProperties>
<property>
<!-- this disables expensive loading of spring
context and starting our test server: keep the unit tests fast! any expensive
test should end with IntegrationTest or ApiTest. They will be run separately
by failsafe plugin -->
<name>nointegrationtests</name>
<value>true</value>
</property>
</systemProperties>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*IntegrationTest.java</include>
<include>**/*ApiTest.java</include>
</includes>
<parallel>classes</parallel>
<threadCount>4</threadCount>
<runOrder>random</runOrder>
<argLine>-Xms512m -Xmx1500m</argLine>
<properties>
<property>
<name>listener</name>
<value>io.inbot.testutil.TestProgressLogger,io.inbot.testutil.TestNgRandomizerWithSeed</value>
</property>
</properties>
<systemProperties>
</systemProperties>
</configuration>
</plugin>
Для TestNG лучший способ — использовать для этого системное свойство TestNG.
Добавьте следующее в раздел конфигурации плагина Surefire:
<systemPropertyVariables>
<testng.test.classpath>${project.build.testOutputDirectory}</testng.test.classpath>
</systemPropertyVariables>
Это фактически ограничит обнаружение тестов только этим путем (