导读: 人工智能和机器学习是当今软件行业最热门的词汇。测试社区、服务组织和测试产品和工具公司也开始在向这些方面快速倾斜。
虽然软件测试行业内确实发生了一些有趣的事情,但很多似乎只是炒作。非常遗憾,很难从这些复杂的事情中找出有趣的工作、研究和解决方案。
更多优质内容请关注微信公众号“程序员小濠”(免费获取测试资料)
现在流行的主题之一是“无代码自动化功能测试”,我们让机器识别如何自动化测试软件产品。搜索关键字“无代码测试自动化”或“测试自动化中的 AI”会查到一些该领域中的工具。
我非常想知道到底发生了什么。AI 如何帮助自动化功能测试,还是这仅仅是欺骗人们使用工具的营销手段?
在进一步讨论之前,我想从自动化功能测试设计、工具和框架的角度,尤其是在敏捷的方面强调几个我认为重要的标准或需求。
敏捷世界的自动化功能测试标准和需求
人们通常认为需要在功能和产品稳定之后进行自动化功能测试。恕我直言,这是对自动化的浪费,特别是现在人们都看到了基于敏捷的交付实践的价值,并且开始使用了增量软件交付。
使用这种方法,最重要的是在产品构建的阶段尽可能多地自动化测试,我们要遵循自动化测试金字塔 (
https://martinfowler.com/articles/practical-test-pyramid.html) 的原则。一旦团队知道现在在顶层(UI 层)需要自动化一些什么之后,我们就应该自动化这些测试。
由于产品在不断发展,测试肯定会随着产品的发展而失败。这不是测试的问题,而是测试没有跟随产品的发展而发展。
想要让之前通过的测试再次通过,自动化功能测试工具、框架应该使现有测试的更新和演变尽可能地简单。可能需要在定位器中进行变更,或者需要在流中进行,这并不是很重要。
如果这个过程很简单,团队成员会从自动测试执行和其工具框架中获益匪浅。
自动化测试的目标清晰可见
这是我认为的自动化测试最重要的方面,了解什么自动化了,它是否能展现出相对于一系列 UI 操作之外的价值。
确定性和健壮性测试 – 定位器和维护
如果测试执行环境不变(比如说测试中的产品、与测试相关的测试数据等等),自动化测试的结果应保持一致。这个方面也可以被认为是测试稳定性。
如果因为某些原因,测试失败了(比如产品的缺陷,测试没有更新等),每次重复执行该测试也应该以相同的原因失败。
保证测试确定性和健壮性的一个方法是保证可以定位并可靠地更新定位器,从而让维护变得简单。在某些情况下,工具集可能会使用(人工)智能来找出识别相同元素的下一个最佳方案,防止因定位器改变而找不到元素导致的测试失败。尤其是在唯一的定位器不可用的情况下,或者定位器的变更是基于产品状态的情况下。
也可以用不同的方法来唯一地识别一个元素。工具和框架需要支持多定位器的识别,测试作者应该能够详细说明如何使用它们。
通常导致测试失败的原因如下:
- 定位器是动态的,每次产品的发布或使用都会造成变化。
- 定位器依赖于被测试产品的环境。
- 比如:基于运行测试时的数据集
上面提到的因素会让实现确定性和健壮性的自动化测试变得不太可能。
在相对来说比较新的工具集中,我很高兴看到它们能够以各种各样的定位器策略来识别一个元素。在你多次运行测试的时候,工具能知道测试的预期,也会尽可能用最可靠的方法找到元素。这样,测试的健壮性就得到了提升,既不会影响测试的质量,也不会让测试“不经意的通过”。
测试片段的编写、更新和自定义应简单且可复用
应该非常容易编写自动化功能测试的片段,并按照需求,选择不同的数据值复用它们。这