4

在我的父pom上执行mvn clean install构建所有子模块并运行相关的junit测试。它不运行集成测试。通过maven构建父pom并在Jenkins中运行特定的集成测试?

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

我使用下面的命令:

mvn clean install -DTest=integrationTestName 

作业失败,在构建阶段No Test Found错误。

我也使用

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

尝试,但这只建立具有集成测试我的子模块。

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

回答

4

我想你试过了Maven Surefire Plugin的test选项(小写)来调用一个特定的测试,Surefire在反应堆构建的第一个模块中找不到,因此失败。

我还假设集成测试由Maven Failsafe Plugin执行。如果不是的话,他们应该像官方文档中提到的那样:

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

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

虽然Maven的故障安全插件的插件配置条目也test,其相应的命令行选项it.test,所以你应该去运行:

mvn clean install -Dit.test=SampleIT 

SampleIT是一个集成测试(注意标准IT后缀,recognized by default按故障安全。

官方Running a Single Test文档还提供上运行单一集成测试的进一步细节。


另请注意:如果您在构建的其他模块中没有其他集成测试,则上述调用将工作,否则它将无法在之前(在触发相关模块之前)找到它。

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

2

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>