昨天,谷歌发布了全新的AI模型Gemini,其在演示视频中展现出的近乎神奇的实时反馈能力令人印象深刻。测试人员绘制一只鸭子,AI能立即识别,并在随后的互动小游戏中,Gemini展示了其出人意料的精准度和推理能力,这是多模态模型实时演示的里程碑。这让我深刻地认识到,多模态融合将是AI发展的重要方向。
在Gemini之前,GPT-4在文本推理方面已达到相当高的水平。基于此,涌现出许多有趣的自动化项目。例如,通过简化HTML输入,大语言模型可以推断用户的操作意图,并调用浏览器API实现自动化操作。还有一些项目利用LLM的解释器能力,逐步推理并执行浏览器操作。这些项目极具创意和实用价值,但缺乏完善的多模态支持,想象空间略显局限。Gemini的出现,凭借其强大的推理能力、代码生成能力以及多模态能力的结合,预示着自动化测试领域即将迎来颠覆性的变革。
UI自动化:AI赋能的未来
UI自动化一直是自动化测试领域中难度最高的挑战之一。尽管其概念出现较早,且经过了相当长时间的发展,但UI自动化的普及程度相对较低。在资源和时间有限的情况下,UI自动化测试往往成为优先降本增效的选择。然而,Gemini这类大语言模型的出现,有望为UI自动化带来革命性的改变。
未来,我们可以直接向AI输入以自然语言编写的、描述相对明确的测试用例。AI能够准确推断出测试意图,还原测试步骤,并将这些步骤转化为可执行的测试代码并自动运行。通过运行中提供的截图和代码报错信息,AI可以自动分析测试结果,并迭代和修正代码错误,直至输出最终的正确代码。这将使UI自动化测试实现完美的闭环。
这意味着,不久的将来,我们可能只需编写好手工测试用例,即可完成相对完美的自动化测试工作。测试人员的工作重心将从执行测试用例转移到设计测试用例,而执行工作将由AI和机器承担。
更进一步,如果AI的推理能力足够强大,它甚至可以生成大部分测试用例。测试人员只需补充一些极端场景的用例即可。测试用例的来源可以是产品文档,AI可以分析产品文档,甚至产品设计图,生成大部分内容,人工只需负责查缺补漏和提出修改意见。同样,AI也能编写大部分代码。未来的工作方式将发生巨大转变,从单纯的人际合作转变为人与AI的协作模式,通用知识和能力将变得廉价,而垂直领域的专业知识将愈发重要。
接口自动化:规则与推理的融合
接口自动化对多模态的需求相对较低。然而,凭借模型的推理和生成能力,以及海量的上下文输入支持,我们完全可以为接口自动化用例定义规则,并训练模型应用这些规则生成测试用例。
例如,如果我们的CRUD接口遵循RESTful原则,AI完全有能力生成RESTful接口的测试用例。毕竟,RESTful的规则相对清晰,且对于具体资源而言,接口和用例的数量都是可枚举的。
因此,对于一些相对简单的接口,利用AI编写用例在直觉上是可行的。然而,对于复杂接口,例如那些具有繁杂的前置依赖和操作步骤的接口,AI仅凭接口文档可能难以推断各种具体场景。在这种情况下,我们需要一种接近自然语言的简化版中间语言(DSL),用于描述接口的输入输出以及构造复杂的接口测试场景。AI可以根据这种DSL生成代码,从而提高效率和准确性。
这种简化语言的DSL同样有其自身规则。因此,我们还可以用自然语言描述接口测试的场景和出入参,让AI帮助我们生成这种中间DSL,通过LLM的调用链方式完成整体的接口自动化工作。
单元测试:TDD与AI的结合
与前两种测试类型相比,单元测试的自动化可能更容易实现。已经有人尝试TDD(测试驱动开发),利用AI生成测试用例,然后根据这些用例生成代码。这是一种非常好的实践方式。从理论和情感上来说,未来的开发工作应该以人与AI进行TDD的方式进行。
开发者负责拆分需求、设计数据结构、抽象表示形式、提取代码流程,然后要求AI生成单元测试用例。之后,根据经验和场景,人工增加一些用例,并让AI实现可以通过测试的代码。重复上述过程,直至代码最终完成。最终,我们可能得到结构良好且经过充分测试的代码。
数据生成:AI助力测试数据构建
测试数据的生成通常是一项难度高、耗时费力的工作。然而,在很多情况下,我们需要在测试环境和预发布环境中构造大量看似真实的测试数据。由于大部分数据都存储在数据库中,而插入数据的过程通常可以用SQL来表示,因此理论上可以用AI生成大量的测试数据。目前,大语言模型在文本生成和代码生成方面的能力已经相对成熟。以下两种方法应该是可行的:
- 导出线上数据并进行脱敏:首先导出一份线上数据,然后告知AI脱敏规则,例如姓名、邮箱等。让AI自行推断如何进行敏感信息的替换,甚至可以让AI判断哪些字段是敏感的,并代码搜索数据的约束条件,例如银行卡的余额必须为正数等。后续的脱敏工作由AI自行完成。经过多次迭代,应该可以得到一份相对可用的测试数据。
- 从零开始生成:让AI自行判断每个字段的意图,并搜索代码中的约束规则。首先,让AI生成每个字段的生成规则,例如email字段必须生成符合条件的邮箱。然后,人工抽查规则的可用性。如果没有问题,则进行多轮生成。最后,应该可以选择出几份可用的数据集。
总结与展望
可以预见,在不久的将来,在算力和资源允许的情况下,自动化测试领域将迎来颠覆式的创新。然而,作为普通测试人员,我们不必过度担心。首先,我们中的大多数人可能并不会从事自动化测试,届时AI对我们而言可能是补充,而不是替代;其次,如果AI的运行成本和效率高于人类,大规模的替代不会立即发生。
然而,AI代表着未来。在未来的某一天,AI很可能比绝大多数人都要稳定和廉价。届时,我们将何去何从?我还没有想好,也许整个社会都还没有做好准备。
由于资本和人才的涌入,我猜测,这一天可能会很快到来。
行动起来吧,在路上总比一直观望要好。未来的你肯定会感谢现在拼搏的自己!