让 AI 编程助手手动测试代码
AI 编程助手(Coding Agent)的核心能力是能执行自己写的代码。这比那些只输出代码、无法验证的大语言模型(LLM)有用得多。
永远不要假设 LLM 生成的代码能直接运行,除非它真的被执行过。
编程助手有能力确认自己写的代码是否按预期工作,或者不断迭代直到成功。让助手写单元测试(尤其是测试驱动开发 TDD)是确保代码被充分执行的好方法,但这还不够。
代码通过测试,不代表它真的能正常工作。做过自动化测试的开发者都见过这种情况:测试全绿,但代码本身却有问题——可能启动时就崩溃,关键 UI 元素没显示,或者某些细节测试没覆盖到。
自动化测试不能替代手动测试(Manual Testing)。在功能上线前,我喜欢亲眼看到它跑起来。让助手进行手动测试也很有价值,经常能发现自动化测试没捕捉到的问题。
手动测试的几种方法
助手如何“手动”测试代码,取决于代码的类型。
对于 Python 库,一个有用的模式是 python -c "... code ..."。你可以直接把一段(或多行)Python 代码传给解释器执行,包括导入其他模块的代码。编程助手们都熟悉这个技巧,有时不用提醒也会用。但提示它们用 python -c 测试通常很有效。
其他语言可能有类似的机制。如果没有,让助手写个演示文件然后编译运行也很简单。我有时会建议它用 /tmp 目录,避免这些文件不小心被提交到仓库(Repository)。
我的很多项目是构建带 JSON API 的 Web 应用。对于这些,我告诉助手用 curl 来测试:
curl -X POST http://localhost:8000/api/endpoint -H "Content-Type: application/json" -d '{"key": "value"}'
让助手去“探索”(explore),它往往会尝试新 API 的多个方面,能快速覆盖大量场景。
如果助手在手动测试中发现有问题,我喜欢让它用红绿 TDD 来修复。这样能确保新情况被永久性的自动化测试覆盖。
用浏览器自动化测试 Web UI
如果项目涉及交互式 Web UI,手动测试流程就更重要了。
历史上这类测试很难用代码完成,但过去十年,自动化真实浏览器的系统有了显著改进。用真实的 Chrome、Firefox 或 Safari 浏览器跑应用,能在真实环境中发现各种有趣的问题。编程助手非常擅长使用这些工具。
目前最强大的是 Playwright,一个由微软开发的开源库。Playwright 提供了功能完整的 API,支持多种流行编程语言,能自动化所有主流浏览器引擎。
直接告诉助手“用 Playwright 测试”可能就够了。助手会选择最合适的语言绑定,或者使用 Playwright 的 playwright-cli 工具。
编程助手和专用 CLI 配合得很好。Vercel 开发的 agent-browser 就是一个围绕 Playwright 的全面 CLI 包装,专为编程助手设计。
我自己的项目 Rodney 也类似,不过它使用 Chrome DevTools 协议直接控制 Chrome 实例。以下是我用来测试的提示(Prompt):
Test the new feature manually using Rodney. Use `uvx rodney --help` to learn how to use it. Look at screenshots to confirm it looks right.
这个提示里有三个技巧:
- “用
uvx rodney --help”会让助手通过 uvx 包管理工具运行rodney --help,uvx 会在第一次调用时自动安装 Rodney。 rodney --help命令是专门设计的,让助手能理解和使用这个工具。这是完整的帮助文本。- “看截图”(look at screenshots)暗示助手应该用
rodney screenshot命令,并提醒它可以用自己的视觉能力分析生成的图片文件,评估页面外观。
短短一句提示,就包含了大量手动测试!
Rodney 这类工具提供了广泛的能力:在加载的网站上运行 JavaScript、滚动、点击、输入,甚至读取页面的无障碍树。
和其他手动测试一样,通过浏览器自动化发现并修复的问题,也可以加到永久自动化测试里。
过去很多开发者避免做太多自动化浏览器测试,因为它们以不稳定著称——页面 HTML 的微小改动都可能导致测试失败,令人沮丧。
让编程助手长期维护这些测试,大大降低了因 Web 界面设计变更而更新测试的摩擦。
用 Showboat 让助手做记录
让助手手动测试代码不仅能发现问题,还能创建工件(Artifact),帮助记录代码并展示测试过程。
我对让助手展示工作过程(show their work)很着迷。能看到演示或记录下来的实验,是确认助手全面解决了给定挑战的有效方式。
我开发了 Showboat 来方便构建记录助手手动测试流程的文档。以下是我常用的提示:
Document your manual testing using Showboat. Use `uvx showboat --help` to learn how.
和 Rodney 一样,showboat --help 会教助手 Showboat 是什么以及怎么用。这是完整的帮助文本。
Showboat 有三个关键命令:note、exec 和 image。
note 向 Showboat 文档追加一条 Markdown 笔记。exec 记录一条命令,然后运行该命令并记录输出。image 向文档添加图片——对于用 Rodney 截取的 Web 应用截图很有用。
exec 命令最重要,因为它同时记录了命令和输出结果。这展示了助手做了什么以及结果如何,旨在防止助手作弊,把希望发生的事写进文档。
我发现 Showboat 模式能很好地记录我在助手会话中完成的工作。希望看到类似模式在更多工具中被采用。
觉得有用?分享给更多人