精准测试实践

前言

距上一次发文已经近两年时间,这期间一直在想要不要再输出一些东西,但是看着各个技术论坛里面讨论的都是LLM,AI测试这些高端的玩意,觉得自己弄那些测试工具感觉快要被淘汰了。

大部分人对于AI 表现出焦虑的一面,因为他太强大了,强大到让我们感觉AI明天就能替代我们的工作。

在我看来,AI能替代人工是必然,但不是现在,所以不要预设这个悲伤,让自己每天都活在焦虑中,专注的做好自己的事情,让AI来辅助你的工作,让自己变成那个不可替代的人。

好了,停止焦虑,回归正题,让我开始探索精准测试吧

项目背景

日常工作中测试常被灵魂追问

你怎么证明自己的测试案例已经覆盖了业务逻辑?

你都已经测试完了,为什么上线后还有BUG?

准备一下复盘资料。。。。。。

是啊,我们怎么才能证明本次迭代变动的代码已经被完全覆盖了呢。

我们明明已经和产品,开发对齐过测试案例了,为什么上线的时候还有业务逻辑没有覆盖呢?

每次发版都心惊胆战,生怕发版当天就要毕业了。

基础知识

jacoco 是一个开源的Java代码覆盖率工具,其工作原理主要通过字节码插桩来实现。

JaCoCo通过在Java字节码中插入额外的字节码指令来收集覆盖率数据,这些指令用于记录代码的执行情况。

JaCoCo的工作原理

‌字节码插桩‌:JaCoCo通过在字节码级别修改Java类文件,添加额外的字节码指令来收集覆盖率数据。插桩分为静态插桩和动态插桩:

静态插桩‌:在编译后的.class文件中插入覆盖率收集代码,通常在构建过程中进行。

‌动态插桩‌:在应用程序运行时通过Java Agent动态地对类进行插桩,不修改原始字节码的情况下实现覆盖率收集。

‌生成覆盖率数据文件‌:JaCoCo在方法入口、分支点(如if、switch语句)、循环结构等重要代码路径上插入代码,记录这些路径是否被执行。

生成覆盖率报告:收集到的数据通过数据处理器结合程序执行轨迹信息和代码结构信息生成代码覆盖率报告,报告可以图形化展示为HTML、XML等格式。

以上是AI 生成的,不是很好理解,说人话就是:
在你java 应用启动的时候,插入了一个数据,这个数据用来记录你的java 代码有没有被执行,如果被执行了,那么这个字段就会被标记执行,如果没有执行,那就不会被标记,最后,可以通过这个字段的数据来生成项目的覆盖率,得到一个覆盖率报告

方案设计

官方提供的 jacoco 的覆盖报告,是项目的全量覆盖率报告。而现实工作中,我们会更加关注当前版本的覆盖率报告,而不是整个项目的。这我们就需要对官方的报告进行二开,改造为更符合日常的增量报告。

得益于目前公司规范化的 CICD系统,我们能获取到整个部署流程需要的一切数据比如:部署的版本,版本号,部署容器的ip,项目的git信息等。

我们能将覆盖率收集的环境轻松的结合在持续集成的流程中,以下是整体获取覆盖率的流程

流程说明:

  • 1、系统部署时,主动上传应用的部署信息,后续精准平台会通过上传的ip进行请求
  • 2、精准测试平台主动发起请求业务系统,判断是否有配置jacoco服务,如果有服务,则下载对应服务的全量覆盖率数据
  • 3、精准平台根据CICD系统提供的业务代码的部署信息,版本信息,分支代码等信息,主动去git仓库中获取代码
  • 4、编译对应版本信息的代码,同时diff 获取改动的代码详情与全量覆盖率数据,生成对应版本的增量覆盖率代码
  • 5、测试周期内,会有多次部署,每次部署重复上述过程,只需要将每次测试的覆盖率进行合并即可。

请添加图片描述

效果

这里无法提供现实项目的数据,理解一下意思即可。

全量数据就是整个项目的覆盖率数据,包含了历史代码的覆盖率,

增量数据就是本次迭代代码的覆盖率数据,版本周期内,更多的关注增量数据。

全量报告数据
在这里插入图片描述

增量报告数据
在这里插入图片描述

图片来源https://blog.youkuaiyun.com/tushuping/article/details/112613528

精准2.0展望

目前该项目已在公司运行约半年时间,对接了大部分java 应用, 有效的协助研发团队对版本质量的把控,取得了一致好评。

上面这只是精准测试的一部分,今年对于精准测试的规划是实现对测试流量的染色,让日常的测试精准的定位到业务代码,形成代码和案例的知识库,当后续改动到这个代码片段时,就能从知识库中,获取到对应的案例,精准的进行案例推荐。

参考项目:

https://github.com/rayduan/code-diff

https://gitee.com/chen_zai_xing/jacoco

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值