Java代码覆盖率super-jacoco
开源项目地址
https://gitee.com/didiopensource/super-jacoco
项目流程

项目架构

部署步骤
注意:一定要用Linux服务器部署,不要用Windows
准备Linux服务器环境
- 安装好JDK1.8
- 安装好git
- 安装和配置好Maven3.6,或3.6以下
- 安装MySQL数据库(尽量不用8版本,就用5.7、5.8版本)
拉取super-jacoco开源项目
git clone https://gitee.com/didiopensource/super-jacoco.git
初始化MySQL
- 建立数据库:super-jacoco
- 建立数据表:执行 sql/db.sql 文件

- 修改 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
- 进入super-jacoco项目,把 cli.jar 复制到用户主页
cd super-jacoco/jacoco
cp org.jacoco.cli-1.0.2-SNAPSHOT-nodeps.jar ~


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


- 启动super-jacoco
nohup java -jar super-jacoco.jar &
启动后的默认端口号为:8899
- 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退出时转储执行数据。
使用覆盖率检测
启动覆盖率检测
- 准备一个不会重复的,没有使用过的 UUID
- 被测项目地址
- 被测项目上一次代码的版本ID
- 被测项目目前代码的版本ID
- 被测项目的地址
- 被测项目的 super-jacoco-runtime.jar 的端口(按照上面的启动参数就是:18513)

去被测项目进行测试,测试一段时间后,造成足够的代码覆盖
获取覆盖率收集
把启动覆盖率时的 UUID 拿来获取覆盖率
失败的场景
- 失败了也有日志文件
- 失败了的日志文件内容可能是空的,这种情况一般就是:下载项目代码后,编译失败了

成功的场景

查看覆盖率报告
整个Java项目

Java实现类列表

Java实现类


覆盖分类

Java代码覆盖率super-jacoco的更多相关文章
- JAVA代码覆盖率工具JaCoCo-原理篇
JAVA代码覆盖率工具JaCoCo-原理篇 1.2 JAVA覆盖率工具介绍 1.3.3 Apache Maven方式 1.3.4 Eclipse EclDmma Plugin方式 JAVA代码覆盖率工 ...
- JAVA面向对象-----super关键字
JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...
- Java 泛型 <? super T> 中 super 怎么 理解?与 < ? extends T>有何不同?
Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型数组.在泛型的使用中,还有个重要的 ...
- Python面试题之Python和Java中Super方法的区别
python 的 super 是一个函数,需要两个参数,第一个参数是类,第二个参数是实例,返回值是一个类对象. 其意义是:站在参数2这个实例的角度看去, 参数1这个类的‘父亲’是谁,把‘父亲’返回. ...
- java中super()和this()、super和this的区别
1.super()和this()区别: super():调用父类无形参的构造方法: super(形参):调用父类中某个带形参的构造方法: this(形参):调用本类中另一种形式的构造方法: 注意:放在 ...
- Java的super、this、重写
Java的super.this.重写 一.super的注意点: super调用父类的构造方法,必须在构造方法的第一个: super只能出现在子类的构造方法或者方法中: this和super不能同时调用 ...
- 单元测试-代码覆盖率工具 -- JaCoCo
最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者片面追求单元 ...
- java中super的两种用法
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...
- Java中super的几种用法并与this的区别
1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base"); ...
- 关于java中super()和this()
在java中this表示当前类中的对象,super则表示父类中的对象.比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个 ...
随机推荐
- USB协议详解第11讲(USB描述符-总结)
描述符回顾总结 1.其实所有的描述符都是USB设备用来描述自己属性及用途的,所以必须在设备端实现对应的描述符,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备.设备需要的总 ...
- 2. 王道OS-操作系统的特征,发展和分类
1. 并发:宏观上是同时发生的,微观是交替发生的 :ps:并行:宏观和微观都是同时发生的 : ps:单核CPU同一时刻只能执行一个程序,各个程序只能并发的执行 : 多核CPU同一时刻可以同时执行多个程 ...
- 使用 ref 获取另外组件的数据
- Linux 系统常见 的命令
uname -a 查看linux 的版本信息 : pwd :打印当前的工作目录 ,print work directory: cd 改变目录 ,change directory : cd . 当前目 ...
- 洛谷P1596水坑计数
[USACO10OCT] Lake Counting S 题目链接 题面翻译 由于近期的降雨,雨水汇集在农民约翰的田地不同的地方.我们用一个 \(N\times M(1\leq N\leq 100, ...
- Fluent Operator v2.0 发布:Fluent Bit 新的部署方式——Fluent Bit Collector
2019 年 1 月 21 日,KubeSphere 社区为了满足以云原生的方式管理 Fluent Bit 的需求开发了 FluentBit Operator.此后产品不断迭代,在 2021 年 8 ...
- 在 KubeSphere 中使用 DevOps 部署 Java 微服务配置监控预警
作者:酱油瓶,携程后端技术专家, KubeSphere 社区用户 开发 Java 微服务并引入监控组件 我们基于 Spring Cloud +Nacos 开发 Java 微服务,Java 服务开发不做 ...
- thinkphp5 模型批量增加数据小记
楼主最近在学习thinkphp5,真的没应广大使用教程所说:你最好就是没学过thinkphp3.2.要不然苦恼重重. 因为想将一些功能实现一次,故自己写了一个文件上传类. 可以实现单文件,多文件上传( ...
- 12C RAC 故障分析 - ORA-17503: ksfdopn:2 Failed to open file +DATA/EIC1/PASSWORD/pwdeic1.256.957086685
一.故障描述 Oracle 12C PDBS(PDB NAME = WRYPC) 在note1节点上是MOUNTED状态,在note2节点上是READ WRITE状态.note1节点上启动该PDB长时 ...
- Java高并发Lock接口讲解,精准通知线程间的执行顺序
题目:两个线程操作一个变量,实现两个线程对同一个资源一个进行加1操作,另外一个进行减1操作,且需要交替实现,变量的初始值为0.即两个线程对同一个资源进行加一减一交替操作. Lock接口与Conditi ...