jacoco-maven-plugin / Sonar Scanner - 合并的jacoco报告(jacoco-overall.exec)中没有“测试覆盖率”信息

时间:2017-03-03 20:50:53

标签: java jenkins sonarqube sonarqube-scan jacoco-maven-plugin

我一直试图用一段时间来解决联合报告覆盖面的问题,而且我似乎无法找到与我的特定问题相关的任何有用信息。

实施细则:

  • SonarQube(v5.4)
  • jacoco-maven-plugin(v0.7.9)
  • sonar-jacoco-listener(v2.8)
  • Jenkins的SonarQube扫描仪(v2.8)
  • maven-surefire-plugin(v2.16)
  • maven-failsafe-plugin(v2.18.1)
  • junit(v4.12)

我配置了jacoco-maven-plugin并正确生成单元和集成测试报告,包括通过sonar-jacoco-listener模块进行测试。

但是,当Jenkins的SonarQube扫描仪(v2.8)执行分析时,名为JacocoOverallSensor的传感器会检查第三个文件jacoco-overall.exec,该文件没有覆盖测试信息。

因此,我实际上并没有在我的项目的SonarQube Coverage选项卡中呈现任何Coverage by Test信息,只有每个类的行数和条件。

扫描仪的示例输出:

INFO: Sensor SurefireSensor
INFO: parsing /var/lib/jenkins/workspace/evo-sonar-test/target/junit-reports
INFO: Sensor SurefireSensor (done) | time=160ms
INFO: Sensor JaCoCoSensor
INFO: Analysing /var/lib/jenkins/workspace/evo-sonar-test/target/jacoco/jacoco-unit.exec
INFO: Information about coverage per test has been collected.
INFO: Sensor JaCoCoSensor (done) | time=887ms
INFO: Sensor JaCoCoItSensor
INFO: Analysing /var/lib/jenkins/workspace/evo-sonar-test/target/jacoco/jacoco-itest.exec
INFO: Information about coverage per test has been collected.
INFO: Sensor JaCoCoItSensor (done) | time=365ms
INFO: Sensor JaCoCoOverallSensor
INFO: Analysing /var/lib/jenkins/workspace/evo-sonar-test/target/jacoco/jacoco-unit.exec
INFO: Analysing /var/lib/jenkins/workspace/evo-sonar-test/target/jacoco/jacoco-itest.exec
INFO: Analysing /var/lib/jenkins/workspace/evo-sonar-test/.sonar/jacoco-overall.exec
INFO: No information about coverage per test.
INFO: Sensor JaCoCoOverallSensor (done) | time=333ms

根据我对JacocoOverallSensor的包/类的理解,这个jacoco-overall.exec应该是生成的集成和单元jacoco报告的合并副本。 jacoco-overall.exec文件正在创建并填充数据,这意味着我的单元/集成测试正在合并,但似乎只有该文件中缺少Coverage by Test信息。

此时,我很难过为什么会这样。我进行了搜索和搜索,但我似乎找不到任何人只有jacoco-overall.exec中的测试覆盖问题而不是单元/集成exec文件中的问题。

问题:

  • 是否有一些配置值我缺少允许单元/集成Coverage By Test信息在jacoco-overall.exec中合并?
  • 两个报告的合并是否必要(我可以以某种方式转向 合并在声纳扫描仪中)?所有我最终都需要我的 设置是通过测试单位和集成来查看覆盖范围 分别进行测试 - 此时不需要整体联合覆盖 时间。

作为参考,我的声纳配置(在Sonarqube Scanner for Jenkins中配置):

# Data locations to be analyzed
sonar.sources=src/main
sonar.tests=src/test
sonar.java.binaries=target/classes
sonar.java.libraries=target/libs
sonar.java.test.binaries=target/test-classes
sonar.java.test.libraries=target/libs
sonar.junit.reportsPath=target/junit-reports

# Compiler configuration
sonar.java.source=1.7
sonar.language=java
sonar.sourceEncoding=UTF-8

# Jacoco configuration
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportMissing.force.zero=true
sonar.jacoco.reportPath=target/jacoco/jacoco-unit.exec
sonar.jacoco.itReportPath=target/jacoco/jacoco-itest.exec

我很乐意根据要求发布更多信息,但是在这一点上,我对这个话题的信息感到迷失/不知所措,我不确定还有什么对人们有帮助。问,你会收到。

0 个答案:

没有答案