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

发布时间:2026/11/5 21:43:36

Skills + MCP + Playwright: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关键链路一致性 SkillUI、接口、数据库或业务状态的联合校验失败归因 Skill自动收集请求响应、日志、截图和 Trace辅助区分产品 Bug、环境问题、脚本问题测试数据 Skill生成数据、清理数据、避免测试之间互相污染需求风险分析 Skill读取 PRD、历史缺陷和接口文档输出高风险测试点回归报告 Skill按团队规范汇总通过率、失败原因、风险项和发布建议。Skills 不是替代测试工程师判断。它做的是把那些反复验证过的判断标准先交给 AI 严格执行。当团队把这些规则逐步沉淀下来AI 才不会只是“跑得很快的脚本生成器”而会开始成为真正可控的质量协作对象。如果你现在正在接触 Codex、Claude Code、Skills、MCP 或 Playwright不妨先问自己一个问题AI 帮我把测试跑完了它验证的是页面表象还是业务事实这两者之间往往就是一条 Skill 的距离。我们近期也会围绕 Agent、MCP、Skills、RAG 和 AI 自动化测试持续拆解能够放进真实研发流程的测试场景。本文部分内容参考了霍格沃兹测试开发学社整理的相关技术资料主要涉及软件测试、自动化测试、测试开发及 AI 测试等内容侧重测试实践、工具应用与工程经验整理。
延伸阅读

更多相关文章

2026/10/31 6:14:24

企业通信NAT穿透与会话保活全解:400电话、云客服、呼叫中心、AI机器人、私有化部署单通断线根治规范

摘要:单通、间歇性无声、通话几分钟自动断线、转接后丢媒体、外网坐席通话不稳定,是企业通信最顽固、最难复现的高频问题。绝大多数此类故障并非设备、线路、信令BUG,而是NAT端口老化、媒体端口映射失效、会话保活机制不匹配、公私网链路隔离…

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑