软测思考题:自动化测试重运行是好是坏?

如果有人手动运行测试,那么他们会暂停并了解更多信息。但是,当自动测试失败时,其余部分可能会继续运行。在套件完成之前,你是没有办法看到测试报告的,并且自动化程序不会在故障时执行任何额外的操作尝试找出问题。当剩下的用例全部执行以后,测试人员可能会重新点击一下执行按钮,看看第二遍失败的用例会不会执行成功。

那么,自动测试重试好还是坏?这实际上是一个相当争议的话题。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

 【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

什么是重试机制?

为避免任何混淆,我们理清“自动测试重试”的意思。

假设我有 100 个自动测试用例。当我运行这些测试用例时,框架将单独执行每个测试,并产生测试的通过或失败结果。在套件结束时,框架将所有结果聚集在一起。在最佳情况下,所有测试通过:100/100。

但是,假设其中一个测试失败了。在发生故障时,测试框架将捕获任何异常,执行任何清理例程,记录故障,并安全地移动到下一个测试用例上。在套件结束时,该报告将显示 99/100 通过一个测试失败的测试。

默认情况下,大多数测试框架将一次运行每个测试。但是,某些测试框架具有用于自动重新运行的测试用例故障的功能。框架甚至可以使测试人员能够指定要重试的次数。因此,假设我们为我们的 100 个测试套件配置了 2 次重试。当一个测试失败时,框架将为这个用例再执行 2 遍,再转移到下一个用例。

 

重试可能被滥用

假设你现在是自动化团队的,每晚为 Web 应用程序提供 300 个自动测试,如大家所知,Web 测试经常不太稳定,每天晚上大约十几个不同的测试失败,每天早上都花了很多时间调试问题。但是当你重新运行这些失败用例时,他们几乎总是通过。所以你现在每天晚上都会会自己的自动化测试程序设置重运行。

这种策略是好的吗?很难说!因为这实际上是在隐藏问题,而不是暴露问题。测试人员应该关注爆红,而不是绿色的通过信息, 通过重运行机制,原来产生红色警示的 10 几个用例都无一例外的通过了, 你还会花精力去分析晚上这 10 几个用例失败可能出现的原因吗?

万一当时确实是在异常的条件下,真的触发了这些用例爆红, 后面因为条件回复正常,才执行成功呢?

如果这种异常条件总是间歇性的出现呢?在这种情况下,用例重运行隐藏了可能出现的 bug。

实际上失败重运行在手工测试也很普遍,不是自动化独有的。测试人员喜欢找到一致,可重复的失败,因为这些失败很容易解释。一旦一个测试问题只是间歇性的出现,我们就没法向开发和团队其他人员解释了。这些问题可能是环境因素导致的,可能是达到的条件比较苛刻,因此难以复现。

通常情况下,如果不能轻松复现这个测试问题,我们会选择沉默,不再和开发继续争吵。而自动化的重运行机制也是这样,当一个用例失败时,我们可以选择复现,如果第二次没再出现,我们就默认了,这里没问题,因为问题没有复现!!

 

那么,失败重运行的正确打开方式是怎样的?

首先,一定要记录所有失败的日志信息和失败原因,如果有必要,不管重运行后有没有成功,只要用例有一次爆红,都应该引起测试人员的警觉:这里是很有可能出问题的。

其次,在项目迭代过程中,我们不一定有时间去解决这些间歇性发生的问题。要复现问题都比较困难,更不要说要分析,和开发人员沟通的过程了。

最终的答案,还是优先级。一致性的失败是我们重点要提交的问题,他们总是报红,不管你是不是做了重运行。当解决了这些一致性失败时,再考虑黄色问题(重运行、警告)。

不管如何,重运行机制是一种非常好的工具和手段,它能让我们知道哪些问题是一致性的,哪些是间歇性的,重点在于,作为测试人员应该警戒所有的红色和黄色,而不是想法设法把红色变成绿色。

 

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

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

相关文章

【深度deepin】深度安装,jdk,tomcat,Nginx安装

目录 一 深度 1.1 介绍 1.2 与别的操作系统的优点 二 下载镜像文件及VM安装deepin 三 jdk,tomcat,Nginx安装 3.1 JDK安装 3.2 安装tomcat 3.3 安装nginx 一 深度 1.1 介绍 由深度科技社区开发的开源操作系统,基于Linux内核&#xf…

VQ-VAE(Neural Discrete Representation Learning)论文解读及实现

pytorch 实现git地址 论文地址:Neural Discrete Representation Learning 1 论文核心知识点 encoder 将图片通过encoder得到图片点表征 如输入shape [32,3,32,32] 通过encoder后输出 [32,64,8,8] (其中64位输出维度) 量化码本 先随机构建一个码本,维度…

ROS2/ROS+conda+pytorch配置

0、需求 项目开发中遇到在ROS2中调用pytorch,但pytorch安装在了conda环境下。如果独立安装ros和conda会存在python版本、ubuntu系统版本的问题。网上还没看到比较好的解决方案,通过探索发现以下方案,实现的效果是在一个conda环境中&#xff…

Linux操作系统基础(14):文件管理-文件属性命令

1. 查看文件属性 stat命令用于显示文件的详细信息,包括文件的权限、所有者、大小、修改时间等。 #1.显示文件信息 stat file.txt#2.显示文件系统状态 stat -f file.txt#3.显示以时间戳的形式文件信息 stat -t file.txt2. 修改文件时间戳 touch命令用于创建新的空…

window.print打印事件,固定打印界面,打印成功或取消返回打印前界面,再次点击打印事件不生效

我是弹框中有打印&#xff0c;然后如果还原界面后在点打印事件不生效 我用 window.location.reload() 后刷新界面有返回的界面是关闭了弹框。我需要的是打印成功或取消返回打印不关闭弹框 之前打印代码 我这是是vue3 &#xff0c;我打印界面是单独写的 <printPag ref"…

GitHub Copilot 功能介绍和使用场景

原文 &#xff1a; https://openaigptguide.com/github-copilot/ GitHub Copilot是一款由GitHub、OpenAI和Microsoft联合开发的AI辅助开发工具&#xff0c;它以人工智能的方式提供语法结构、表达式、变量名等的自动补全建议&#xff0c;并对代码进行注释解释&#xff0c;将代码…

linux stop_machine 停机机制应用及一次触发 soft lockup 分析

文章目录 stop_mchine 引起的 soft lockup触发 soft lockup 原因分析&#xff08;一&#xff09;&#xff1a;触发 soft lockup 原因分析&#xff08;二&#xff09;触发 soft lockup 原因分析&#xff08;三&#xff09; stop_mchine 引起的 soft lockup 某次在服务器上某节点…

1389 蓝桥杯 二分查找数组元素 简单

1389 蓝桥杯 二分查找数组元素 简单 //C风格解法1&#xff0c;lower_bound(),通过率100% //利用二分查找的方法在有序的数组中查找&#xff0c;左闭右开 #include <bits/stdc.h> using namespace std;int main(){int data[200];for(int i 0 ; i < 200 ; i) data[i] …

LeetCode简单题记录

1、两数之和&#xff0c;给定数组nums&#xff0c;求和为target的两个数组元素的下标 我用了两个for循环&#xff0c;官方解为 哈希表&#xff0c;知识盲区 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<i…

React Hooks中useState的介绍,并封装为useSetState函数的使用

useState 允许我们定义状态变量&#xff0c;并确保当这些状态变量的值发生变化时&#xff0c;页面会重新渲染。 useState 返回值 const [state, setState] useState(initialState);useState 返回一个长度为 2 的数组。通常&#xff0c;我们这样定义状态变量&#xff1a; co…

Socket.D 替代 http 协议像 Ajax 一样开发前端接口

我们在"前端接口"开发时&#xff0c;使用 socket.d 协议有什么好处&#xff1a; 功能上可以替代 http 和原生 ws安全&#xff01;安全&#xff01;安全&#xff01;现有的工具想抓包数据&#xff0c;难&#xff01;难&#xff01;难&#xff01;&#xff08;socket.…

向爬虫而生---Redis 拓宽篇3 <GEO模块>

前言: 继上一章: 向爬虫而生---Redis 拓宽篇2 &#xff1c;Pub/Sub发布订阅&#xff1e;-CSDN博客 这一章的用处其实不是特别大,主要是针对一些地图和距离业务的;就是Redis的GEO模块。 GEO模块是Redis提供的一种高效的地理位置数据管理方案&#xff0c;它允许我们存储和查询…

1868_C语言单向链表的实现

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/c_basic: little bits of c. 1868_C语言中简单的链表实现 简单整理一下链表的实现&#xff0c;这一次结合前面看到的一些代码简单修改做一个小结。 主题由来介绍 以前工作之中链表的使用其实不多&#xff0c;主要是…

vue多tab页面全部关闭后自动退出登录

业务场景&#xff1a;主项目是用vue写的单页面应用&#xff0c;但是有多开页面的需求&#xff0c;现在需要在用户关闭了所有的浏览器标签页面后&#xff0c;自动退出登录。 思路&#xff1a;因为是不同的tab页面&#xff0c;我只能用localStorage来通信&#xff0c;新打开一个…

axios拦截器的使用?

Axios是一个基于Promise的HTTP库&#xff0c;可以用于浏览器和Node.js。Axios具有拦截请求和响应的能力&#xff0c;使得我们可以在请求被发送之前或响应被处理之前对其进行修改或查看。下面是一个Axios拦截器的简单示例&#xff1a; 1.添加请求拦截器&#xff1a; axios.in…

LightGlue-OpenCV 实现实时相机图片特征点匹配

LightGlue-OpenCV 文章目录 LightGlue-OpenCVStep 1: 创建虚拟环境Step 2: 安装 LightGlue-OpenCV 并运行Step3: 运行 demo_camera.py效果 原理 LightGlue 是一种新的基于深度神经网络&#xff0c;用来匹配图像中的局部特征的深度匹配器。是 SuperGlue 的加强版本。相比于 Supe…

Qt/QML编程学习之心得:Linux下USB接口使用(25)

很多linux嵌入式系统都有USB接口,那么如何使用USB接口呢? 首先,linux的底层驱动要支持,在linux kernal目录下可以找到对应的dts文件,(device tree) usb0: usb@ee520000{compatible = "myusb,musb";status = "disabled";reg = <0xEE520000 0x100…

【C程序设计】C指针

学习 C 语言的指针既简单又有趣。通过指针&#xff0c;可以简化一些 C 编程任务的执行&#xff0c;还有一些任务&#xff0c;如动态内存分配&#xff0c;没有指针是无法执行的。所以&#xff0c;想要成为一名优秀的 C 程序员&#xff0c;学习指针是很有必要的。 正如您所知道的…

探索LinkedIn:使用TypeScript和jsdom库的高级内容下载器

概述 LinkedIn是一个专业的社交网络平台&#xff0c;拥有超过7亿的用户和数以亿计的职位、公司和教育机构的信息。对于数据分析师、市场营销人员、招聘人员和其他对LinkedIn数据感兴趣的人来说&#xff0c;能够从LinkedIn上获取和分析这些信息是非常有价值的。 因此&#xff0…