第 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.md Showboat 文档,用它测试并记录那个新 API。

与前面的 Rodney 一样,showboat --help 会教智能体理解 Showboat 是什么、该怎样使用。这是完整的帮助文本。

Showboat 的三个关键命令是 note、exec 和 image。

note 向 Showboat 文档追加一段 Markdown 笔记。exec 记录一条命令,随后执行它,并记录输出。image 向文档添加一张图像,适合加入使用 Rodney 拍摄的 Web 应用截图。

其中最重要的是 exec,因为它会同时记录命令及其实际输出,让你看到智能体做了什么、结果是什么。这种设计旨在减少智能体作弊的情况,避免它把期望的结果当成实际结果写进文档。

我发现,Showboat 这种方式很适合记录智能体会话中完成的工作。我希望看到更多工具采用类似的做法。


上一篇原文:先运行测试 · 下一篇原文:按顺序讲解代码

一起讨论

选中正文中的文字,可以针对这段内容发起讨论。

正在读取讨论…

在 GitHub 查看与管理讨论 ↗

文章讨论