jacoco merge 合并代码覆盖率(同一个项目代码没有修改)

news2024/11/30 2:50:45

相关文章:

jacoco代码覆盖率_jacoco覆盖率_做测试的喵酱的博客-CSDN博客

一、背景

前提:

同一个项目,代码没有修改的情况下,合并多个代码覆盖率,实现全量代码覆盖率。

java -jar jacococli.jar merge jacoco.exec jacoco-new.exec --destfile merged.exec

是使用 Jacoco 命令行工具进行覆盖率数据合并的命令。

这个命令用于将两个 Jacoco 代码覆盖率执行数据文件(jacoco.exec 和 jacoco-new.exec)合并成一个新的覆盖率执行数据文件(merged.exec)。合并后的文件可以用于生成包含所有执行数据的全量覆盖率报告。

在软件开发过程中,由于测试是分布在多个环境或阶段中的,可能会生成多个代码覆盖率执行数据文件。为了获取完整的代码覆盖率情况,我们需要将这些分散的执行数据文件合并起来,以便生成全量的代码覆盖率报告。

上述命令中的参数解释如下:

  • jacoco.exec:旧的执行数据文件,包含之前的代码覆盖率执行信息。
  • jacoco-new.exec:新的执行数据文件,包含最近的代码覆盖率执行信息。
  • merged.exec:合并后的执行数据文件,用于生成全量的代码覆盖率报告。

执行该命令后,Jacoco 命令行工具将读取两个输入的执行数据文件,合并它们,并将合并后的执行数据写入到目标文件 merged.exec 中。合并后的文件可以作为输入用于生成全量的代码覆盖率报告。

二、基本的步骤

1、在每次构建或测试后,保存生成的覆盖率报告文件,例如 jacoco.exec。

2、在进行代码修改后,重新运行测试,并生成新的覆盖率报告文件,例如 jacoco-new.exec。

3、使用 JaCoCo 的 merge 命令将旧的覆盖率文件和新的覆盖率文件合并为一个文件:

java -jar jacococli.jar merge jacoco.exec jacoco-new.exec --destfile merged.exec


这将合并 jacoco.exec 和 jacoco-new.exec 文件,并将结果保存到 merged.exec 中。

4、通过运行 JaCoCo 的 report 命令来生成合并后的覆盖率报告:

java -jar jacococli.jar report merged.exec --classfiles <项目类文件路径> --html <报告输出路径>


请确保将 <项目类文件路径> 替换为你的项目的类文件路径,将 <报告输出路径> 替换为你想要保存报告的目录。

5、打开生成的 HTML 报告文件,查看增量代码覆盖率。在报告中,你可以找到有关测试覆盖率的详细信息,包括新增代码的覆盖情况。

三、 实战演示

生成代码覆盖率,我们需要依赖源码,和字节码。

3.1、jacoco下载:

  • jacoco 最新版本下载

将下载的jacoco压缩文件,上传到服务器,新建一个名为jacoco的文件夹,然后将压缩文件放入里面解压。

 

3.2、 启动jacocoagent,监控被测项目

java -javaagent:/usr/chenshuai/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=0.0.0.0,append=true -jar AutoApi-0.0.1-SNAPSHOT.jar

  • includes=*

这个代表了,启动时需要进行字节码插桩的包过滤,*代表所有的class文件加载都需要进行插桩。

你可以写成:

includes=com.test.service.*
这个参数我们可以用来做maven多模块的覆盖率,比如我们只想查看service服务层的覆盖率,我们可以通过设置包路径的方式进行只统计当前包的覆盖率
 

  • output=tcpserver     

output主要四个参数:

1、file: At VM termination execution data is written to the file specified in the destfile attribute.(当jvm停止掉的时候产出dump文件,即服务挂了产出dump文件)

2、tcpserver: The agent listens for incoming connections on the TCP port specified by the address and port attribute. Execution data is written to this TCP connection.(常用模式,将jacocoaget作为服务,每次通过cli包进行dump命令去获取dump包)

3、tcpclient: At startup the agent connects to the TCP port specified by the address and port attribute. Execution data is written to this TCP connection.(将jacocoagent做为客户端,向指定ip和端口的服务推送dump信息)

4、none: Do not produce any output.(不产出任何dump,dump个寂寞,忽略)

注意:

在k8s容器里面由于ip是动态的,tcpserver模式的ip无法固定填写,可以填 0.0.0.0 然后通过实际容器 ip 就可以访问到,而这个实际ip,一般可以从cmdb服务中动态获取

  • port=98080

这是jacoco开启的tcpserver的端口,请注意这个端口不能被占用。

  • address=192.168.110.1

这是对外开发的tcpserver的访问地址。可以配置127.0.0.1,也可以配置为实际访问ip
配置为127.0.0.1的时候,dump数据只能在这台服务器上进行dump,就不能通过远程方式dump数据。
配置为实际的ip地址的时候,就可以在任意一台机器上(前提是ip要通,不通都白瞎),通过ant xml或者api方式dump数据。
举个栗子:
我如上配置了192.168.110.1:2014作为jacoco的tcpserver启动服务,
那我可以在任意一台机器上进行数据的dump,比如在我本机windows上用api或者xml方式调用dump。
如果我配置了127.0.0.1:2014作为启动服务器,那么我只能在这台测试机上进行dump,其他的机器都无法连接到这个tcpserver进行dump

如果不知道本机ip地址,可以使用0.0.0.0,这样ip地址会绑定主机ip。

  • append:true

是执行数据文件已经存在,则覆盖数据将附加到现有文件

3.3 、 执行手工测试

访问服务

http://124.71.131.113:8081/get_order_info


3.4、  cli包dump生成exec文件(注意一定要测试完毕之后)

1 在当前服务器执行dump命令

java -jar /usr/chenshuai/jacoco/lib/jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile ./AutoApi-0.0.1-SNAPSHOT.exec
  •  --address 127.0.0.1 --port 6300 指向jacocoagent启动IP和端口
  •  ./AutoApi-0.0.1-SNAPSHOT.exec 为生成exec文件名,在当前目录下生成该文件

 

2 远程执行dump命令生成exec文件

java -jar jacococli.jar dump --address 124.70.87.136 --port 6300 --destfile ./AutoApi-0.0.1-SNAPSHOT.exec


在当前目录下生成文件。 

 注意:

在执行命令的机器上,也需要装有jacoco,且该机器能正常连接被测的服务器和端口。

3.5 再次执行手工测试,并生成新的exec文件

java -jar /usr/chenshuai/jacoco/lib/jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile ./new.exec

新生成的文件名为new.exec 

3.6、使用 JaCoCo 的 merge 命令合并

使用 JaCoCo 的 merge 命令将旧的覆盖率文件和新的覆盖率文件合并为一个文件:

模版:

java -jar jacococli.jar merge jacoco.exec jacoco-new.exec --destfile merged.exec

这将合并 jacoco.exec 和 jacoco-new.exec 文件,并将结果保存到 merged.exec 中。 

 示例:

java -jar /usr/chenshuai/jacoco/lib/jacococli.jar merge AutoApi-0.0.1-SNAPSHOT.exec new.exec --destfile merged.exec

生成合并后的 merged.exec文件。

3.7、通过运行 JaCoCo 的 report 命令来生成合并后的覆盖率报告:

模版:

java -jar jacococli.jar report merged.exec --classfiles <项目类文件路径> --html <报告输出路径>
  • --sourcefiles  本地被测项目的源码
  • --classfiles 为本地被测项目的字节码路径


请确保将 <项目类文件路径> 替换为你的项目的类文件路径,将 <报告输出路径> 替换为你想要保存报告的目录。

示例:

java -jar /usr/chenshuai/jacoco/lib/jacococli.jar report ./merged.exec --classfiles /usr/chenshuai/mock-server/target/classes --sourcefiles /usr/chenshuai/mock-server/src/main/java --html html-report --xml report.xml --encoding=utf-8

执行命令后,在本地生成一个html-report 文件夹 

 

 把这个文件夹,下载到本地。index.html就是报告。

压缩文件夹html-report:

zip -r html-report.zip html-report

将html-report.zip 下载到本地

sz html-report.zip

远程生成测试报告:

java -jar jacococli.jar report ./AutoApi-0.0.1-SNAPSHOT.exec --classfiles /Users/zhaohui/IdeaProjects/mock-server/target/classes --sourcefiles /Users/zhaohui/IdeaProjects/mock-server/src/main/java --html html-report --xml report.xml --encoding=utf-8
 

8、打开生成的 HTML 报告文件

打开生成的 HTML 报告文件,查看增量代码覆盖率。在报告中,你可以找到有关测试覆盖率的详细信息,包括新增代码的覆盖情况。

index.html就是报告。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PFC-34、PMO-78、HD3-AMPS比例控制阀放大器

比例驱动放大器 用于HD2-PS、HD3-PS、HD3-AMPS、HD3-PS8、HD5-PS、HD3-PMO、PMO-78、PRO-M24、AMF-RE、PFC-34、PFC-78、PFP3-78电磁比例阀 DIN 连接器安装 微控制器设计 独立调整&#xff08;斜坡上升 - 斜坡下降&#xff09; 3位LED显示屏 显示和调整实际值&#xff08…

转换成mp4格式的方法有哪些?分享两个给大家!

在数字化的世界中&#xff0c;我们经常需要处理各种格式的视频文件。MP4是一种非常常见的视频格式&#xff0c;由于其优秀的兼容性和较小的文件大小&#xff0c;它被广泛用于在线播放、视频编辑和共享。然而&#xff0c;我们可能会遇到一些非MP4格式的视频文件&#xff0c;这就…

YOLO V5 ROS功能包配置及运行(亲测可用、附ROS功能包源码)

一、 依赖项 1. Ubuntu 18.04 安装opencv 4.2.0/4.6.0链接&#xff1a; 查看当前opencv版本 pkg-config --modversion opencv 安装opencv 4.2.0链接&#xff1a; https://note.youdao.com/s/R6ddu2ou 2. 安装PyTorch 官网链接&#xff1a; https://pytorch.org/get-started…

美创科技获2023年杭州市总部企业认定

日前&#xff0c;2023年度杭州市总部企业认定名单新鲜出炉&#xff0c;美创科技被认定“2023年度杭州市总部企业”。 2023年度杭州市总部企业认定名单(排名不分先后) ‍为进一步扶持、培育和引进总部企业&#xff0c;积极打造全国一流总部经济中心&#xff0c;根据《关于推动杭…

vite性能优化提升开发体验之hmr和预编译

一、vite中的预编译 1. 预编译概念介绍 Vite&#xff0c;一个由Vue.js开发者尤雨溪开发的新型前端构建工具&#xff0c;主要利用了现代浏览器支持的ESM&#xff08;ES模块&#xff09;来进行快速开发。Vite在法语中意为“快”&#xff0c;其中最大的亮点就是其开发服务器启动…

gzyj 安全处理

目录 现场操作指导 解决方案 细节验证 4.1.1.1 4.1.1.2 4.1.1.3 4.1.1.4 4.1.1.5 4.1.2.1 4.1.2.2 4.1.2.3 4.1.2.4 4.1.2.5 4.1.3.1 4.1.3.2 4.1.3.3 4.1.3.4 技术支持可以仅看第一节即可。 现场操作指导 &#xff08;1&#xff09; 升级vms (2) 升级 meshview (3) nm…

从推动到拉动:研发效能提升的第一性原理

导语 |随着企业业务的快速发展&#xff0c;产品迭代速度越来越成为企业发展制胜的关键因素。在业务迅速扩张之下&#xff0c;企业研发团队的规模也在不断壮大。如何有效管理研发团队&#xff0c;又该如何提升企业研发效能&#xff0c;让企业在市场竞争中立于不败之地成为了一堂…

基础写作干货分享:微信公众号8个基本写作步骤

公众号怎么写&#xff1f;不知道如何下手&#xff1f;如何写一篇出众的公众号文章&#xff1f;怎么写公众号内容会出爆文&#xff1f;当我们涉及到基础微信公众号写作时不知道怎么写SEO教程自学网教你如何下手&#xff0c;八个基本写作步骤学会立马搞定困难。 确定目标受众&…

提高软件测试质量 需重点关注5个方面

在软件研发管理过程中&#xff0c;我们往往重视开发的进度&#xff0c;而对软件测试关注度不高&#xff0c;有些项目组甚至没有软件测试人员。这样往往容易导致测试工作出现很多问题&#xff0c;如测试目标不明确&#xff0c;不断修改测试方向&#xff1b;测试结果不理想&#…

Android11.0 导航栏添加图标截屏

需求&#xff1a; 导航栏添加截屏和电源键图标&#xff0c;控制截屏和用于设备重启关机功能。设置中添加延时截屏和控制截屏图标显示开关。 1. 导航栏添加图标 1.1 添加布局文件和图标icon 在layout目录下添加nav_power.xml和screenshot.xml文件 frameworks/base/packages…

远程桌面-出现身份验证错误

1. 打开本地组策略编辑器&#xff0c;可以按winr组合键输入gpedit.msc命令打开。 2. 选择“计算机配置”--“管理模板”--“系统”--“凭据分配”&#xff0c;在“凭据分配”设置中选择“加密数据库修正”。 3. 在“加密数据库修正”对话框中选择“已启动”&#xff0c;保护级别…

Redis解决Session共享问题

文章目录 一、集群Session共享问题二、Redis存储验证码和对象三、解决状态登录刷新问题 一、集群Session共享问题 session共享问题&#xff1a;多台Tomcat并不共享session存储空间&#xff0c;当请求切换到不同tomcat服务器时导致数据丢失的问题 tomcat可以进行多台tomcat进行…

主数据管理:识别主数据

1.识别主数据的两个方法 1.1主数据特征识别法 主要评估企业全部数据中的各类主数据是否符合主数据的每个特征&#xff0c;如发现任何不符合主数据特征的数据&#xff0c;则将其剔除出主数据管理的范畴。 高价值性&#xff1a;主数据具备极高的业务价值。主数据描述企业最核心的…

全面了解JavaScirpt 的垃圾(garbage collection)回收机制

全面了解JavaScirpt 的垃圾(garbage collection)回收机制 一、垃圾回收机制—GC javascript具有自动垃圾回收机制(GC:Garbage Collecation)&#xff0c;也就是说&#xff0c;执行环境会负责管理代码执行过程中使用的内存。 原理&#xff1a;垃圾收集器会定期&#xff08;周期性…

超宽带(UWB)无线通信的技术特点

近年来&#xff0c;超宽带(UWB)无线通信成为短距离、高速无线网络最热门的物理层技术之一。 UWB的产生与发展 超宽带(UWB)有着悠久的发展历史&#xff0c;但在1989年之前&#xff0c;超宽带这一术语并不常用&#xff0c;在信号的带宽和频谱结构方面也没有明确的规定。1989年&am…

Django_haystack全文搜索

haystack是全文搜索的框架&#xff0c;支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎&#xff0c;点击查看官方网站。 whoosh是用纯Python编写的全文搜索引擎&#xff0c;虽然性能比不上sphinx、xapian、Elasticsearc等&#xff0c;但是无二进制包&#xff0c;程序…

C语言为什么是世界上最难的语言?看完你就明白了

在当前的信息技术领域&#xff0c;C语言在许多大型科技公司中扮演着重要角色&#xff0c;如谷歌、苹果和微软。这些公司不仅开发软件&#xff0c;还专门设计硬件&#xff0c;例如AMD、英传达和英特尔等公司。它们都使用C加速库来提高软件性能。 C语言之所以难以掌握&#xff0…

一个简单不报错的summernote 图片上传案例

一个简单不报错的summernote 图片上传案例 一个比较完整的summernote上传图片的案例&#xff0c;没有后台&#xff08;上传图片网上案例太多&#xff09;&#xff0c;只有前端js.修正了网上提供的&#xff0c;但是有bug的代码。 这个例子&#xff0c;js保证不报错。亲测可用 …

windows mysql服务自动启动 错误模块名称:ntdll.dll

在windows11家庭版系统安装mysql后&#xff0c;偶尔有mysql服务自动启动失败的问题&#xff0c;大体的原因就是MySQL的启动服务不能在Windows规定的启动时间内完成准备&#xff0c;于是就会停止其启动程序。windows事件日志如下&#xff1a; 方法一 &#xff1a; 检查确定文件…

计算机网络完结篇(从键入网址到响应页面-->HTTP常见面试题-->TCP三次握手及挥手-->TCP超时重传等特性-->Ip地址)

1. 基础篇 从键入网址到响应页面 1. 解析URL 生成HTTP请求信息 解析URL之后&#xff0c;浏览器确定了Web服务器和文件名&#xff0c;然后就是根据信息来生成HTTP请求信息。 2. 真实地址查询 DNS DNS服务器&#xff1a; 在第一步解析URL获取到对应的HTTP请求信息之后&#xf…