测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计

宝蟾
• 阅读 1515

今天我们给大家分享,如何使用Jacoco集合Git来做增量代码的覆盖率测试。实现的基本原理是:

  1. 使用Git的diff指令,计算出两个版本的差异;
  2. 改造Jacoco源代码,只针对增量代码生成报告。

基本的功能滴滴的super-jacoco项目已经实现,并把它分装成了一个服务。大家可以基于这个开源项目进行二次开发,本文我们给大家介绍它的工作方式。

  1. 官网下载、安装Oracle Java SDK。执行java -version,可输出版本信息表示安装成功。笔者这里安装的是JDK 11;
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  2. 这里下载解压Apache Maven构建工具3.9.1版,并将其加入系统PATH环境变量。成功后执行mvn -v,可正确返回版本信息;
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  3. 安装、启动MySQL数据库,可以从这里下载免费的社区版;
  4. 执行Git克隆命令,获取项目源代码;

    git clone https://github.com/didi/super-jacoco.git
  5. 打开项目src/main/resources目录下的application.properties文件,修改MySQL数据库连接地址、账号和密码;

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/super-jacoco?useUnicode=true&characterEncoding=utf8
    spring.datasource.username=user
    spring.datasource.password=P2ssw0rd
  6. 执行maven命令,编译jar包;
    mvn package -Dmaven.test.skip=true
  7. 启动编译好的服务jar包;
    java -jar super-jacoco.jar
  8. 如果是使用的IDE,可通过右键CodeCovApplication.java文件启动服务;
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  9. 服务启动成功后,会执行一个定时任务来扫描数据库,以查找是否有覆盖率统计的任务需要执行,日志类似下图;
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  10. 使用PostMan或命令行工具,发送“新建覆盖率统计任务”的请求。请确保参数uuid唯一,成功后返回code 200;
地址:http://127.0.0.1:8899/cov/triggerUnitCover
方法:POST
数据:
    {
        "uuid": "uuid001",
        "type": 1,
        "gitUrl": "https://gitee.com/ngtesting/ci_test_jcoco.git",
        "subModule": "",
        "baseVersion": "v1",
        "nowVersion": "v2",
        "envType": "-Ptest"
    }

测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计

  1. 稍等片刻,会发现控制台中有发现并执行任务的日志;
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  2. 任务执行完成后,发送“获取覆盖率报告”的请求到服务;
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  3. 在浏览器中打开返回的报告地址,得到以下页面。
    测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计
  4. 此处为撰写本文时,可成功运行的被测项目。具体介绍可参考上一篇文章
  5. 有关super-jacoco中增量覆盖扫描的实现机制,可以参考这篇博客阅读相应章节代码。

专题目录

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
前端尾随者 前端尾随者
3年前
sourceTree 添加 ssh key 方法
1.使用git客户的生成公私钥:id\rsa、id\rsa.pub1.1设置Git的username和email:$gitconfigglobaluser.name"xxx"$gitconfig\globaluser.email"xxx.mail@xxx.com"1.2.生成SSH密钥过程:1.2.1.检查是不是已经存在密钥(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
jacoco+maven 初次使用覆盖率工具
工作要搞覆盖率测试,看到公司平台上用的jacoco,就找了网上的demo自己跑了一下。一.覆盖率测试是干什么的http://www.openopen.com/lib/view/open1472174544246.html  1.用来看看类/方法/判定中的语句的使用情况,防止废弃无用的代码和错误代码出现。  2.用来和需求覆盖做一个对照,做
Wesley13 Wesley13
3年前
Jacoco在eclipse上的集成使用
随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步。相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式。JaCoCo(JavaCodeCoverage)就是一种分析单元测试覆盖率的工具,使
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
引入JaCoCo导致的类型转换问题分析
一、问题描述JaCoCo是一款被广泛应用于公司内部的开源覆盖率工具,将其引用至测试环境后,机器启动正常,但在操作下单时出现异常,阻塞下单流程。去除JaCoCo配置、重新编译和部署后下单功能恢复正常。堆栈信息显示,问题源于系统对请求字段进行加密时出现异常,因
京东云开发者 京东云开发者
5个月前
引入JaCoCo导致的类型转换问题分析
作者:京东物流韩嘉星一、问题描述JaCoCo是一款被广泛应用于公司内部的开源覆盖率工具,将其引用至测试环境后,机器启动正常,但在操作下单时出现异常,阻塞下单流程。去除JaCoCo配置、重新编译和部署后下单功能恢复正常。堆栈信息显示,问题源于系统对请求字段进