SpringBoot接入JaCoCo实践代码覆盖率

news2024/12/23 9:16:30

这里写自定义目录标题

  • 参考
  • 概述
  • 接入
    • 静态接入和动态接入

参考

SpringBoot接入JaCoCo实践

概述

JaCoCo是面向Java的开源代码覆盖率工具,JaCoCo以Java代理模式运行,它负责在运行测试时检测字节码。 JaCoCo会深入研究每个指令,并显示每个测试过程中要执行的行。 为了收集覆盖率数据,JaCoCo使用ASM即时进行代码检测,并在此过程中从JVM Tool Interface接收事件,最终生成代码覆盖率报告。

接入

静态接入和动态接入

SpingBoot可以通过2种方式接入JaCoCo:Maven和Agent。Maven方式是静态接入,在编译时计算代码覆盖率。Agent方式是动态接入,服务启起来以后,能实时根据代码命中情况计算代码覆盖率。

Maven
pom.xml添加依赖:

<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.7</version>
</dependency>

添加配置:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${project.parent.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.7</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

点击maven的install:
在这里插入图片描述

target/site/jacoco目录下就生成了覆盖率报告:
在这里插入图片描述

Agent
下载jacoco文件后解压,提取2个文件:
在这里插入图片描述

使用命令启动SpringBoot,启动参数添加-javaagent:

java -javaagent:jacoco/jacocoagent.jar -jar target/mini-0.0.1-SNAPSHOT.jar

此时会生成1个jacoco.exec文件,这个文件就是覆盖率数据文件,采用以下命令根据数据文件生成HTML报告:

java -jar jacoco/jacococli.jar report jacoco.exec --classfiles ./target/classes/ --sourcefiles ./src/main/java/ --html ./report

接下来就来验证动态特性。把report目录和jacoco.exec都删了,因为jacoco每次部署只能分析一次。把服务停掉后,重新启动。这一次不直接分析,而是先用postman调一下接口:
在这里插入图片描述

然后再分析一把:
在这里插入图片描述

可以看到覆盖率变成100%,说明postman调接口这个操作,命中了代码,被jacoco统计到了。javaagent相当于是个代理,在服务运行期间,所有调用都会经过javagent,这样就能实时统计代码覆盖率。换句话说,只要服务运行起来以后,只要你能命中代码,无论是跑单元测试还是调接口,或者是手工测试,都能生成代码覆盖率数据。

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

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

相关文章

【uniapp】关于webview组件无法自定义宽高问题解决

最近做的项目中&#xff0c;在h5环境运行上遇到关于webview组件无法自定义宽高问题&#xff0c;要怎么弄才好呢&#xff0c;其实没那么难&#xff0c;很简单的&#xff0c;现在将解决方法讲一下。 使用例子 默认是全屏加载的&#xff0c;现在需要内嵌一个webview组件放在限定…

10款最佳在线地图软件介绍

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 在线地图有无数的用途&…

3D模型轻量化处理教程【Blender】

在本文中&#xff0c;我们将介绍三种在 Blender 中网格轻量化的方法&#xff0c;并以一些提示和技巧作为结尾&#xff0c;供你在处理网格和对象时使用。 1、网格轻量化概述 无论你是想创建简单还是复杂的 3D 设计&#xff0c;Blender 都是拟工具箱中的一个很棒的程序。 它是…

Nessus 高级扫描

系列文章 Nessus介绍与安装 Nessus Host Discovery Nessus高级扫描 1.启动nessus cd nessus sh qd_nessus.sh2.进入nessus网站&#xff0c;点击【new Scan】 https://kaliip:8834/3.选择【adVanced Scan】 4.输入Name【高级扫描】&#xff0c;Description【高级扫描】&…

深度学习基础——填充(padding)与步幅(stride)

填充&#xff08;padding&#xff09; 在上图中&#xff0c;输入图片尺寸为333\times333&#xff0c;输出图片尺寸为222\times222&#xff0c;经过一次卷积之后&#xff0c;图片尺寸为222\times222&#xff0c;经过一次卷积之后&#xff0c;图片尺寸变小。卷积输出特征图的尺寸…

SQLServer 2016 备份

1、下载并安装SQLServer2016服务器端&#xff0c; 下载地址&#xff1a;https://www.microsoft.com/zh-cn/evalcenter/download-sql-server-2016 2、下载并安装SSMS管理工具&#xff0c; 下载地址&#xff1a;https://download.microsoft.com/download/8/a/8/8a8073d2-2e00-…

渗透学习-CTF篇-web-BUUCTF

文章目录前言一、[WesternCTF2018]shrine前言 随着学习的不断深入&#xff0c;为了防止自己忘记之前所学的内容&#xff0c;于是我决定再不断的向下学习的同时做一些ctf的题来唤醒自己的记忆&#xff01;&#xff01; 一、[WesternCTF2018]shrine 这一关主要是SSTI的内容&…

Docker安装部署sql审计平台Archery1.9.1版本

安装dockercurl -fsSL https://get.docker.com -o get-docker.sh | sudo sh安装docker composesudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod x…

chrono_Time_point (三)

chrono_time_point (三&#xff09; 文章目录chrono_time_point (三&#xff09;模板参数源码解析构造函数&#xff1a;成员函数time_since_epoch()例子timepoint提供的操作timepoint的溢出C和POSIX提供的Date/Time函数演示案例&#xff08;timepoint和日历时间的转换&#xff…

SpringMVC | 使用Xml或注解进行开发

一、Spring MVC简介Spring MVC&#xff08;全称 Spring Web MVC&#xff09;是 Spring 框架提供的一款基于 MVC 模式的轻量级 Web 开发框架。MVC架构&#xff08;1&#xff09;示意图&#xff08;2&#xff09;各层职责Model&#xff1a;负责对请求进行处理&#xff0c;并将结果…

计算机SCI论文怎么发表?有哪些建议? - 易智编译EaseEditing

一般论文的水平是这样&#xff1a;普刊&#xff1c;核心&#xff1c;SCI。 不同的专业都可以发SCI&#xff0c;只是影响因子高低不用而已&#xff0c;有的领域分值高&#xff0c;有的偏低。 就是说不同领域SCI期刊&#xff0c;影响因子一样&#xff0c;但水平是一样的。 怎样…

三、元素操作

1、切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改&#xff0c;与Python中list的切片操作一样 ndarray数组可以基于0-n的下标进行索引&#xff0c;切片对象可以通过内置的slice函数&#xff0c;并设置start&#xff0c;stop及step参数进行&#xff0c;从原数组…

【Java寒假打卡】Java基础-反射

【Java寒假打卡】Java基础-反射概述获取Class对象的三种方式反射-获取Constructor对象利用Constructor数组创建对象获取Field对象反射获取成员变量并且使用反射获取成员对象反射获取成员对象并运行概述 Java反射机制&#xff1a;是在运行状态中&#xff0c;对于任意一个类&…

使用VS code快速搭建一个Golang项目

文章目录前言安装go语言环境了解Go开发相关的环境变量熟悉Go Module创建一个go项目项目迁移前言 VC code是一款巨好用的编辑器&#xff0c;使用vs code开发项目需要进行一些配置。项目中需要用到很多的包&#xff0c;无论是自己建的还是第三方的。由于go语言的生态环境没有jav…

【路由器连接天翼网关2.0问题解决思路】

文章目录一. 天翼网关如何切换新账号&#xff1f;背景操作流程1. 拔掉光纤2. 重置光猫3. 管理员页面进行认证4. 重新插上光纤&#xff0c;管理员页面会显示认证成功二、路由器连接光猫无网如何解决&#xff1f;背景操作流程1. 登陆普通管理员2. 获取超级管理员3. 登陆超级管理页…

SOLIDWORKS Electrical 2023新功能

电气工程师在完成电气原理图设计的同时&#xff0c;还需要频繁地修改、导出各报表&#xff0c;使得大量时间浪费在重复性的手动工作上。即便如此&#xff0c;也无法保证百分百准确无误&#xff1b;电气设计部门和机械设计部门虽然在设计同一产品&#xff0c;但不同部门之间互相…

云原生|kubernetes|2022年底cks真题解析(11-16)

前言&#xff1a; 接上一篇文章&#xff1a;云原生|kubernetes|2022年底cks真题解析&#xff08;1-10&#xff09;_晚风_END的博客-CSDN博客 2022年底的csk真题第二部分 11题到16题 十一&#xff0c; Trivy 扫描镜像安全漏洞 题目&#xff1a; Task 使用 Trivy 开源容器扫…

神奇的HTML系列专栏总目录

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2023/01/16&#x1f4c5; 最近更新时间&#xff1a;2023/01/16&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…

《Linux性能优化实战》学习笔记 Day02

02 | 内存池&#xff1a;如何提升内存分配的效率&#xff1f; 原文摘抄 在 Linux 系统中&#xff0c;用 Xmx 设置 JVM 的最大堆内存为 8GB&#xff0c;但在近百个并发线程下&#xff0c;观察到 Java 进程占用了 14GB 的内存。为什么会这样呢&#xff1f; 绝大部分高级语言都…

【图论】「极简复习版」最短路径 Java/C++ 实现

文章目录Dijkstra —— 单源最短路讲解图解Java朴素使用堆优化C朴素使用堆优化Floyd —— 多源最短路讲解JavaCDijkstra —— 单源最短路 讲解 时间复杂度 朴素 Dijkstra&#xff1a;O(n2)O(n^2)O(n2) &#xff0c;nnn 是顶点数。堆优化 Dijkstra&#xff1a;O(mlogn)O(m\ l…