首页 > 编程语言 >Java代码覆盖率super-jacoco

Java代码覆盖率super-jacoco

时间:2024-12-23 22:53:26浏览次数:3  
标签:Java 项目 被测 jar 覆盖率 super jacoco

开源项目地址

https://gitee.com/didiopensource/super-jacoco

项目流程

image

项目架构

image

部署步骤

注意:一定要用Linux服务器部署,不要用Windows

准备Linux服务器环境

  1. 安装好JDK1.8
  2. 安装好git
  3. 安装和配置好Maven3.6,或3.6以下
  4. 安装MySQL数据库(尽量不用8版本,就用5.7、5.8版本)

拉取super-jacoco开源项目

git clone https://gitee.com/didiopensource/super-jacoco.git

初始化MySQL

  1. 建立数据库:super-jacoco
  2. 建立数据表:执行 sql/db.sql 文件
    image
  3. 修改 application.properties 文件中的数据库配置
# 以下信息需要手动配置
spring.datasource.url=jdbc:mysql://IP:端口/super-jacoco?useUnicode=true&characterEncoding=utf8&verifyServerCertificate=false&useSSL=false
spring.datasource.username=super-jacoco的数据库账号
spring.datasource.password=super-jacoco的数据库密码
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#git username & password
gitlab.username=被测项目的的git账号
gitlab.password=被测项目的的git密码

编译super-jacoco开源项目

生成super-jacoco.jar

mvn package -Dmaven.test.skip=true

部署super-jacoco

  1. 进入super-jacoco项目,把 cli.jar 复制到用户主页
cd super-jacoco/jacoco
cp org.jacoco.cli-1.0.2-SNAPSHOT-nodeps.jar ~

image
image

  1. 把 runtime.jar 传送到被测项目服务器的 jar 包位置
scp org.jacoco.agent-0.8.5-runtime.jar root@被测项目服务器IP:/root/www/xxx/back/

image
image

  1. 启动super-jacoco
nohup java -jar super-jacoco.jar &

启动后的默认端口号为:8899

  1. super-jacoco服务器的防火墙规则自己设置

被测项目用 super-jacoco-runtime.jar 来启动

java -javaagent:/root/www/xxx/back/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,port=18513,address=*,append=true,destfile=/jacoco.exec -jar /root/www/xxx/back/springboot-0.0.1-SNAPSHOT.jar

附上 jacoco 启动参数

-executioindataonly: 仅生成执行数据,不生成报告。

-agentlib: 指定JaCoCo代理库,用于Java程序。

-agentpath: 指定JaCoCo代理库,用于C / C ++程序。

=destfile: 指定覆盖已有的执行数据文件的路径。

=append: 指定追加到现有执行数据文件的路径。

=includes: 指定哪些类的方法应包含在覆盖率分析中,使用逗号分隔。

=excludes: 指定哪些类的方法应排除在覆盖率分析之外,使用逗号分隔。

=classpath: 指定JaCoCo用于查找类文件的类路径。

=classpathfile: 指定包含类路径条目的文件。

=jmxfile: 指定JMX文件的路径,用于远程应用程序。

=output: 指定报告生成的目录。

=report-aggregate: 指定聚合报告的路径。

=dump-on-exit: 在JVM退出时转储执行数据。

使用覆盖率检测

启动覆盖率检测

  1. 准备一个不会重复的,没有使用过的 UUID
  2. 被测项目地址
  3. 被测项目上一次代码的版本ID
  4. 被测项目目前代码的版本ID
  5. 被测项目的地址
  6. 被测项目的 super-jacoco-runtime.jar 的端口(按照上面的启动参数就是:18513)
    image

去被测项目进行测试,测试一段时间后,造成足够的代码覆盖

获取覆盖率收集

把启动覆盖率时的 UUID 拿来获取覆盖率

失败的场景

  1. 失败了也有日志文件
  2. 失败了的日志文件内容可能是空的,这种情况一般就是:下载项目代码后,编译失败了
    image

成功的场景

image

查看覆盖率报告

整个Java项目

image

Java实现类列表

image

Java实现类

image
image

覆盖分类

image

标签:Java,项目,被测,jar,覆盖率,super,jacoco
From: https://www.cnblogs.com/mua9102/p/18625047

相关文章

  • Java-10
    底部含网盘分享资料面向过程(ProceduralProgramming)确实侧重于通过一系列函数或过程来组织代码,并强调设计算法和步骤来解决问题。面向对象(Object-OrientedProgramming,OOP)的核心思想是将数据(属性)和行为(方法)封装在一起,形成对象。类的构建是面向对象编程中的一个重要概念,但......
  • 11. Java的四种引用,强弱软虚
    强引用强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:Stringstr=newString("str");软引用软引用在程序内存不足时,会被回收,使用方式:点击查看代码//注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,//这里的软引用指的......
  • Memory Leak Detector:Java中内存泄漏的识别与避免_2024-07-23_09-54-10.Tex
    MemoryLeakDetector:Java中内存泄漏的识别与避免Java内存管理基础Java内存模型简介Java内存模型(JavaMemoryModel,JMM)是Java虚拟机(JVM)规范的一部分,它描述了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下如何保证内存的可见性、有序性和原子性。JMM的主要......
  • 高级java每日一道面试题-2024年12月23日-并发篇-CAS有什么缺点吗 ?
    如果有遗漏,评论区告诉我进行补充面试官:CAS有什么缺点吗?我回答:CAS(Compare-And-Swap,比较并交换)是一种无锁算法的核心操作,广泛用于实现并发控制。它通过硬件指令直接在内存中进行原子操作,避免了传统锁机制的上下文切换开销。然而,CAS也并非完美,它具有一些缺点和局限性......
  • 高级java每日一道面试题-2024年12月23日-并发篇-多线程有什么用 ?
    如果有遗漏,评论区告诉我进行补充面试官:多线程有什么用?我回答:多线程编程是Java中非常重要的一个概念,它允许程序在同一时间执行多个任务。在现代计算机系统中,多线程技术的应用可以极大地提升应用程序的性能、响应速度以及资源利用率。以下是关于多线程用途的详细解......
  • 学霸带你游戏化解构 Java 面向对象编程核心
    面向对象编程OOP使得代码结构清晰,开发者能够通过对象化的方式组织代码,使得代码逻辑更易理解和扩展。游戏中的每个角色、物品、事件、状态等都可以通过类和对象来管理,减少了代码的重复性,并提高了代码的可维护性。灵活性与扩展性OOP提供了高度的灵活性和扩展性,使得游戏开发......
  • JavaDay1
    JavaDay1注释单行注释://多行注释:/*1231231231123123123123123*/文档注释:/***///注释可以更好地帮我们理解代码/*注释同时也是排除错误的一种手段=*/关键字被Java语言赋予特殊含义的单词一般都是由小写字母组成,IDEA中对关键字有特殊的颜色标识。标......
  • 这份4577页的Java面试PDF,让我成功斩获阿里、字节等大厂offer
      我为大家准备了一份超级全面的Java学习面试笔记,这份电子版笔记涵盖了诸多后端技术栈的面试题和答案,相信可以帮助大家在最短的时间内复习Java后端的大多数技术点和面试题,从而拿到自己心仪的offer。共4577页。整体还是比较清爽的,大家拿到后具体看就知道了。限于文章篇幅......
  • JavaScript从基础到进阶的155个问题
    文章目录1.输出是什么?2.输出是什么?3.输出是什么?4.输出是什么?5.哪一个是正确的?6.输出是什么?7.输出是什么?8.输出是什么?9.输出是什么?10.当我们这么做时,会发生什么?11.输出是什么?12.输出是什么?13.事件传播的三个阶段是什么?14.所有对象都有原型。15.输出是什么?1......
  • JAVA面向对象(一)类的定义
    类是面向对象编程的核心概念之一,它就像是一个模具,定义了一类事物所具有的共同特征和行为。在Java中,我们使用class关键字来定义一个类。例如,让我们创建一个简单的Person类:javapublicclassPerson{//成员变量,描述人的属性privateStringname;privateintage;privateSt......