如何应对UI测试自动化的不稳定循环!

news2024/11/26 19:48:36

以下为作者观点:

当我加入UI自动化团队时,我很高兴能为新功能的自动化测试用例开发做出贡献。然而,我很快意识到团队花费了大量时间来修复之前迭代中不稳定的测试。这种情况让我感到困惑,因为当自动化测试脚本已知不稳定时,将其推送到 main branch 似乎是违反直觉的。

与团队讨论后,我了解到,紧迫的时间压力常常导致合并不完整或不稳定的测试脚本。此外,还缺乏健全的流程来识别和处理不稳定的测试,以免它们进入 main branch。结果就是 "不可靠的测试越来越多,削弱了我们对自动化套件的信心",并拖慢了我们的开发进程。

为了应对这一挑战,我着手简化我们的测试流程并防止不稳定的测试污染我们的主要测试套件。以下是一些思考过程:

了解UI自动化生命周期

为了了解不稳定测试问题的根本原因,我必须了解并领悟团队内部所遵循的 UI 自动化生命周期的各个阶段。以下是该过程的细分:

图片

图1

  • 评估新的UI功能:团队彻底审查并了解每个新功能的功能、设计和用户交互。这涉及分析该功能如何与现有应用程序集成及其对用户体验的影响。

  • 确定可测试场景:确定新 UI 功能需要测试的关键用户场景和交互至关重要。正面和负面测试用例均需考虑,以确保全面覆盖。

  • 评估自动化可行性:评估新 UI 功能自动化测试的可行性是至关重要的一步。需要考虑的因素包括复杂性、可靠定位器的可用性、UI 稳定性以及整体测试自动化策略。

  • 制定测试计划:有必要制定详细的测试计划,概述新 UI 功能的测试方法、测试用例和预期结果。该计划包括手动和自动测试策略,以确保全面测试。

  • 设置测试自动化基础设施(如果有):确保必要的测试自动化基础设施到位至关重要。这包括选择合适的自动化工具、配置测试环境和设置测试数据管理流程。

  • 实施自动化场景:为新UI功能开发和实施自动化测试脚本。这涉及创建强大的定位器并遵循最佳实践,以实现可维护且可靠的测试自动化。

  • 集成自动化测试:将新的自动化测试集成到整体测试套件和持续集成/持续部署 (CI/CD) 流程中,确保测试作为常规构建和发布过程的一部分执行。

  • 持续监控和维护:定期检查和维护新 UI 功能的自动化测试,并根据需要更新测试以适应应用程序或测试环境的变化。监控测试结果并及时解决任何故障或问题。

在检查完整的 UI 测试自动化周期时,我注意到流程的右半部分和左半部分之间有明显的区别。

右半部分:顺利进展

周期((图1))的右半部分包括评估新的 UI 功能、确定可测试场景、评估自动化可行性、制定测试计划以及设置测试自动化基础设施,通常进展顺利。团队能够在每项新功能的指定时间范围内有效地完成这些步骤。

左半区:问题区域

然而,真正的挑战在于周期(图1)的左半部分。在这一部分,团队需要实施自动化场景,将其集成到整个测试套件中,并持续监控和维护自动化测试。

当团队为了满足紧迫的期限而匆忙实施和集成自动化测试而没有彻底验证其稳定性和可靠性时,就会出现问题。不稳定的测试被推到主分支,导致不可靠的测试积压越来越多,需要不断维护和修复。

团队没有专注于为即将推出的功能开发新的自动化测试或修改现有测试以适应功能更新,而是花费大量时间来处理不稳定的测试。这种恶性循环阻碍了团队及时高效地提供高质量自动化测试的能力。

图片

图2

为了进一步了解这个问题的根本原因,我需要更深入地研究不稳定测试的概念以及它们出现的原因。

不稳定测试是指自动化测试表现出不一致的行为,有时通过,有时失败,即使被测试的代码保持不变。这些测试给自动化套件带来了不确定性和不可靠性,使得测试结果难以令人信赖。

经过与团队的讨论和彻底的分析,我发现了不稳定测试发生的几个主要原因:

  • 时间问题:不稳定的测试通常由于与时间相关的问题而出现。依赖硬编码延迟的测试容易受到执行时间波动的影响,从而导致间歇性故障。如果处理不当,异步操作(例如API调用或UI交互)也可能会引入时间不确定性。

  • 环境不一致:测试环境的差异(例如不同的网络延迟、浏览器版本或操作系统)可能会导致测试不稳定。在一个环境中完美运行的测试可能会在另一个环境中意外失败(可能是管道),这使得重现和诊断问题变得困难。

  • 依赖外部因素:依赖外部服务、第三方 API 或特定数据条件的测试容易出现问题。如果这些外部因素不稳定或无法持续使用,即使应用程序代码正常运行,测试也可能会间歇性失败。

  • 测试隔离不足:缺乏适当的测试隔离会导致不稳定的测试。如果测试依赖共享资源或对执行顺序有依赖性,它们可能会相互干扰并产生不一致的结果。确保每个测试都是独立且自足的,对于缓解不稳定至关重要。

  • 非确定性行为:一些不稳定的测试可能是由应用程序本身的非确定性行为引起的。竞争条件、并发问题或代码中的随机性可能会导致测试以不可预测的方式通过或失败,这使得识别和解决潜在问题变得具有挑战性。

解决问题……

采取积极主动的方法:监控和解决不稳定因素

了解不稳定测试的根本原因是应对挑战的关键一步。有了这些知识,我与团队合作,设计出一种多方面的方法来正面解决不稳定问题。

在我们的团队中,我们会遵循两周的发布周期来发布任何更新或新功能(次要功能)。第一周专门用于 UI 自动化周期的右半部分,我们会彻底讨论 UI 设计和流程,让开发团队开始着手实现功能。在此期间,我们的团队专注于开发测试场景、审查它们,并最终确定哪些可以自动化。

第二周开始后,我们有五天的时间来开发测试脚本,并在周六晚上发布。理想情况下,如果我们到那时可以实现至少 80% 的自动化测试,那么发布过程就会变得更加顺畅,因为手动重新检查错误所需的时间会大大减少。

然而,我们遇到了一个重大障碍:在发布周期中,我们没有利用自动化测试脚本,而是发现自己陷入了困境,这迫使我们进行大量的手动测试。这提出了一个关键问题:

如果在最重要的时刻我们不能依赖自动化测试,为什么我们要花整整五天的时间来开发自动化测试呢?

经过仔细分析,我意识到虽然大多数测试都可以编写脚本,但缺少的关键要素是在两周的时间内持续监控开发的脚本。我们期望最终结果在周末之前就完美无缺,但实际上,除非开发的代码非常强大和可靠(这种情况很少见),否则这是不可能的。

为了解决这个问题,我有这个想法:

不仅要监控已开发的测试套件,还要在发布周期内密切关注新开发的测试。通过这样做,我们可以尽早发现并解决任何不稳定或可靠性问题,而不是等到周期结束。

图片

五个行动计划

此外,我们还制定了五个行动计划,以正面解决不稳定问题并确保整个发布周期内自动化测试的可靠性。该计划侧重于持续监控、协作和主动解决问题。让我们深入了解每个要点的细节:

  • 每日测试运行:如上所述,我们为新开发的自动化测试设置了每日测试运行,以便我们能够及时发现任何不稳定或故障。这给了我们充足的时间来调查和解决问题,以免问题在周期后期积累并造成延迟。

  • 协作代码审查:我们为自动化测试脚本制定了协作代码审查的实践。团队成员将审查彼此的代码,提供反馈和改进建议。这有助于保持代码质量,识别潜在的缺陷,并确保遵守最佳实践。

  • 不稳定测试跟踪和优先级排序:我们创建了一个专门的不稳定测试跟踪系统,根据不稳定测试的影响和发生频率记录和排序不稳定测试。这使我们能够将精力集中在最关键的不稳定测试上,并逐步解决积压问题。

  • 根本原因分析:每当发现不稳定的测试时,我们都会进行彻底的根本原因分析,以了解其不一致行为的根本原因。通过查明具体原因(例如时间问题、环境因素或测试隔离问题),我们可以制定有针对性的解决方案来消除不稳定性。

  • 持续改进:我们在团队内部培育了持续改进的文化。我们定期举行回顾和知识共享会议,讨论所取得的进展、分享见解并确定测试自动化流程中需要进一步改进的领域。

通过实施这些措施并在整个发布周期内监控已开发的测试,我们见证了自动化测试套件的不稳定性显著减少和可靠性提高。团队对自动化测试的信心增强,我们可以在发布过程中有效地利用它们,从而节省宝贵的时间和精力。

然而,值得注意的是,对抗不稳定测试的斗争是一场持续不断的战斗。随着应用程序的发展和新功能的引入,不稳定的风险仍然存在。保持积极主动的方法、持续监控测试结果并迅速解决任何不稳定行为对于保持自动化套件的可靠性和可信度至关重要。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

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

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

相关文章

基于模糊神经网络的时间序列预测(以hopkinsirandeath数据集为例,MATLAB)

模糊神经网络从提出发展到今天,主要有三种形式:算术神经网络、逻辑模糊神经网络和混合模糊神经网络。算术神经网络是最基本的,它主要是对输入量进行模糊化,且网络结构中的权重也是模糊权重;逻辑模糊神经网络的主要特点是模糊权值可…

PLC系统中有源信号和无源信号的解析与应用

(一)无源信号和有源信号(模拟量) (1)无源信号和有源信号定义 对于电流信号而言,若设备有独立的工作电源线,那它提供的信号输出(比如4-20mA)为有源信号;若设备本身无独立…

c++习题02-浮点数求余

目录 一,问题 二,思路 三,代码 一,问题 二,思路 虽然在浮点类型中没有取余的运算(无法直接使用%符号取余),但是我们都知道在数学中,除法是减法的连续运算&#xff…

【CSS in Depth 2 精译】2.2 em 和 rem + 2.2.1 使用 em 定义字号

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力 2.1.1 响应式设计的兴起 2.2 em 与 rem ✔️ 2.2.1 使用 em 定义字号 ✔️2.2.2 使用 rem 设置字号 2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.…

自定义一个背景图片的高度,随着容器高度的变化而变化,小于图片的高度时裁剪,大于时拉伸100%展示

1、通过js创建<image?>标签来获取背景图片的宽高比&#xff1b; 2、当元素的高度大于原有比例计算出来的高度时&#xff0c;背景图片的高度拉伸自适应100%&#xff0c;否则高度为auto&#xff0c;会自动被裁减 3、背景图片容器高度变化时&#xff0c;自动计算背景图片的…

Excel 宏录制与VBA编程 ——VBA编程技巧篇一 (Union方法、Resize方法、Cells方法、UseSelect方法、With用法)

Uniom方法 使用Union方法可以将多个非连续区域连接起来成为一个区域&#xff0c;从而可以实现对多个非连续区域一起进行操作。 Resize方法 使用Range对象的Resize属性调整指定区域的大小&#xff0c;并返回调整大小后的单元格区域。 Cells方法 Cells属性返回一个Range对象。 Us…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案&#xff0c;且同样的元素不能被重复利用。比如&#xff1a;给定 nums [2, 7, 11, 15] 和 target 9&#xff0c;返回 [0, 1]&#xff0c;因…

人工智能与物联网:融合创新驱动未来

引言 人工智能&#xff08;AI&#xff09;指的是计算机系统模拟人类智能的能力&#xff0c;包括学习、推理、问题解决、理解自然语言以及感知和响应环境的能力。AI技术涵盖了机器学习、深度学习、神经网络、自然语言处理等领域&#xff0c;广泛应用于图像识别、语音识别、自动驾…

图鸟模板-官网:基于Vue 3的前端技术探索与实践

摘要&#xff1a; 随着Web技术的不断发展&#xff0c;前端开发已经从简单的页面展示向功能丰富、交互体验优良的方向发展。Vue.js作为一款轻量级且功能强大的前端框架&#xff0c;自推出以来就受到了广泛的关注和应用。特别是Vue 3的发布&#xff0c;更是为前端开发带来了诸多新…

CriticGPT: 用 GPT-4 找出 GPT-4 的错误

CriticGPT 是 OpenAI 发布的一个基于 GPT-4 的模型&#xff0c;它可以帮助我们人类 Review 并纠正 ChatGPT 在生成代码时的错误。使用 CriticGPT 审查代码时&#xff0c;有 60% 的概率生成的代码更好更正确。

vue使用glide.js实现轮播图(可直接复制使用)

效果图 可以实现自动轮播&#xff0c;3种切换方式&#xff1a;直接滑动图片、点击两侧按钮、点击底部按钮 体验链接:http://website.livequeen.top 实现 一、引入依赖 1、控制台引入依赖 npm install glidejs/glide 2、在css中引用 <style scoped> import glidejs/g…

#HDC2024 心得分享#主题演讲学习-加入鸿蒙生态正当时

一、主题演讲学习心得 通过本次主题演讲的聆听与学习&#xff0c;我们在猜出中和不太确定的相关内容纷纷呈现。比如鸿蒙内核与HarmonyOS Next获得行业内最高等级的安全认证&#xff1b;盘古大模型、小艺智能体、意图理解与分发框架等构筑的AI、AIGC能力对HarmonyOS Next及原生…

新手做ASO优化必须要了解的8大指标

在进行 ASO 优化时&#xff0c;以下这些指标通常应优先考虑&#xff1a; 1. 关键词排名 - 这是衡量 ASO 效果的关键指标之一。了解您的应用在特定关键词搜索结果中的位置&#xff0c;有助于评估优化策略的有效性。 2. APP下载量 - 直接反映了应用的受欢迎程度和ASO工作对吸…

单片机使用printf在串口输出字符串

把字符串使用printf输出的本质 实际上调用了putchar和串口字符输出函数&#xff0c;参考 以51单片机中的程序为例 在主函数中使用printf函数向串口发送字符串&#xff0c;当然保证已经定义好串口的波特率等参数 while(1){//uart0SendString("start....\n");prin…

第1章_搭建开发环境

文章目录 第1章 搭建开发环境1.1开发套件硬件接口资源介绍1.2资料下载1.3安装Keil MDK1.3.1**软件下载**1.3.2**软件安装**1.3.3 PACK 安装 1.4 安装 STM32CubeMX1.5 安装 STM32CubeProgrammer1.6 安装 ST-Link 驱动1.7 安装 CH340 驱动 第1章 搭建开发环境 1.1开发套件硬件接…

SpringBoot 3.3.1 + Minio 实现极速上传和预览模式

统一版本管理 <properties><minio.version>8.5.10</minio.version><aws.version>1.12.737</aws.version><hutool.version>5.8.28</hutool.version> </properties><!--minio --> <dependency><groupId>io.m…

谷歌如何进行失效链接建设?

失效链接建设是一种高效的外链建设策略&#xff0c;通过发现并利用失效链接来提升自己网站的SEO。以下是详细的步骤&#xff1a; 寻找失效页面&#xff1a;你需要使用SEO工具&#xff0c;如Ahrefs&#xff0c;来查找与你的网站内容相关的失效页面。这些页面可能是竞争对手的失…

【进阶篇-Day6:JAVA中Arrays工具类、排序算法、正则表达式的介绍】

目录 1、Arrays工具类2、排序算法2.1 冒泡排序2.2 选择排序2.3 二分查找&#xff08;折半查找&#xff09;&#xff08;1&#xff09;概念&#xff1a;&#xff08;2&#xff09;步骤&#xff1a; 3、正则表达式3.1 正则表达式的概念&#xff1a;3.2 正则表达式的格式&#xff…

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时&#xff0c;经常会遇到不能自动创建离散端口的问题&#xff0c;原因有很多&#xff0c;比如&#xff1a;缺少元器件封装、开路端口、多端子模型等等&#xff0c;这个时候&#xff0c;很多人会选择手动进行端口创建&#xff0c;但是&a…

【C语言】--操作符详解

&#x1f32d;个人主页: 起名字真南 &#x1f37f;个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 &#xff1a;2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…