java插桩-Jacoco java代码覆盖率可视化

简介: java插桩-Jacoco java代码覆盖率可视化

工具

image.png

                                         具对比(网图,侵删)

博主使用的是jacoco-0.8.5版本

目录结构

├── coverage

│   ├── index.html

│   ├── jacoco.csv

│   ├── jacoco-maven-plugin

│   ├── jacoco-resources

│   ├── jacoco-sessions.html

│   ├── jacoco.xml

│   ├── org.jacoco.agent

│   ├── org.jacoco.agent.rt

│   ├── org.jacoco.ant

│   ├── org.jacoco.cli

│   ├── org.jacoco.core

│   ├── org.jacoco.examples

│   ├── org.jacoco.report

│   └── report.dtd

├── doc

│   ├── agent.html

│   ├── ant.html

│   ├── api

│   ├── api.html

│   ├── build.html

│   ├── changes.html

│   ├── check-mojo.html

│   ├── classids.html

│   ├── cli.html

│   ├── conventions.html

│   ├── counters.html

│   ├── dump-mojo.html

│   ├── empty.html

│   ├── environment.html

│   ├── epl-2.0.html

│   ├── examples

│   ├── faq.html

│   ├── flow.html

│   ├── help-mojo.html

│   ├── implementation.html

│   ├── index.html

│   ├── instrument-mojo.html

│   ├── integrations.html

│   ├── license.html

│   ├── maven.html

│   ├── merge-mojo.html

│   ├── mission.html

│   ├── offline.html

│   ├── prepare-agent-integration-mojo.html

│   ├── prepare-agent-mojo.html

│   ├── repo.html

│   ├── report-aggregate-mojo.html

│   ├── report-integration-mojo.html

│   ├── report-mojo.html

│   ├── resources

│   ├── restore-instrumented-classes-mojo.html

│   ├── support.html

│   └── team.html

├── index.html

├── lib

│   ├── jacocoagent.jar

│   ├── jacocoant.jar

│   ├── jacococli.jar

│   ├── org.jacoco.agent-0.8.5.201910111838.jar

│   ├── org.jacoco.ant-0.8.5.201910111838.jar

│   ├── org.jacoco.core-0.8.5.201910111838.jar

│   └── org.jacoco.report-0.8.5.201910111838.jar

└── test

   ├── index.html

   └── TESTS-TestSuites.xml

  • coverage 覆盖率
  • doc 文档
  • lib 库,一些jar包  本文使用了jacocoagent.jar和jacococli.jar
  • test 测试
  • index.html 主页

使用

javaagent

何时转储

  • 文件系统:在JVM终止时,执行数据被写入本地文件。
  • TCP套接字服务器:外部工具可以连接到VM,并通过套接字连接检索执行数据。可以在JVM退出时进行可选的执行数据重置和执行数据转储。
  • TCP套接字客户端:启动时,JaCoCo代理连接到给定的TCP端点。执行数据根据请求写入套接字连接。可以在VM退出时进行可选的执行数据重置和执行数据转储。

设置代理

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]

参数

image.png

image.png

安全注意事项:在tcpserver和 tcpclient模式下打开的端口和连接以及JMX接口不提供任何身份验证机制。如果在生产系统上运行JaCoCo,请确保没有不受信任的源可以访问TCP服务器端口,或者JaCoCo TCP客户端仅连接到受信任的目标。否则,可能会泄露应用程序的内部信息,或者可能发生DOS攻击。

jacococli

dump命令

格式

java -jar jacococli.jar dump [--address <address>] --destfile <path> [--help] [--port <port>] [--quiet] [--reset] [--retry <count>]

向以“ tcpserver”输出模式运行的JaCoCo代理请求执行数据。

                                             参数

image.png

instrument命令

格式

java -jar jacococli.jar instrument [<sourcefiles> ...] --dest <dir> [--help] [--quiet]

Java类文件和JAR文件的离线检测。

                                      参数

选项 描述
<sourcefiles> 要回避检测的文件夹或文件列表
--dest <dir> 将检测的Java类写入的路径
--help 显示帮助
--quiet 抑制stdout上的所有输出

merge命令

格式

java -jar jacococli.jar merge [<execfiles> ...] --destfile <path> [--help] [--quiet]

将多个exec文件合并到一个新的文件中。

                                         参数

参数

选项 描述
<execfiles> 要读取的JaCoCo * .exec文件列表
--destfile <path> 将合并的执行数据写入的文件
--help 显示帮助
--quiet 抑制stdout上的所有输出

report命令

格式

java -jar jacococli.jar report [<execfiles>...] --classfiles <path> [--csv <file>] [--encoding <charset>] [--help] [--html <dir>] [--name <name>] [--quiet] [--sourcefiles <path>] [--tabwith <n>] [--xml <file>]

通过读取exec和Java类文件生成不同格式的报告。

                                            参数

image.png

一般情况下填写--classfiles参数,--csv、--html、--xml中选一个,具体情况看读者要求。

classinfo命令

格式

java -jar jacococli.jar classinfo [<classlocations>...] [--help] [--quiet] [--verbose]

在提供的位置打印有关Java类文件的信息。

                                     参数

选项 描述
<classlocations> Java类文件的位置
--help 显示帮助
--quiet 抑制stdout上的所有输出
--verbose 显示方法和行号详细信息

execinfo命令

格式

java -jar jacococli.jar execinfo [<execfiles>...] [--help] [--quiet]

以人类可读的格式打印exec文件内容。

version命令

格式

java -jar jacococli.jar version [--help] [--quiet]

以人类可读的格式打印exec文件内容。

version命令

格式

java -jar jacococli.jar version [--help] [--quiet]

打印JaCoCo版本信息。

                                       参数

选项 描述
--help 显示帮助
--quiet 抑制stdout上的所有输出

使用举例(OpenDaylight)

javaagent

java代理jar包路径: /home/llvm/apps/jacoco/lib/jacocoagent.jar

待插桩jar包路径:/usr/lib/opendaylight/karaf-0.7.3/system/org/opendaylight/openflowplugin/openflowjava/openflow-protocol-api/0.5.3/openflow-protocol-api-0.5.3.jar

1.启动时带上Javacoco的agent

sudo vim /usr/lib/opendaylight/karaf-0.7.3/bin/karaf

JAVA_OPTS="$JAVA_OPTS -javaagent:/home/llvm/apps/jacoco/lib/jacocoagent.jar=destfile=jacoco.exec,output=tcpserver"

2020062310470442.png

                                              添加JAVA_OPTS

javacli

version命令

2020062310470442.png

2020062310470442.png classinfo命令

显示类名等信息

2020062310470442.png

使用一下你要测试的jar包。

dump命令

获取执行情况数据,在jacococli.jar所在目录(与jacocoagent.jar目录一致)执行命令:

java -jar jacococli.jar dump  --port 6300 --destfile data/jacoco-it.exec

生成.exec文件

2020062310470442.png

                                                 生成.exec文件

execinfo命令

java -jar jacococli.jar execinfo data/jacoco-it.exec

.exec中包含了包名等信息

image.png

report命令

执行如下命令生成html报告。--classfiles指定应用程序的class文件所在目录,--html指定html报告所在目录。

java -jar jacococli.jar report data/jacoco-it.exec --classfiles /usr/lib/opendaylight/karaf-0.7.3/system/org/opendaylight/openflowplugin/openflowjava/openflow-protocol-api/0.5.3/ --html html

2020062310470442.png

                                                        生成html

2020062310470442.png

                                                         目录

点击html目录中的index.html查看代码覆盖率

2020062310470442.png

                                          包的覆盖率

2020062310470442.png

                                       类、方法、分支等覆盖率

2020062310470442.png

                                               具体包中类的覆盖率

2020062310470442.png

                                                 具体类中方法的覆盖率

执行以下命令,生成csv文件

java -jar jacococli.jar report data/jacoco-it.exec --classfiles /usr/lib/opendaylight/karaf-0.7.3/system/org/opendaylight/openflowplugin/openflowjava/openflow-protocol-api/0.5.3/ --csv openflow-protocol-api.csv

2020062310470442.png

只有MISSED和COVERED,需要自己计算下覆盖率。

image.png

xml及其他参数没有尝试,留给读者自行探索吧。

merge命令、instrument命令以及针对Ant、Maven框架如何使用jacoco,Eclipse、IDEA等IDE如何集成jacoco等内容也留给读者去探索吧,锻炼自己阅读官方文档的能力,学会Google、stackoverflow,加油哦!!!

参考

jacoco 官网

jacoco github

jacocoagent

jacococli

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

相关文章
|
人工智能 监控 数据可视化
Java智慧工地可视化APP信息管理平台源码
利用物联网、云计算等先进信息化技术手段,实时掌握施工工地全方位的现场情况,提高数据获取的准确性、及时性、真实性和响应速度。
306 3
|
存储 监控 安全
Java数字化可视化智慧工地信息管理平台源码
技术栈: 微服务架构+Java+Spring Cloud +UniApp +MySql支持多端展示(PC端、手机端、平板端)
255 0
|
数据采集 监控 Oracle
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
阿里巴巴是 GraalVM 全球顾问委员会的唯一中国代表,阿里云程序语言与编译器团队和可观测团队合作实现了 GraalVM 应用的无侵入可观测能力,并在 ARMS 平台上线了该功能。目前在 GraalVM 24 中发布的是支持 Java agent 的第一步,其余能力将在 GraalVM 的后续版本中陆续发布。
889 23
|
存储 数据采集 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在城市地下管网管理与风险预警中的应用(275)
本文系统阐述 Java 与大数据可视化技术在城市地下管网管理中的应用,涵盖数据采集、三维建模、风险预警及性能优化,结合真实案例提供可落地的技术方案。
|
存储 供应链 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业供应链风险预警与决策支持中的应用(204)
本篇文章探讨了基于 Java 的大数据可视化技术在企业供应链风险预警与决策支持中的深度应用。文章系统介绍了从数据采集、存储、处理到可视化呈现的完整技术方案,结合供应链风险预警与决策支持的实际案例,展示了 Java 大数据技术如何助力企业实现高效、智能的供应链管理。
|
存储 数据采集 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵溯源与治理策略展示中的应用(191)
本项目探索了基于Java的大数据可视化技术在城市交通拥堵溯源与治理策略中的应用。通过整合多源交通数据,利用Java生态中的大数据处理与可视化工具,构建了交通拥堵分析模型,并实现了拥堵成因的直观展示与治理效果的可视化评估。该方案为城市交通管理提供了科学、高效的决策支持,助力智慧城市建设。
|
数据可视化 Java 大数据
Java 大视界 -- 基于 Java 的大数据可视化在城市规划决策支持中的交互设计与应用案例(164)
本文围绕基于 Java 的大数据可视化在城市规划决策支持中的应用展开,分析决策支持现状与挑战,阐述技术应用方法,结合实际案例和代码,提供实操性强的技术方案。
|
人工智能 监控 Java
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
609 1
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
|
存储 数据可视化 Java
使用Java实现可视化数据分析平台
使用Java实现可视化数据分析平台