jacoco代码覆盖率统计
1.背景:
近2年来有负责服务端的工作,前一年自动化测试平台主要在推接口自动化,去年主要推行做代码覆盖率。对统计代码覆盖率的原理不是很清楚,所以去网上查了些资料,有了进一步了解。结合实践和网上资料,对jacoco代码覆盖率有一个大概的认识。
2.代码覆盖率的目的
通过代码覆盖率统计,可以对比出哪些代码是通过手工测试和自动化接口测试覆盖到的,哪些没有覆盖到。查看没有覆盖到的代码,检查是否有漏测,进一步和开发对齐测试方法和测试范围,保证测试不遗漏。达到测试设计不冗余,不遗漏的目的。
3.jacoco代码覆盖率统计的流程图(借鉴其他同学的总结)
jacoco代码覆盖率工具主要流程:
在sever上(测试的应用上)部署jacoco客户端,启动jacoco
对代码进行插桩
通过手动执行用例和跑接口自动化,搜集程序执行轨迹
对比轨迹和代码结构,输出代码覆盖率情况
4.代码覆盖率统计分类
一般应用服务分为2层:web层和service层:
web层,主要是接口,service层主要是处理程序逻辑
对于web层:因为一个应用的代码特别多,有很多公用代码,我们一般针对接口部分的代码做代码覆盖率统计
对于service层:我们项目还没有正式统计这层应用的代码。但是我的理解是:主要针对dubbo接口,逻辑,统计全面的代码覆盖率会比较好(后期有进一步实践再更新)
如果是新应用,可以不过滤类,统计整体的代码覆盖率
如果是老应用,可以专门统计接口这块,跑自动化的覆盖率。
统计接口的方法:
①目前公司可以下载代码,我们下载代码,进入lib目录下(一般在lib,放各种jar包,bin一般放启动脚本,conf放配置文件),找到和接口所在的jar包:
②用反编译工具java decompiler反编译jar包,jar包下——>package——>class,找到接口相关的类:类名特征:一般以rest/api命名
所以过滤原则就是:
package——>class
5.代码覆盖率对比维度:
语句覆盖率:每一行代码覆盖率
分支覆盖率:条件分支覆盖率
全量代码覆盖率
统计整体的代码覆盖率,需要统计的代码和执行用例轨迹对比
差异代码覆盖率
选择一个基线版本,对比基线版本和提测版本新增代码部分的覆盖率。
基线版本一般会选择线上最新版本,保证测试全面不遗漏
做service层和web层的差异代码覆盖率关注点可能会不一样(和代码覆盖率是一致的):
web层:主要看接口、接口调用逻辑
service层:查看全服务差异代码覆盖率,检查那块没有实现
服务端白盒测试
服务端:用户看不到的服务(数据库、中间件、缓存、文件系统、接口等)
白盒测试:基于代码的测试,是一种测试用例设计方法
1.常见测试方法:
(1)静态测试:代码走读,理解业务,实现代码功能和业务功能的映射。(开发、测试,一般是开发)
(2)静态代码扫描工具:svn、git
2.动态测试:
(1)单元测试(开发)
工具:junit,一般用于开发测试流程卡点
(2)模块测试(测试)
代码review,根据白盒测试方法,结合功能测试,设计接口case,实现用例覆盖
3.白盒测试用例设计方法
3.1.语句覆盖:保证每条语句都被覆盖
3.2.分支覆盖:
程序中每个真和假都经历一次
条件覆盖:每个条件都要至少执行一次
多条件覆盖:条件组合覆盖
3.3.路径覆盖:
程序中每条路径都要至少执行一次
小结:在写接口自动化脚本的时候可以通过白盒测试方法设计接口case,代码覆盖率可以定位到有哪些代码没有覆盖到,可以分析具体的原因
ps,仅是个人心得,如有偏颇,欢迎指正!
参考博文: