代码覆盖率价值
业界一般是通过代码覆盖率来输出自动化case的覆盖数据,衡量接口自动化测试的完备程度,来指导后续要增加、完善case的方向。另一方面,它还可以反映服务端功能测试的全面性,用来评估服务端手工测试是否全面
除此以外,代码覆盖率还可以应用于单元测试,可以拿到经过执行单元测试用例后的覆盖率数据。
代码覆盖率统计工具
常见的编程语言,如Java,C++,Python和Go等,都有相应的代码覆盖率统计工具
这里,以java项目为例,说明如何统计被测服务的代码覆盖率,使用的覆盖率统计工具是jacoco
java覆盖率统计
以halo博客为例
step1:明确被测对象
如果被测对象只是单服务,服务运行包即是要统计的对象;如果被测对象是集成环境,包含多服务,那就需要拆解成多个统计任务。
案例-halo博客,服务启动方式是通过java -jar halo-1.5.4.jar来执行。halo-1.5.4.jar即是要统计的服务对象。
step2:启动jacoco并插桩
确保你有一个 JaCoCo 的 jacoco.exec 文件,它包含了执行期间收集的代码覆盖率数据。这个文件通常是通过在测试运行期间使用 JaCoCo 代理 (javaagent) 生成的。
如果你只有一个 halo.jar 包且没有其他类文件,你可能想要分析这个 JAR 包中的代码覆盖率。
java -javaagent:./jacocoagent.jar=output=tcpserver,address=*,port=6300,sessionid=halo -jar halo-1.5.4.jar
这将在运行 halo-1.5.4.jar
时启动 JaCoCo 代理并收集覆盖率数据。注意确保使用正确的 jacocoagent.jar
路径。
step3:执行测试用例
执行接口自动化测试脚本或手动执行相关测试用例。
step4:生成exec文件
执行完测试用例,不要先关闭jacoco进程,先生成exec文件
java -jar jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile ./jacoco_test1.exec
jacocoli.jar:jacoco工具包里
ip:jacoco服务ip
port:jacoco服务端口
jacoco_test1.exec:exec文件命名及路径
step5:提取类文件
首先,你需要解压 halo-1.5.4.jar
文件来提取里面的 .class
文件而不是嵌套的 JAR。
mkdir -p /home/halo/halo-1.5.4
cd /home/halo/halo-1.5.4
jar -xf /home/halo/halo-1.5.4.jar
执行完命令在halo目录下会新增BOOT-INF/classes的目录,/home/halo/halo-1.5.4/BOOT-INF/classes即是类文件存储路径。
step6:指定正确的类文件路径
接下来,你需要告诉 JaCoCo 去分析解压后的类文件。假设你的应用类文件位于 BOOT-INF/classes
目录下,你可以这样运行 JaCoCo:
java -jar ./jacococli.jar report ./jacoco_test1.exec \
--classfiles /home/halo/halo-1.5.4/BOOT-INF/classes \
--html ./report
各路径指向说明
jacococli.jar:jacoco工具包中的文件
jacoco_test1.exec:生成出来的exec文件
classfiles:指向前面的类文件存储路径
html:定义报告生成路径,如文件目录不存在需创建
step7:获取报告结果
report下的文件都是报告内容元素,可以把整个report目录压缩再导出。
step8:查看报告结果
打开index.html文件
step9:结果分析
total红框框的结果即是总的代码覆盖率统计结果,统计的维度为行覆盖。
如果未达到覆盖率阈值:和开发对齐未覆盖到的场景,分析是否存在冗余的代码或者是否存在未覆盖到的场景,如果是冗余代码需要优化代码,如果是场景未覆盖到需要增加相关的测试用例,完善完再重新统计。
如果达到覆盖率阈值:将代码覆盖率的统计结果整合在测试报告上。