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

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.mzph.cn/news/125008.shtml

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

相关文章

数字频带传输——二进制数字调制及MATLAB仿真

文章目录 前言一、OOK1、表达式2、功率谱密度3、调制框图 二、2PSK1、表达式2、功率谱密度 三、2FSK1、表达式 四、MATLAB 仿真1、MATLAB 源码2、仿真及结果①、输入信号及频谱图②、2ASK 调制③、2PSK 调制④、2FSK 调制⑤、随机相位 2FSK 调制 五、资源自取 前言 数字频带信…

一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium

大家好,我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战 以及1小时掌握Python操作Mysql数据库之pymysql模块技术 近日锋哥又卷了一波课程,python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium,文字版视频版。1…

vscode C++项目相对路径的问题

如图所示的项目目录结构 如果要在main.cpp里用相对路径保存一个txt文件 std::ofstream file("./tree_model/my_file.txt");if (file.is_open()) {file << "This is a sample text.\n";file.close();std::cout << "File saved in the mode…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(2)

参考视频&#xff1a;https://www.youtube.com/watch?vE5Z7FQp7AQQ&listPLuhqtP7jdD8CD6rOWy20INGM44kULvrHu 视频4&#xff1a;CNN 中 stride 的概念 如上图&#xff0c;stride 其实就是 ”步伐“ 的概念。 默认情况下&#xff0c;滑动窗口一次移动一步。而当 stride …

开发语言工具编程系统化教程入门和初级专辑课程上线

开发语言工具编程系统化教程入门和初级专辑课程上线 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者&#xff0c;可以通过下面…

图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 &#xff1a;范少华 研究方向 &#xff1a;图神经网络 论文标题 &#xff1a;基于学习解纠缠因果子结构的图神经网络去偏 论文链接 &#xff1a;https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…

【python与数据结构】(leetcode算法预备知识)

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ python与数据结构 Python 中常见的数据类型数据结构1.数组&#xff08;Array&#xff09;2.链表&#xff08;Linked List&#xff09;3.哈希表&#xff08;Hash Table&#xff09;4.队列&#xff08;Queue&#x…

jenkins如何安装?

docker pull jenkins/jenkins:lts-centos7-jdk8 2.docker-compose.yml version: 3 services:jenkins:image: jenkins/jenkins:lts-centos7-jdk8container_name: my-jenkinsports:- "8080:8080" # 映射 Jenkins Web 界面端口volumes:- jenkins_home:/var/jenkins_h…

Android NDK开发详解之Android.mk探秘

Android NDK开发详解之Android.mk探秘 概览基础知识变量和宏NDK 定义的 include 变量CLEAR_VARSBUILD_EXECUTABLEBUILD_SHARED_LIBRARYBUILD_STATIC_LIBRARYPREBUILT_SHARED_LIBRARYPREBUILT_STATIC_LIBRARY 目标信息变量TARGET_ARCHTARGET_PLATFORMTARGET_ABI 模块描述变量LOC…

【网络协议】聊聊套接字socket

网络编程我们知道是通过socket进行编程的&#xff0c;其实socket也是基于TCP和UDP协议进行编程的。但是在socket层面是感知不到下层的&#xff0c;所以在设置参数的时候&#xff0c;其实是端到端协议智商的网络层和传输层。TCP是数据流所以设置为SOCK_STREAM&#xff0c;而UDP是…

【Postgres】Postgres常用命令

文章目录 1、导出数据库某张表2、导入某张表到数据库3、查看数据库占用磁盘页数情况4、查看数据库大小5、查看数据表大小6、查看索引大小7、对数据库中表索引按照大小排序8、对数据库中表按照大小排序9、回收空间&#xff08;建议先回收指定表&#xff09;10、设置主键自增序列…

关键点检测、姿态识别、目标检测、车牌识别等项目部署代码+数据集汇总

一、AI健身计数 1、图片视频检测 &#xff08;cpu运行&#xff09;&#xff1a; 注&#xff1a;左上角为fps&#xff0c;左下角为次数统计。 1.哑铃弯举&#xff1a;12&#xff0c;14&#xff0c;16 详细环境安装教程&#xff1a;pyqt5AI健身CPU实时检测mediapipe 可视化界面…

高效分割分段视频:提升您的视频剪辑能力

在数字媒体时代&#xff0c;视频剪辑已经成为一项重要的技能。无论是制作个人影片、广告还是其他类型的视频内容&#xff0c;掌握高效的视频剪辑技巧都是必不可少的。本文将介绍如何引用云炫AI智剪高效地分割和分段视频&#xff0c;以提升您的视频剪辑能力。以下是详细的操作步…

勇立潮头丨家装设计师首选品牌意大利OXO专注品质 为消费者带来个性化整卫方案

近几年&#xff0c;“整装”赛道大热&#xff0c;“整家”、“整装”、“大家居”在行业内引发诸多热烈讨论。在卫浴行业&#xff0c;卫浴头部定制企业率先开启了一波套餐式营销战。 在传统的卫浴销售模式下对尺寸大小的匹配已经无法满足当今家居消费主力的需求&#xff0c;单…

STM32-LIN总线详解1

.硬件规范&#xff1a; 1.总线形式&#xff1a;一主多从 2.总线通常为12V电压&#xff0c;最高波特率20K&#xff0c;最多容纳16个节点。 也有24V&#xff0c;和其他电平需要共地。 3.总线上波形 4. 单片机STM32与LIN收发器在LIN_CAN开发板上设计。 1K电阻自动控制电路&…

二叉搜索树的最小绝对差[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个二叉搜索树的根节点root&#xff0c;返回树中任意两不同节点值之间的最小差值。差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1 示例 …

网页2D/3D的开发框架

开发2D和3D网页的框架有很多&#xff0c;具体选择取决于您的项目需求和个人偏好。以下是一些常用的2D和3D网页开发框架&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 2D 网页开发框架&#xff1a; …

【多线程面试题十八】、说一说Java中乐观锁和悲观锁的区别

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说Java中乐观锁和悲…

电脑技巧:Win10飞行模式相关知识介绍

目录 一、飞行模式简介 二、如何开关Windows 10中的飞行模式 方法一&#xff1a;使用硬件开关 方法二&#xff1a;使用Windows 10操作中心 方法三&#xff1a;使用Windows 10设置 三、飞行模式开关被卡住、变灰或不工作时怎么办 什么是 Windows 10 飞行模式? 用户如何打…

国风AI绘画平台Trik;「一个女孩的一生」走红;音视频转文字的精准处理指南;神经网络原理动画 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f251; 智谱AI推出第三代基座大模型ChatGLM3&#xff0c;瞄向了 GPT-4V https://github.com/THUDM/ChatGLM3 10月27日&#xff0c;智谱AI宣布…