首页 > 其他分享 >jacoco覆盖率多版本exec合并

jacoco覆盖率多版本exec合并

时间:2024-06-03 14:43:31浏览次数:16  
标签:exec 覆盖率 探针 probeId 合并 指令 jacoco

@

目录

概要

所有代码已经上传到gitee,仓库地址:https://gitee.com/chen_zai_xing/jacoco。

方法指令合并参考ray大佬的https://blog.csdn.net/tushuping/article/details/131640959?spm=1001.2014.3001.5502,大佬在文中未提及指令签名带上指令相对于方法中的序号,这里补充说明下。

在这里插入图片描述
上述方案解决了方法级别报告覆盖率合并的问题,但是不能完美解决不同时间点合并多个版本覆盖率。比如A->B->C测试节点,A->C是个完整节点,但是有些测试是在B节点完成的,整个测试流程不能直接合并A和C的覆盖率,需要同时合并A->B->C的覆盖率,这也是本文主要解决的问题。
本方案是合并探针的数据,在report.java增加一个参数控制是否生成报告还是生成exec文件,在多个版本合并的时候每次合并的时候选择生成exec文件,这样就解决A->B->C的问题,先合并AB,产生新的exec文件,然后使用新的exec文件再次和C的进行合并,得到最终的exec文件,根据最终的exec文件再生成最终的覆盖率报告。
现在需要解决的问题就是怎么才能合并方法探针的数据。具体方法在Instruction类增加一个probeIndex变量,在report调用MethodAnalyzer的时候记录方法指令的探针probeId,probeId是probes中的探针的顺序,如果我们可以知道方法中的指令对应的探针probeId,那么在合并方法指令的时候就可以同时更新探针的数据。jacoco插桩时候的探针顺序是ClassProbesAdapter中的counter控制的,也就是说我们只需要拿到这个counter的值就可以知道当前的探针顺序。在IProbeIdGenerator接口类增加一个getId方法,返回当前的probeId.
在IProbeIdGenerator接口类增加一个getId方法
ClassProbesAdapter中实现getId方法,返回当前的probeId
在调用MethodAnalyzer的时候去获取当前的探针probeId,builder.addInstruction(currentNode, sign, currentProbeId)传入当前的探针顺序,这样子就可以记录方法中指令的探针probeId了,在后面进行方法的指令合并时候,同时合并探针。
在这里插入图片描述
增加参数是否只合并exec文件,生成exec文件
目前楼主测试开发岗位,专注效能这块,有感兴趣的同行可以加微信交流下,ray大佬的群满了,考虑新建个小群,备注效能交流
在这里插入图片描述

标签:exec,覆盖率,探针,probeId,合并,指令,jacoco
From: https://www.cnblogs.com/chenzx007/p/18228881

相关文章

  • Jacoco 手动测试覆盖率检查
    团队中目前还没有自动化测试的覆盖,所以测试team想了解下手动测试的覆盖率。于是才有了本片文章的产生。网上有很多文章是利用 Android的instrument测试框架,然后通过命令来启动app来进行测试。而且报告生产的时间点是在启动的activity结束以后,在复杂场景下,是没有办法来......
  • 彻底关闭解决Windows Defender实时防护(MsMpEng.exe、Antimalware Service Executable
    彻底关闭解决WindowsDefender实时防护MsMpEng.exe、AntimalwareServiceExecutable占用CPU和内存过多win11有效解决方法常规方法步骤一、修改注册表步骤二、组策略关闭WindowsDefender防病毒程序根治方法直接删除WindowsDefender实时防护功能简述解决过程Antima......
  • @Pointcut 的常用方式:execution,within,this,target,args,@within,@target,@args,@annotation
    @Pointcut的常用方式先了解几个概念文中会涉及几个概念,先了解一下。target用来表示目标对象,即需要通过aop来增强的对象。proxy代理对象,target通过aop增强之后生成的代理对象。AspectJAspectJ是什么?AspectJ是一个面向切面的框架,是目前最好用,最方便的AOP框架,和spring中的......
  • psexec命令 应用
     psexec命令初级应用大纲介绍psexec命令解释psexec命令的作用和功能简要介绍psexec命令的用途和优势安装和配置下载和安装psexec工具配置环境变量(如果需要)基本语法演示psexec命令的基本语法和选项说明如何运行远程命令或程序远程执行命令演示如何......
  • MySQL的系统变量max_execution_time小结
    参数介绍:MySQL社区版MySQL5.7.8开始,新增了MAX_EXECUTION_TIME这个系统变量,它用来限制SQL语句的执行时间,确切来说是限制只读SELECT语句。如果查询语句的执行时长超过这个阈值,MySQL将自动停止该SQL语句的执行。如果其值为0,表示不启用该超时限制功能。该参数/变量单位是毫秒(milli......
  • Java ThreadPoolExecutor
    ThreadPoolExecutor?ThreadPoolExecutor是什么,先拆开来看,ThreadPoolAndExecutor?那ThreadPool是什么?Executor又是什么?Executor:任务执行者,只定义了一个execute方法,接收一个Runable参数。publicinterfaceExecutor{voidexecute(Runnablecommand);}ThreadPool:可以缓存......
  • XXL-JOB executor 未授权访问漏洞
    XXL-JOBexecutor未授权访问漏洞XXL-JOB是一个分布式任务调度平台,其核心设计目标是开放迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。XXL-JOB分为admin和executor两端,前者为后台管理页面,后者是任务执行的客户端。executor默认没有配置认证......
  • openpyxl 操作 execl 示例
    代码功能对execl的主机生成唯一不重复的密码。代码示例importsecretsimportstringfromdatetimeimportdatetimefromopenpyxlimportload_workbookfromopenpyxl.utilsimportget_column_letterfromopenpyxl.stylesimportBorder,Side,Alignmentdefcreate_......
  • Liquibase中MARK_RAN与EXECUTED:解析与实战应用.
    哈喽,大家好,我是木头左!引言在软件开发的世界里,数据库的版本控制是一项重要的工作。Liquibase是一个开源的、企业级的数据库版本控制工具,它能够帮助更好地管理和控制数据库的版本。在这篇文章中,将深入探讨Liquibase中的两个重要概念:MARK_RAN和EXECUTED。这两个概念虽然看起来简......
  • openpyxl 读取 execl
    按列读取数据fromopenpyxlimportWorkbook#创建一个新的Excel工作簿wb=Workbook()#获取第一个工作表worksheet=wb.active#多行数据data=[['Bob',25,'Male'],['Charlie',35,'Male'],['Alice',30,'Engin......