Skills + MCP + Playwright:AI 自动化测试的“假通过”怎么治?

简介: AI生成UI自动化脚本易现“假通过”:页面提示成功,但业务实际失败。根源在于仅断言前端Toast,忽略接口响应与业务状态校验。本文提出构建“UI-接口-业务状态一致性”Skill,推动AI从“跑通流程”转向验证真实业务结果,让AI成为可控的质量协作者。

上周帮一个团队看 AI 生成的 UI 自动化脚本。

脚本跑得很漂亮:打开页面、填表、点击提交,最后页面弹出“提交成功”,报告里一片绿色。

但测试同学顺手去后台查了一下——这笔申请根本没有创建成功。

原因并不复杂:前端 Toast 提示先出来了,接口实际返回异常;而 AI 生成的脚本把“看见成功提示”当成了唯一断言。

这类问题在研发团队接入 Coding Agent、AI 自动化之后,会越来越常见。

AI 很会“把流程跑完”,但不天然知道:

页面完成一次点击,和业务真正成功,不是一回事。

01 AI 写出了脚本,为什么还会出现假通过?
现在用 Codex、Claude Code 这类工具补一条 Playwright 脚本,已经很方便。

给它一个页面、一段需求描述,通常几十秒就能生成这样的代码:

def test_apply_refund(page):
page.goto("https://test.example.com/refund/apply")

page.get_by_label("订单号").fill("A20260831001")
page.get_by_label("退款原因").select_option("重复下单")
page.get_by_role("button", name="提交申请").click()

expect(page.get_by_text("提交成功")).to_be_visible()

它的问题在于:这段代码只验证了页面说自己成功了。

但在真实业务中,至少还可能出现几种情况:

点击后前端乐观更新,接口其实返回 500;
接口返回成功,但退款单没有正确落库;
落库成功,但状态机流转错误,例如本应是 PENDING,却直接进入了 CLOSED;
测试环境里残留旧数据,页面展示的是上一轮的结果。
所以,AI 自动化最危险的不是“脚本不会写”。

而是:脚本把错误的结果,当成了正确的验证标准。

02 给 AI 一个“UI—接口—业务状态一致性”Skill
解决这件事,不是每次都重新提醒 AI:

“不要只断言页面提示,还要校验接口和数据。”

更好的做法,是把这条测试原则固化成一个项目级 Skill。

例如,在仓库里放一个 ui-api-consistency/SKILL.md:


name: ui-api-consistency

description: 用于涉及创建、提交、支付、审批等关键业务操作的 UI 自动化测试

测试规则

  1. 不允许只用 Toast、弹窗或按钮状态作为成功断言。
  2. 必须捕获关键请求,并校验 HTTP 状态码和响应体关键字段。
  3. 对创建类操作,必须通过业务查询接口验证最终状态。
  4. 断言应覆盖:请求参数、接口响应、业务实体状态。
  5. 测试失败时,输出 requestId、响应体和页面截图,便于定位。
    它的价值不在于多写了一个 Markdown 文件。

而在于以后无论是 Codex、Claude Code,还是团队里其他人调用 Agent 补脚本,都能沿用同一套质量规则。

Prompt 是一次性对话。 Skill 是可复用、可审查、可跟随项目演进的测试经验。

03 Playwright 负责操作,MCP 负责让 Agent 看见真实系统
有了规则,还要让 Agent 真正拿到验证业务结果的能力。

这时可以把能力拆开:

能力
在测试中的作用
Playwright
操作页面、监听网络请求、获取页面状态
MCP
连接 Swagger、测试数据服务、缺陷平台、业务查询接口等工具
Skills
固化什么时候必须做多层校验、失败后输出什么信息
Coding Agent
理解任务并组合调用这些能力,生成或维护测试代码
下面把刚才那条“假通过”脚本,改成真正能校验退款申请状态的版本:

import pytest
from playwright.sync_api import expect

@pytest.mark.e2e
def test_apply_refund_should_create_pending_refund(page, api_client):
order_no = "A20260831001"

page.goto("https://test.example.com/refund/apply")
page.get_by_label("订单号").fill(order_no)
page.get_by_label("退款原因").select_option("重复下单")

# 1. 点击动作和关键接口请求必须绑定
with page.expect_response(
    lambda response: "/api/refunds" in response.url
    and response.request.method == "POST"
) as response_info:
    page.get_by_role("button", name="提交申请").click()

response = response_info.value

# 2. 校验接口真正成功,而不是只看页面提示
assert response.status == 201
payload = response.json()
refund_id = payload["data"]["refundId"]
assert payload["data"]["status"] == "PENDING"

# 3. 通过业务查询接口确认最终状态
refund = api_client.get(f"/api/refunds/{refund_id}").json()["data"]
assert refund["orderNo"] == order_no
assert refund["status"] == "PENDING"

# 4. 页面反馈只作为体验层补充校验
expect(page.get_by_text("退款申请已提交")).to_be_visible()

这段代码的核心不是“多写了几个断言”。

而是把一次业务提交,拆成了三个层次:

页面层:用户是否完成操作;
接口层:服务是否真正成功处理请求;
业务层:最终数据和状态是否符合规则。
这才是 AI 自动化在关键链路上应该有的测试思维。

04 这类 Skill,恰恰是团队接入 AI 后最该先沉淀的
很多团队一上来就让 AI 做“自动生成测试用例”“自动写脚本”。

真正跑一段时间才发现,难的不是生成,而是控制生成结果的质量。

建议优先沉淀这几类测试 Skills:

关键链路一致性 Skill:UI、接口、数据库或业务状态的联合校验;
失败归因 Skill:自动收集请求响应、日志、截图和 Trace,辅助区分产品 Bug、环境问题、脚本问题;
测试数据 Skill:生成数据、清理数据、避免测试之间互相污染;
需求风险分析 Skill:读取 PRD、历史缺陷和接口文档,输出高风险测试点;
回归报告 Skill:按团队规范汇总通过率、失败原因、风险项和发布建议。
Skills 不是替代测试工程师判断。

它做的是把那些反复验证过的判断标准,先交给 AI 严格执行。

当团队把这些规则逐步沉淀下来,AI 才不会只是“跑得很快的脚本生成器”,而会开始成为真正可控的质量协作对象。

如果你现在正在接触 Codex、Claude Code、Skills、MCP 或 Playwright,不妨先问自己一个问题:

AI 帮我把测试跑完了,它验证的是页面表象,还是业务事实?

这两者之间,往往就是一条 Skill 的距离。

我们近期也会围绕 Agent、MCP、Skills、RAG 和 AI 自动化测试,持续拆解能够放进真实研发流程的测试场景。

相关文章
|
13天前
|
人工智能 测试技术 定位技术
从0到1打造测试用例生成智能体:RAG+知识图谱实战全记录
本文揭秘如何用“RAG+知识图谱+智能体”三合一方案破解AI测试用例乱编难题:RAG负责精准检索文档,知识图谱建模业务关系(如“订单取消→库存回滚”),智能体融合二者驱动大模型生成高覆盖、可验证的用例。实战中人工审核通过率从32%跃升至89%,让AI不再瞎编,而是照着“业务地图”精准行走。
|
12天前
|
人工智能 JavaScript 前端开发
Anthropic 官方 Web Testing Skill 公开了:我拆了一遍,它是怎么用 Playwright 做测试的
本文探讨AI测试新范式:从生成脚本转向构建测试Agent。Anthropic的webapp-testing Skill以“先侦察、再执行”为核心,通过决策树引导Claude动态理解页面、选择操作、验证结果,并强调证据链(截图/日志)、工程分层与可评测性。它标志着AI测试正从“写代码”迈向“自主完成测试任务”。
|
14天前
|
人工智能 JavaScript 测试技术
从0到1搭建AI辅助测试环境:2026最新版,建议收藏
告别繁琐配置!30分钟用Node.js+DeepSeek Harness+Playwright搭好AI测试环境,无需Python、不配服务器,API Key一贴即用。支持AI自动生成/执行Web测试用例,新手也能零门槛上手——最难的不是技术,是“以为很难”的念头。
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
2026测试Skill大爆发:从“会写脚本”到“会设计智能体”
2026年测试行业正经历结构性变革:手工测试需求降47%,全栈测开增340%。“熟悉MCP协议”“具备Skill封装与工程化能力”已成硬性门槛,而非加分项。测试核心正从“写脚本”跃迁为“设计智能体”——验证对象由功能转向AI决策能力,底层资产从用例库升级为可复用Skill库。
|
13天前
|
人工智能 自然语言处理 测试技术
测试Skill从0到1:需求拆解→用例生成→场景补全→质量评审全流程
本文介绍如何将资深测试工程师的经验封装为AI可调用的“测试Skill流水线”:通过需求拆解、用例生成、场景补全、质量评审四大Skill,实现从PRD到高质量测试用例的自动化生成,效率提升10倍以上,让经验沉淀为可复用、可迭代的团队资产。
|
27天前
|
人工智能 监控 安全
DeepSeek Harness一夜5万星,测试人的危机感一夜拉满
AI测试革命已至!DeepSeek Harness开源后12小时获5万星,能自主跑测试、分析失败、生成修复方案,正重塑测试工程师角色。它不是辅助工具,而是可追溯、可插件化的“数字员工”。执行、脚本、框架搭建层技能正被替代,但业务理解与风险决策仍是人的护城河。
|
2月前
|
人工智能 自然语言处理 测试技术
从 LLM 评测到 AI Agent 评测,我的一些思考!
本文深入剖析AI评测体系的演进与陷阱,指出当前主流评测方法在Agent场景下的根本性失效:静态数据集、单次测试、只看输出等范式无法应对Agent的动态性、不确定性与系统性。文章提出四大关键转变——从“说了什么”到“做了什么”、从数据集到交互环境、从单点分数到概率分布、从评模型到评完整系统,并倡导构建多维、场景化、闭环的科学评测体系
274 1
从 LLM 评测到 AI Agent 评测,我的一些思考!
|
15天前
|
人工智能 数据挖掘 测试技术
每天都在“点点点”,功能测试的下一步到底在哪?
这是一篇面向功能测试工程师的深度职业指南:剖析“忙而无积累”的困境,指出焦虑根源并非工作量,而是缺乏可沉淀的技术能力与质量思维。文章以真实学员案例切入,倡导从高频重复场景(如登录支付链路)切入自动化,强调“先解决问题再选工具”,并提出用线上数据驱动测试、提升质量工程能力等进阶路径,助力测试人突破职业瓶颈。
|
29天前
|
人工智能 缓存 架构师
从需求文档到测试计划再到测试报告,Opencode一条龙流水线搭建教程(附完整配置)
本文介绍如何用Opencode构建端到端测试流水线:将需求解析、测试计划、用例生成、执行分析与报告生成拆解为5条可复用指令(/spec→/plan→/testgen→/test→/report),一次配置,终身调用。AI自动串联各环节,100页PRD到完整测试报告仅需2小时,解放测试工程师于重复劳动,让经验沉淀为可复用流程。
|
8天前
|
人工智能 自然语言处理 测试技术
测试工程师的简历,别再写“会用 AI 生成用例”
简历中勿堆砌AI工具名,应聚焦质量闭环:用“业务问题→真实约束→你的动作→可验证结果”四步法,展现如何用AI识别风险、设计规则、拦截问题、回溯验证。核心是替业务守住质量防线,而非炫技。