欢迎光临我的博客查看最新文章: https://river106.cn
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
-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服务
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出覆盖率文件,执行如下命令:
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报告
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是从代码指令(Instructions, Coverage),分支(Branches, Coverage),圈复杂度(Cyclomatic Complexity),行(Lines),方法(Methods),类(Classes)等维度进行分析的。
红色进度条表未覆盖,绿色进度条表示已覆盖,Cov为总体覆盖率。