第 11 篇
让智能体执行手动测试
Simon Willison 介绍如何让编程智能体通过命令行和浏览器试验代码,并使用 Rodney 与 Showboat 记录测试过程和结果。
Hex4C59 5 分钟阅读 更新于 2026-10-17
软件工程·译文
译文信息
- 原文:Agentic manual testing
- 作者:Simon Willison
- 中文翻译与整理:Hex4C59(AI 辅助)
- 翻译整理:2026-10-11
本文为非官方中文译文,依据提供的原文正文翻译,并按系列目录补入小节标题。正文中的「我」、工具能力和实践效果均为原作者的表述。示例命令和测试流程未由译者执行。
编程智能体的关键区别在于,它们能执行自己编写的代码。因此,与只会输出代码、却无法验证代码的大语言模型(LLM)相比,它们有用得多。
在 LLM 生成的代码真正执行过之前,绝不要假定它能够正常工作。
编程智能体能够确认自己产出的代码是否符合预期;如果不符合,就继续迭代,直到符合为止。
让智能体编写单元测试,尤其是采用测试先行的测试驱动开发(Test Driven Development,TDD),是确保它实际运行并检验所写代码的一种有效方法。
除此之外,还有其他值得采用的方法。
代码通过测试,不代表它就能按预期工作。任何做过自动化测试的人,都见过测试全部通过、代码却明显出问题的情况:服务器可能一启动就崩溃,某个关键界面元素可能没有显示,或者某个细节根本没有被测试覆盖。
自动化测试不能代替手动测试。在把功能纳入发布版本之前,我喜欢亲眼看到它正常工作。
我发现,让智能体对代码进行手动测试同样很有价值,常常能发现自动化测试没有捕捉到的问题。
智能体执行手动测试的机制 #
智能体应该怎样「手动」测试代码,取决于代码的类型。
对于 Python 库,一种实用的做法是使用 python -c "... code ..."。你可以把一段字符串或多行字符串形式的 Python 代码直接传给 Python 解释器,其中也可以包含导入其他模块的代码。
编程智能体都熟悉这个技巧,有时不用提醒就会采用。不过,提醒它们用 python -c 测试,往往也很有效:
使用
python -c,针对一些边界情况试运行那个新函数。
其他语言可能也有类似机制。即使没有,智能体也能很快写一个演示文件,再编译并运行。我有时会让它把文件放在 /tmp,只是为了避免这些文件后来被意外提交到仓库。
在
/tmp中编写代码,试验那个函数的边界情况,然后编译并运行。
我的许多项目都是带有 JSON API 的 Web 应用。对于这类应用,我会让智能体用 curl 实际调用接口:
启动开发服务器,用
curl探索那个新的 JSON API。
让智能体「探索」,往往会促使它尝试新 API 的不同功能,很快就能检查许多种情况。
如果智能体通过手动测试发现了问题,我喜欢让它用红灯/绿灯 TDD 来修复。这样,新发现的情况就会被纳入长期保留的自动化测试。
使用浏览器自动化测试 Web 用户界面 #
如果项目包含交互式 Web 界面,有一套手动测试流程就更有价值。
过去,这类界面很难通过代码测试。但在过去十年里,真实浏览器自动化系统有了显著进步。用真正的 Chrome、Firefox 或 Safari 浏览器访问应用,可以在真实的使用环境中发现各种问题。
编程智能体非常熟悉这些工具的用法。
如今,其中最强大的工具是微软开发的开源库 Playwright。它提供功能完整的 API,智能体可以用多种常见编程语言调用它,自动操作各种常见浏览器引擎。
只要告诉智能体「用 Playwright 测试一下」,可能就够了。它随后会选择最合适的语言接口,或者使用 Playwright 的 playwright-cli 工具。
编程智能体也很适合使用专门的命令行界面(Command-Line Interface,CLI)工具。Vercel 的 agent-browser 是一个功能全面的 Playwright 命令行封装,专门为编程智能体设计。
我自己的项目 Rodney 也有类似用途,不过它通过 Chrome DevTools Protocol,也就是 Chrome 开发者工具协议,直接控制一个 Chrome 实例。
下面是我使用 Rodney 进行测试时的一条示例提示词:
启动开发服务器,然后使用
uvx rodney --help测试新的首页,查看截图,确认菜单位于正确的位置。
这条提示词里有三个技巧:
- 「使用
uvx rodney --help」会让智能体通过 uvx 包管理工具运行rodney --help。首次调用时,它会自动安装 Rodney。 rodney --help的帮助信息经过专门设计,包含智能体理解和使用工具所需的全部信息。这是帮助文本。- 「查看截图」提示智能体使用
rodney screenshot命令,也提醒它可以利用自己的视觉能力分析生成的图像文件,评估页面的外观。
一条简短的提示词,就包含了这么多手动测试操作!
Rodney 及类似工具提供了许多能力,包括在已加载的网站上运行 JavaScript、滚动、点击、输入文字,甚至读取页面的无障碍树。这棵树描述了界面元素及其关系,供辅助技术理解页面。
与其他手动测试方式一样,通过浏览器自动化发现并修复的问题,也可以加入长期保留的自动化测试。
过去,许多开发者不愿编写太多浏览器自动化测试,因为这类测试以不稳定著称:页面 HTML 中极小的调整,都可能引发一连串令人烦恼的测试失败。
Web 界面设计变化后,测试也需要相应更新。让编程智能体持续维护这些测试,可以大幅减少这部分工作。
让智能体使用 Showboat 记录过程 #
让智能体手动测试代码,既能发现更多问题,也能留下说明代码和测试过程的材料。
我对「让智能体展示自己的工作过程」这个问题很感兴趣。能够看到演示或有记录的实验,是确认智能体已经完整解决所交任务的一种有效方式。
我开发了 Showboat,让记录智能体手动测试流程的文档更容易生成。
下面是我经常使用的一条提示词:
运行
uvx showboat --help,然后创建一个notes/api-demo.mdShowboat 文档,用它测试并记录那个新 API。
与前面的 Rodney 一样,showboat --help 会教智能体理解 Showboat 是什么、该怎样使用。这是完整的帮助文本。
Showboat 的三个关键命令是 note、exec 和 image。
note 向 Showboat 文档追加一段 Markdown 笔记。exec 记录一条命令,随后执行它,并记录输出。image 向文档添加一张图像,适合加入使用 Rodney 拍摄的 Web 应用截图。
其中最重要的是 exec,因为它会同时记录命令及其实际输出,让你看到智能体做了什么、结果是什么。这种设计旨在减少智能体作弊的情况,避免它把期望的结果当成实际结果写进文档。
我发现,Showboat 这种方式很适合记录智能体会话中完成的工作。我希望看到更多工具采用类似的做法。
一起讨论
选中正文中的文字,可以针对这段内容发起讨论。
正在读取讨论…
在 GitHub 查看与管理讨论 ↗