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

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.rhkb.cn/news/175418.html

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

相关文章

Leetcode 542. 01 矩阵

542. 01 矩阵-中等 问题描述 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0…

利用AI Chat 将电子书自动截屏并保存成pdf文件

电子书如果要下载下来,无非就两种类型的方法,一种是从内部破解,通常是某些极客将软件破解成免费版,但是风险也大。另一种是从外部破解,就是截屏保存,然后将所有图片拼成pdf文件。 如果要将整本电子书截屏保…

【计算机网络】路由器的工作原理

文章目录 输入端口处理和基于目的地转发交换结构输出端口处理排队问题参考资料 路由器的四个组件 输入端口(input port):执行物理层功能(input port 左边方框、output port 右边方框)、数据链路层功能(input/output port 中间方框…

springboot+vue基于Hadoop短视频流量数据分析与可视化系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

Istio 实战

文章目录 Istio流量管理分享会【1】什么是istio?【2】istio 可以干什么?【3】业务中的痛点?【4】istio 高级流量管理5.1 istio 组件介绍与原理5.2 sidercar何时注入?如何控制是否注入?5.3 查看sidecar 容器插入的容器中的iptablesDestination RuleVirtual ServiceGateways…

Qt 自定义标题栏,最小化、最大化、关闭窗口,双击最大化,鼠标拖动等效果实现

文章目录 前言效果代码.pro文件widget.hwidget.cppwidget.uititle.htitle.cpptitle.ui 前言 本次实验内容为Qt自定义标题栏,最小化、最大化、关闭窗口,双击最大化,鼠标拖动等界面软件的基本常规操作。 我们在做一个软件界面的时候&#xff…

NEFU数字图像处理(三)图像分割

一、图像分割的基本概念 1.1专有名词 前景和背景 在图像分割中,我们通常需要将图像分为前景和背景两个部分。前景是指图像中我们感兴趣、要分割出来的部分,背景是指和前景不相关的部分。例如,对于一张人物照片,人物就是前景&…

LIMZO-A-6/210开环控制比例插装阀控制器

LICZO-A-4/100、LIMZO-A-6/210、LIRZO-A-3/350、LIMZO-A-8/315、LICZO-A-3/100、LIRZO-A-6/210、LICZO-A-2/210二通数字式比例插装阀可分别执行: 压力补偿溢流和减压开环功能。此类阀有不同的型式可供选择:A型,与分体式放大器配合使用AEB型,带基本型集成…

Mybatis—XML配置文件、动态SQL

学习完Mybatis的基本操作之后&#xff0c;继续学习Mybatis—XML配置文件、动态SQL。 目录 Mybatis的XML配置文件XML配置文件规范XML配置文件实现MybatisX的使用 Mybatis动态SQL动态SQL-if条件查询 \<if\>与\<where\>更新员工 \<set\>小结 动态SQL-\<forea…

linux的使用学习(1)

Linux 修改root密码 1.以 root 用户或具有 sudo 权限的登录到 Linux 系统。 2.打终端&#xff0c;并执行以下命令以更改 root 用户的密码&#xff1a; sudo passwd root 3.然后&#xff0c;系统会要求你输入新的 root 密码。请注意&#xff0c;在输入密码时&#xff0c;终端界…

深入了解 Elasticsearch 8.1 中的 Script 使用

一、什么是 Elasticsearch Script&#xff1f; Elasticsearch 中的 Script 是一种灵活的方式&#xff0c;允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…

JavaWeb——关于servlet种mapping地址映射的一些问题

6、Servlet 6.4、Mapping问题 一个Servlet可以指定一个映射路径 <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern> </servlet-mapping>一个Servlet可以指定多个映射路径 <servlet-mapping>&…

音视频技术开发周刊 | 317

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 MIT惊人再证大语言模型是世界模型&#xff01;LLM能分清真理和谎言&#xff0c;还能被人类洗脑 MIT等学者的「世界模型」第二弹来了&#xff01;这次&#xff0c;他们证明…

中文编程工具免费版下载,中文开发语言工具免费版下载

中文编程工具免费版下载&#xff0c;中文开发语言工具免费版下载 中文编程工具开发的实际部分案例如下图 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502

异步 AIMD 收敛

给出的一直都是同步 AIMD 收敛&#xff0c;所以简单&#xff0c;但不至于 bbr 单流情形退化成简陋。 给出一个异步 AIMD 收敛过程是必要的&#xff0c;可见&#xff0c;它同样是简洁优美的&#xff1a; 虽然我没有标注太多&#xff0c;它始终没有成为一团乱麻。 和同步 AIM…

softmax的高效CUDA编程和oneflow实现初步解析

本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…

06、SpringCloud -- 订单详情界面实现

目录 订单详情界面实现需求&#xff1a;代码前端后端controllerservicemapperdomain 效果&#xff1a; 订单详情界面实现 需求&#xff1a; 现在的订单详情界面是这样的。需要获取订单的数据对这个详情页面进行渲染 代码 前端 后端 controller service mapper domain 日…

低功耗设计-ir drop的signoff corner怎么选择?

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 相关文章链接: Multi Voltage Flow笔记 有几个方向&#xff0c;看公司需求吧 1.功耗最差的&#xff1b; 2.tt的&#xff08;tt85 是比较接近芯片真实工作情况的&#xff09…

Hbase

目录 1 概述 1.1 HBase 数据模型 1.1.1 HBase 逻辑结构 1.1.2 HBase 物理存储结构 1.1.3 数据模型 1.2 HBase 基本架构 2 HBase 快速入门 2.1 HBase 安装部署 hadoop3.X和Hbase2.X不兼容问题&#xff1a; 2.2 基本操作 3 HBase API 3.1 环境准备 3.2 创建连接 3.2.1 单线程创建…

【数据结构】数组和字符串(七):特殊矩阵的压缩存储:三元组表的转置、加法、乘法操作

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表4.2.3三元组表的转置、加法、乘法、操作转置加法乘法算法测试实验结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串…