当前位置: 首页 > news >正文

基于metersphere和supper-jacoco 测试覆盖率落地实践

一、背景及目标

背景

1、技术研发流程为测试 提供冒烟用例-开发根据用例自测-提测-开始测试,这一套流程,但是中间开发是否真实执行冒烟,测试并不知晓,而且测试提供冒烟用例是否符合标准也没法进行量化
2、公司产品属于saas产品,但是针对一些客户需要做定制化处理,这种场景,开发往往给出的是测试不用介入,修改代码少,但是真实修改了多少,会不会引起其他问题,测试是完全不知道的
3、自动化体系逐渐成熟,但是在代码层面,自动化完成效果无法进行量化,可能a测试人员编写了100条自动化用例,但是每个多个用例调用同一接口,场景单一,不好具体量化自动化完成

目标

基于上述背景,决定引用覆盖率工具,让测试更加了解代码,对工作流程有着更好的量化
每次需求提测,能获取到与基线分支对比,新增了多少代码,在开发冒烟后,获取到开发是否真实执行了冒烟,并统计冒烟覆盖率,同样在测试时,获取到测试覆盖率,并根据覆盖率数据,补充遗漏测试点
通过全量测试覆盖率,统计自动化真实情况,覆盖多少代码

二、怎么做

当前测试团队,使用的是基于开源测试平台metersphere的二开,做了很多定制化的处理,团队各种测试工具,肯定都是集成在一起使用更加方便快捷。

1、增量测试覆盖率版本问题如何解决

全量测试覆盖率比较好解决,但是版本测试增量覆盖率就比较麻烦,首先一个版本的标准是什么,怎么去创建这个版本,怎么维护,我司测试用例及版本维护用的是禅道,每次测试版本,需要在禅道上创建一个测试单关联到对应用例及bug,如果在测试平台再去创建一个版本,创建虽然不麻烦,但是还是要多一步操作,而且不能保证每个人去执行能不能保持统一,做测试工具的应该都会碰到一个问题就是,做出来容易推广难,做出来的东西肯定是最大限度减低人工操作成本。
我这边给出的方案是,metersphere去拉取禅道测试单,这样就可以覆盖率版本问题,而且既然已经关联测试单了,对应的用例,bug等数据也可以进行统计,一举二得
最后的实现的就是metersphere定时同步测试单,拉取测试单的信息,并统计bug等数据,还可以顺道做下汇总图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、怎么打通gitlab,测试平台,supper-jaoco,k8s?

相信很多人都使用过supper-jacoco,包的单个部署应用supper-jacoco是很简单的,把supper-jacoco启动起来,项目运行时带上javaagent命令就ok了,使用方法还是很简单的,但是要想把这一套使用的真实项目中,每个版本去统计,就相对没那么容易了,每一个版本都人工去操作,这样这个工具想推广真是难上加难,而且都靠人工来操作,出现错误的几率就比较高。时间久了就没人去用了。而且现在一般公司测试环境维护都是使用的k8s,jacoco运行时,需要把对应的jacoco-cli包跟具体项目放在一起,然后打包为一个镜像,放在k8s上去运行。
我这边的处理是
1、将jacoco-cli包放在oss上,gitlab流水线打包时,将jacoco-cli拉下来,在开发打包的dockerfile中,将jacoco-cli包跟项目的包打在同一个镜像中

在这里插入图片描述

2、第一步解决后,就比较简单了,我们使用的是rancher来管理k8s,在镜像启动时,配置对应的javaagent命令即可,再把supper-jacoco服务在k8s起来,这样,每次打包部署后,就可以直接去拉取覆盖率文件了

3、第2步的问题解决后,难点就是开始统计覆盖率和覆盖率结果的收集,supper-jacoco每次需要传入git地址,微服务目录,基准分支,当前分支,uuid等信息,我这边在metersphere上创建一张表,用来维护git项目信息,项目部署容器ip,分支,地址等(这一步可以做成一个功能在页面上,但是变动比较小就没进行开发),这样在测试平台选择版本时,就可以选择对应的项目,填写版本,就可以进行覆盖率收集了
在这里插入图片描述
在这里插入图片描述

三、流程汇总

在这里插入图片描述
在这里插入图片描述

四、落地效果

测试落地4个月,开始覆盖了收集有20多个版本,平均冒烟行覆盖超45%,平均测试覆盖超75%,详细统计每个服务测试自动化覆盖了多少,目前已形成测试门禁,冒烟增量行覆盖必须超45%,测试增量行覆盖超75%,每个版本平均可以根据测试覆盖率补充2-5条测试用例。而是使用成本低,只需要在提测前输入几项信息即可拿到想要的数据。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 中科亿海微UART协议
  • 【PTA-C语言】实验七-函数与指针I
  • 一文初识Linux进程(超详细!)
  • 3D动态路障生成
  • 计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!
  • 研讨会分享 | 非遗文化的守正创新与数字化传播
  • Eureka注册及使用
  • 【Linux】Linux 下基本指令 -- 详解
  • C语言---扫雷(Minesweeper)
  • 算法练习Day25 (Leetcode/Python-贪心算法)
  • Halcon闭运算closing
  • c语言内嵌汇编知识点记录
  • 牛客周赛 Round 26 解题报告 | 珂学家 | 0-1 BFS + 状态机DP
  • 《Linux详解:深入探讨计算机基础》
  • 2023.12.30力扣每日一题——一周中的第几天
  • JAVA_NIO系列——Channel和Buffer详解
  • javascript面向对象之创建对象
  • Java读取Properties文件的六种方法
  • java小心机(3)| 浅析finalize()
  • JS专题之继承
  • k8s如何管理Pod
  • Laravel核心解读--Facades
  • PHP 的 SAPI 是个什么东西
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SSH 免密登录
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端面试之闭包
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 怎么将电脑中的声音录制成WAV格式
  • 找一份好的前端工作,起点很重要
  • 阿里云ACE认证之理解CDN技术
  • 如何用纯 CSS 创作一个货车 loader
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • #1015 : KMP算法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (k8s中)docker netty OOM问题记录
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (第30天)二叉树阶段总结
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (四)鸿鹄云架构一服务注册中心
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (杂交版)植物大战僵尸
  • .jks文件(JAVA KeyStore)
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net Core与存储过程(一)
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net SqlSugarHelper
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET成年了,然后呢?
  • .net和php怎么连接,php和apache之间如何连接