聊聊持续测试

news2024/11/25 12:41:10

这是鼎叔的第九十六篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。

本人新书《无测试组织-测试团队的敏捷转型》已出版(机械工业出版社)。

如果在测试部门只能推行一个技术建设项目,那鼎叔就会选择“持续测试”。

持续测试(Continuous Test,CT),也有公司称为每日测试(Daily Test),就是每天都有新版本生成并完成相应的测试活动,绝大部分测试都是自动化测试,但是也可以推送新生成的安装包到成员的终端上进行人工dogfood(内部探索测试)。尽可能在当天就发现是否有基本功能被新代码破坏掉,缩短解决问题的闭环,并让大团队对新代码提交保持信心,这样的实践契合“频繁测试”、“集体对质量负责”的敏捷原则。

相关前文:聊聊测试左移到开发阶段

图片

持续测试的健康度指标

带领团队全力投入持续测试之前,鼎叔会不厌其烦地强调:持续测试不是普通的自动化测试,健康度比覆盖率更重要。

以往测试团队在设立自动化测试目标时,都把重心放在自动化覆盖率上,比如所有测试用例被自动化的比率,或者接口/代码行的覆盖率。只看这一类指标很容易带来临时抱佛脚,有不少QA会在考核末期把自动化率提上去,用例没有通过也不去深究原因,整个自动化下来累计发现的问题非常有限。

鼎叔推荐以下几个健康度指标:

1 持续测试卡点失败的恢复时长(MTBF)

持续测试的卡点就像安灯绳,指定的基础功能一失败就应该停下来检查。

为了保障持续测试能顺利开启,团队首先要确保持续构建的成功率,必要时督促开发立刻处理失败,建立对健康构建的重视态度比完善工具更重要。

有一部分不太稳定的,优先级也不高的持续测试用例集可以不设置卡点,或者设置低阈值卡点,以免经常失败导致人员精力的过度耗费。但这种用例集数量应该尽量控制,可以放在员工本地运行,稳定后再放在团队流水线中。

2 测试还需要关注项目的构建和执行速度,通常应在几分钟以内。在实践中发现,导致构建耗时太长的原因经常来自于测试,比如包含了远程服务(如数据库)。

3 度量团队和项目持续测试的前置缺陷发现率,就是持续测试回归自动化过程中累计发现的所有有效问题。这个指标不管用什么自动化框架,不管黑猫白猫,只要发现尽量多的问题就是好猫。

这个指标主要看遗留测试资产(回归自动化)的效果,包括利用各种无需QA人工投入的自动化能力,能在人工测试之前拦截多少有效问题。

持续测试人员可以用各种手段客观记录有效缺陷,不一定要录入缺陷管理系统,更多是度量持续测试的产出价值。

持续测试实践的成效是,后期的系统测试阶段发现的缺陷数量大幅下降了。没错,在测试左移中,系统测试中发现的缺陷占比越少,越有可能是件好事。

4 测试用例通过率。有的流水线卡点会设置为100%通过,也有设置为90%通过的。关键是只要有失败就要快速排查,是脚本问题、产品沟通问题、环境问题,还是缺陷。

通过率的治理可以倒逼QA优化用例集,剔除不稳定的,或没想清楚的用例,避免“用例越多越好”的误区。

5 测试人员除了参与验收标准和验收用例的评审,还可以在开发完成单个需求(用户故事)自测后,马上开始针对性的验收测试(如果产品经理能先行做用户验收测试则更佳),快速反馈该单个需求的质量情况(最好当天完成),降低迭代版本测试或系统级测试的风险。反馈周期越短,开发修复的效率越高,而传统的等待版本提测模式,会拉长开发的等待时间,加大切换任务的注意力耗费。

持续测试的技术栈

产品和项目质量交付是一个整体,包括客户端/前端,和后端的代码测试与发布。但是从自动化技术层面,客户端和服务端的测试框架和执行速度还是有很大差异。

所以持续测试建设团队需要从两套技术栈去分头建设流水线,一套是客户端,一套是服务端,分头掌握不同的自动化能力,但最终的质量标准和指标看板要整合为一个结果,面向产品的整体来输出。

客户端持续测试流水线

客户端的自动化测试成本在很多时候是高于服务端的,可以借用的行业技术成果也更加的丰富多彩。

一,因为客户端面向用户体验视角,所以具备AI图像识别能力的UI自动化测试框架有不错的潜力。

二,三端合一测试技术,即用一套脚本在Android,iOS,PC/Website上同时完成自动化测试,这是客户端测试的热点,在持续测试中非常有价值潜力。

三,真机集群适配自动化测试,这个将来有机会可以专题分享。不同机型的APP适配质量是很多开发团队的噩梦,行业已经有很多针对性的解决方案。因为真机适配UI自动化通常速度慢,失败率较高,所以更适合作为非卡点异步任务。

服务端持续测试流水线

服务端持续测试肯定以协议测试/接口测试为主要形式,但是接口测试的框架也是五花八门。对于电商等复杂的线上流量业务,流量录制回放工具占据了越来越重要的比重。持续测试平台可以同时接入流量录制回放型自动化测试框架,和常规的人工创建型自动化测试框架。

持续测试看的是疗效,不追求执行框架越单一越好,只要能显著提升前面的健康指标,引入外部开源的或商业工具都行,甚至友商工具也可以拿来用。

持续测试流水线的分层(五层)

持续测试中的自动化测试是分层进行的,因为不同层次的自动化测试耗费的时间不同,修复成本不同。参考HamVocke的测试金字塔理论,自动化测试可以分为下面几个主要层次。

1)静态测试。即静态代码扫描,包括代码普通质量问题和代码安全问题,针对扫描结果,我们会关注扫描出来Block问题和Major问题,设立修复率目标,推动开发把精力放在前期。

2)单元测试。之前文章已有介绍。

3)接口测试。

4)跨链路测试或集成测试。在很多公司,集成测试被称之为联调测试,通常由开发人员负责,但是测试人员也可以共同建设。

集成测试可以分为狭义集成测试和广义集成测试。狭义集成测试聚焦被测对象的服务边界,触发本对象和外部(另一个服务,或数据库,或文件系统)的集成动作。而广义集成测试则是通过网络和外部服务进行集成,但是速度更慢,测试更脆弱。依托测试环境稳定的基础设施服务,集成测试通常按照从小到大的顺序联调,逐步提高服务的可用性。

从敏捷角度理解,联调意味着跨特性团队的协作,虽然难以避免,但也属于浪费的成本,应该尽可能降低联调的投入和时间。如果参与联调的各方都有非常清晰完备的接口定义,充分考虑了可能的错误场景,那么联调就可以在最短时间完成,甚至借助事先做好的自动化用例全自动完成。

因此,在微服务产品中,契约测试(作为一种特殊的集成测试)就流行开来,所有微服务的接口测试都根据定义好的接口契约,设计完整的稳定的测试用例套件,确保数据的生产者模块和消费者模块遵循契约。基于该套件的每天持续测试把关,研发团队便向自治团队迈出了一大步。

5)UI测试/端到端测试。注意,UI测试是端到端测试的一部分,即从交互界面上验证结果。端到端测试还有不少其他层面的验收标准,比如没有界面的功能,系统性能,安全性检查,日志正确性,交付规范的文档等。对于微服务架构的产品,需要有人面向整个系统,跨越多个服务来编写端到端测试用例。

这些自动化测试层次使用的测试框架各不相同,但持续集成平台都可以纳入,并行执行,根据团队的效能度量要求进行任务配置和结果治理。

哪怕不完美的自动化测试,只要能够频繁执行,也比很少执行的完美测试更有价值。

而前文提到的验收测试,和测试金字塔的各个层次是正交的,你可以依托单元测试来验收,也可以从接口验收,当然也可以在UI层验收。

如果一个功能验收可以同时在低层次和高层次自动化实现,那就应该保留低层次测试用例,而放弃高层次用例,以减少用例重复。但是,如果高层次的用例能够提高我们对于产品发布的信心,那就应该保留它。

这也就是我认为,单元测试及集成测试,不太可能完全替代端到端测试的原因。

持续测试与测试右移

持续测试贯穿产品研发生命周期,它的价值不仅限于左边,也适用于右边的质量活动。

持续测试就是要把前期积攒的测试资产在灰度、发布、上线后反复利用,测试框架设施不变,收益最大化。

具体实践可以包括:

埋点验证自动化测试。产品的关键指标埋点是一类对产品发展很重要的功能,除了在常规测试中验证,也可以在预发环境和线上环境进行测试和监控。

线上巡检自动化。出于商业目标的保障(如重大营销时期的价格风险检查),线上的关键页面处于不断变化中,老板对此关注力度大,甚至还需要和竞品对比,这就不是简单的指标监控就能保障的。测试自动化可以梳理出UI层面巡检的场景和脚本,把它拓展到正式环境进行采样巡检。

业务逻辑拨测。普通的接口可用性监控,对于运营团队和网络服务公司来说很容易,但是具体业务逻辑是否在现网保持正常,仍然没有确定答案。既然测试团队有各种核心业务场景的自动化脚本,就可以挑选少量场景,用很小的流量进行拨测,尽早发现问题。

下一篇我们聊聊持续测试实践的进阶思考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1639792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读笔记】Frequency Perception Network for Camouflaged Object Detection

1.论文介绍 Frequency Perception Network for Camouflaged Object Detection 基于频率感知网络的视频目标检测 2023年 ACM MM Paper Code 2.摘要 隐蔽目标检测(COD)的目的是准确地检测隐藏在周围环境中的目标。然而,现有的COD方法主要定位…

UI-Diffuser——使用生成式扩散模型的UI原型设计算法解析

概述。 移动UI是影响参与度的一个重要因素,例如用户对应用的熟悉程度和使用的便利性。如果你有一个类似的应用程序,你可能会选择一个具有现代、好看的设计的应用程序,而不是一个旧的设计。然而,要从头开始研究什么样的UI最适合应…

数据的表示和运算试题

01.若十进制数为137.5,则其八进制数为(). A.89.8 B.211.4 C.211.5 D.1011111.101 02.一个16位无符号二进制数的表示范围是()。 A. 0~65536 B.0~65535 c. -32768~32767 D.-32768~32768 03.下列说法有误的是( ). A.任何二进制整数都可以用十进…

若依框架详细使用教程

目录 若依简介 若依使用 搭建后端 搭建前端 若依的使用 若依简介 RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|Ruo…

golang判断通道chan是否关闭的2种方式

chan通道在go语言的办法编程中使用频繁,我们可以通过以下2种方式来判断channel通道是否已经关闭,1是使用 for range循环,另外是通过 for循环中if 简短语句的 逗号 ok 模式来判断。 示例代码如下: //方式1 通过for range形式判断…

ZooKeeper知识点总结及分布式锁实现

最初接触ZooKeeper是之前的一个公司的微服务项目中,涉及到Dubbo和ZooKeeper,ZooKeeper作为微服务的注册和配置中心。好了,开始介绍ZooKeeper了。 目录 1.ZooKeeper的基本概念 2.ZooKeeper的节点(ZNode) 3. ZooKeep…

基于MSOGI的交叉对消谐波信号提取网络MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介: 此模型利用二阶广义积分器(SOGI)对基波电流和相应次的谐波电流进行取 ,具体是通过多个基于二阶广义积分器的正交信号发生器 ( S&#xf…

基于Vue Router和element-ui的LayOut

一、展示 二、代码 app.vue <template><div id"app"><el-container style"border: 1px solid #eee; height: 100vh"><el-aside v-bind:width"asideWidth" style"background-color: rgb(48, 65, 86);"><…

【数据结构】这样学习串的朴素模式匹配算法,简直不要太容易……

串的朴素模式匹配算法 导读一、串的模式匹配1.1 模式匹配是什么&#xff1f;1.2 为什么要有模式匹配算法&#xff1f; 二、朴素模式匹配算法2.1 算法底层逻辑2.2 算法实现2.2.1 过程解析2.2.2 思路分析2.2.3 思路总结2.2.4 代码编写数据类型函数的三要素函数主体 2.2.5 代码测试…

【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解

一、线程概念 线程是进程的一个执行分支&#xff0c;是在进程内部运行的一个执行流。下面将从是什么、为什么、怎么办三个角度来解释线程。 1、什么是线程 上面是一张用户级页表&#xff0c;我们都知道可执行程序在磁盘中无非就是代码或数据&#xff0c;更准确点表述&#xff0…

python从0开始学习

目录 前言 1、print函数 2、input函数 3、保留字和标识符 总结 前言 本篇文章我们开辟一个新的学习模块&#xff1a;python。python是一个十分简洁实用的编程语言&#xff0c;我们将从0开始学习python 1、print函数 print(*args, sep , end\n, fileNone, flushFalse) pytho…

高手的黑箱:AI时代学习、思考与创作

课程目录 01 不要错过这个时代的巨大红利&#xff0c;AI时代竞争力养成指南.mp4 02 解密高手的黑箱——那些创作高手不告诉你的事.mp4 03 创作&#xff1a;人生发展中最重要的事.mp4 04 创作中最重要的事&#xff08;1&#xff09;&#xff1a;对过程的掌控力.mp4 05 创作…

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。 1 FIFO 写入操作 当FIFO的写入使能&#xff08;write enable&#xff09;被置位&#xff0c;并且FIFO未满时&#xff0c;数据会从输入总线&#xff08;din&#xff09;被添加到FIFO中&#xff0c;并且写入确认&#xff0…

Spring - 8 ( 10000 字 Spring 入门级教程 )

一&#xff1a; MyBatis 1.1 引入 MyBatis 我们学习 MySQL 数据库时&#xff0c;已经学习了 JDBC 来操作数据库, 但是 JDBC 操作太复杂了. 我们先来回顾⼀下 JDBC 的操作流程: 创建数据库连接池 DataSource通过 DataSource 获取数据库连接 Connection编写要执行带 ? 占位符…

【LLM 论文】CREA-ICL:利用跨语言检索来增强小语种的 ICL 能力

论文&#xff1a;From Classification to Generation: Insights into Crosslingual Retrieval Augmented ICL ⭐⭐⭐⭐ NeurIPS 2023, arXiv:2311.06595 文章目录 论文速读总结 论文速读 有很多外国语言因为其语言复杂性、标记数据集的缺乏以及数据重复等问题&#xff0c;LLM …

【讲解下如何解决一些常见的 Composer 错误】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片&#xff0c;那是资料获取的入口&#xff01; 点击链接加入群聊【2024五一数学建模】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&khoTDlhAS5N_Ffp-vucfG5WjeeJFxsWbz&authKey7oCSHS25VqSLauZ2PpiewRQ9D9PklaCxVS5X6i%2BAkDrey992f0t15…

前端高频算法

分析算法排序&#xff1a; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度: 运行完一个程序所需内存的大小。 执行效率、内存消耗、稳定性 三方面入手。 1. 排序 1.1 冒泡排序 冒泡的过程只涉及相邻数据的交换操作&#xff0c;所以它的空间复杂度为 O(1)。 为了保证…

Deep learning Part Five RNN--24.4.29

接着上期&#xff0c;CBOW模型无法解决文章内容过长的单词预测的&#xff0c;那该如何解决呢&#xff1f; 除此之外&#xff0c;根据图中5-5的左图所示&#xff0c;在CBOW模型的中间层求单词向量的和&#xff0c;这时就会出现另一个问题的&#xff0c;那就是上下文的单词的顺序…

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式&#xff0c;讲着讲着越讲越多。JVM这一块吧&#xff0c;知识比较散比较多&#xff0c;如果深研究下去如死扣《深入理解Java虚拟机》&#xff0c;这本书很深很细&#xff0c;全记住是不可能的&#xff0c;其实也没必要。趁这个机会直接把…