在这里插入图片描述


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%

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐