用途
Dogfood 用于系统化地探索一个 Web 应用,发现其中的缺陷、用户体验问题及其他问题,并生成一份报告,为每一项发现提供完整的复现证据。当用户要求进行“dogfood”“QA”“探索性测试”或“查找问题”时使用。
主要能力
- 以真实用户视角系统化遍历应用:从主导航出发,访问每个顶层区块,测试按钮、表单、下拉菜单、模态框等交互元素。
- 检查边界情况:空状态、错误处理、边界输入。
- 尝试真实的端到端工作流(创建、编辑、删除流程)。
- 定期检查浏览器控制台错误。
- 为每个问题收集复现证据:交互类问题录制视频并逐步截图,静态类问题使用单张标注截图。
- 增量式撰写报告,每发现一个问题立即追加,避免会话中断导致丢失。
- 会话结束时更新严重程度统计并关闭会话。
使用方式
设置
仅需提供目标 URL,其余参数均有合理默认值:
- 目标 URL(必填):如 vercel.com、http://localhost:3000
- 会话名称:默认由域名 slug 化生成(如 vercel.com -> vercel-com),可用 --session my-session 覆盖
- 输出目录:默认 ./dogfood-output/,可用 Output directory: /tmp/qa 覆盖
- 范围:默认整个应用,可指定如 Focus on the billing page
- 认证:默认无,可指定如 Sign in to user@example.com
如果用户说“dogfood vercel.com”之类的话,直接使用默认值开始,不要追问澄清问题,除非提到了认证但缺少凭据。
始终直接使用 agent-browser,不要用 npx agent-browser。直接二进制使用快速的 Rust 客户端;npx 经由 Node.js 会明显更慢。
工作流
- 初始化:创建会话、输出目录、报告文件。
- 认证:如需登录则登录并保存状态。
- 定位:导航到起点,拍摄初始快照。
- 探索:系统化访问页面并测试功能。
- 记录:发现每个问题时截图并记录。
- 收尾:更新汇总计数,关闭会话。
1. 初始化
mkdir -p {OUTPUT_DIR}/screenshots {OUTPUT_DIR}/videos
cp {SKILL_DIR}/templates/dogfood-report-template.md {OUTPUT_DIR}/report.md
agent-browser --session {SESSION} open {TARGET_URL}
agent-browser --session {SESSION} wait --load networkidle
2. 认证
如需登录:
agent-browser --session {SESSION} snapshot -i
agent-browser --session {SESSION} fill @e1 "{EMAIL}"
agent-browser --session {SESSION} fill @e2 "{PASSWORD}"
agent-browser --session {SESSION} click @e3
agent-browser --session {SESSION} wait --load networkidle
对于 OTP/邮箱验证码:询问用户,等待回复后输入验证码。登录成功后保存状态:
agent-browser --session {SESSION} state save {OUTPUT_DIR}/auth-state.json
3. 定位
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/initial.png
agent-browser --session {SESSION} snapshot -i
识别主导航元素,规划要访问的区块。
4. 探索
阅读 references/issue-taxonomy.md 获取完整的问题清单和探索检查表。策略:从主导航开始,访问每个顶层区块;在每个区块内测试交互元素;检查边界情况;尝试真实的端到端工作流;定期检查浏览器控制台。
每个页面执行:
agent-browser --session {SESSION} snapshot -i
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/{page-name}.png
agent-browser --session {SESSION} errors
agent-browser --session {SESSION} console
自行判断探索深度,核心功能多花时间,外围页面少花时间。若某区域问题集中,深入调查。
5. 记录问题(复现优先)
步骤 4 和 5 同时进行——探索与记录一次完成。发现问题时立即停止探索并记录,不要先探索完整个应用再记录。
每个问题必须可复现。选择合适级别的证据:
交互/行为类问题(功能、UX、操作时的控制台错误):需要用户交互才能复现,使用完整复现流程,录制视频并逐步截图:
agent-browser --session {SESSION} record start {OUTPUT_DIR}/videos/issue-{NNN}-repro.webm
agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-1.png
sleep 1
# 执行操作
sleep 1
agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-2.png
sleep 1
# ...继续直到问题出现
sleep 2
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}-result.png
agent-browser --session {SESSION} record stop
在报告中写入编号复现步骤,每步引用对应截图。
静态/加载即可见的问题(错别字、占位文本、文字截断、错位、加载时的控制台错误):无需交互,单张标注截图即可,无需视频和多步复现:
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}.png
在报告中写简要描述并引用截图,将 Repro Video 设为 N/A。
所有问题:立即追加到报告,不要批量留到后面;递增问题计数器(ISSUE-001、ISSUE-002……)。
6. 收尾
目标找到 5-10 个记录充分的问题后收尾。证据深度比总数更重要——5 个带完整复现的问题胜过 20 个描述模糊的问题。
探索后:重新阅读报告,更新汇总严重程度计数,使其与实际问题一致;每个 ### ISSUE- 块都必须在总计中体现。关闭会话:
agent-browser --session {SESSION} close
告知用户报告已就绪,并总结发现:问题总数、按严重程度分类、最关键的项目。
适用场景
- 对 Web 应用进行探索性测试和 QA。
- 在发布前系统化查找缺陷和体验问题。
- 需要为每个问题提供可复现证据的测试报告。
限制与指导
- 复现是关键。每个问题都需要证据,但证据要与问题匹配:交互类问题需要视频和逐步截图;静态问题只需单张标注截图。
- 收集证据前先验证可复现性:至少重试一次确认问题可稳定复现,否则不是有效问题。
- 不要为静态问题录制视频。
- 交互类问题逐步截图,捕捉操作前、操作中、操作后。
- 复现步骤要与截图对应,读者应能不看浏览器就跟随步骤。
- 使用正确的快照命令:snapshot -i 用于查找可点击/可填写元素;snapshot(无参数)用于阅读页面内容。
- 要彻底但要有判断力:不是按测试脚本执行,而是像真实用户一样探索。
- 增量式撰写发现,会话中断时发现得以保留。
- 绝不删除输出文件,不在会话中途删除截图、视频或报告,不关闭会话后重启。
- 绝不阅读目标应用的源代码:以用户身份测试,而非审计代码。不读取被测应用的 HTML、JS 或配置文件,所有发现必须来自浏览器中观察到的内容。
- 检查控制台:许多问题在 UI 中不可见,但会以 JS 错误或失败请求出现。
- 像用户一样测试,而非机器人:尝试常见工作流端到端,点击真实用户会点击的内容,输入真实数据。
- 像人一样打字:录制视频时填写表单字段使用 type 而非 fill(逐字符输入);仅在视频录制之外、速度重要时使用 fill。
- 为人类调整复现视频节奏:操作间加 sleep 1,最终结果截图前加 sleep 2。视频应能以 1 倍速观看。
- 高效使用命令:独立命令可在单次 shell 调用中批量执行;滚动使用 agent-browser --session {SESSION} scroll down 300,不要用 key 或 evaluate 滚动。
参考资料
- references/issue-taxonomy.md:会话开始时阅读,校准要查找的内容、严重程度级别、探索检查表。
- templates/dogfood-report-template.md:复制到输出目录作为报告文件。