无法在SonarQube中查看Junit cobertura覆盖率报告

时间:2016-03-24 18:19:58

标签: maven jenkins junit sonarqube cobertura

SonarQube正在为我的项目报告以下内容。

Unit Tests Coverage 0.0%; Line Coverage 0.0%; Condition Coverage 0.0%

无法找到在声纳扫描之前立即创建的报告。我正在使用Jenkins启动SonarQube扫描。事实上,在控制台输出中,我可以看到正在执行的单元测试,并且报告保存在surefire目录中。

以下是控制台输出的相关日志。

[INFO] --- maven-surefire-plugin:2.12:test (default-test) @ earn-promotional-domain ---
[INFO] Surefire report directory: /var/jenkins/workspace/earn/surefire-reports

[INFO] [13:50:20.807] Sensor SurefireSensor
[INFO] [13:50:20.807] parsing /var/jenkins/workspace/earn/surefire-reports
[ERROR] [13:50:20.808] Reports path not found or is not a directory: /var/jenkins/workspace/earn/surefire-reports
[INFO] [13:50:20.808] Sensor SurefireSensor (done) | time=1ms
[INFO] [13:50:20.808] Sensor CoberturaSensor
[INFO] [13:50:20.808] parsing /var/jenkins/workspace/earn/site/cobertura/coverage.xml

我正在使用SonarQube 5.1.2。如果需要任何有助于解决问题的其他信息,请告诉我。

3 个答案:

答案 0 :(得分:1)

Jacoco比cobertura更好。 Cobertura还有很多尚未解决的漏洞。

Jacoco也提供了一个聚合器插件,它将聚合所有子模块的覆盖范围并显示全面的覆盖范围。

Jacoco也不需要为SonarQube添加任何其他插件。

以下是实施Jacoco的一个很好的例子: http://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin/

答案 1 :(得分:0)

如果您更喜欢坚持使用Cobertura而不是转向Jacoco,您可以尝试使用cobertura maven插件的替代方案:

https://github.com/QualInsight/qualinsight-mojo-cobertura

以下是mojo提供的一些优点:

  • 它运行测试一次(而不是使用cobertura-maven-plugin两次)
  • 它允许您分割覆盖率(UT / IT /总体)
  • 你摆脱了SonarQube的“过时”Cobertura插件

项目页面上的文档说明了如何将转换后的报告添加到SonarQube。

答案 2 :(得分:0)

@Jeel所述,您可以使用替代插件。但如果你必须使用cobertura插件,你可以稍微修改一下。

如果我理解正确,cobertura:检查目标是否有当前生命周期,合并插件特定配置(cobertura-maven-plugin-XXjar \ META-INF \ maven \ lifecycle.xml)并执行分叉生命周期测试阶段。之后执行“检查”mojo。

要让cobertura不分叉生命周期,你可以发表评论< executePhase>用于检查目标的插件描述符(cobertura-maven-plugin-X.X.jar \ META-INF \ maven \ plugin.xml)中的标记。 另外,您必须将配置从lifecycle.xml复制到构建配置。对于2.7版,只有surefire配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${surefire.version}</version>
  <configuration>
    <classesDirectory>${project.build.directory}/generated-classes/cobertura</classesDirectory>
    <testFailureIgnore>false</testFailureIgnore>
  </configuration>
</plugin>

(可能使用components.xml扩展默认生命周期也可以。)

在最后一步中,您必须在“进程类”阶段为“工具”目标添加执行,因为它在插件描述符中没有默认阶段。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>cobertura-maven-plugin</artifactId>
  <version>${cobertura.version}</version>
  <executions>
    <execution>
      <id>instrument-classes</id>
      <phase>process-classes</phase>
      <goals>
        <goal>instrument</goal>
      </goals>
    </execution>
    <execution>
      <id>check-coverage</id>
      <goals>
        <goal>clean</goal>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>
</plugin>