Jacoco代码覆盖率测试

1、简介

JaCoCo(Java Code Coverage)是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中。
很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins。

官网:https://www.jacoco.org/
github:https://github.com/jacoco/jacoco

2、下载

下载地址:https://www.jacoco.org/jacoco/
版本:jacoco-0.8.10
解压后在lib文件夹下找到jacocoagent.jar和jacococli.jar。

3、功能测试覆盖率

对JavaWeb项目进行覆盖率测试

3.1、启动jacoco agent进行插桩

vm参数配置javaagent

1
-javaagent:/Users/river106/Software/jacoco/jacoco-0.8.10/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8899,address=127.0.0.1

关键参数说明:

-javaagent:/Users/river106/Software/jacoco/jacoco-0.8.10/lib/jacocoagent.jar=includes=,这个参数就是启用jacoco代理参数,其中/Users/river106/Software/jacoco/jacoco-0.8.10/lib/jacocoagent.jar就是之前下载jacoco解压后的jacocoagent.jar的绝对路径,includes表示对要插桩的包进行过滤,代表所有的class都要进行插桩,也可以根据情况进行过滤,如includes=com.example.*;
output=tcpserver,这里不需要改动,表示以TCP Server方式启动应用并插桩;
port=8899,Jacoco开启的TCP Server的端口,不能被占用;
address=127.0.0.1,对外开放的地址,可以指定IP地址;

启动web服务.

或使用java -jar方式运行Web服务

1
java -javaagent:/Users/river106/Software/jacoco/jacoco-0.8.10/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8899,address=127.0.0.1  springboot-demo.jar

访问web应用(测试功能)。

3.2、dump生成覆盖率文件

保持服务启动,再打开一个cmd窗口同样cd到target目录,从上一步开启的TCP Server中dump出覆盖率文件,执行如下命令:

1
java -jar /Users/river106/Software/jacoco/jacoco-0.8.10/lib/jacococli.jar dump --address localhost --port 8899 --destfile ./jacoco_web.exec

参数说明:

–destfile ./jacoco_web.exec,其中jacoco_web.exec为生成exec文件名,表示在当前目录生成;
其他参数和上一步类似,不再特别说明,注意需要更新jacococli.jar的绝对路径;
执行成功后,会在target目录生成相应的.exec文件;

分析exec文件生成html报告
dump命令生成的.exec文件为二进制文件,需要进行解析,以生成html报告为例,执行如下的命令分别将两个.exec文件解析成html报告

1
java -jar /Users/river106/Software/jacoco/jacoco-0.8.10/lib/jacococli.jar report ./jacoco_web.exec --classfiles .\classes --sourcefiles ..\src\main\java --html report01

参数说明:

./jacoco_web.exec,表示要解析的exec文件的相对路径
–classfiles .\classes,需要指定生成的classes文件目录
–sourcefiles ..\src\main\java,需要指定源码的文件目录

最终,target目录会生成report01目录,打开其中的index.html查看代码覆盖率结果。
jacoco-report

Jacoco是从代码指令(Instructions, Coverage),分支(Branches, Coverage),圈复杂度(Cyclomatic Complexity),行(Lines),方法(Methods),类(Classes)等维度进行分析的。

红色进度条表未覆盖,绿色进度条表示已覆盖,Cov为总体覆盖率。


Jacoco代码覆盖率测试
https://river106.cn/posts/d6d645ac.html
作者
river106
发布于
2023年6月14日
许可协议