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

通过maven在Jenkins中构建父pom并运行特定的集成测试?,maven,jenkins,continuous-integration,integration-testing,Maven,Jenkins,Continuous Integration,Integration Testing,在我的父pom上执行mvn clean install,构建所有子模块并运行相关的junit测试。它不运行集成测试 在构建和运行junits之后,我想在特定的子模块中运行特定的集成测试 我正在使用以下命令: mvn clean install -DTest=integrationTestName 在构建阶段,作业失败,未找到测试 我也试过使用 mvn clean install -DTest=integrationTestName -pl=sub-module-name 但这只构建了我的子模

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

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

我正在使用以下命令:

mvn clean install -DTest=integrationTestName
在构建阶段,作业失败,未找到测试

我也试过使用

mvn clean install -DTest=integrationTestName -pl=sub-module-name
但这只构建了我的子模块,并进行了集成测试

问题:如何运行某个模块的单个集成测试?

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

我还假设集成测试是由。如果没有,他们应该,正如官方文件所提到的:

故障保护插件设计用于运行集成测试,而Surefire插件设计用于运行单元测试。。。如果您使用Surefire插件运行测试,那么当您遇到测试失败时,构建将在集成测试阶段停止,并且您的集成测试环境将无法正确拆除。。故障保护插件不会在集成测试阶段使构建失败,从而使集成测试后阶段能够执行

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

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

mvn clean install -Dit.test=SampleIT
其中,
SampleIT
是一个集成测试(注意标准的
IT
后缀,通过故障保护)

官方文档还提供了有关运行单个集成测试的更多详细信息


还要注意:如果您在构建的其他模块中没有其他集成测试,那么上面的调用将起作用,否则它将无法更早地找到它(在命中相关模块之前)

如果您正在使用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
属性的值的存在,并将其传递给Failsafe插件的
test
属性(或Surefire,如果是这种情况),Failsafe将忽略该执行的任何其他集成测试,其他模块将不会受到任何影响(忽略该属性).

A_Di-Matteo的答案让您大致了解了这一点,但您还需要为maven 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-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>

运行单一it测试
单一it测试
org.apache.maven.plugins
maven surefire插件
真的
假的
测试
org.apache.maven.plugins
maven故障保护插件
${single.it.test}
假的
集成测试
验证