使用 【jacoco】对基于 SpringBoot 和 Dubbo RPC 的项目生成测试覆盖率报告:实践+原理

news2024/11/26 11:35:59

基于 Dubbo RPC 的项目中有一个提供者项目backend、一个消费者项目gateway、以及注册中心nacos。本篇文章记录在windows本地对该框架的测试过程,以及介绍jacoco的基本原理

测试过程

  1. 官网下载安装包解压到本地,https://www.jacoco.org/jacoco/
    在这里插入图片描述

  2. 只需要用到jacoco/lib 文件夹中的 jacocoagent.jar 以及jacococli.jar 这两个文件

  3. 创建一个backend,gateway目录,把他们各自的jar包以及jacoco上面提到的两个jar包复制两份放到这两个文件夹里面
    在这里插入图片描述

  4. 正常启动nacos以及自己的interface项目

  5. 在backend中开一个cmd运行命令:java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=localhost,append=true -jar yuapi-backend-0.0.1-SNAPSHOT.jar 此时backend项目被启动

  6. 在gateway中开一个cmd运行命令:java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6301,address=localhost,append=true -jar yuapi-gateway-0.0.1-SNAPSHOT.jar 此时gateway项目被启动

  7. 注意一个是6300端口,一个是6301端口,需要两个不一样的端口号

  8. 运行前端项目开始测试,或者使用postman,或者直接用Knife4j测试,测试完成后进行下一步

  9. 在backend中再开一个cmd(上一个可别管掉了啊)运行命令:java -jar jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile jacoco-demo.exec 接着下一条命令:java -jar jacococli.jar report jacoco-demo.exec --classfiles D:\星球项目\yuapi-backend\target\classes --sourcefiles D:\星球项目\yuapi-backend\src\main\java --html html-report --xml report.xml --encoding=utf-8 --classfiles是本地项目classes所在的文件夹,–sourcefile是本地项目java所在的文件夹

  10. 此时jacoco\lib\backend\html-report会生成index.html,这就是backend代码覆盖率报告了
    在这里插入图片描述
    绿色表示刚刚的测试覆盖到的代码,随便点进去一个,在登录的imple里面,测试到的正常登录的代码都已经是绿色了
    在这里插入图片描述

  11. 同样的方法来生成gateway的覆盖率报告:在gateway中再开一个cmd(上一个可别管掉了啊)运行命令:java -jar jacococli.jar dump --address 127.0.0.1 --port 6301 --destfile jacoco-demo.exec 接着下一条命令:java -jar jacococli.jar report jacoco-demo.exec --classfiles D:\星球项目\yuapi-gateway\target\classes --sourcefiles D:\星球项目\yuapi-gateway\src\main\java --html html-report --xml report.xml --encoding=utf-8 --classfiles是本地项目classes所在的文件夹,–sourcefile是本地项目java所在的文件夹

  12. 此时jacoco\lib\gateway\html-report会生成index.html,这就是gateway代码覆盖率报告了

在这里插入图片描述
可以看到过滤器里面的正常逻辑都被覆盖到了
在这里插入图片描述

测试原理

以上介绍到了如何生成项目的测试覆盖率报告,接下来介绍一些理论知识

什么是单元测试覆盖度:

  • 单元测试覆盖度(Unit Test Coverage) 是一种衡量在单元测试中覆盖源代码的程度的指标。它表示在单元测试中执行了多少代码行、分支、语句或路径,以及在这些测试中检测到了多少错误。单元测试覆盖度有助于评估测试套件的质量和完整性,但并不总是反映出测试的质量。在 Java 项目中,可以使用 JaCoCo 工具来自动生成单元测试覆盖度报告,并且在报告中查看语句覆盖、分支覆盖、路径覆盖的比例。

jacoco的原理

  • jacoco通过字节码插桩实现代码覆盖率的统计
  • JVM通过 -javaagent参数指定jar文件启动代理程序,代理程序在ClassLoader装载一个class前判断是否修改class文件,并将探针插入class文件
  • 探针就是可以插入现有指令之间的一段其他指令,探针不改变原有方法的行为,只是记录是否已经执行。
  • jacoco插桩并不是每行,探针实现本身需要多个字节码指令,因此这将使类文件的大小增加数倍,并显着降低所检测类的执行速度。

对于这段代码:


public static void example() {
    a();
    if (cond()) {
        b();
    } else {
        c();
    }
    d();

左图是它对应的字节码,右图是插桩后的字节码,可以看到只在分支的出口处进行了插桩
在这里插入图片描述

jacoco命令:

1. java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=localhost,append=true -jar user-center-0.0.1-SNAPSHOT.jar
2. 开始测试

3. java -jar jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile jacoco-demo.exec

4. java -jar jacococli.jar report jacoco-demo.exec --classfiles D:\javacode\user-center\user-center\target\classes --sourcefiles D:\javacode\user-center\user-center\src\main\java --html html-report --xml report.xml --encoding=utf-8
5. 查看覆盖率报告

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

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

相关文章

Bootstrap的标题类(标题样式h1~h6)

Bootstrap 的标题字体大小通常遵循以下样式规则: h1 标题的字体大小为 2.5rem(40像素)。h2 标题的字体大小为 2rem(32像素)。h3 标题的字体大小为 1.75rem(28像素)。h4 标题的字体大小为 1.5re…

《Python魔法大冒险》008 石像怪的挑战:运算符之旅

小鱼和魔法师继续深入魔法森林。不久,他们来到了一个巨大的魔法石圈旁边。石圈中心有一个闪闪发光的魔法水晶,周围则是一些神秘的符号。但令人意外的是,水晶的旁边还有一个巨大的石像怪,它的眼睛散发着红色的光芒,似乎…

CentOS 安装蒲公英

官方教程链接: https://service.oray.com/question/5063.html 教程使用的是2.3版本,官网下载的最新版是2.4,所以命令会有所不同 安装成功后, 任意路径下执行pgyvisitor,调出交互界面pgyvisitor login,登录…

智汇云舟亮相2023服贸会,全面展示视频孪生技术与产品

9月2日-6日,为期5天的2023年中国国际服务贸易交易会(以下简称:服贸会)在北京首钢园举办。在电信、计算机和信息服务专题展馆中,智汇云舟有幸作为北京市专精特新和数字孪生企业优秀代表受邀参展,并携视频孪生…

【C语言】——调试技巧

目录 ​编辑 ①前言 1.什么是Bug? 2.什么是调试? 2.1调试的基本步骤 2.2Release与Debug 3.常用快捷键 4.如何写出好的代码 4.1常见的coding技巧 👉assert() 👉const() const修饰指针: ①前言 调试是每个程序员都…

计及电池储能寿命损耗的微电网经济调度(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型,以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数,创新考虑储能寿命损耗约束、放电深度约束和储能循环次…

光电耦合器市场在预测期内预计将以8.99%的复合年增长率增长!

光耦合器是一种用于传输光信号的电子器件。它具有以下特性: 1. 传输性能:光耦合器能够实现光电转化和信号传输,具有良好的传输性能和抗干扰能力,可以避免外部环境的干扰。 2. 隔离性能:光耦合器能够实现电路之间的隔…

hive 基础知识

一 hive 是什么 在本节前我们需要明确 hive 是什么 上面两个代码块,左边的是 mapreduce 的代码块,右边的是hive 的代码块 很容易看出来,右边的 hive 写起来要更容易更快些,而执行效率,右边的 hive 只比左边多一个翻译…

Databend 开源周报第 109 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 利用 Cluster …

Python3学习第十二章 图形用户界面

#!usr/bin/env python # -*- coding:utf-8 _*- """ author:AIvision file: lecture12.py time: 2023/09/05 """ # 第十二章 图形用户界面 # 12.1 创建 GUI 示例应用程序 # 为演示Tkinter的用法,我将介绍如何创建一个简单的GUI应…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合?ArrayList和LinkedList的区别?HashMap的数据结构?把你了解的所有都讲一讲?数据结构: put流程Hashmap的resize方法的执行过程?get流程JDK8 HashMap为什么引入红黑…

数据库事务概述

1.1 存储引擎支持情况 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。 能看出在 MySQL 中,只有 InnoDB 是支持事务的。 1.2 基本概念 事务: 一组逻辑操作单元,使数据从一种状态…

4.5V 至 23V、TAS2781RYYR音频放大器、QPF4617TR13 Wi-Fi® 6E非线性前端模块和DRV2667RGPR全集成压电式触觉驱动器

一、TAS2781RYYR,具有集成式音频处理和扬声器保护的 25W、4.5V 至 23V 数字输入 D 类放大器 介绍:TAS2781 是一款单声道、数字输入 D 类音频放大器,专为将高峰值功率高效率驱动到扬声器进行了优化。D类放大器在 18V 电源电压下可向 4Ω 负载…

SpringMVC_异常统一处理

3.全局统一异常处理 3.1目前存在问题 模拟后台出现服务器异常 GetMappingpublic ResultResp list(RequestParam(required false) String name){System.out.println(1/0);List<Item> ret service.lists(name);return ResultResp.success(retnull?Code.PAGE_FAIL:Code.…

JVM快速入门篇

一、JVM探究 1.1前言 请你谈谈你对jvm的理解&#xff1f;Java8虚拟机和之前的变化更新&#xff1f;什么是OOM&#xff1f;什么是栈溢出StackOverFlowError&#xff1f;怎么分析&#xff1f;jvm的常见调优参数有哪些&#xff1f;内存快照如何抓取&#xff1f;怎么分析Dump文件&…

RichView Text Box Items 文本框

RichView Text Box Items 文本框 RichView的文本框&#xff08;Text Box&#xff09;&#xff0c;是TRichView文档中的ITEM之一。 通常文本框项目&#xff08;Text Box Item&#xff09;是旁注的简化版本&#xff0c;该项目插入的位置没有可见的文本。 如果rvoShowSpecialChara…

【数学建模竞赛】数据预处理知识总结1——数据清洗

数据预处理是什么 在数学建模赛题中&#xff0c;官方给所有参赛选手的数据可能受到主观或客观条件的影响有一定的问题&#xff0c;如果不进行数据的处理而直接使用的话可能对最终的结果造成一定的影响&#xff0c;因此为了保证数据的真实性和建模结果的可靠性&#xff0c;需要…

中频炉冷循环监测终端,智能化管理冷却系统的新利器!

在现代工业生产中&#xff0c;中频炉是一种广泛应用于金属加工和熔化的设备。 一、中频炉的降温剂 中频炉的使用中&#xff0c;企业往往关注的是中频炉晶闸管、电抗器、电容器、汇流排以及中频炉线圈&#xff0c;忽观中频炉的冷却水。中频炉的冷却水在中频炉、中频加热炉使用…

ICC2:partial blockage array脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 用法是先在玩加partial blockage array的地方create一个blockage,然后选中source这个脚本。需要定义三个值,分别是blockage的百分比,还有每个组成阵列的每个blockage宽和高。 addHBlkForSpecAre…

【以太网硬件二十一】USXGMII是什么?-Part2

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 目录 PCS功能细节 XGMII到USXGMII的映射 带内配置和状态信号 自协商相关 电气特…