如何处理不稳定的自动化测试?

news2024/9/21 1:52:26

abluecolor

在解决这个问题之前,请停止编写更多测试,因为这将花费你较高的测试维护成本。你需要尽快行动起来对不稳定的原因进行深入研究,找到不稳定的根因,并且尝试在流程、环境和代码方面做一些优化工作解决它。

MasterKindew

如果你还没有在测试里增加测试日志记录,那么专门花时间补充日志会对你大有帮助,让框架抛出错误并明确测试的错误。

如果你的用例通过使用前端自动化框架开发,那么在发生故障时截图的内容将会很有帮助。

hitchdev

这是一个非常普遍的问题,也是一个很难解决的问题。

我的解决方案:

1 使测试完全闭环。测试是否有通过网络发起对外请求?如果有的话请使用模拟 API 代替。是否使用数据库?使用固定数据在本地设置数据库,并在每次测试后将其清除。

在实践中,我认为几乎没有人使端到端测试是密封的。这非常非常难。不过,这是一个值得实现的目标,原因不仅仅是脆弱。

2 删除测试中所有类似于sleep的内容并用显式等待代替。

3 识别代码中不稳定因素并修复或消除它们。

3 这个问题确实很棘手,因为你要么需要成为开发人员,要么需要开发人员的支持来解决这些问题。问题如下:

  • 循环访问没有确定顺序的数据结构(如哈希图)。
  • SELECT 查询嵌套在代码中。
  • 使用随机数(这可以通过修复测试运行中的种子或模拟 RNG 来解决)。

ToddBradley

我最近一份工作的公司有遇到这个问题。当我加入时,我们遇到了测试结果不稳定的大问题。工程主管总是指责测试同学,而质量主管则不太确定这个锅该不该背。所以我的工作就是把这一切问题都解决掉。这是一项巨大的工程,但最终我们发现该产品不稳定,而开发人员从未意识到这一点,整个过程蛮好玩的。

因此,这里的教训是,“不稳定的自动化测试环境”可能有很多原因:

  • 测试用例设计不当
  • 有缺陷的测试基础设施(服务器等)
  • 被测系统不稳定,至少在测试环境中是如此

重试只是把问题掩盖起来,所以我的建议是避免重试,除非问题出在产品方面并且没有人愿意修复它(在这种情况下,你需要首先询问是否值得测试) 。

Rough-Supermarket-97

你可以使用一些统计模型来量化这一点,但从我的角度来看,依赖点与满足通过定义所需的测试步骤之间存在关系。

对于依赖于穿过多个接缝的每个测试步骤结果(将 API -> 队列 -> DB 视为 3 个独立的接缝),失败的可能性随着接缝的数量呈指数级增加,并乘以依赖于的步骤数那些接缝。您可以想象,这种可能性可能会变得相当高,尤其是当您根据 I/O 瓶颈和其他更多基于基础设施的故障点等因素考虑接缝发生一般故障的概率时。

那么如何稳定集成测试呢?其一,让它们尽可能小。这将是我考虑的第一阶段。

其次,问问自己,“我真的关心测试基础设施吗?或者我更关心应用程序如何响应其依赖项?” - 这个问题应该引导您确定模拟在哪里有用以及您可能仍然想在哪里使用该依赖项。

Yogurt8

  1. 测试环境总是不稳定的。
  2. 良好的日志记录对于任何自动化项目都至关重要。

Ikeeki

我认为不稳定的测试代码是写的质量差,如何处理质量不佳的代码?

你会发现有时这是一个不稳定的测试,但有时它是一个真正的应用程序错误。

我们越减少脆弱性,后者就越开始发生。

但 IMO 的关键是测试指标、测试仪表板以及解决任何未达到 90% 以上成功率的测试。

作为 SDET,我会第一个排查报错问题,但如果我能证明测试代码之外存在某些问题,那么我会找一个该领域测试专家一起解决这个问题。

有一次,我编写了一个 Slack 机器人,当新测试不稳定或在所有分支上开始失败时,它会向我们发出警报,这个机器人对我们非常有用。

wegotallthetoys

显示每个测试执行步骤的测试报告。

我曾经处理过一组每天运行的 2000 个测试,每次运行可能会出现 60-70 个失败测试,我们的测试报告意味着可以在几个小时内review这些失败。

该套件测试报告包含:

  • 每个执行动作的屏幕截图
  • 利用查询来选择要使用的测试数据
  • 输入任何操作的所有数据
  • fwk 抛出的任何异常

根据我在该测试集中的经验,失败的最常见原因是与测试数据相关,例如,测试正在尝试完成某数据的操作,而该某数据未处于当前操作能处理的状态。

Brankksss

我认为你可以使测试尽可能更加密封。模拟一些依赖项,在 Docker 容器上设置 SUT,并仅对“不稳定”环境进行测试。我不知道你的测试环境是如何构建的,我猜测你的依赖项每次都不会更新版本,所以这就是我对你的情况的看法。

看了上述的回答,大家也许有体感了。针对不稳定的测试处理方法,可以归结为以下几种:

  1. 用例开发角度:适当记录用例执行日志;用例编写自闭换,多使用Mock。
  2. 识别并消除测试中不稳定因素,例如sleep。
  3. 建议消除重试机制。
  4. 增加测试不稳定告警机器人。

今天为什么分享这个问题,主要是团队也面临相似的问题。

我们团队自动化用例数量将近有1w,因此排查不稳定测试用例耗费的大量人力。团队处理这个问题也专门作为一个专项来处理。下面我分享一下我们团队处理不稳定测试的经验。

处理这个难题的第一个问题就是 如何定义不稳定测试

我相信针对这个问题,每个团队会基于自己的实际情况可能会有不同的定义。我们团队的自动化用例 每天会运行12次。我们定义的不稳定的测试是 每天运行成功率为0的用例,即0成功率用例。

OK,问题已经定义,那么如何处理不稳定测试?

我们的处理方式分三步:

  1. 搜集问题用例,分析报错原因,对问题进行归类。
  2. 针对已知问题进行优先修复。
  3. 增加 0成功率机器人,用例每日告警。

针对前两步我这里分享一下解决方法

我们的不稳定用例主要有以下几类:

  1. 用例不闭环,调下游的服务不稳定导致用例频繁失败。
  2. 用例有查询DB的模块,因为经常出现慢查询的情况。
  3. 测试环境服务器不稳定,这里表现为与线上环境相比,配置不一致甚至缺失。
    1. 这里的配置有DB的表结构、参数中心等

那么对应的解决方法:

  1. 对依赖下游的服务进行mock。
  2. 慢查询SQL进行优化,实现基于索引查询数据。如果无法实现基于索引查询,就对查询DB的SQL增大timeout。

解决不稳定用例是一个持久仗。问题的关键在于 如何做到用例的保鲜?

目前我们用例保鲜的方法就是 通过增加0成功率机器人,每日更新0通过率用例,频繁处理不稳定用例。当然这个方案仍不是治本的最终策略,但是在一定程度上能解决了回归耗时较长的问题。
 

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

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

相关文章

GB28181和RTSP使用场景区别有哪些?

场景差异 好多开发者纠结,到底使用GB28181还是RTSP,这里简单的谈下二者使用场景区别,GB28181和RTSP(Real-Time Streaming Protocol)是用于视频监控和流媒体传输的两种不同的协议。 GB28181是中国国家标准委员会发布的…

网页游戏开发引擎的特点

网页游戏开发引擎是用于创建游戏应用程序的工具,可以在网页浏览器中运行。这些引擎通常基于Web技术,如HTML5、JavaScript和CSS,以便在不同平台上实现跨平台的游戏开发。以下是一些流行的网页游戏开发引擎以及它们的主要特点,希望对…

软件项目管理办法

图片来自网络,如有侵权请联系删除

实时检测并识别视频中的汽车车牌

对于基于摄像头监控的安全系统来说,识别汽车牌照是一项非常重要的任务。我们可以使用一些计算机视觉技术从图像中提取车牌,然后我们可以使用光学字符识别来识别车牌号码。在这里,我将引导您完成此任务的整个过程。 要求: import cv2import numpy as npfrom skimage impor…

NUXT前端服务端渲染技术框架

服务端渲染又称SSR(Server Side Render)实在服务端完成页面的内容,而不是在客户端通过AJAX获取数据 优势:更好的SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面 Nuxt.js是一个基于Vue.js的轻量级应用框架&a…

数据库的事务四大特性(ACID)、详解隔离性以及隔离级别、锁

文章目录 🎉数据库的事务四大特性(ACID)以及隔离性一、事务的四大特性✨1、原子性(Atomicity)🎊2、一致性(Consistency)🎊3、隔离性(Isolation)&a…

springboot打包时依赖jar和项目jar分开打包;jar包瘦身

概述 最近感觉项目在部署时时jar包传输太慢了; 看了下jar包内容,除了项目代码,其余大部分都是依赖jar; 平时改动较多的只是项目代码,依赖jar改动比较少; 所以就在想能不能分开打包;这样只部署项…

基于SSM的国外摇滚乐队交流和周边售卖系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

【设计模式】第12节:结构型模式之“外观模式”

一、简介 门面模式,也叫外观模式,英文全称是Facade Design Pattern。门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。 目的:简化复杂系统的交互方式 特点:提供一个统一的交互接口 二、UML类…

vue-devtools 下载

创建空文件夹,然后 cmd 运行: npm install vue-devtools 然后打开在node_modules->vue-devtools->vender->manifest.json文件 persistent:false 改成 true 最后把vender文件夹拖到chrome浏览器扩展中 提示小消失

【Vue】vant上传封装方法,van-uploader上传接口封装

项目场景&#xff1a; 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在移动端项目中&#xff0c;使用vant组件上传&#xff0c;但是vant没有上传方法&#xff0c;需要自己写。 html代码 <van-uploader v-model"fileList" :max-size"50…

腾讯云双十一活动,海量云产品优惠,上云正当时!

腾讯云2023年双十一推出了一场盛大的促销活动&#xff0c;活动涵盖了各种产品优惠&#xff0c;包括云服务器、数据库、存储、网络、安全、企业应用等各个领域的产品&#xff0c;让用户享受全方位的优惠&#xff01; 一、腾讯云双11活动入口 活动地址&#xff1a;https://txy.i…

基于MFC的串口通信(Mscomm)

1、串口通信的概述&#xff1a; 串口是一种重要的通信资源&#xff0c;例如鼠标口、USB接口都是串口。串行端口是CPU和串行设备间的编码转换器。当数据从CPU经过端口发送出去的时候&#xff0c;字节数据会被转为串行的位&#xff0c;在接收数据时&#xff0c;串行的位被转换为…

Apache Dolphinscheduler如何不重启解决Master服务死循环

个人建议 Apache Dolphinscheduler作为一个开源的调度平台&#xff0c;目前已经更新到了3.X版本&#xff0c;4.0版本也已经呼之欲出。3.0版本作为尝鲜版本&#xff0c;新添加了许多的功能&#xff0c;同时也存在非常多的隐患&#xff0c;本人使用3.0版本作为生产调度也踩了很多…

开放式耳机和骨传导耳机哪个好,开放式耳机和骨传导耳机区别

虽然开放式耳机和骨传导耳机两者都能够听到周边的声音&#xff0c;但开放式耳机和骨传导耳机区别还是挺大的&#xff0c;下面让我来给大家详细的分析一下两者的区别。 1、音频传导方式 开放式耳机&#xff1a;开放式耳机设计允许声音从耳机的驱动单元透过外部空气传播到听觉器…

浅谈搜索展现层场景化技术-tanGo实践

作者 | 搜索技术平台 导读 本文为搜索展现层相关技术&#xff0c;主线会先通过介绍搜索阿拉丁的产品形态&#xff0c;让读者初步了解什么是阿拉丁&#xff0c;及相关展现概念。之后会聚焦场景化产品&#xff0c;场景化是搜索构建沉浸式完美体验&#xff08;重新组合整页阿拉丁和…

Win10系统 如何使用cmd脚本命令,连接到指定WIFI并免手工输入WIFI密码连接?

环境&#xff1a; Win10 专业版 19041 WiFi 名称&#xff1a;LTG 问题描述&#xff1a; Win10系统 如何使用cmd脚本命令&#xff0c;连接到指定WIFI并免手工输入WIFI密码连接&#xff1f; 解决方案&#xff1a; 1.找一台已经连接过LTG这个wifi的电脑&#xff0c;导出.xlm配…

EasyRecovery16专业版激活码序列号

当不小心将回收站的文件删除了怎么办&#xff1f;想找回但是不知道怎么找回需要的数据文件&#xff1f;别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具&#xff0c;easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&#xff0c;这款软件功能…

opencv 连通域操作示例代码记录connectedComponentsWithStats()函数示例

void CrelaxMyFriendDlg::OnBnClickedOk() {hdc this->GetDC()->GetSafeHdc();// TODO: 在此添加控件通知处理程序代码string imAddr "c:/Users/actorsun/Pictures/";string imAddr1 imAddr"rice.png";Mat relax1, positive;relax1 imread(imAdd…

一文获取鼎捷医疗器械行业数智化合规敏态方案

医疗器械产业是关乎国计民生的重要产业&#xff0c;高端医疗器械更是“国之重器”。为加强医疗器械的监督管理&#xff0c;提升行业质量和安全整体水平&#xff0c;我国出台了《医疗器械监督管理条例》、《医疗器械召回管理办法》、《医疗器械临床试验质量管理规范》、《医疗器…