gemini在自动化测试中的潜力

乙醇 创建于 6 months 之前

最后更新: 6 months 之前

阅读数: 553

可惜google有造假

昨天google发布了全新的ai模型gemini,在视频里google演示了gemini近乎神奇的实时反馈能力,比如测试人员画一只鸭子,ai可以立即识别,以及后面的一些互动小游戏中,gemini展示出了出人意料的精准度和推理能力,这是令我印象最为深刻的多模态模型的实时演示了。

珠玉在前,gpt4的文本类型的推理能力已经到达了一个相对可用的状态,基于该能力,我们也看到了一些比较有意思的自动化类型的项目,比如通过简化html输入大语言模型,让大语言模型去推断用户想要进行的操作,最终调用浏览器api进行自动化操作的项目,以及利用llm的解释器能力,一步一步推理并进行浏览器操作的项目,这些项目都非常有创意,也有一定的实用性,但是缺乏完善的多模态支持总让人觉得想象空间可能没有变得非常广阔。gemini的出现,强大的推理能力,代码生成能力以及多模态能力的结合,也许会为自动化测试领域带来翻天覆地的变化。

UI自动化

这是难度最高的自动化测试类型,比如浏览器和app的自动化,尽管概念出现的非常早,而且也发展了相当长的一段时间,但是ui自动化的普及度却相对来说不算太高,在资源和时间有限的情况下,ui自动化测试往往是被大家优先降本增效的不二选择。

类型gemini的大语言模型的出现,可能会给ui自动化带来革命性的变化。今后,我们可以直接向ai输入一些描述相对明确的测试用例,当然,是用自然语言编写的,ai可以推断出我们的测试意图,还原测试步骤,最终将测试步骤转化成测试代码,自动运行,通过运行中提供的截图和代码报错信息自动分析结果,自动迭代和修正代码错误,直到输出最终代码,基本上ui自动化是可以完美闭环的。

也就是说也许不久之后我们只需要写好手工测试用例就可以完成相对完美的自动化测试工作了,以后的测试人员可能不再需要每个用例都去执行一遍,执行的工作应该可以被ai和机器替代绝大部分。

顺便再考虑一下测试用例,如果ai的推断能力足够强的话,ai应该可以写出大部分的测试用例,这时候测试人员只需要补充一些极端场景的用例就可以了。

那测试用例是从哪里来呢?可能是从产品文档里分析出来的,同样,如果模型精通多模态和推断的话,那么产品文档和产品设计图也是可以用ai去生成一大部分的,人工只要负责查缺补漏和提出修改意见就好了。同理,代码的话ai也能写个大部分,也许今后我们的工作方式会发生巨大的转变,从单纯的跟人合作变成跟人和ai一起协作,通用知识和能力将变得廉价,垂类的信息和领域知识可能会越来越值钱。

接口自动化

接口自动化可能不太需要多模态,基于模型的推理和生成能力,如果模型支持海量的上下文输入的话,那么我们是完全可以为接口自动化的用例定义规则,并教会模型如何应用这些规则生成测试用例。

举个例子,如果我们curd的接口遵循restful规则的话,ai是完全有能力生成restful接口的测试用例的,毕竟restful的规则比较清晰,而且对于具体资源来说接口和用例的数量都是可以枚举的。

因此对于一些相对简单的接口,用ai去编写用例从直觉上来说是可行的,不过对于复杂接口,比如一些接口有很繁杂的前置依赖和操作步骤,ai自动根据接口文档的话可能不太好去推断各种具体场景,这种情况下我们可能需要一种接近自然语言的简化版中间语言,这种语言描述一些接口的输入输出以及构造复杂的接口测试场景,ai根据这种DSL去生成代码的话可能效率和准确性都要更高一点。

因为这种简化语言的dsl也是有章法的,所有我们还可以用自然语言去描述接口测试的场景和出入参,让ai去帮助我们生成这种中间的dsl,通过llm的调用链的方式完成整体的接口自动化工作。

单元测试

与前面两种测试类型相比,单元测试应该是相对容易落地的。之前看过有人做TDD,让ai去生成测试用例,然后根据用例去生成代码,这就是一种非常好的实践方式。从理论上和情感上说,我觉得以后的开发工作应该都是人与ai进行TDD的方式进行的。开发者拆分需求,设计数据结构,抽象表示形式,提取代码流程,然后要求ai生成单元测试用例,之后根据经验和场景,人工增加一些用例,让ai去实现可以通过测试的代码,然后重复上面的过程,直到代码最终完成,这时候我们可能得到结构良好和测试充分的代码了。

数据生成

测试数据的生成往往是难度高而且费时费力的事情,但很多时候我们需要在测试环境和预发布环境构造大量的看上去很真实的测试数据。因为我们可能大部分的数据都是存在数据库里,插入数据的过程往往也可以用sql来表示,所以理论上应该是可以用ai去生成大量的测试数据的,毕竟现在的大语言模型在文本生成和代码生成上能力都相对可用。我想了一下,下面的两种方式应该是可行的。

  • 导出线上数据并进行脱敏。先导出一份数据,然后告诉ai脱敏规则,比如姓名,邮箱等,让ai自己推断如何进行敏感信息的替换,甚至可以让ai去判断哪些字段是敏感的,并且让ai去代码搜索数据的约束条件,比如银行卡的余额必须为正之类的信息,后面的脱敏工作让ai自己完成,反复进行多次之后应该可以得到一份相对可用的测试数据;
  • 从零开始生成,让ai自己判断每个字段的意图,然后让ai去搜索代码里的约束规则,先让ai生成一份每个字段的生成规则,比如email字段就要生成符合条件的邮箱,然后人工抽查一下规则的可用性,如果没问题了就进行多轮生成,最后应该可以选择出几份可用的数据集。

总结

应该可以预见,在不久的将来,在算力和资源允许的情况下,自动化测试这个领域将迎来颠覆式的创新。不过作为普通测试人员也不用过度担心,首先我们大部分人可能也不会做自动化测试,那时候ai对我们来说可能是补充,而不是平替;其次如果ai的运行成本和运行效率比人类要高的话,大面积的替换也不会马上发生。

不过ai还是未来了,在今后的某一天,ai很可能比绝大多数人都要稳定和便宜,到时候我们将何去何从?我还没想好,也许整个社会都还没有准备好吧。

因为资本和人才的涌入,我猜,这一天也许会很快到来。

0