如何保证自动化测试的可信性?

对于自动化测试的可信性,这是一个与自动化测试ROI(投资回报率)紧密关联的关键问题。自动化测试的可信性,不仅关乎自动化的持续性和价值,更重要的是它是否能够准确、真实地反映产品的质量状态。

举例来说,假设你的自动化测试报告显示"我的收藏"用例执行失败了,但是在我们检查运行日志信息后发现,失败的原因是试卷列表接口调用失败,无法获取试卷ID,而非业务场景本身的问题。同理,如果你的API自动化测试报告一直显示成功,然而在生产环境缺出现问题,分析原因原来其中一个API的响应数据中有一个字段的类型早已从int变成了str。但是自动化测试未能检查到这个字段,因此漏掉了这个问题,使得产品出现了缺陷。

以上两个例子都揭示了一个重要的事实,那就是自动化测试的可信性是衡量其是否能准确反映产品真实质量状态的重要指标。如果自动化测试经常误导报告的使用者,那么其快速可靠的价值就会大打折扣。因此,如果你的自动化测试项目存在可信性不足的问题,那么解决这个问题就显得尤为重要。

可信度分析

我们首先对自动化测试报告的可信度进行深入分析。我们将测试结果(成功或失败)与产品功能(正确或错误)进行组合分析。

结合上图我们可以看到四种情况:

  1. 自动化测试执行通过,产品功能正常。

  2. 自动化测试执行通过,产品功能出现问题,漏检。

  3. 自动化测试执行失败,产品功能正常,噪音。

  4. 自动化测试执行失败,产品功能出现问题。

我们期望的结果是情况1和情况4,这两种情况下,自动化测试的结果准确地反映了产品的功能质量。

然而,我们需要避免的是情况2和情况3,因为在这两种情况下,自动化测试的结果并未正确地展示产品功能的质量状态。具体来说,情况3会导致无谓的维护时间浪费,我将其定义为"测试噪音"。

而情况2可能会导致问题在生产环境中出现,我将其定义为"Bug漏检"。为了避免情况2和情况3的发生。

我们可以采用数据分析法,该方法可以分为两步:首先,我们需要找出问题的原因;其次,我们需要找到解决这些问题的策略。

度量方法

那我们有哪些度量方式呢?我们来说说一些实现思路。

基于BUG数

我们在自动化测试过程中,用例执行失败我们会自动在缺陷管理平台新建一个问题,如果问题确实功能存在问题,就会指派给对应开发进行修复,如果提交的问题是非bug,我们就直接标注为非bug,脚本问题,进行关闭。

我们每个月都会统计自动化提交了多少缺陷,真实问题多少个,非bug多少个。

同理,我们会记录线上bug的缺陷数,我们对所有的问题进行分析、归类,将自动化覆盖到的功能漏测的bug也标注一个状态,自动化已覆盖。

虽然基于Bug的量度在理论上听起来可行,但在实际操作中,我们会遭遇到一些挑战。主要有两个因素会导致我们的度量不全面:首先,这将增加人工的工作负担;其次,人的主观判断可能会对度量结果产生影响。

这两个因素可能导致度量的收集不全面,也可能导致其准确性受到影响。例如,如果没有标记Bug,它就不会被统计在内;如果Bug被错误地标记,那么结果就会有所偏差。标记错误是一种常见的情况,比如一些人可能会把Bug归类为UI自动化测试的漏洞,而另一些人可能会认为它是API自动化测试的漏洞。不同的人对同一Bug的归类可能会有所不同,从而导致统计结果的差异。

如果我们依赖这种基于Bug的度量方法,我们的改进目标可能会难以实现,原因在于数据可能会被篡改或者造假。实际上,这种方式违背了度量原则,即度量数据应当源于未经人为处理的原始数据。因此,我们需要继续寻找更为合适的度量方法。

程序代码

那么,是否存在一种方法可以通过编程代码来判断失败是由漏检还是噪音引起的呢? 也就是说,在自动化测试运行失败时,我们的代码能否自动识别这是产品的问题,还是自动化测试代码本身的问题呢?

我们已经确定了一个方向,即应用关键问题法,我们可以提出以下问题:“产品的错误和测试代码问题存在哪些区别?”。

 
  1. def test_resource_lib_addLecture(self,beike_user_session) :

  2. """资料库添加备课"""

  3. self.core_fm.get_xkw_resource_list(beike_user_session,json=params)

  4. res = self.core_fm.resource_lib_addLecture(beike_user_session,json=data)

  5. with assume :

  6. assert res.json()["body"]["message"] == "此资源添加备课成功哦~"

  7. assert res.json()["body"]["code"] == 0

这是一个资源库添加资源到备课的功能,操作逻辑如下:beike_user_session 获取用户登录信息,get_xkw_resource_list获取资料列表信息,resource_lib_addLecture进行添加备课操作,断言响应信息的一个 message 和 接口响应code码。

这段代码可能出现的问题如下:用户登录异常、资料获取失败、加备课失败等,这些任何一个问题的出现都会导致资源库添加资源到备课的功能失败。

我们来分析一下这些失败情况,哪些是噪音、哪些是漏检、哪些是真实业务问题呢?

用户登录异常、资料获取失败等情况属于噪音,是自动化测试代码本身的问题,需要自动化测试人员来解决。而加备课失败则属于真实业务问题,代表着一个产品的错误,需要开发人员来处理。

通过分析代码,我们可以确定这些噪音和真实业务问题的失败出处。其中,产品错误是通过 assert 语句捕捉到的,这些 assert 语句是关键的测试逻辑。而除了 assert 语句之外的代码是辅助测试构建的,它们需要保证健壮和稳定。

到此,我们就得出一个合理的规则,可以区分出产品错误和噪音问题:assert 检查点的失败,是产品错误,其它的失败都属于自动化测试代码健壮性的问题。

通过这个结论,产品错误和噪音的度量公式我们就找到了,即:

产品错误率 = assert 语句引起的失败次数 / 自动化测试失败的总数

噪音率 =  1 - 产品错误率

通过程序代码的数据采集是可以完全自动化的,不需要人工参与。前提是程序代码度量方式需要基于一个规则,那就是测试人员把验证逻辑都用assert语句进行判断。因为我们可以在自动化框架里面拦截 assert 失败的情况。

漏检这个我们还是需要通过人工的方式进行,因为这是通过其他人反馈才能拿到的数据,需要经过人工识别判断,我们只能通过增加更多的检查点来进行,基于这个逻辑,我们可以把验证点的数量 / 测试案例作为一个度量,就是每个测试案例中出现的验证点数量,来驱动自动化测试人员养成在测试案例多做检查点的习惯,最终达到减少漏检的目标,但是这又涉及到成本、收益、范围的问题。

完整度量周期

一个完整的度量周期可以分解成四个阶段:

  • 定义度量:建立度量指标,设置度量目标

  • 数据收集:收集原始数据,聚合成度量指标

  • 问题归因:查看度量数据,并找出问题

  • 优化提升:提出和应用解决办法

经历完四个阶段后,一个度量循环周期便圆满结束。此后,我们可以再次启动第一阶段"定义度量",进入下一个循环周期,以实现持续优化直至度量满足设定目标。一旦达成这一目标,我们便可以思考更换新的度量指标以进一步提升性能。如下图:

就拿前面我们说的噪音率度量为例。在第一个循环周期,我们先采集出来噪音率是多少,比如是 70%。

接着我们从第二个循环周期开始,设置噪音率的目标是控制在 30%,推动团队想尽办法,通过技术或流程,来降低噪音率。然后是第三个周期,如果得到噪音率是 30%,那说明办法奏效了,继续努力,直到最终噪音率目标达到 5%。

为了保持,我们可以把噪音率保留在度量列表上,这样,一旦有什么变动影响到了噪音率,我们可以快速得知,做出对应调整。

第一步的度量设计和第四步的改进办法,需要测试Leader带领团队完成。而第二步和第三步,数据的采集和分析,应该自动化来完成,不需要人工的干预。

怎么提高可信度

在实践中,我们可以通过以下几种方式来提高自动化测试的可信性:

  • 完善自动化测试用例场景:保证测试用例覆盖所有重要的业务场景,并且对每个测试用例进行详细的描述,包括预期结果和实际结果。

  • 完善的执行记录信息:当测试失败时,应该有足够的信息来帮助我们定位问题。这可能包括日志信息、截图、甚至是视频录像。

  • 提高测试的稳定性:提高自动化脚本的容错处理能力,例如增加异常判断、重试等机制保证用例的正常执行。

  • 定期评估和调整:自动化测试不应该是一次性的任务,而应该是一个持续的过程。我们应该定期评估测试的效果,根据产品的变化和测试结果来调整测试策略。

  • 增加结果验证的深度和广度:对接口测试来说,不仅要验证返回的状态码,还要验证返回的数据是否正确,甚至要验证接口调用后的数据库变化、系统日志等是否符合预期。

  • 增加代码审查和持续集成:在自动化测试的编写和执行过程中引入代码质量检查和持续集成,可以提前发现并修复问题,从而提高测试的可信性。

通过以上这些方法,我们可以有效地提高自动化测试的可信性,从而使自动化测试在整个软件开发生命周期中发挥更大的价值,更准确地反映产品的质量状态,提高软件的整体质量,减少软件的维护成本,提高开发测试效率。

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发-this指向+样式复用+代码调试

​🌈个人主页:前端青山 🔥系列专栏:鸿蒙开发篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来鸿蒙开发篇专栏内容:鸿蒙开发-this指向样式复用代码调试 目录 一、this指向 1.原生 鸿蒙 this使用细节 -…

windows下使用nvm进行多版本nodejs管理

目录 一:背景 二:nvm的介绍 三:环境切换使用 一:背景 最近在开发node js的项目,其中一个项目的前端和后台使用了两个node版本,因此需要不同的环境配置来进行开发任务,刚好nvm这个插件可以实现…

vue使用高德地图实现轨迹显隐

<template><div><el-button type"primary" click"pathShowOrHide">轨迹显/隐</el-button><div id"container" /></div> </template><script> import AMapLoader from amap/amap-jsapi-loaderex…

Linux基础环境搭建(CentOS7)- 安装Scala和Spark

#Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Scala和Spark Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Scala和Spark 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01;&#xff08;spark不要下2.4版本的 会报错…

MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨

开心一刻 image 产品还没测试直接投入生产时&#xff0c;这尼玛... 背景问题 再讲 binlog 之前&#xff0c;我们先来回顾下主流关系型数据库的默认隔离级别&#xff0c;是默认隔离级别&#xff0c;不是事务有哪几种隔离级别&#xff0c;别会错题意了 1、Oracle、SQL Server 的默…

fastGpt

参考本地部署FastGPT使用在线大语言模型 1 rockylinx 1 ollama安装 在rockylinux中安装的&#xff0c;ollama由1.5G&#xff0c;还是比较大&#xff0c;所有采用在windows下下载&#xff0c;然后安装的方式&#xff0c;linux安装 tar -C /usr -xzf ollama-linux-amd64.tgz #…

让汇报结构清晰且重点突出的方法——金字塔原理

文章目录 1. 引入2. 什么是金字塔原理&#xff1f;3. 金字塔原理的 4 个要点4. 情景模拟&#xff08;项目进展汇报&#xff09;5. 小结 1. 引入 小编是一名平时埋头码代码&#xff0c;很少需要做正式的汇报&#xff0c;并且曾经一度不屑于只会做PPT和“讲故事”的人&#xff0…

小小猫棒onu替换家用光猫,薅运营商带宽羊毛,突破1000M

小小猫棒onu 一、总体步骤 1 记录原来光猫信息 主要包括SN&#xff0c;ploam密码&#xff0c;loid、loid密码、 mac、上网的vlan id等 一般gpon采用SN、ploam密码、SNploam密码三种中的一种认证方式 一般Epon采用loid&#xff08;逻辑id&#xff09;、mac、loid mac三种中…

8款全生命周期项目管理工具测评与比较

本文测评的8大主流全生命周期项目管理系统包括: 1. PingCode&#xff1b;2. Worktile&#xff1b;3. 腾讯Tapd&#xff1b;4. 蓝湖&#xff08;Lanhu&#xff09;&#xff1b;5. 有道云协作&#xff1b;6. ProcessOn&#xff1b;7. Monday.com&#xff1b;8. Basecamp。 在众多…

java-web-day5

1.spring-boot-web入门 目标: 开始最基本的web应用的构建 使用浏览器访问后端, 后端给浏览器返回HelloController 流程: 1.创建springboot工程, 填写模块信息, 并勾选web开发的相关依赖 注意: 在新版idea中模块创建时java下拉框只能选17, 21, 23 这里选17, maven版本是3.6.3, 很…

自适应神经网络架构:原理解析与代码示例

个人主页&#xff1a;chian-ocean 文章专栏 自适应神经网络结构&#xff1a;深入探讨与代码实现 1. 引言 随着深度学习的不断发展&#xff0c;传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

【32】C++流

目录 C流 读写文件&#xff1a;文件流 对文本文件流读写 写文本文件 读文本文件 对二进制文件流读写 写二进制文件 读二进制文件 对文件流按格式读写取数据 按指定格式写文件 按指定格式读文件 C流 IO: 向设备输入数据和输出数据 C的IO流 设备: 文件控制台特定的数…

前端对一个增删改查的思考

1、来源&#xff1a;dify dify/web/app/components/workflow/nodes/question-classifier/components/class-list.tsx at main langgenius/dify GitHub 2、代码流程&#xff1a; 3、思索问题&#xff1a; 1、为啥要用return形式&#xff0c;而不是value直接当函数&#xff1…

网络原理(数据链路层)->以太网帧格式解

前言 大家好我是小帅&#xff0c;今天我们来了解以太网帧格式 个人主页 文章目录 1.数据链路层1.1 认识以太⽹1.2 MAC地址&#xff08;⽹卡的硬件地址&#xff09;1.2.1 对⽐理解MAC地址和IP地址 1.3 认识MTU1.4 MTU对IP协议的影响1. 5 MTU对UDP协议的影响1.6 MTU对于TCP协议的…

高校智慧党建系统

摘 要 随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得高校智慧党建管理信息&#xff0c;因此&#xff0c;设计一种安全高效的高校智慧党建系统…

【jq+css+html】移动web案例课美团外卖

首页 <!DOCTYPE html> <html> <head><title>首页</title><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0" /><scr…

【01初识】-初识 RabbitMQ

目录 学习背景1- 初识 MQ1-1 同步调用什么是同步调用&#xff1f;小结&#xff1a;同步调用优缺点 1-2 异步调用什么是异步调用&#xff1f;小结&#xff1a;异步调用的优缺点&#xff0c;什么时候使用异步调用&#xff1f; 1-3 MQ 技术选型 学习背景 异步通讯的特点&#xff…

centos下面的jdk17的安装配置

文章目录 1.基本指令回顾2.jdk17的安装到这个centos上面2.1首先切换到这个root下面去2.2查看系统jdk版本2.3首先到官网找到进行下载2.4安装包的上传2.5jdk17的安装包的解压过程2.6配置环境变量2.7是否设置成功&#xff0c;查看版本 1.基本指令回顾 ls:list也就是列出来这个目录…

基于【图像识别】基于模板匹配实现蓝色、绿色、黄色车牌识别附matlab代码

车牌识别是智能交通系统的重要部分&#xff0c;主要涉及模式识别、数字图像处理、计算机应用和人工智能等学科。车牌识别过程主要由车牌定位、车牌字符分割和车牌字符识别组成。文中主要对车牌字符识别进行了研究&#xff0c;并在MATLAB环境下进行了相应的实验。文中在车牌字符…

SpringAOP:对于同一个切入点,不同切面不同通知的执行顺序

目录 1. 问题描述2. 结论结论1&#xff1a;"对于同一个切入点&#xff0c;同一个切面不同类型的通知的执行顺序"结论2&#xff1a;"对于同一个切入点&#xff0c;不同切面不同类型通知的执行顺序" 3. 测试环境&#xff1a;SpringBoot 2.3.4.RELEASE测试集合…