Android测试覆盖率方法总结
一般我们在写作服务端自动化用例之后都会统计对应的代码覆盖率,为了能够知道移动的ui自动化的覆盖率因此我们需要调用一下Android代码的覆盖率是如何统计的。
对覆盖率的统计有利于进一步从代码的层面了解整个项目的代码架构。
本文中所有配置代码可参考工程:https://gitee.com/sophia111111/Android_gongju_demo
在andoird的代码覆盖率统计方法中比较常用是基于jacaco的方法,同时gradle组件也提供较好的支持。
jacoco本身可以提供on-the-fly和offline两种运行模式,但在android的适配中只有offline一种模式,所以需要先插桩然后在使用。同时jacoco的主要实现原理是通过修改java字节码,进行探针插入,那么当代码运行的时候 运行过的地方的探针就会被标记为true,从而实现覆盖率收集的目的。
以下给大家列举一些 如果大家相应进一步了解可以参考的文档。
jacoco设计流程:
- https://www.jacoco.org/jacoco/trunk/doc/implementation.html
- https://www.jacoco.org/jacoco/trunk/doc/flow.html
Jacoco探针原理:*****************************************************
我们先以一个单独的工程为例来说明如何在android代码中开启覆盖率统计,然后再阐述讲此功能迁移到车载业务代码中所需要做的适配工作。
DEMO配置
我们利用Android Studio新建一个工程,然后做以下简单的配置就可以获得覆盖率:
在app的build.gradle 文件中配置:testCoverageEnabled = true 就会默认使用jacoco做覆盖率统计:
然后我们需要编写一个androidTest文件,可以从上述工程中找到DemoTest文件。
执行:./gradlew createDebugCoverageReport 系统就会执行打包 然后 运行androidTest,随后会生成覆盖率统计,其对应的产出物在build目录下面,如下有html报告以及覆盖率ec文件
如果大家想知道这个过程中gradle都做了那些事情,可以在执行的时候加上--info参数。
运行完了之后terminal会提示:
那么最终报告的呈现如下:
项目适配
在进行适配之前我们需要先学习一下android使用gradle进行打包的一些命令。
首先要学习打包时的assemble语法:https://www.jianshu.com/p/db62617cbbff
总结来说的话:使用assemble的话,gradle 会把 buildType 和productFlavors 组合打包,同时命令越清晰,打的包就越精确,这一块也是多渠道打包的要点,主要是通过配置productFlavots去进行多渠道打包,bulidType 控制着打出的包是debug 类型还是release类型。
像我们在进行车载渠道打包的话 可以使用:
1../hubw --jdk 11 -b ":app:assembleBydDebugAndroidTest -s"(生成并安装测试apk)
2../hubw --jdk 11 -b ":app:assembleBydDebug -s"(生成Byd渠道的debug apk)
在android中test主要分为2类,一类是如juint类的单元测试,一类是集成测试。
1../gradlew test 运行junit testcase
2../gradlew connectedAndroidTest 运行android testcase
3.adb shell am instrument -w -m -e debug false -e class
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏专注于对复杂项目对测试用例编写思路、接口自动化测试用例以及自定义接口测试框架及工具对实现。