2016-05-17 28 views
2

我想在我的Android项目中设置sonarqube报告。我目前在显示声纳UI中的所有测试类时遇到了问题,覆盖率以百分比显示,目前只有app/src/test/的单元测试显示为单元测试。sonarqube与androidTest和测试covarage

我的项目有一个测试文件夹app/src/test/其中包含单元测试,我有一个androidTest文件夹app/src/androidTest/其中包含Android单元,集成和UI测试。当我通过gradle运行所有测试时,android-gradle插件生成build/jacoco/testDebugUnitTest.execbuild/test-results/debug/TEST-*Test.xml,其中包含测试文件夹中单元测试的jacoco结果和覆盖率报告。另外android-gradle插件生成build/outputs/code-coverage/connected/coverage.ecbuild/outputs/androidTest-results/connected/TEST-*Test.xml包含来自androidTest文件夹的结果和覆盖率报告

在我的build.gradle中,我可以指定声纳插件的属性。

sonarqube { 
     properties { 
      property "sonar.sources", "src/main/java,src/main/res" 
      property "sonar.tests", "src/test/java,src/androidTest/java" 

      property "sonar.java.coveragePlugin", "jacoco" 
      property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/testDebugUnitTest.exec" 
      property 'sonar.jacoco.itReportPath', "${project.buildDir}/outputs/code-coverage/connected/coverage.ec" 

      property "sonar.junit.reportsPath", "${project.buildDir}/test-results/debug" // path to junit reports 
     } 
    } 

随着sonar.junit.reportsPath我可以指定XML报告发送到sonarqube服务器。当我将其更改为build/outputs/androidTest-results/connected时,仪表板上显示为单元测试的androidTest。有没有办法让sonar插件在两个目录中查找或合并结果?

回答

2

直到https://jira.sonarsource.com/browse/SONAR-4101是固定的,你唯一的选择是写一个任务副本测试结果文件到一个地方并配置为sonar.junit.reportsPath,像这样:当然

task combineTestResultsForSonarqube { 
    group = "Reporting" 
    def modules = ["app", "and", "other", "modules"]; 
    doLast { 
     modules.each { module -> 
      File combined = file("${module}/build/combined-test-results") 
      if (combined.exists()) { 
       combined.deleteDir() 
      } 
      combined.mkdirs(); 

      def testDirs = [file("${module}/build/test-results/debug/"), 
          file("${module}/build/outputs/androidTest-results/connected/")]; 
      testDirs.each { testDir -> 
       if (!testDir.exists()) { 
        logging.captureStandardOutput LogLevel.WARN 
        println "WARNING: ignoring non-existant ${testDir.path}" 
        return; 
       } 
       files(testDir.listFiles()).each { file -> 
        new File(combined, file.getName()) << file.text 
       } 
      } 
     } 
    } 
} 

路径有当你在你的构建中有味道时适应。

+0

虽然这可能会在SonarQube测试列表中添加UI测试,但它不会增加覆盖率或指示方法被覆盖。任何解决方案? – Elias

+0

@Elias如果您正在使用Jacoco进行仪器和代码覆盖,那么您已经设置好了,因为更新版本的Sonarqube会合并来自单元和仪器测试的Jacoco覆盖数据。然而,我不知道这是可能的其他覆盖插件。 –

+0

我们在SonarQube v6上,我想这是最新的?我通过这些属性: 财产 “sonar.java.coveragePlugin”, “jacoco” 财产 “sonar.jacoco.reportPath”, “构建/ jacoco/testProductionMinSdk19DebugUnitTest.exec” // JUnit的覆盖率报告 财产“sonar.junit。 reportsPath“,”build/test-results/productionMinSdk19Debug /“//路径为junit报告 属性”sonar.android.lint.report“,”/build/outputs/lint-results-productionMinSdk19Debug.xml“//路径为lint报告 – Elias