测试全绿之后还会漏 Bug:用独立 QA Agent 做黑盒验收的工程实践
CI 全绿、单测全过,PR 合并,用户点下按钮却报错。问题不是覆盖率,而是验收权放错了人:写代码的 Agent 在给自己发合格证。本文拆解 Mo 如何定位控件、QA Bench 的 1,396 条标注跑出什么结果,以及接 CI 前要算的三笔账。
一、测试全绿为什么还会漏
断言只证明作者想到的路径成立。真实产品的漏点集中在四类:
-
用户路径没写进断言:表单填错、重复提交、刷新后回退。
-
视觉布局没有断言:按钮被遮挡、文案截断、弹窗关不掉。
-
跨页面状态难写:权限切换、计费回滚、批量操作后的列表一致性。
-
Agent 主动让 CI 变绿:改测试比改实现便宜。
这四类都在实现之外。测试金字塔把 UI 测试放在塔尖,因为慢、脆、维护贵;写测试的人换成 Agent 后,结构没变,"作者没想到"却被放大了。

自己批卷:让写码的 Agent 自测,等于自己盖章
二、QA Agent 怎么工作
Mo 的输入只有两样:运行中的地址或构建,一段 brief。它不读源码决定点哪里,也不往仓库写测试文件。
一次会话分四类角色:会话 Agent 规划并派发;探索 Agent 只报疑似;Bug bash Agent 跑流程;复现 Agent 从干净起点重走。功能 bug 必须独立复现才确认,静态问题截图即可。
定位不用 CSS 选择器或 XPath,而是自然语言加可访问性树与截图线索,例如页头里的保存按钮。首次成功后缓存 locator,改版后重新寻找。代价是依赖可访问性元数据:该补 aria-label 就补,data-testid 只留给纯自动化标识。
三者分属不同层:
|
方式 |
输入 |
擅长 |
主要成本 |
|---|---|---|---|
|
Playwright 脚本 |
选择器、断言、数据 |
确定的回归路径 |
写和维护脚本 |
|
写码 Agent 自测 |
仓库、任务 |
验证自己改的那块 |
只覆盖自己想到的路径 |
|
QA Agent |
运行中的 App + brief |
探索路径、视觉与连续操作 |
误报 triage、按会话付费 |
Mo 不启动应用、不跑构建、不把测试写进仓库。可重复的回归仍应写成仓库里的 YAML,在 CI 每次 push 都跑。
三、1,396 条 bug 的数字
QA Bench 用 4 个开源应用、20 个产品区域、1,396 条人工确认 bug:Gitea 476、Metabase 464、Twenty 374、Saleor 82。标注流程:先做探索式 bug bash 收集候选,由 Mo 复现,再让 Claude Code 和 Codex 分别在浏览器与源码里核对,最后人工复核。驳回的结论也参与评分。
60 分钟档:
|
Agent |
命中 |
召回 |
精确率 |
每条成本 |
|---|---|---|---|---|
|
Mo |
269.3 |
19.3% |
84.2% |
$2.67 |
|
Codex + Sol + Playwright MCP |
86.3 |
6.2% |
86.0% |
$0.80 |
|
Claude Code + Opus 5.5 |
59.0 |
4.2% |
79.5% |
$4.09 |
|
Devin |
27.0 |
1.9% |
84.4% |
$3.89 |
Mo 召回是 Codex 的 3.1 倍、Claude Code 的 4.6 倍;精确率只排第三,比 Codex 低 1.8 个百分点;每条 bug 成本是 Codex 的 3.3 倍。整轮扫完 20 个区域,Mo 约 720 美元,Claude Code 约 241 美元,Codex 约 69 美元。
口径:同一份 brief、禁读源码、同样时间盒,各自在全新 E2B 沙箱跑;但 Mo 在 60 分钟档用 high effort,竞品统一 medium,裁判是厂商的 LLM 加人工复核,无第三方复现。这些数字适合判断工具能做到什么程度,不适合当采购判决。

Mo 召回 19.3%,每条命中 bug 2.67 美元
时间收益也不同:30 到 60 分钟,Mo 命中涨 52%,19/20 个区域变好;Codex 配 Sol 只涨 16%,配 Terra 下降。
四、接 CI 的三笔账
误报:精确率 84.2% 意味着每 100 条约 16 条不是真 bug;Mo 一轮还有约 50.7 条已知无效结论,Codex 配 Sol 只有 14.0 条。
耗时:单次 30 或 60 分钟,全量 20 个区域约 720 美元,不可能每个 PR 都跑。
计费:Free 档每月 2,000 credits;按量档 125 美元每月含 10,000 credits;普通步骤 1 credit,AI 生成或恢复 2 credits,典型运行约 10 步。
分工应是三层:CI 管回归,QA Agent 管探索,人管判定。

可重复的回归留给 CI,探索交 QA Agent,人只判定
五、落地
在 HiFox 里,这一步就是建独立验收任务:brief 写清预览地址、账号、必须流程、禁止操作、输出格式,处理人设成只做验收的 Agent。
target: https://preview.example.com
must_flow: [注册拦截, 重复提交, 退款后列表状态]
do_not: [改真实支付配置, 删共享数据]
output: [截图, 复现步骤, 期望vs实际]
hifox task create --title "验收:结账流程预览环境" \
--body-file ./qa-brief.yaml --delegate-agent qa-agent --output json
关键是边界:验收人不是写代码那位,运行目录不共享。发现写回任务评论,截图和复现步骤进时间线;真 bug 拆修复任务,误报进忽略清单。

任务属性里可把处理人指派给只做验收的 Agent
六、什么规模值得上
三个条件:预览环境稳定、关键流程集中、有人处理误报。三条都具备,挑一个高风险流程试;缺一条,先补回归测试和测试数据。
-
三人团队每周发版:只验注册、登录、下单、退款、改权限,按周跑,不按 PR。
-
每周二十个 PR:只对支付、权限改动触发,每月补一次全量扫描。
-
移动端发版前:上传构建,在远端 iOS 模拟器或 Android 模拟机安装;真机问题仍靠人工或众测。
小结
测试全绿解决"断言有没有过",验收解决"没人写过的路径有没有坏"。把验收拆成独立任务,交给只拿地址和 brief 的 Agent,发现经复现和人工判定后留在任务上。19.3% 召回、84.2% 精确率、每条 2.67 美元都是厂商口径,但至少把"谁来验收"量化了。下一步:挑一个高风险流程,写一段带边界条件的 brief,让不写代码的 Agent 点一遍。
更多推荐



所有评论(0)