2016-05-17 2 views
2

Я пытаюсь настроить отчеты sonarqube в моем проекте Android. В настоящее время у меня возникают проблемы с отображением всех тестовых классов в пользовательском интерфейсе сонара, охват показан в процентах, и в настоящее время только модульные тесты от app/src/test/ показаны в качестве единиц измерения.sonarqube с androidTest и тест covarage

У моего проекта есть тестовая папка app/src/test/, которая содержит модульный тест, и у меня есть папка androidTest app/src/androidTest/, которые содержат андроид, интеграцию и тесты пользовательского интерфейса. Когда я запускаю все тесты с помощью градиента, плагин android-gradle генерирует build/jacoco/testDebugUnitTest.exec и build/test-results/debug/TEST-*Test.xml, который содержит результаты jacoco и отчет о покрытии для модульного теста в тестовой папке. Также плагин android-gradle генерирует build/outputs/code-coverage/connected/coverage.ec и build/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, показанный как Unit Test на приборной панели. Есть ли способ заставить плагин сонара выглядеть в обоих каталогах или объединить результаты вместе?

ответ

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

Хотя это может добавить тест UI в список тестов SonarQube, он не увеличивает ваш охват% или указывает, что методы покрыты. Любое решение для этого? – 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/"// путь к отчетам юнита свойство" sonar.android.lint.report "," /build/outputs/lint-results-productionMinSdk19Debug.xml "// путь к lint доклад – Elias