背景: 虽然jacoco出来也有一段时间了,文章也有,但是网上的文章都是新建的一个测试工程,照着跑下来,到处都是坑…所以还是自己再研究一下吧,并且起码比他们的详细。
环境:
android studio 2.1.1 + gradle 2.10
搭建:
其实gradle自带的有jacoco插件的,只需要引入就好了,打开build.gradle,在第一行添加插件:
apply plugin: 'jacoco'
网络上的人是用 jacoco-android ,那么请略过,因为可能是因为版本更替,至少自带的没有这个插件。
然后,声明使用的jacoco版本,这个版本怎么来的,直接去官网复制最新的就行了(http://www.eclemma.org/jacoco/):
好了,引入插件,指定完版本,最后在buildTypes标签里面的debug开启就行了:
testCoverageEnabled true
ok,其实环境这就搭建完成了。
使用
大家都知道,用命令启动的,在前一篇的学习androidjunitrunner谷歌其实已经给了我们两条命令:
gradlew test/connectedAndroidTest
这两条命令是执行(单元)测试并生成一份报告,然后如果要测试代码覆盖率的话同样是类似的命令:
gradlew createDebugCoverageReport
然后报错:
好了,教程都是运行这条命令,死活报错,好吧,只能x墙问谷歌,然后发现其实这条命令是在jacoco框架里面自带的,并不是测试人员自己定义的,于是调用命令:
gradlew task查看,才发现了这条命令如果有渠道包的话需要带上渠道号,于是执行:
gradlew createOfficialDebugCoverageReport
好了,执行成功,所以这里要注意。
最后,生成报告的目录在build文件夹内,比较好找,就不多说了,后期打算集成到jenkins当中去。
PS:需要执行自动化用力报告和执行代码覆盖率报告的话,不用敲两行命令,直接一行就可以了:
gradlew connectedCheck
不过这会把渠道包都跑一遍,记得勾选只保留官方包就行了,不然很费时的。
这样可以一次输出两份报告。
分析
好了,报告有了,怎么分析呢,又怎么去自动化测试覆盖率呢?接下来就来说说吧。
Element:
可以点击进入看哪里覆盖了,可以精确到方法,可以看看哪个方法没有被覆盖到,然后查代码逻辑,补充用例。
Missed Instructions:
这个就是代码覆盖率了,绿色表示运行了的,红色表示没有。
Missed Branches:
分支覆盖率,其实个人理解就是条件语句中其他情况没有覆盖的情况
Missed Cxty:
没搞懂…
Missed Lines && Missed Methods && Missed Classes:
覆盖的行数和方法数以及类
好了,有了几个参数可以点击Element进入查看看哪里没有覆盖到,需要覆盖。