maven surefire插件可以在直接调用时运行多个测试执行吗?(声纳+詹金斯没有运行所有单元测试)

Joh*_*zen 7 unit-testing maven jenkins maven-surefire-plugin sonarqube

我有一个使用surefire插件进行单元测试的maven项目.目前测试分为两个执行default-testunitTests,两者都绑定到测试目标,如下所示:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <executions>
      <!-- Test one set of files -->
      <execution>
        <id>default-test</id>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes> ... </includes>
        </configuration>
      </execution>
      <!-- Test a different set of files -->
      <execution>
        <id>unitTests</id>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes> ... </includes>
        </configuration>
      <execution>
    </executions>
  </plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)

这在运行时工作正常mvn test:

$ mvn test
...
[INFO] maven-surefire-plugin:2.13:test (default-test)
...
[INFO] maven-surefire-plugin:2.13:test (unitTests)
Run Code Online (Sandbox Code Playgroud)

我在Jenkins上使用Sonar插件生成代码指标,Jenkins的设置如下:

  • 运行构建操作 mvn clean install -DskipTests
  • 运行Sonar插件作为后构建操作

这意味着Sonar插件运行单元测试,单元测试仅运行一次.当Sonar插件运行时,我看到以下输出:

[INFO] maven-surefire-plugin:213:test (default-cli) 
Run Code Online (Sandbox Code Playgroud)

请注意,只调用default-cli执行而不是default-test + unitTests,因为(我假设)surefire插件是mvn surefire:test通过mvn test生命周期而不是通过生命周期直接调用的.

我可以向POM文件添加default-cli执行,并从默认测试执行中复制配置,但这只会运行一组单元测试.在unitTests执行中配置的单元测试根本不运行,即使该执行绑定到相同的目标.

如何在Sonar插件调用时确保调用default-cliunitTests执行mvn surefire:test

我想也许我的Jenkins设置应该改变,以便单元测试在正常构建操作中运行,生成代码覆盖率报告,然后Sonar插件作为构建后操作运行并加载这些报告以执行分析.不确定这是否可行,或者我的POM文件需要做哪些更改才能支持这一点(希望对POM文件进行最小的更改是另一个目标).

mbr*_*s42 0

我想也许我的 Jenkins 设置应该改变,以便单元测试在正常的构建操作中运行,生成代码覆盖率报告,然后 Sonar 插件作为构建后操作运行并加载这些报告以执行分析。

这似乎是个好主意。您可以使用Maven 配置文件来执行此操作。您可以在不同的配置文件中配置 Surefire 插件,并使您希望工具默认使用的插件处于活动状态。