Как ограничить 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>

Это фактически ограничит обнаружение тестов только этим путем ().

Другие вопросы по тегам