CI 全绿、单测全过,PR 合并,用户点下按钮却报错。问题不是覆盖率,而是验收权放错了人:写代码的 Agent 在给自己发合格证。本文拆解 Mo 如何定位控件、QA Bench 的 1,396 条标注跑出什么结果,以及接 CI 前要算的三笔账。

一、测试全绿为什么还会漏

断言只证明作者想到的路径成立。真实产品的漏点集中在四类:

  • 用户路径没写进断言:表单填错、重复提交、刷新后回退。

  • 视觉布局没有断言:按钮被遮挡、文案截断、弹窗关不掉。

  • 跨页面状态难写:权限切换、计费回滚、批量操作后的列表一致性。

  • Agent 主动让 CI 变绿:改测试比改实现便宜。

这四类都在实现之外。测试金字塔把 UI 测试放在塔尖,因为慢、脆、维护贵;写测试的人换成 Agent 后,结构没变,"作者没想到"却被放大了。

图1:写码 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 加人工复核,无第三方复现。这些数字适合判断工具能做到什么程度,不适合当采购判决。

图2:QA Bench 60 分钟召回率与单条成本

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 管探索,人管判定。

图3:CI 回归、探索验收、人工判定三层分工

可重复的回归留给 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 拆修复任务,误报进忽略清单。

图4:HiFox 任务属性中把处理人指派给 Agent

任务属性里可把处理人指派给只做验收的 Agent

六、什么规模值得上

三个条件:预览环境稳定、关键流程集中、有人处理误报。三条都具备,挑一个高风险流程试;缺一条,先补回归测试和测试数据。

  • 三人团队每周发版:只验注册、登录、下单、退款、改权限,按周跑,不按 PR。

  • 每周二十个 PR:只对支付、权限改动触发,每月补一次全量扫描。

  • 移动端发版前:上传构建,在远端 iOS 模拟器或 Android 模拟机安装;真机问题仍靠人工或众测。

小结

测试全绿解决"断言有没有过",验收解决"没人写过的路径有没有坏"。把验收拆成独立任务,交给只拿地址和 brief 的 Agent,发现经复现和人工判定后留在任务上。19.3% 召回、84.2% 精确率、每条 2.67 美元都是厂商口径,但至少把"谁来验收"量化了。下一步:挑一个高风险流程,写一段带边界条件的 brief,让不写代码的 Agent 点一遍。

Logo

更多推荐