通过maven构建父pom并在Jenkins中运行特定的集成测试?

Abh*_*nav 5 continuous-integration integration-testing maven jenkins

mvn clean install在我的父pom上执行构建所有子模块并运行相关的junit测试.它不运行集成测试.

在构建并运行junits之后,我想在特定的子模块中运行特定的集成测试.

我正在使用以下命令:

mvn clean install -DTest=integrationTestName
Run Code Online (Sandbox Code Playgroud)

作业No Test Found在构建阶段失败并出错.

我也试过用

mvn clean install -DTest=integrationTestName -pl=sub-module-name
Run Code Online (Sandbox Code Playgroud)

但这只会构建我的子模块进行集成测试.

问题:如何对某个模块进行单一集成测试?

A_D*_*teo 4

我想您尝试了testMaven Surefire 插件的选项(小写)来调用特定测试,Surefire 在反应器构建的第一个模块中找不到该测试,因此失败。

我还假设集成测试是由Maven Failsafe Plugin执行的。如果没有,他们应该按照官方文件所述:

Failsafe 插件旨在运行集成测试,而 Surefire 插件旨在运行单元测试。...如果您使用 Surefire 插件来运行测试,那么当您测试失败时,构建将在该integration-test阶段停止,并且您的集成测试环境将无法正确拆除。.. Failsafe 插件不会在该integration-test阶段期间使构建失败,从而使该post-integration-test阶段能够执行。

简而言之:这样做更安全、更稳健。

虽然 Maven Failsafe Plugin 的插件配置条目也是test,但其对应的命令行选项是it.test,因此您应该运行:

mvn clean install -Dit.test=SampleIT
Run Code Online (Sandbox Code Playgroud)

其中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>
Run Code Online (Sandbox Code Playgroud)

然后调用构建如下:

mvn clean install -Dsingle.it.test=SampleIT
Run Code Online (Sandbox Code Playgroud)

因此,Maven 将根据属性值的存在来激活配置文件single.it.test,并将其传递给testFailsafe 插件(或 Surefire,如果是这种情况)的属性,Failsafe 将忽略该执行的任何其他集成测试并且其他模块不会受到任何影响(忽略该属性)。