代码覆盖率Jacoco演练
Jacoco是一个开源的java代码覆盖率工具(官网地址: htps://www.jacoco.orgjacoco)。它使用ASM框架修改被测系统的字节码文件,插入一系列不同维度的boolean[]类型探针,从而可以记录执行过的指令、代码行、分支等,得到多种维度的覆盖率。
代码覆盖率Jacoco
1、覆盖率是什么?
覆盖率测试是一种定量的测试方法,用于衡量测试用例对被测试程序的覆盖程度
假设:一个系统功能
代码写了100行
设计了50个用例
执行完你设计的测试用例,结果有80行代码都显示没有被执行过
这个覆盖率就是20%
难点:如何去统计这个代码有没有被执行;
可以针对:测试功能/页面/接口;测试过程中:触发执行的源码占全部源代码的比例。用来度量软件测试工作质量的一个指标【代码覆盖率越高,证明你的质量保障做的越好】
代码覆盖率能够客观反映软件测试的工作质量;
但是代码覆盖率不是唯一的质量考核质量
2、Jacoco简介
Jacoco是一个开源的java代码覆盖率工具(官网地址: htps://www.jacoco.orgjacoco)。它使用ASM框架修改被测系统的字节码文件,插入一系列不同维度的boolean[]类型探针,从而可以记录执行过的指令、代码行、分支等,得到多种维度的覆盖率。Jacoco支持的覆盖率计数器包含指令级(Instructions,C0 coverage),分支(Branches,C1 coverage)、圈复杂度(Cyclomatic Complexity)、行(Lines)、方法(Non-abstract Methods)、类(Classes)。关于覆盖率报告的解读,可参考官方文档: https://www.jacoco.org/
偏白盒测试:支持单元测试-代码覆盖率统计
- 偏开发侧
- 偏白盒测试
- 开发人员编写的单元测试代码
- 假设公司对开发有单元测试编写要求——》可以用(需要源码或者源文件配置maven)
支持黑盒测试:代码覆盖率统计
- 手工测试/自动化测试,执行完之后
- 可以通过工具看到代码覆盖率
3、我们为什么要用覆盖率?
在测试时会有这样一些担心,比如:无止境的、没有范围的,代码的改动或调整一个需求,是否需要全量回归测试,代码范围不清楚;某个功能或功能点是否需要测试,测试的程度如何不清楚等等的问题。
4、使用覆盖率可以为我们带来哪些收益?
可以高效且具体的进行代码检查,还能提高代码的清晰度和信任度,让项目质量更有保障
1)被测代码的覆盖程度:通过查看代码覆盖率可以让我们相对比较清晰的知道哪些代码、哪些分支我们没有测试覆盖到;
2)提高代码信任度:通过覆盖率我们可以根据未覆盖到的代码进行分析并增加测试case进行覆盖从而提高代码的清晰度和信任度,从而更好的保证了我们项目的质量,对自己的项目大家更安心。
3)被测代码是否是本次需求相关的
5、实战演练
实现原理:后端系统代码运行时,埋点统计代码执行情况
系统部署的时候添加埋点统计,收集测试用例执行中代码的运行信息。
a、无需改动源码
- Java Agent 又叫Java探针,是在JDK1.5引入的一种可以动态修改Java字节码的技术。
b、示例配置选项
- destfile:执行信息保存文件名
- includes:需要埋点统计的类
- excludes:不需要埋点统计的类
java -javaagent:/temp/jacocoagent.jar=destfile=jacoco_test.exec,includes=com.tony.* -jar api-project.jar
agent方式:采用停止程序后,自动化生成统计数据文件
c、分析执行数据
- 根据埋点信息统计的数据,进行覆盖率分析
java -jar jacococli.jar report [<execfiles> ...] --classfiles <path>
5.1、启动java项目并执行测试case
java -javaagent:/temp/jacocoagent.jar=destfile=jacoco_test.exec,includes=com.tony.* -jar api-project.jar
5.2、查看结果
jacoco_test.exec:通过jacoco提供的agent,启动java程序的时候加进去,会自动去添加代码执行的统计埋点信息
将生成的文件放到jacoco框架中的lib目录下
执行命令
D:\work\course\test\jacoco\jacoco-0.8.8\lib>java -jar jacococli.jar report jacoco_test.exec --classfiles D:\work\course\test\apitest\sourcecode\postman\target\classes --html ./report_test --sourcefiles D:\work\course\test\apitest\sourcecode\postman\src\main\java --encoding utf-8
解析完毕生成report_test目录
代码覆盖率的执行报告(整体覆盖率)
jacoco默认会按照方法级别进行汇总
由图可知:/integral接口的覆盖率为81%
通过方法链接进入代码中
绿色:表示代码被执行过;
红色:表示代码没有被执行
黄色:表示逻辑分支没有全部被执行
5.3、完善测试case
与第一次测试相比,覆盖率达到100%
代码全部被执行
代码覆盖率能够客观反映软件测试的工作质量;
但是代码覆盖率不是唯一的质量考核质量
6、微服务架构
1、每个系统都可以接入jacoco
2、收集合并多个系统jacoco,收集到的代码执行信息
3、统一分析
7、常问的面试题
面试题1:手工测试代码覆盖率是多少?自动化的覆盖率是多少?
参照代码覆盖率回答
面试题2:自动化的程度(自动化做的怎么样?):
通过代码覆盖率进行评价
手工测试:100%;自动化测试覆盖率:65%——》自动化程度为65%
面试题3:用例的转化率?
1000条手工case——》900条case转成了自动化脚本执行,转化率90%
更多推荐
所有评论(0)