Jacoco 入门使用

article/2025/9/28 18:02:34

Jacoco入门使用

  • 一、背景
      • 1. 为什么需要代码覆盖率
      • 2. 原理
      • 3. 插桩方式
  • 二、项目实战
    • on the fly模式(运行时插桩)
      • 1. 原理
      • 2. 配置执行
        • 2.1 环境准备
        • 2.2 以jacoco代理方式启动被测服务
          • 2.2.1 参数说明
          • 2.2.2 多种方式启动服务
            • 方式一:命令行
            • 方式二:maven插件启动
            • 方式三:tomcat启动
        • 2.3 生成有源码的报告
    • offline模式(编译时插桩)
      • 1.适用场景
      • 2.配置执行
        • 2.1 环境准备

一、背景

1. 为什么需要代码覆盖率

  • 用例与代码关联,反推测试用例是否有效、全面
  • 研发代码本身设计是否冗余

2. 原理

通过ASM在字节码中插入探针,每个探测指针都是一个BOOL变量(true表示执行、false表示没有执行),程序运行时通过改变指针的结果来检测代码的执行情况(不会改变原代码的行为)

3. 插桩方式

  • on-the-fly
  • offline
  • 两者区别

1.on-the-fly不会改变jar包大小,offline会改变jar包大小
2.offline必须退出虚拟机时才能生成覆盖率结果
3.on-the-fly模式官方推荐是首选,offline模式适合一些环境及客观原因导致不能使用时
在这里插入图片描述

二、项目实战

on the fly模式(运行时插桩)

1. 原理

1.1 利用Jacocoagent.jar在内存中动态修改class字节码

运用java Agent的机制(JaCoCo提供了自己的Agent),启动Instrumentation代理程序,代理程序在ClassLoader装载一个class前先判断是否需要对class进行注入,对于需要注入的class进行注入,动态改变字节码结构,插入 Jacoco 的探针

1.2 dump输出覆盖率结果(.exec文件)

信息可以通过文件或是Tcp的形式输出,还提供了丰富的dump输出机制,如File,Tcp Server,Tcp Client。

2. 配置执行

2.1 环境准备

  • Java环境 (官方要求>1.5)
  • 下载agent
  • 下载jacococli.jar

2.2 以jacoco代理方式启动被测服务

2.2.1 参数说明

官网给出的JVM参数运行JacocoAgent如下:

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
参数名描述默认值
destfile覆盖率结果保存路径jacoco.exec
datafile覆盖率merge结果保存路径-
includes分析文件的路径 ,支持通配符* (所有)
excludes该路径下的文件不被统计empty
dumponexit虚拟机退出时是否dump文件true
output结果输出的方式:file或tcpserver或tcpclientfile
addresstcp对应的ip地址loopback interface
porttcp对应的端口号6300
2.2.2 多种方式启动服务

企业里有多种方式启动服务,如:
Ant、Maven 插件启动、命令行(Java -jar)启动、Tomcat 启动 war 包
针对多种方式,分别列出,选出适合自己当前项目的即可

方式一:命令行
java -javaagent:$JacocoAgentPath=includes=*,output=TCPserver,port=2000,address=192.168.110.22" -jar apache-jmeter-5.4.1/bin/ApacheJMeter.jar
方式二:maven插件启动

maven方式也有2种
1.pom.xml中配置插件

<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7-SNAPSHOT</version><executions><execution><goals><goal>dump</goal><goal>report</goal><goal>merge</goal><goals></execution><executions/><reportSets><reportSet><reports><!-- select non-aggregate reports --><report>report</report></reports></reportSet></reportSets>
</plugin>
  1. 直接通过命令行
mvn clean install
export MAVEN_OPTS="-javaagent:$JacocoAgentPath=includes=*,output=TCPserver,port=2000,address=127.0.0.1”
mvn spring-boot:run -Dport=8081

如果其他maven项目不用jacoco,记得把MAVEN_OPTS设为""

方式三:tomcat启动

修改bin/catalina.sh

JAVA_OPTS="$JAVA_OPTS -javaagent:$JacocoAgentPath=includes=*,output=TCPserver,port=2000,address=192.168.110.22"

2.3 生成有源码的报告

java -jar org.jacoco.cli-0.8.6-nodeps.jar report jacoco.exec --classfiles apache-jmeter-5.4.1/bin/ApacheJMeter.jar --html jacoco_html_src --sourcefiles apache-jmeter-5.4.1_src/apache-jmeter-5.4.1/src/launcher/src/main/java/

jacoco-cli命令详解

offline模式(编译时插桩)

1.适用场景

当一些环境及客观原因导致不能使用on the fly模式,如:

  • 环境不支持Java agents
  • 无法配置JVM参数
  • 字节码需要被转换为其他的VM,比如Android Dalvik VM.
  • 和其他代理冲突

2.配置执行

2.1 环境准备

(1)jacocoagent配置到环境变量中
(2)在项目中配置jacoco的相关配置文件

  • jacoco-agent.xxxx,如jacoco-agent.destfile

http://chatgpt.dhexx.cn/article/bs3MVJiw.shtml

相关文章

关于jacoco的学习

目录 jacoco简单介绍 idea使用jacoco简单步骤 ANT构建 TOMCAT构建 准备工作 Tomcat配置 jacoco简单介绍 Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant 、Maven中&#xff0c;并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提…

JaCoCo官方教程

翻译自官方文档 1 概念 1.1 任务 - Mission JaCoCo应该为基于Java VM的环境中的代码覆盖率分析提供标准技术。重点是提供一个轻量级&#xff0c;灵活且文档齐全的库&#xff0c;以与各种构建和开发工具集成。 有几种适用于Java的开源覆盖技术。在实现Eclipse插件EclEmma时&am…

Jacoco简介

两分钟带你了解Jacoco 从测试小白一跃成为Testng专家 Java代码覆盖率实现方式有哪些 Jacoco的出发点是为基于JVM运行的代码提供代码覆盖率统计&#xff0c;期望提供轻量级的、可伸缩的、文档较全的库文件来集成各类构建和开发工具。 Java代码覆盖率工具有几款开源工具&#xff…

Maven工程加入Jacoo生成代码测试覆盖率报告

完整代码Github地址&#xff1a; https://github.com/mgljava/jacoco-demo Maven&#xff1a;Apache Maven是一个软件项目管理和理解工具。Maven基于项目对象模型(POM)的概念&#xff0c;可以从中心信息管理项目的构建、报告和文档 Jacoco&#xff1a;Java Code Coverage Lib…

Java单元覆盖率工具JaCoCo详细理解和使用(配置+示例)

一、代码覆盖率理解 代码覆盖&#xff08;Code coverage&#xff09;是软件测试中的一种度量&#xff0c;描述程序中源代码被测试的比例和程度&#xff0c;所得比例称为代码覆盖率。 简单来理解&#xff0c;就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试…

怎么自学C语言 入门

第一阶段&#xff1a;C语言基础 在开始学习C语言基础时&#xff0c;要反问自己为什么学C语言&#xff0c;如何学好C语言。同时要知道什么是C语言以及C语言的发展。 当对这些知识有了一个概念之后&#xff0c;就正式开始学习C语言了&#xff0c;其中&#xff0c;可能会学到数据…

C语言入门03

运算符 流程控制语句

【C语言】C语言入门经典题目(范围广,内容多)

✨作者&#xff1a;小孙的代码分享 ✨专栏&#xff1a;《C语言入门》 ✨送给各位的一句话&#xff1a;空杯心态 才能学到新知 ✨希望大家看完这些题目有所收获&#xff0c;别忘了&#xff0c;点赞评论&#xff01; 目录 前言 &#x1f604; 字符转ASCII码&#x1f525; 判断闰…

C语言入门1:Hello World

C语言入门1&#xff1a;Hello World 1、第一个C语言程序&#xff1a;Hello World&#xff01;&#xff08;1&#xff09;编辑hello.c文件&#xff08;2&#xff09;在hello.c下面编辑如下代码&#xff0c;并保存&#xff08;3&#xff09;编译hello.c文件&#xff08;4&#xf…

C语言入门(1)——Hello World

C语言入门(1)——Hello World 1. 第一个C语言程序&#xff1a;Hello World 开始的第一个程序是一个最简单的程序&#xff0c;也就是最经典的Hello World程序&#xff0c;它的功能为打印出Hello World。程序的内容非常简单&#xff0c;也是C语言编写程序的基本结构框架。 1.示…

c语言入门介绍 Hello, World

相信每一个c语言的初学者的第一个程序都是从 Hello, World! 开始的吧。不过新手刚开始接触&#xff0c;应该有许多不懂的地方&#xff0c;下面我就通过Visual Studio 2019编程环境来简单介绍一下这个程序。 第一句是由于Visual Studio 2019编程环境中scanf函数&#xff08;输入…

C语言入门的三个简易程序

文章目录 一、打印100&#xff5e;200之间的素数方法一&#xff1a;1.思路2.代码如下3.结果图 方法二:1.思路2.代码如下3.结果图 二、打印乘法口诀表1.思路2.代码如下3.结果图 三、输出1000&#xff5e;2000之间的闰年1.思路2.代码如下3.结果图 四、提升 一、打印100&#xff5…

C语言入门 九九乘法表

利用C语言 输出九九乘法表 用双重循环来完成&#xff0c;外循环用变量i控制输出的行数&#xff08;总共九行&#xff09;同时i也是被乘数。 内循环用变量j循还控制列号&#xff0c;同时j也是乘数&#xff0c;规定列号不能大于行号&#xff0c;每一行输出结束后换行。 #inclu…

C语言入门之入门

错误示范 #include<stdio.h> //头文件int mian(void){printf("你好世界&#xff01;"); //标准输出函数&#xff0c;是一个库函数return 0;}上面这个程序是有问题的&#xff0c;第一次写的时候没有运行成功 编译环境是 Visual C2010 查找之后发现是main 写…

C语言入门(初识C语言)

C语言入门&#xff08;初识C语言&#xff09; 前言什么是C语言&#xff1f;为什么选择C语言&#xff1f;计算机语言的发展高级计算机语言中的经典&#xff1a;C语言 初识C语言&#xff08;正片开始&#xff09;一.第一个C语言程序&#xff08;你好&#xff0c;C语言&#xff09…

网络流(一)最大流问题EdmondsKarp和最小费用最大流

一、最大流问题 如下图所示&#xff0c;假设需要把一些物品从结点S&#xff08;称为源点&#xff09;运送到结点t&#xff08;称为汇点&#xff09;&#xff0c;可以从其它结点中转。每条边上的权值&#xff08;左图&#xff09;表示该条路径最多能运送的物品数&#xff0c;右…

最大流,最小费用最大流:解析 + 各种板子

网络流初步 Edmond-Karp算法 网络流的基本概念 源点&#xff0c;这个点只有流量的流出&#xff0c;没有流入。汇点&#xff0c;这个点只有流量的流入&#xff0c;没有流出。容量&#xff0c;每条有向边的最大可承受的流的理论大小。流量&#xff0c;每条有向边的最大可承受的…

分配问题(最小费用最大流)

题目&#xff1a;有 n 件工作要分配给 n 个人做。第 i个人做第 j件工作产生的效益为 。试设计一个将 n件工作分配给 n个人做的分配方案&#xff0c;使产生的总效益最大。 分析&#xff1a;这是一道多解法问题&#xff0c;可以用带剪枝的搜索和图论的最小费用最大流的方法来做&…

最小费用最大流算法 网络流

最小费用最大流算法 图片来源 《趣学算法》 人民邮电出版社 陈小玉 代码实现 /* 参考:《趣学算法》陈小玉 人民邮电出版社 最小费用最大流---最小费用路算法 问题分析:在实际应用中&#xff0c;要同时考虑流量和费用&#xff0c;每条边除了给定容量之外&#xff0c;还定义了一…

网络流----最小费用最大流(EK+SPFA)

先来介绍一下什么是费用流&#xff08;部分内容参考bilibili董晓算法&#xff09; 给定一个网络G&#xff08;V&#xff0c;E&#xff09;&#xff0c;每条边有容量限制w(u,v)&#xff0c;还有单位流量的费用c(u,v)。 当&#xff08;u,v&#xff09;的流量为f(u,v)时&#xf…