JaCoCo实战:通过Jacocoagent插桩轻松获取Java覆盖率
Jacocoagent是JaCoCo工具的核心组件,用于在JVM运行时无侵入地收集代码覆盖率数据。主要包含jacocoagent.jar(实时采集)和jacococli.jar(报告生成)两个JAR包。使用时需在JVM参数中配置-javaagent指定jacocoagent.jar路径,并设置TCP服务端口。程序运行后,通过APP或接口调用触发代码执行,jacocoagent会记录覆盖率信息。最后
什么是Jacocoagent
JaCoCoAgent 是 JaCoCo 提供的一个 Java Agent 程序(打包在 jacocoagent.jar 中),为了在 JVM 运行时对目标应用的字节码做无侵入插桩,从而实时收集代码执行的覆盖率数据,是 JaCoCo 实现「运行时覆盖率收集」(比如你本地 Debug、APP/Postman 调用接口时收集覆盖率)的核心组件。
1.下载Jacoco的工具包
下载地址:EclEmma - JaCoCo Java Code Coverage Library
2.用到的jar包,jacocoagent插桩,jacococli获取报告
两个核心 JAR,分工完全不同,配合起来完成「收集 - 导出 - 生成报告」的全流程,简单说:
-
jacocoagent.jar:「现场采集员」—— 部署在目标应用的 JVM 中,实时收集覆盖率数据,存在内存中;
-
jacococli.jar:「远程取数 + 报告生成器」—— 本地命令行工具,不需要挂载到应用 JVM,作用是「连接 JaCoCoAgent 导出数据(dump)」和「将导出的 .exec 文件转换成可视化 HTML 报告」。

3.在eciplse中debug/run配置jacocoagent,用来它在 Java 程序运行时收集代码覆盖率信息

-javaagent:自己的路径jacocoagent.jar=includes=*,output=tcpserver,port=6300
-javaagent:xxx.jar:告诉 JVM「加载这个 Java Agent 程序」;
includes=*:配置 JaCoCoAgent「收集所有包的覆盖率」(可指定com.xxx.*缩小范围);
output=tcpserver:配置 JaCoCoAgent「以 TCP 服务模式运行,开放端口供远程 dump 数据」(你 Debug 时能随时 dump 的核心);
port=6300:配置 JaCoCoAgent「监听 6300 端口」,让jacococli.jar能通过这个端口连接并导出数据。
4.debug运行程序,使用APP调用对应接口,jacoco会自动记录对应的运行情况
5.获取代码覆盖情况报告
5.1使用命令行生成debug-coverage.exec文件:
# 替换 jacococli.jar 的路径,dump 数据到本地
java -jar /你的JaCoCo路径/jacococli.jar dump --address=localhost --port=6300 --destfile=debug-coverage.exec
5.2在使用命令行生可视化报告
java -jar /你的JaCoCo路径/jacococli.jar report debug-coverage.exec \
--classfiles /你的项目/target/classes \ # 项目编译后的class文件
--sourcefiles /你的项目/src/main/java \ # 项目源码
--html ./debug-coverage-report # 生成HTML报告
6.打开报告文件的index.html

更多推荐



所有评论(0)