(翻译)Android应用生成测试覆盖率报告

来源:互联网 发布:知乎产品分析报告 编辑:程序博客网 时间:2024/04/30 08:41

原文地址

更多翻译文章请点击

对于使用AndroidJUnit4 runner创建的Android集成测试用例,之前一直都没有发现,一种合适的产生代码覆盖率的方式。我曾经尝试过很多方式,但是要不就是不奏效,要不就是只合适我现在已经不再使用的Robolectric测试框架,其他开发者,也渐渐不再新项目中使用这个测试框架了。比如Square的Sqlbrite项目,现在已经开始采用AndroidJUnit4 runner进行他们的项目测试。最近,我在Reddit上面发现了一个有趣的讨论,从中我发现了一个不需要额外插件,脚本和多行配置就可以简单生成代码覆盖率的方式,Android SDK 现在已经内置了对 Emma Test Coverage框架的支持,可以在官方文档中进行查阅。

我们只要做的一件事,就是在 build.gradle 中应用jacoco—android插件。

apply plugin: 'jacoco-android'

译者批注

在高版本的SDK中,上述插件也不需要引用

然后参照如下示例,将 testCoverageEnabled 设置为 true

android {   buildTypes {      debug {         testCoverageEnabled = true      }   }}

为了能生成代码覆盖率报告,我们需要将Android设备或者模拟器连接到计算机,因为 在生成报告前,会执行 connectedCheck 任务。

之后,我们可以执行如下的命令行

./gradlew createDebugCoverageReport

该任务会分析 /src/main/java/ 路径下的代码和 /src/androidTest/java/ 目录下单元测试用例。

在执行这个任务之后,我们可以在模块的如下路径中找到代码覆盖率报告

/build/outputs/reports/coverage/debug/

我们可以在浏览器中打开 index.html 文件,可以看见可视化的报告。
同时,在同一级目录下,我们也可以找到可以供持续集成覆盖率分析使用的 report.xml 文件。

除了上面提到的文件,Gradle也会在如下的路径创建 coverage.ec 文件。

/build/outputs/code-coverage/connected/

某些情况下,我们可能需要这些文件,比如在选择Jenkins插件或者别的工具生成代码覆盖率的时候。

下面,你能看见一个 Android 开源项目,Presfer,的代码覆盖率报告。

这是一份由 JaCoCo 代码覆盖率库生成的报告。

通过分析报告,我增加了部分新的测试用例,小幅度优化了部分代码,使得项目的覆盖率达到了 100%。

为了能在 Jenkins CI 上发布报告,可以使用代码覆盖率插件,但是并不能确认插件的稳定性。另一种解决方案是 HTML Publisher plugin,我们可以增加相应动作,在 Jenkins 的任务中,通过默认的HTML界面产生覆盖率报告,我认为这是一种非常方便的方式,易于创建,并且方便进行代码导航,能定位到没有覆盖的代码行,方法和分支。

我们可以方便的观察到Android项目的代码覆盖情况通过这种简洁快捷的方式,能帮助我们最终发现项目的瓶颈所在,增加应用或者lib库的整体质量

0 0