Sonarqube的整体报道与jacoco报道报道不符

Nel*_*rez 16 android code-coverage jacoco sonarqube

我有一个多模块Android项目,我发现jacoco报告的报道与Sonarqube报告的内容之间存在差异.该项目也是一个多风味的项目,产生了许多不同的变种.我正在使用此插件来帮助我生成所有任务.任务为每个变体生成单独的报告.

当我运行我的jacoco报告时,我看到了这个:

jacoco报道

当我运行声纳扫描仪时,我看到: 声纳覆盖报告

我的项目有一些排除,但即使没有它们,覆盖率%s也不匹配.

我觉得我可能没有提供与此问题中暗示相同的字节码:

以下是我的相关信息:Sonar 5.6版.

Gradle runner

plugins { id "org.sonarqube" version "2.0.1" }
Run Code Online (Sandbox Code Playgroud)

声纳配置:(在root build.gradle上)

sonarqube {
    properties {
        property "sonar.projectKey", "com.xxx.myApp"
        property "sonar.projectName", "Android My App"
        property "sonar.projectVersion", "3.0"
        property "sonar.java.binaries", "build/classes"
        property "sonar.coveragePlugin", "jacoco"
        property "sonar.jacoco.reportMissing.force.zero", "false"
    }
}
Run Code Online (Sandbox Code Playgroud)

声纳配置(在app/build.gradle上)

sonarqube {
    properties {
        property "sonar.sources", "src/main/java"
        property "sonar.tests", "src/test/java"
        property "sonar.java.tests", "src/test/java"
        property "sonar.junit.reportsPath", "build/test-results/myAppGoogleMobileDebug"
        property "sonar.java.binaries", "build/intermediates/classes/myAppGoogleMobile/debug"
        property "sonar.jacoco.reportPath", "build/jacoco/testMyAppGoogleMobileDebugUnitTest.exec"
        property "sonar.coverage.exclusions", coverageExclusions

    }
}
Run Code Online (Sandbox Code Playgroud)

Jacoco config on(app/build.gradle)

def coverageExclusions = ['**/AEWatchApp.*', '**/**_Factory.*',
                          '**/QaSettingsActivity.*',
                          'com/aetn/android/tveapps/activities/**',
                          'com/aetn/android/tveapps/test/**',
                          'com/aetn/android/tveapps/app/injection/modules/**',
                          'com/aetn/android/tveapps/app/injection/components/**',
                          'com.aetn.android.tveapps.mock/**',
                          'com/aetn/android/tveapps/databinding/**']


jacocoAndroidUnitTestReport {
    csv.enabled false
    html.enabled true
    xml.enabled true
    excludes += coverageExclusions
}
Run Code Online (Sandbox Code Playgroud)

God*_*din 14

据我所知,分支覆盖率是相同的:两种情况下均为40%,未覆盖的覆盖率为15%.

并且将"指令"(在JaCoCo报告的屏幕截图中显示)与其他任何内容进行比较就像比较苹果和橙子 - 它们并不代表相同的东西.有关JaCoCo提供的计数器,请参见http://www.eclemma.org/jacoco/trunk/doc/counters.html.而http://docs.sonarqube.org/display/SONAR/Metric+Definitions什么SonarQube显示.说明范围仅在JaCoCo中提供.

"行"(SonarQube的屏幕截图中显示的"27.1%")与"指令"不同:单行代码通常包含许多字节码指令.因此,例如,如果总共10条线路中有100条指令,并且有20条指令覆盖1条线路,则错过指令80%,但错过线路90%.

总而言之,没有差异,或者至少它没有显示在屏幕截图上.

  • "28.8%" - 是线覆盖和分支覆盖的混合,参见页面http://docs.sonarqube.org/display/SONAR/Metric+Definitions有关如何计算,JaCoCo不计算这个."27.1%" - 是线路覆盖范围,应该在JaCoCo报告中显示,但不会显示在屏幕截图上(例如,请参阅http://www.eclemma.org/jacoco/trunk/coverage上的5列"遗漏/线路") ."关心"?你什么意思?最初的问题是关于差异,如何使用代码覆盖率指标是一个不同的故事.SonarQube提供分支和线路的聚合,以简化两者的同时监控. (2认同)
  • sonarqube 指标定义链接似乎已损坏。这是一个工作链接:https://docs.sonarqube.org/latest/user-guide/metric-definitions/ (2认同)