用jacoco统计JAVA项目测试代码覆盖率

发布时间 2024-01-13 19:50:11作者: rmticocean

一、概述

Jacoco 统计的是全量代码覆盖率。它不仅支持生成单元测试的覆盖率,也支持监控生成接口测试,功能测试的覆盖率。

在新一代精准测试技术流的影响中,各大型单位对覆盖率的追求越来越迫切。作为一款开源产品,它主机面向Java语言,能够在字节码层面给出覆盖率,同时也能将字节码关联到对应的源代码。这种半精准的测试方式,在小型团队中,对于某些场景的覆盖率诉求,起到了一定的响应。但它也有很强的局限性,尤其在支撑大型系统应用中,其表现能力弱,准确率不够达标。

不同的编程语言有不同的技术去实现代码覆盖统计,如JAVA的Jacoco ,C++的Testwell ,Python的Coverage.Py 等等。

二、下载

下载后随意放在一个目录,解压即可。

官网地址:

三、java命令直接使用配置

1、java运行

java -javaagent:/temp/jacocoagent.jar=includes=com.java2nb,*,output=tcpserver,port=6363,address=192.168.1.8,append=true -jar novel-front-3.5.4.jar

配置参数:

includes:你要统计哪些包里面的代码
output:统计数据以什么形式导出
port和address:访问这个导出服务的 ip和端口

2、使用 jacococli.jar 拉取代码覆盖率统计信息 (从应用服务器上面拉数据),即生成acoco_test.exec文件

java -jar /temp/jacococli.jar dump --address 192.168.1.8 --port 6300 --destfile ./jacoco_test.exec

3、使用 jacococli.jar 分析代码覆盖率统计信息 (输出一个html报告形式)

java -jar /temp/jacococli.jar report ./jacoco_test.exec --sourcefiles D:\work\src\main\java --classfiles D:\work\target\classes --html ./report_test --encoding utf-8

4、在report_test目录下,打开index.html文件查看报告

 

四、tomcat中配置

 1、关闭tomcat的服务,修改 catalina.sh 的JAVA_OPTS配置

# -javaagent: 的后面跟jacoco的安装路径
# includes= 选项,选择你要覆盖率的服务
# port= 选项,选择你要打开的端口,和你tomcat的服务端口要不一样,即是一个其他人未占用的端口
# address= 选项,tomcat服务所在机器的ip地址(如果想在跟tomcat服务同一台机器上执行ant任务的话,需要改为127.0.0.1)
JAVA_OPTS="-javaagent:$jacoco_path/lib/jacocoagent.jar=includes=com.netease.yourserver.*,output=tcpserver,address=xx.xx.xx.xx,port=12345"

 2、启动服务,如果发现启动主程序异常,那么在JAVA_OPTS 配置中再加一项-Xverify:none

五、分析结果注意

测试没有覆盖到的地方,有如下几种可能

1、测试用例设计不完善
2、用例执行者执行时漏测
3、开发人员没删除废弃的代码功能

 

参考:

https://juejin.cn/post/6907552109915275277
https://www.jianshu.com/p/c6fafb50b07a?clicktime=1577953523
https://www.sohu.com/a/498359940_120941200
https://it.sohu.com/a/696322070_120635785
https://www.cnblogs.com/xiao2shiqi/p/16370471.html
https://www.cnblogs.com/liuyitan/p/15716027.html
滴滴开源Super-jacoco:java代码覆盖率收集平台:
https://www.hctestedu.com/live_pc/l_65a0df5ee4b064a8fbe4a31e