2016-05-17 130 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