自动化测试的未来趋势(1)

发表于:2023-5-25 09:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Thoughtworks中国    来源:知乎

分享:
  背景
  自动化测试从最早期的录制回放技术开始,逐步发展成DOM对象识别与分层自动化,以及基于POM(Page Object Model)来提高用例复用,到当前火热的基于AI技术的自动化,体现了自动化测试的发展趋势是更加智能,更加精准,更加高效。
  在这里我们给大家介绍两种在业界已经有广泛使用的智能自动化测试技术:
  1. 自愈(Self-Healing)技术
  2. 机器学习(Machine Learning)技术
  自愈技术
  1.1 什么是自愈技术
  自愈(Self-Healing)技术在计算机术语中是指:一种自我修复的管理机制。
  类比生命体,当生命体遭受到一些小的伤害时,它们的身体往往能够通过自身的修复机制来实现自愈,而不需要外界加以干预。如壁虎的断尾再生,或者蟹类的躯体再生能力那样。
  回到计算机领域,自愈技术也在广泛地使用,比如芯片的信息通道自愈,软件系统的故障自愈等。那么我们这里要介绍的是在自动化测试方向上的一种自愈技术:
  可以发现其测试脚本执行中的非预期错误,并在无需人工干预的情况下自行更改,从而将自身恢复到更好的运行状态。
  1.2 原理介绍
  问题域:在自动化测试中使用自愈技术主要解决的是对象识别(object identification)问题。
  传统的自动化测试框架和工具,使用应用程序模型来定义应用程序的组件和对象及其属性。然后使用这些定义来识别和操作应用程序组件。但是应用程序在更新时会经常更改。可能是有意的开发人员变更或者是即时(由应用程序系统或构建过程)发生的。这些变化破坏了我们基于静态定义的传统自动化方式。
  自然语言处理(NLP)和机器学习 (ML) 等智能技术已经发展到测试脚本现在可以“学习”和“适应”的地步;自愈式自动化测试工具使用 AI 和机器学习技术,根据用户界面 (UI) 或应用程序环境的变化,可以自动更新和调整测试过程。
  在运行测试时,它们会扫描应用程序的用户界面以查看是否存在任何对象。然后它们将这些对象与之前为自动化测试生成的应用程序模型进行比较。如果应用程序有任何更改,则有一种技术可以让测试适应并自动更新。这种能力被称为“自我修复”。属性更改是自动感知的,内部脚本在运行时通过自我修复进行自我修复。
  自愈功能具有以下两个显著特点:
  ·在执行过程中,如果某个测试步骤定位器无法被其默认定位器值检测到,则列表中的其他定位器策略将自动应用,无需测试人员的任何手动干预。执行将继续,就好像没有发生任何故障一样。
  · 在执行过程中,如果测试步骤定位器失败,并且无法使用任何其他定位器策略自动检测到,测试将暂停执行,允许用户选择相关元素并继续执行。新的定位器策略将在下次执行时自动更新。
  下图介绍了自愈技术的主要步骤:
  自动化测试自愈技术的优势主要有:
  · 减少测试失败率
  测试执行失败很正常,但是有时候失败的根本原因仅仅是由于用户界 面发生了变化而测试脚本没有同步变化。使用自愈技术后,由于无法正确识别的对象位置而影响脚本执行失败的情况就不太可能发生。而传统的自动化方式无法识别这些变化并自动更新。
  · 提升测试稳定性
  如果我们测试过程中有flaky tests存在的话,我们很难确定我们的测试是否是稳定的。”NoSuchElementException“ 错误是导致测试设计不稳定的几个错误之一,测试团队很难完全控制这样的现象发生。而当我们的测试设计和应用程序保持一致时,测试在执行期间失败的可能性较小,并且执行过程也更加顺畅。
  · 提高脚本维护性
  测试代码中的更改与开发人员在应用程序中所做的更改成正相关。由于测试失败的原因可能会发生变化,并且不能反映 AUT 的真实状态;因此失败的测试结果会限制测试人员获得有关其测试的有意义的见解。通过识别和更新用户界面中的任何更改的测试用例,自愈技术节省了敏捷测试和开发团队的时间和精力。除了时间和精力之外,测试自动化中的自我修复也显着降低了测试脚本维护成本。
  1.3 业内实践
  我们可以看到,业内已经有一些比较好的实践了,比如Healenium项目。
  以Healenium项目为例,看看自动化测试自愈技术是怎么工作的:
  假设我们通过id 的方式来定位应用程序界面上的一个按钮,定位器应该是:#button
  从上图可以看到,元素可以被正确定位到。Healnium会将正确的定位器保存下来,作为下一次测试执行的基准值。
  现在,我们假设开发人员变更了应用程序的UI界面,改变了这个按钮的id属性,从#button变更为#green_button。但是由于某种原因,测试团队没有被通知到有这个变更,所以测试脚本也没有更新。那么当我们再次执行脚本的时候,在尝试使用#button的旧定位器去定位按钮的时候,脚本就会报错,提示 “NoSuchElement”的错误异常。
  在这种情况下,使用标准的 Selenium 实现测试将失败,但使用 Healenium 则不会。 Healenium 捕获 NoSuchElement 异常,触发机器学习算法,传递当前页面状态,获取之前成功的定位器路径,比较它们,并生成修复的定位器列表。它采用得分最高的定位器并使用该定位器执行操作。正如我们看到的元素被成功找到并通过了测试。
  测试运行后,Healenium 生成报告,其中包含有关修复定位器、屏幕截图和修复成功反馈按钮的所有详细信息。
  如果修复成功,我们可以使用 Healenium Idea 插件更新我们的自动化测试代码:插件使用修复定位器寻找修复和更新测试代码。
  Healenium 使用一种机器学习算法来分析当前网页的变化:基于权重的最长公共子序列算法
  更多关于这个项目的详情,可以访问这个项目官网:https://healenium.io/
  通过这个案例,我们来对比一下传统自动化测试方式和基于自愈技术的自动化测试方式中对象维护的差异(如下图所示):
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号