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

以下为作者观点:

当我加入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.mzph.cn/web/34802.shtml

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

相关文章

【Windows 常用工具系列 17 -- windows bat 脚本多参数处理】

请阅读【嵌入式开发学习必备专栏】 文章目录 bat 脚本命令行参数使用示例多参数处理使用示例遍历所有参数 bat 脚本命令行参数 在Windows批处理(.bat)脚本中接收命令行参数是一个常见的需求,这样的脚本能够根据提供的参数执行不同的操作。命…

Kubernetes之Controller详解

本文尝试从Kubernetes Controller的种类、交互逻辑、最佳实践、伪代码示例及历史演进5个方面对其进行详细阐述,希望对您有所帮助! 一、Kubernetes Controller种类 Kubernetes Controller Manager 是 Kubernetes 集群的核心组件之一,负责管理…

无线幅频仪制作(WiFi通信)-含STM32源程序,JAVA上位机与设计报告

资料下载地址:无线幅频仪制作(WiFi通信)-含STM32源程序,JAVA上位机与设计报告 目录 项目功能 1、 系统方案1.1 比较与选择 1.1.1 控制器的论证与选择 1.1.2 信号源的论证与选择 1.1.3 放大器模块的论证与选择 1.1.4 键盘与显示模块的论证与选择 1.1.5 网络通…

[保姆级教程]uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

logstash配置文件中明文密码加密

1 案例背景 应用配置文件中禁止使用明文密码&#xff0c;需要加密处理 上图中&#xff0c;红框打码位置为es的明文密码&#xff0c;需要对其进行处理 2 创健keystore文件 /rpa/logstash/bin/logstash-keystore --path.settings /rpa/isa/conf/logstash/ create 注&#xff1…

记录正则提取文章

收到了个word版的电子书&#xff0c;需要拆分并转换为md存储到数据库中&#xff0c;便于搜索&#xff0c;记录下用正则提取文章的过程 word原文中有目录&#xff0c;可提取出目录后&#xff0c;在正文中根据目录来正则提取文章 正则的多行匹配 在匹配大量文章的时候&#xff…

llm-universe | 四. 构建RAG应用

构建RAG应用 一.将LLM 接入 LangChain二.构建检索问答链1.加载向量数据库2.创建一个 LLM3.构建检索问答链4.检索问答链效果测试5.添加历史对话的记忆功能5.1 记忆&#xff08;Memory&#xff09;5.2 对话检索链&#xff08;ConversationalRetrievalChain&#xff09; 三. 部署知…

ts可选参数

可选参数 参数后加个问号&#xff0c;代表这个参数是可选的 function bdd(x:number,y?:number){return x y } console.log(bdd(2,3)) function bdd(x:number,y?:number){return x y } console.log(bdd(2))

从0到1构建自己的短链接系统

1. 短链系统简介 1.1 短链系统的定义与用途 短链系统是指将一个较长的URL地址&#xff0c;通过特定的算法生成一个较短的、具备唯一性的URL地址。这种系统广泛应用于社交网络、短信、邮件营销等场景&#xff0c;它能帮助用户在字数受限的情况下分享链接&#xff0c;并且还具有…

Jenkins 创建流水线任务

Jenkins是一个流行的持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;工具。 Jenkins 创建任务 选择“流水线”类型&#xff0c;该类型的优点是定制化程度非常高 &#xff08;可选&#xff09;添加“参数化构建” 配置仓库选项(ssh连接、分支)和凭据…

上古世纪台服注册账号+下载客户端全方位图文教程

又一款新的MMRPG游戏即将上线啦&#xff0c;游戏名称叫做《上古世纪》游戏采用传统MMO类型游戏的玩法&#xff0c;但是开发商采用了先进的游戏引擎&#xff0c;让玩家们可以享受到极致的视觉体验。同时游戏的背景是建立在大陆分崩离析的基础上。各个部落因为领地的原因纷纷开战…

设计模式——责任链

责任链模式是一种行为设计模式&#xff0c;用于将请求的发送者和接收者解耦。在这种模式中&#xff0c;请求通过一条由多个对象组成的链传递&#xff0c;直到有一个对象能够处理该请求为止。每个对象都可以决定是否处理请求以及是否将请求传递给下一个对象。 责任链模式通常在…

螺丝扭断力试验机SJ-12

一、设备简介&#xff1a; 螺丝扭断力试验机用于测试螺丝的耐扭断力。本机将螺丝产品所受到轴向扭转力与反作用力&#xff0c;常用扭力扳手来计量。本机可对产品进行转力测、锁动测试、锁动扭力测试等多种测试方式。 二、设备使用&#xff1a; 1、将螺丝强度扭力试验机底座锁于…

代码随想录-Day41

46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实…

Mysql数据库学习

1、数据库基本认知 一&#xff1a;数据库分类 关系型数据库&#xff1a;SQL 主要有MySQL,Oracle,Sql Server等&#xff0c;其主要通过表与表之间&#xff0c;行与列之间的关系进行数据的存储。可以通过外键来建立表之间的关联。 非关系型数据库&#xff1a;NoSQL 主要有HB…

分享一个 MySQL 简单快速进行自动备份和还原的脚本和方法

前言 数据备份和还原在信息技术领域中具有非常重要的作用&#xff0c;不论是人为误操作、硬件故障、病毒感染、自然灾害还是其他原因&#xff0c;数据丢失的风险都是存在的。如果没有备份&#xff0c;一旦数据丢失&#xff0c;可能对个人、企业甚至整个组织造成巨大的损失。 …

uniapp H5端使用百度地图

1、登录百度地图开放平台 https://lbsyun.baidu.com/&#xff08;没有账号则先去创建一个百度账号&#xff09; 2、进入百度地图开放平台控制台&#xff08;导航栏“控制台”&#xff09;&#xff0c;点击“应用管理”-“我的应用” 3、选择“创建应用”&#xff0c;应用模块选…

msvcr110.dll丢失的解决方法,亲测有效的几种解决方法

最近&#xff0c;我在启动一个程序时&#xff0c;系统突然弹出一个错误提示&#xff0c;告诉我电脑缺失了一个名为msvcr110.dll的文件。这让我感到非常困惑&#xff0c;因为我之前从未遇到过这样的问题。经过一番搜索和尝试&#xff0c;我总结了5种靠谱的解决方法。下面分享给大…

高效运维:标准化与智能化的运维流程管理实践

高效运维&#xff1a;标准化与智能化的运维流程管理实践 在信息化建设日益深化的今天&#xff0c;运维流程管理已成为企业确保其信息系统稳定、高效运行的关键手段。通过系统化、标准化的运维流程管理&#xff0c;企业能够有效预防系统故障&#xff0c;提升服务质量&#xff0…

React的路由(ReactRouter)-路由导航跳转

1.第一步 // createBrowserRouter路由 RouterProvider组件 import {createBrowserRouter,RouterProvider} from react-router-dom // 创建router实例对象&#xff0c;并配置路由对应关系 const routercreateBrowserRouter([{path:/login,element:<div>我是登录页</di…