前言
上篇文章,我们使用 Appium 的插件 appium-llm-plugin 来辅助我们进行 UI 自动化测试。不过整个流程感觉还是不够智能,我们还是得手动去调用 API 来完成一个测试用例的编写,有没有可能把这个也去掉,用纯自然语言来写一个自动化测试用例呢?这篇文章就来试一下,来实现一个简单的自动化测试 Agent。
先上效果,这是我们的测试用例,
1 | 你帮我进行如下自动化测试: |
该用例演示了 “进入掘金首页 -> 打开第一篇文章 -> 点击关注” 这个流程:
实现方式
本文是基于 OpenAI 的 Function Call 来实现。整体流程如下:
首先,我们需要定义一些 Tools 来供大模型使用:
1 | [ |
我们把上述 Tools 作为系统提示词传递给大模型:
1 | you are a test engineer who is good at automated testing, you can use the following tools to complete automated testing: |
然后,把我们的测试用例也传递给大模型。接下来不断重复下面这个步骤:
- 大模型返回 Function Call 的指令
- 执行 Function Call
- 将 Function Call 的执行结果传递给大模型,这里要么执行成功,要么大部分情况下就是元素找不到,返回
Element not found
,我们期待的是大模型会聪明地重新进行尝试。
下面是测试的记录及分析:
1 | [ |
总结
本文通过一个非常简单的例子试验了一下基于 Appium 的自动化测试 AI Agent,得到了一个成功的结果,但是过程中还是有些问题的:
- 大模型一开始总是拿着上一个页面的 XML 来找当前页面的元素,如果找不到还好一点,就怕找到一个错的,点击后到了一个不该去的页面,接下来就 GG 了,加上这句提示词后效果会好一点 “Always get the latest page information before you decide the next action.”,下一步可以试试把提示词进一步优化。
- 如何让大模型知道自己点错了元素进入到了错误的页面?是不是可以给目标页面一些简单的描述,比如“你进入的应该是文章详情”。这样当大模型意识到进入到了错误的页面时,可以尝试后退到上一步进行重试。不过这里注意注意的是不要和断言混淆了,因为断言失败时,整个测试的结果应该是失败的。
- 可以支持让大模型通过页面截图来定位元素,跟 XML 的方法结合起来,提高准确性。