专栏首页软件测试那些事super-jacoco单元测试覆盖率度量实践-1

super-jacoco单元测试覆盖率度量实践-1

为什么会关注Super-Jacoco ?

代码覆盖率,尤其是增量代码覆盖率,是质量门禁的重要指标之一。由于一些不可名状的原因,团队原先提供质量门禁服务的工具暂时停服了,因此需要另外寻找一个工具来代替提供此项服务。于是,笔者就Super-Jacoco做了一个简单的POC。

(增量)单元测试覆盖率统计实现过程分析

通常在网络上可见的介绍Super-Jacoco的文章主要是围绕系统测试的覆盖率统计来展开的,估计这也是这个工具的主要用户群体。而这个工具的手册中关于如何实现单元测试的介绍也非常简单,就是调用Super-Jacoco的两个接口

1、启动覆盖率收集
 URL:/cov/triggerUnitCover
 调用方法:POST
 参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","envType":"-Ptest"}
 返回:{"code":200,"data":true,"msg":"msg"}
 备注:
2、获取覆盖率结果
 URL:/cov/getUnitCoverResult
 调用方法:GET
 参数:uuid(String)
 返回:{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
 备注:
第一个接口是启动收集,第二个接口是查询获得覆盖率结果。

看上去非常简单易用是不是?具体又是如何实现的呢?

笔者下载了Super-Jacoco的源码简单地进行了一下阅读分析,并尝试进行一下解读。

处理过程:

Super-Jacoco使用了很多的状态码来标志单测覆盖率分析任务的进展。除了阅读源码之外,可以通过状态码来了解整个任务的执行过程,见下图。

在客户端通过/cov/triggerUnitCover接口提交了单测覆盖率统计请求后,Super-Jacoco将新生成一个分析任务的记录存入数据库,并将其状态置为0-初始数据。

此后,一个定时触发的任务(10秒)将负责执行此单元测试任务,从状态1到9, 并在整体完成后将任务的状态置为200。

这样,客户端就可以通过/cov/getUnitCoverResult来根据uuid获取该次申请的执行结果了,也就是类似如下的内容

package com.xiaoju.basetech.entity;

import lombok.Data;

/**
 * @description:
 * @author: gaoweiwei_v
 * @time: 2019/9/23 10:16 AM
 */
@Data
public class CoverResult {

    /**
     * -1、失败;1、成功;0、进行中
     */
    private int coverStatus;
    public String reportUrl;
    private double lineCoverage;
    private double branchCoverage;
    private String errMsg;
    private String logFile;

}
包括了代码行覆盖率和分支覆盖率这两个关键数据,以及覆盖率报告的下载链接和本次任务执行的日志文件的下载链接。

在从1到9的步骤中,Super-Jacoco使用到了哪些技术呢?从步骤上分析,可以看到需要完成以下的工作,

1、代码库下载、代码增量分析:这部分是关于Git操作的

2、添加模块:这是对pom.xml文件的操作,类似的操作文件还包括了对jacoco生成的覆盖率报告的解析。

3、单元测试执行:这是关于命令行执行的,需要执行类似”mvn clean test”的命令

将在下一篇中结合源码进行分析

文章分享自微信公众号:
软件测试那些事

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:风月同天测试人
原始发表时间:2022-01-29
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • super-jacoco源码分析与二次开发

    在第一篇文章super-jacoco单元测试覆盖率度量实践-1中,笔者介绍了Super-Jacoco的单元测试覆盖率统计只要向Super-Jacoco服务发送如...

    Antony
  • 基于Super-Jacoco的精准测试实践之路

    借助技术手段、通过辅助算法对软件测试过程进行可视化、分析及优化的过程,使得测试过程更加可视化、智能、可信和精准。

    咻咻ing
  • 精准测试系列《一》

    在实际的软件生产交付过程中,我们通过单元测试、接口测试、功能测试、自动化测试等手段来保障软件质量;但是无论使用哪种测试手段,case 设计是否全面、精简,显得尤...

    Wu_Candy
  • 精准测试系列《二》

    前期的推文:精准测试系列《一》讲解了 SuperJacoco 这个工具是什么,以及 SuperJacoco 能为我们测试解决哪些问题,以及现存在的一些问题。

    Wu_Candy
  • 测试人员7个悲剧且无用的kpi指标...

    测试指标应该始终是有意义的、可执行的。问题是有些测试指标无法达到这一目标。许多指标都是误导,有些只是稍微还有点价值,而有些则毫无意义。

    TestOps
  • 精准测试系列《四》

    前期推文:精准测试系列《三》分享了如何通过测试管理平台进行发布分支,今天分享的内容是在发布完成后我们要触发代码覆盖率的统计的逻辑,分享的大致思路还是从前端页面发...

    Wu_Candy
  • 农行 DevOps 进行时之最佳实践分享:实现 .net web 单元测试代码覆盖率统计

    单元测试代码覆盖率是软件测试中的一个度量指标,是衡量程序中源代码被测的比例和程度,DevOps 标准中需要项目单元测试代码覆盖率和接口覆盖率达到一定的比例。农行...

    DevOps时代
  • 七个无用的测试指标

    平时在测试工作中恪守的那些指标真的都是金科玉律么? 软件测试度量是一种通过检测软件测试过程的质量和有效性来评估软件开发的量化方法。开发团队使用测试指标来跟踪开发...

    CSDN技术头条
  • 测试技术|白盒测试以及代码覆盖率实践

    白盒测试也称逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件程序验证,属于基于代码的测试技术。与之相对应的黑...

    互联网金融打杂
  • CODING 首届金融科技技术交流闭门会议顺利召开

    近期,由腾讯云旗下一站式 DevOps 开发平台 CODING 和中国 DevOps 社区主办的深圳第十一届 Meetup 圆满结束,会上三位专家分享了自己独到...

    CODING
  • JaCoCo代码覆盖率从0到100的入门实践

    JaCoCo全称是Java Code Coverage,Java代码覆盖率,广泛运用于各种测试平台对Java代码的全量覆盖率和增量覆盖率进行统计,分析代码行差异...

    dongfanger
  • Python单元测试框架覆盖率-Coverage

    覆盖率是用来衡量单元测试对功能代码的测试情况,通过统计单元测试中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。

    TestOps
  • Python单元测试框架覆盖率-Coverage

    覆盖率是用来衡量单元测试对功能代码的测试情况,通过统计单元测试中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。

    Criss@陈磊
  • 测试需要做单元测试吗?

    昨天在技术交流群里,有同学说自己还想多学点技术,打算去做单元测试,写单测代码来提升技术,然后群里的同学就测试要不要做单元测试展开了很多讨论。

    老_张
  • 精准测试系列《五》

    精准测试系列《四》分享了如何通过测试管理平台进行代码覆盖率的统计,今天的分享内容是在发布平台进行获取覆盖率报告的逻辑,分享的大致思路还是从前端页面发起请求,然后...

    Wu_Candy
  • 单元测试最佳实践:如何最大程度地利用测试自动化

    单元测试是一种众所周知的做法,但是还有很多改进的空间!在这篇文章中,最有效的单元测试最佳实践,包括一路最大化自动化工具的方法。我们还将讨论代码覆盖率、模拟...

    小老鼠
  • 如何建立高效的质量保障机制

    在之前无论是写文章还是工作实践,在质量保障机制方面也有大量心得,但总觉得缺点什么,直到前几天写了项目交付系列的几篇文章才豁然开朗。之前关注的大多还是从测试或 Q...

    老_张
  • 实践Jenkins集成Cobertura自动化构建SpringBoot工程

    文章摘要:追求代码质量一直都是优秀程序员对自己的目标,那么有什么好方法能够实现这个目标?

    用户2991389
  • 内建质量,你真的了解么?

    内建质量作用在开发过程中,要求软件生命周期之间参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一环节前已经有了基础的质量保证。其核心目的就是减少因...

    JFrog杰蛙科技

扫码关注腾讯云开发者

领取腾讯云代金券