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=,这个参数就是启用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 |
|
访问web应用(测试功能)。
3.2、dump生成覆盖率文件
保持服务启动,再打开一个cmd窗口同样cd到target目录,从上一步开启的TCP Server中dump出覆盖率文件,执行如下命令:
1 |
|
参数说明:
–destfile ./jacoco_web.exec,其中jacoco_web.exec为生成exec文件名,表示在当前目录生成;
其他参数和上一步类似,不再特别说明,注意需要更新jacococli.jar的绝对路径;
执行成功后,会在target目录生成相应的.exec文件;
分析exec文件生成html报告
dump命令生成的.exec文件为二进制文件,需要进行解析,以生成html报告为例,执行如下的命令分别将两个.exec文件解析成html报告
1 |
|
参数说明:
./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为总体覆盖率。