Android Gradle 插件可以创建代码覆盖率报告,以跟踪测试所覆盖的代码百分比。本页面介绍了如何启用覆盖率报告和生成报告。
您可以为每个变体的每种测试类型(单元和插桩)生成覆盖率报告。您还可以针对不同的测试类型、模块和 build 变体生成统一的覆盖率报告。
启用代码覆盖率
必须在模块级 build 文件中将 enableAndroidTestCoverage 和 enableUnitTestCoverage 设置为 true,才能为要获取覆盖率报告的每个变体启用代码覆盖率:
Kotlin
android { // ... buildTypes { debug { // Enable coverage for unit tests enableUnitTestCoverage = true // Enable coverage for instrumentation tests enableAndroidTestCoverage = true } } }
Groovy
android { // ... buildTypes { debug { // Enable coverage for unit tests enableUnitTestCoverage true // Enable coverage for instrumentation tests enableAndroidTestCoverage true } } }
更改 Jacoco 版本(可选)
当您在模块上启用覆盖率时,AGP 会自动应用 Jacoco。 不过,如果您需要使用特定版本的 Jacoco,可以在模块级 build 文件中指定:
Kotlin
android { testCoverage { jacocoVersion = "JACOCO_VERSION" } }
Groovy
android { testCoverage { jacocoVersion = 'JACOCO_VERSION' } }
生成变体专属覆盖率报告
如需仅针对特定变体的单元测试或插桩测试生成覆盖率报告,请运行相应的任务。
| 测试类型 | 命令 | 报告位置 |
|---|---|---|
| 单元测试 | ./gradlew :module-name:createVariantNameUnitTestCoverageReport |
path-to-your-project/module-name/build/reports/coverage/test/variant/index.html |
| 插桩测试 | ./gradlew :module-name:createVariantNameAndroidTestCoverageReport |
path-to-your-project/module-name/build/reports/coverage/androidTest/variant/connected/index.html |
生成统一的代码覆盖率报告
您可以使用 testAllSuites 和 testAllSuitesWithDependencies Gradle 任务生成统一的代码覆盖率报告。这些任务将生成一份 HTML 报告,其中整合了来自不同测试类型(单元测试和插桩测试)、模块和 build 变体的覆盖率数据。这样,您就可以在单个信息中心内全面了解项目的代码覆盖率。
前提条件
- Android Gradle 插件 9.5.0-alpha05 或更高版本
- 启用代码覆盖率
如需生成统一报告,请从命令行运行以下任务之一:
| 覆盖范围 | 命令 | 说明 | 报告位置 |
|---|---|---|---|
| 当前模块 | ./gradlew :module-name:testAllSuites --continue |
测试所有测试套件,并为当前模块生成统一的覆盖率报告,合并所有测试类型的数据。 | path-to-your-project/module-name/build/reports/testAllSuites/coverage-report/ |
| 当前模块和依赖项 | ./gradlew :module-name:testAllSuitesWithDependencies --continue |
测试所有测试套件,并为当前模块及其所有依赖项生成统一的覆盖率报告。此任务适用于应用模块和启用了发布的库模块。 | path-to-your-project/module-name/build/reports/testAllSuitesWithDependencies/coverage-report/ |
生成的 HTML 报告着陆页会显示所有模块的简明摘要。您可以从模块深入到软件包,从软件包深入到类,以及从类深入到源文件。 点击任意文件,即可查看突出显示了行覆盖率和分支覆盖率的代码:
- 绿色:已覆盖的行。
- 红色:未覆盖的行。
- 黄色:部分覆盖(部分指令或分支未覆盖)。
对插桩测试使用设备端代码覆盖率
默认情况下,AGP 会在构建应用时使用 JaCoCo 对应用的类进行插桩,从而衡量插桩测试的覆盖率。从 AGP 9.6.0-alpha01 开始,您可以改用设备端插桩,它会在测试运行时在测试设备上对应用的类进行插桩。如需了解详情,请参阅查看代码覆盖率报告(使用设备端代理)。