生成 Jacoco 报告时排除 android Instrumentation 测试

Vam*_*msi 6 android gradle jacoco android-instrumentation

我的 Android 应用程序中有多个模块。我需要在 CI/CD 管道中自动执行代码覆盖率报告,其中 \xe2\x80\x99t 没有物理/虚拟 Android 设备,并且无法附加设备。

\n

集成 Jacoco 来自 - https://github.com/gouline/android-samples/blob/master/jacoco/jacoco.gradle

\n

当我尝试通过 gradle 命令生成覆盖率报告时

\n
>> ./gradlew createDebugCoverageReport\n
Run Code Online (Sandbox Code Playgroud)\n

它失败并显示以下错误日志

\n
* What went wrong:\nExecution failed for task \':app:connectedDebugAndroidTest\'.\n> com.android.builder.testing.api.DeviceException: No connected devices!\n
Run Code Online (Sandbox Code Playgroud)\n

所以我尝试通过命令排除 gradle 任务 (connectdDebugAndroidTest)

\n
>> ./gradlew createDebugCoverageReport -x app:connectedDebugAndroidTest -x module1:connectedDebugAndroidTest\n
Run Code Online (Sandbox Code Playgroud)\n

出现如下错误 -

\n
> Task :module1:createDebugAndroidTestCoverageReport FAILED\n\nFAILURE: Build failed with an exception.\n\n* What went wrong:\nExecution failed for task \':vpn:createDebugAndroidTestCoverageReport\'.\n> java.io.IOException: No coverage data to process in directories [/Users/abc/ws/prjName/module1/build/outputs/code_coverage/debugAndroidTest/connected]\n
Run Code Online (Sandbox Code Playgroud)\n

我在模块1中有仪器测试

\n

当设备未连接时,如何在生成 Jacoco 报告时排除仪器测试。

\n

更新

\n

我可以通过以下方式为每个模块单独生成 Jacoco 报告

\n
./gradlew testDebugUnitTestCoverage\n
Run Code Online (Sandbox Code Playgroud)\n

但我正在寻找一份综合报告。如何将模块中的多个 jacoco 报告集成到一份报告中?

\n

W00*_*0di 0

请从jacocoTestReport任务中删除createDebugCoverageReport

task jacocoTestReport(type: JacocoReport,
        dependsOn: ['testDebugUnitTest']) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."

    reports {
        xml.enabled = true
        html.enabled = true
    }

    def fileFilter = ['androidx/**/*.*',
                      '**/view/*.*',
                      '**/data/*.*',
                      '**/data/model/*.*',
                      '**/generated/callback/*.*',
                      '**/lambda$*.class',
                      '**/lambda.class',
                      '**/*lambda.class',
                      '**/*lambda*.class']

    def debugTree = fileTree(dir:
            "${buildDir}/intermediates/javac/debug/classes",
            excludes: fileFilter
    )

    def mainSrc = "/src/main/java"

    sourceDirectories.from = files([mainSrc])

    classDirectories.from = files([debugTree])
    executionData.from = fileTree(dir: "${buildDir}", includes:[
            "/jacoco/testDebugUnitTest.exec"])
}
Run Code Online (Sandbox Code Playgroud)