Собрать родительский pom и запустить специальный тест интеграции в Jenkins через maven?

Проведение mvn clean install на моем родительском pom собирает все подмодули и запускает соответствующие тесты junit. Он не запускает интеграционные тесты.

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

Я использую следующую команду:

mvn clean install -DTest=integrationTestName

Работа терпит неудачу с No Test Found ошибка на этапе сборки.

Я также пытался использовать

mvn clean install -DTest=integrationTestName -pl=sub-module-name

но это только строит мой субмодуль с интеграционным тестом.

Вопрос: Как запустить единый интеграционный тест определенного модуля?

2 ответа

Я полагаю, вы попробовали test опция (в нижнем регистре) плагина Maven Surefire для запуска определенного теста, который Surefire не смог найти в первом модуле сборки реактора и, следовательно, потерпел неудачу.

Я также предполагаю, что интеграционные тесты выполняются плагином Maven Failsafe. Если нет, они должны, как указано в официальной документации:

Плагин Failsafe предназначен для запуска интеграционных тестов, а плагин Surefire - для модульных тестов. ... Если вы используете плагин Surefire для запуска тестов, то при сбое теста сборка остановится на integration-test фаза и ваша среда тестирования интеграции не будет сорвана правильно... Плагин Failsafe не подведет сборку во время integration-test фаза, что позволяет post-integration-test фаза для выполнения.

Короче говоря: это безопаснее и намного надежнее.

Хотя запись конфигурации плагина для плагина Maven Failsafe также test соответствующая опция командной строки it.test, поэтому вы должны вместо этого запустить:

mvn clean install -Dit.test=SampleIT

куда SampleIT это интеграционный тест (обратите внимание на стандарт IT суффикс, распознаваемый по умолчанию Failsafe.

Официальная документация " Запуск одного теста" также предоставляет дополнительную информацию о запуске отдельных тестов интеграции.


Также обратите внимание: вызов выше будет работать, если у вас нет других интеграционных тестов в других модулях сборки, иначе он не сможет найти его раньше (до попадания в соответствующий модуль).

Если вы используете Surefire для запуска соответствующего интеграционного теста (опять же, вы не должны) или у вас есть несколько модулей, выполняющих интеграционные тесты, вам следует настроить профиль в соответствующем модуле, который бы позаботился об этом конкретном вызове, что-то вроде следующий:

<profiles>
    <profile>
        <id>run-single-it-test</id>
        <activation>
            <property>
                <name>single.it.test</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.19.1</version>
                    <configuration>
                        <test>${single.it.test}</test>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

А затем вызовите сборку следующим образом:

mvn clean install -Dsingle.it.test=SampleIT

Таким образом, Maven будет активировать профиль на основе наличия значения для single.it.test собственности и передать его test Свойство Failsafe Plugin (или Surefire, если оно имело место), Failsafe будет игнорировать любые другие интеграционные тесты для этого выполнения, и другие модули не пострадают (игнорируя это свойство).

Ответ A_Di-Matteo дает вам большую часть пути, но вам необходим следующий конфиг для maven-surefire-plugin для подавления всех модульных тестов.

<profiles>
    <profile>
        <id>run-single-it-test</id>
        <activation>
            <property>
                <name>single.it.test</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skipTests>true</skipTests>
                        <failIfNoTests>false</failIfNoTests>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>test</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <configuration>
                        <test>${single.it.test}</test>
                        <failIfNoTests>false</failIfNoTests>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
Другие вопросы по тегам