开源项目地址

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

项目流程

项目架构

部署步骤

注意:一定要用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 文件

  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 ~



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



  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)

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

获取覆盖率收集

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

失败的场景

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

成功的场景

查看覆盖率报告

整个Java项目

Java实现类列表

Java实现类



覆盖分类

Java代码覆盖率super-jacoco的更多相关文章

  1. JAVA代码覆盖率工具JaCoCo-原理篇

    JAVA代码覆盖率工具JaCoCo-原理篇 1.2 JAVA覆盖率工具介绍 1.3.3 Apache Maven方式 1.3.4 Eclipse EclDmma Plugin方式 JAVA代码覆盖率工 ...

  2. JAVA面向对象-----super关键字

    JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...

  3. Java 泛型 <? super T> 中 super 怎么 理解?与 < ? extends T>有何不同?

    Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型数组.在泛型的使用中,还有个重要的 ...

  4. Python面试题之Python和Java中Super方法的区别

    python 的 super 是一个函数,需要两个参数,第一个参数是类,第二个参数是实例,返回值是一个类对象. 其意义是:站在参数2这个实例的角度看去, 参数1这个类的‘父亲’是谁,把‘父亲’返回. ...

  5. java中super()和this()、super和this的区别

    1.super()和this()区别: super():调用父类无形参的构造方法: super(形参):调用父类中某个带形参的构造方法: this(形参):调用本类中另一种形式的构造方法: 注意:放在 ...

  6. Java的super、this、重写

    Java的super.this.重写 一.super的注意点: super调用父类的构造方法,必须在构造方法的第一个: super只能出现在子类的构造方法或者方法中: this和super不能同时调用 ...

  7. 单元测试-代码覆盖率工具 -- JaCoCo

    最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者片面追求单元 ...

  8. java中super的两种用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  9. Java中super的几种用法并与this的区别

    1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base"); ...

  10. 关于java中super()和this()

    在java中this表示当前类中的对象,super则表示父类中的对象.比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个 ...

随机推荐

  1. duxui:基于Taro,兼容React Native、小程序、H5的多端UI库

    duxui是duxapp官方开发的一款兼容多端的UI组件库,兼容小程序.H5.React Native,库中提供了60+的组件,覆盖大部分使用场景 它能帮助你通过统一的组件样式,快速完成多端应用的开发 ...

  2. iOS动画之CABasicAnimation的使用方法(移动,旋转,缩放)

    设定动画CABasicAnimation的属性和说明 属性 说明  duration 动画的时间 repeatCount 重复的次数.不停重复设置为 HUGE_VALF repeatDuration ...

  3. 03-jsx中使用js表达式

    // 在jsx中使用 js 表达式 /// 通过一个 {} 展示变量即可 vue 中使用 {{}} 展示js表达式 // 什么是js表达式 有结果的 import reactDom from &quo ...

  4. 云原生爱好者周刊:使用 AWS 开源的 FireCracker 来创建和管理 K8s 集群

    开源项目推荐 KubeFire 这个项目比较有创意,它使用 AWS 开源的轻量级虚拟化项目 FireCracker 来创建和管理 Kubernetes 集群,摒弃了传统的 qcow2 和 vhd 等虚 ...

  5. RPC框架JMH测试-chatgpt自动生成

    本文将介绍如何使用Java的JMH测试框架来测试RPC框架的性能.我们选择了Apache Dubbo作为目标RPC框架,Dubbo是一种高效的远程调用框架,它支持多种传输协议和序列化协议,并且具有很好 ...

  6. appium环境搭建及命令行启动sdk模拟器-附踩坑以及解决过程

    安装教程这里就不阐述了,网上一大堆教程,下载完成后安装然后配置对应的环境变量即可 android sdk及java home配置: path配置: %ANDROID_HOME%\platform-to ...

  7. 字符串和json相互转换

    字符串转成json格式 JSON.parse(string) json格式转成字符串 JSON.stringify(obj) 在vue中还可以使用qs插件使用this.$qs.stringify(ob ...

  8. element-ui带输入建议的input框踩坑

    踩坑问题描述: 问题一: 获取到后端返回的数组,并将数组传入作为 results 传入 callback 后,焦点放在 输入框 上的时候,并未出现任何内容,只出现了一个不完整的空白框. 问题解决方案: ...

  9. 关于 IntelliJ IDEA 2024 安装使用 (附加激活码、补丁,亲测有效)

    第一步:下载 IDEA 安装包 访问 IDEA 官网,下载 IDEA 2024.1.4 版本的安装包,下载链接如下 : idea官方链接 也可以在这里点击下载idea https://pan.quar ...

  10. Spark Web UI 监控详解

    Spark集群环境配置 我们有2个节点,每个节点是一个worker,每个worker上启动一个Executor,其中Driver也跑在master上.每个Executor可使用的核数为2,可用的内存为 ...