市面上大部分的 monkey 类测试工具,基本是随机或者在策略下随机的遍历逻辑;典型的例如:原始的 monkey、或者 fastbot 这种基于预训练模型 + 策略配置的 monkey;但无论哪一种,都有固定的缺陷。
基于随机和动作冗余以及配置成本之间的关系,我们在想,有没有一种方式,可以以最小的成本,作出最符合人类思维的遍历结果,恰逢年初,gpt 横空出世,因此我们决定用 gpt 来做探索性的尝试。
GptTraversal 是一个基于大模型的 app 遍历程序,我们使用大模型代替了传统的代码遍历决策系统,如一些典型算法下的策略:深度优先,广度优先,控件的类型和优先级映射,黑白名单设置等;转而让大模型以一个正常的 “人” 的思维,面对 app 的页面,进行遍历的动作决策。
由于是公司内的项目,因此暂时不能开源,可以说下大概的原理。
首先,我们将 app 的页面树,做处理后,交给 gpt,让他判断当前的场景,以及下一步如何操作,并记录下历史的决策,下一步的操作会基于遍历目标和历史决策进行,这一步相当于给 gpt 提供视觉,让 gpt“看见” app(当时还没有 gpt4v);
其次,我们会内置相应的动作,例如点击、滑动、输入等等,gpt 会从动作库选择一个,进行相关的动作触发,这一步相当于给 gpt 提供了手,可以对 app 进行直接操作;
最后,我们会记录过程的一切数据,包括覆盖率、截图、内存信息等等,作为最终的报告汇总数据;额外的,为了避免 token 溢出问题带来的 ai 步骤的步数限制,导致遍历度不够,我们增加了传统的 monkey 和 ai 步骤的混编,让随机和有序相结合的进行遍历。
基本上来说,可以代替之前需要定制动作的节点,例如登录、循环翻页、填写表单等等,完全不需要任何的定制化脚本,gpt 可以自主以正常人的思维进行操作。
缺点:
谁也没想到,才过了一年,大模型的进化速度如此之快;目前来说,这个工具的问题,大部分都是大模型当下技术的局限性导致,但我相信,未来一定是全智能化的测试方向,也许最终,我们给到工具的测试指令就是一句话:“这里有个 app,你来测一下”