【问题标题】:Can maven surefire plugin run multiple test executions when invoked directly? (Sonar + Jenkins not running all unit tests)maven surefire 插件可以在直接调用时运行多个测试执行吗? (Sonar + Jenkins 没有运行所有单元测试)
【发布时间】:2014-05-10 05:07:51
【问题描述】:

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

<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>

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

$ mvn test
...
[INFO] maven-surefire-plugin:2.13:test (default-test)
...
[INFO] maven-surefire-plugin:2.13:test (unitTests)

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

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

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

[INFO] maven-surefire-plugin:213:test (default-cli) 

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

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

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

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

【问题讨论】:

    标签: unit-testing maven jenkins sonarqube maven-surefire-plugin


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2021-12-18
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多