Покрытие кода для сонара из тестов Android с использованием gradle

я должен настроить отчет о покрытии кода в моих тестах Android, а затем опубликовать их в сонар. Я читал, что нет инструментов и плагинов, которые могут это сделать. Я использую сценарии gradle и пробую плагин jacoco, cobertura, но безрезультатно. Есть ли способы ее решить? Также я пытался сделать, как здесь покрытие кода Gradle jacoco - затем опубликовать /показать в Дженкинсе


person Vladimir Voitekhovski    schedule 25.03.2014    source источник


Ответы (1)


Пример build.gradle с покрытием кода и сонаром

apply plugin: 'com.android.application'

    android {

        compileSdkVersion 20
        buildToolsVersion '20.0.0'
        defaultConfig {
            applicationId 'com.example.coverage'
            minSdkVersion 11
            targetSdkVersion 19
            versionCode 1
            versionName '1.0'
            testHandleProfiling true
            testFunctionalTest true

        }
        buildTypes {
            debug {
                testCoverageEnabled true
            }
            release {
                runProguard false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {

            apply plugin: 'sonar-runner'
        }

        packagingOptions {
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/dependencies.txt'
            exclude 'META-INF/LGPL2.1'
            exclude 'META-INF/services/javax.annotation.processing.Processor'
            exclude 'LICENSE.txt'
        }
    }

    sonarRunner {

        sonarProperties {

            property "sonar.projectKey", "coverage-example"
            property "sonar.projectName", "Coverage Example"
            property "sonar.projectVersion", "1.0"

            property "sonar.sources", "src/main/java"
            property "sonar.binaries", "build"
            property "sonar.test", "src/androidTest/java"

            property "sonar.profile", "Sonar way"
            property "sonar.language", "java"
            property "sonar.sourceEncoding", "UTF-8"

            property "sonar.dynamicAnalysis", "reuseReports"

            property "sonar.junit.reportsPath", "build/outputs/reports/coverage/debug"
            property "sonar.cobertura.reportPath", "build/outputs/reports/coverage/debug/cobertura.xml"
            property "sonar.java.coveragePlugin", "cobertura"

            property "sonar.host.url", "http://localhost:9099"
        }
    }

Теперь беги

gradlew clean assembleDebug createDebugCoverageReport

Теперь вы сможете увидеть xml, содержащий отчет о покрытии кода в этом каталоге.

приложение/сборка/выход/отчеты/покрытие/отладка/report.xml

Теперь, прежде чем мы запустим задачу сонара, мы должны преобразовать report.xml во что-то, что может прочитать сонар, он будет использовать это, сделанное в скрипте python, который выполняет преобразование этого файла в формат, который может использовать плагин sonar cobertura.

Ссылка на скрипт на github

python cover2cover.py app/build/outputs/reports/coverage/debug/report.xml src/main/java > app/build/outputs/reports/coverage/debug/cobertura.xml && cp app/build/outputs/androidTest-results/connected/* app/build/outputs/reports/coverage/debug/

Теперь беги

gradlew sonarRunner
person José Augusto    schedule 03.09.2014