Android应用生成测试覆盖率报告

对于使用AndroidJUnit4 runner创建的 Android集成 测试用例,之前一直都没有发现,一种合适的产生代码覆盖率的方式。我曾经尝试过很多方式,但是要不就是不奏效,要不就是只合适我现在已经不再使用的Robolectric测试框架,其他开发者,也渐渐不再新项目中使用这个测试框架了。比如Square的Sqlbrite项目,现在已经开始采用AndroidJUnit4 runner进行他们的项目测试。最近,我在Reddit上面发现了一个有趣的讨论,从中我发现了一个不需要额外插件,脚本和多行配置就可以简单生成代码覆盖率的方式,Android SDK 现在已经内置了对 Emma Test Coverage框架的支持,可以在官方文档中进行查阅。
  我们只要做的一件事,就是在 build.gradle 中应用jacoco—android插件。
applyplugin:'jacoco-android'
  译者批注
  在高版本的SDK中,上述插件也不需要引用
  然后参照如下示例,将 testCoverageEnabled 设置为 true
  android {
     buildTypes {
        debug {
           testCoverageEnabled = true
        }
     }
  }
  为了能生成代码覆盖率报告,我们需要将Android设备或者模拟器连接到计算机,因为 在生成报告前,会执行 connectedCheck 任务。
  之后,我们可以执行如下的命令行
./gradlew createDebugCoverageReport
  该任务会分析 /src  android {
     buildTypes {
        debug {
           testCoverageEnabled = true
        }
     }
  }/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库的整体质量。

如果对软件测试有兴趣,想了解更多的测试知识,可以加入我的QQ群  高级测试学习大家庭:652068511

猜你喜欢

转载自blog.csdn.net/a13161333486/article/details/80195993