Jacoco系统测试覆盖率

一、下载jacoco

下载地址 https://www.eclemma.org/jacoco/
官方文档 https://www.jacoco.org/jacoco/trunk/doc/agent.html

二、类型

一共有三种模式可以输出运行数据,分别是:

文件模式:JVM终止时会将运行数据写入一个本地文件。
TCP Socket Server模式:可以通过外部工具Socket连接到JVM获取实时运行数据。JVM终止时运行数据重置并导出。
TCP Socket Client模式:启动时agent会连接到提供的一个TCP终端。运行数据会持续往这个socket连接写入。JVM终止时运行数据重置并导出。
文件模式存在的问题:

由于运行数据是在JVM终止时写入的,如果java框架本身不支持优雅退出,就会导致覆盖率运行数据无法写入
建议修改为TCP Socket Server模式,TCPServer需要单独占用一个端口:

在JVM启动命令中增加如下配置:

-javaagent:/data/autotest/jacoco/lib/jacocoagent.jar=includes=com.,output=tcpserver,append=true,port=10024,address=

即在JVM启动同时在10024端口启动另外一个TCPServer,然后使用官方的cli工具dump即可将运行数据导出到本地文件。

在统计自动化覆盖率时,添加以上启动命令启动java进程,运行自动化测试,运行完成后,通过dump命令导出覆盖率数据:

java -jar jacococli.jar dump --destfile /usr/local/services/billing_center_account_service/coverage/jacoco.exec --port 10024

以上命令导出覆盖率运行数据到 /usr/local/services/billing_center_account_service/coverage/jacoco.exec

再通过jacoco.exec文件生成覆盖率报告,生成报告时,需要指定classes地址:

java -jar jacococli.jar report /usr/local/services/billing_center_account_service/coverage/jacoco.exec --classfiles /usr/local/services/billing_center_account_service/classes --name account_service --xml /usr/local/services/billing_center_account_service/coverage/jacoco.xml --html /usr/local/services/billing_center_account_service/coverage/html

三、添加javaagent启动服务

确认容器内应用的启动方式,在启动命令后添加如下指令:
推荐使用TCP Socket Server模式插装,port端口自行修改,address填写0.0.0.0

-javaagent:/jacoco/lib/jacocoagent.jar=includes=com.*,output=tcpserver,append=true,port=6300,address=0.0.0.0

四、dump jacoco.exec文件

java -jar /jacoco/lib/jacococli.jar dump --destfile /${dump_address}/coverage/jacoco.exec --port 6300 --address ${ip}
不填写 --address 参数则dump到本地,如果从其他IDC机器dump文件,需要保证port口服务打开

五、获取 XML HTML

java -jar /jacoco/lib/jacococli.jar report / d u m p a d d r e s s / c o v e r a g e / j a c o c o . e x e c − − c l a s s f i l e s / {dump_address}/coverage/jacoco.exec --classfiles / dumpaddress/coverage/jacoco.execclassfiles/{dump_address}/classes --name p r o j e c t n a m e − − x m l / {project_name} --xml / projectnamexml/{dump_address}/coverage/jacoco.xml --html /${dump_address}/coverage/html
类文件夹可以指向单个类文件也可以指向多个类文件,如果要指定多个时每个文件夹前都需要写"–classfiles"选项

参考文档

java插桩-Jacoco java代码覆盖率可视化
javaagent使用指南

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值