游乐游手机版
首页/AI热点日报/热点详情

PagePilot PC端人工智能测试技能设计与实战完整指南

类型:热点整理2026-07-17
针对支付宝商家中心PC端测试面临的长链路、高成本、线上风险大等挑战,设计并实践了PagePilotAI测试方案。该方案基于AIAgent、组件化知识库、浏览器自动化与DB验证,通过四趟编译解析自然语言用例,将踩坑经验沉淀为组件md,有效解决了React受控组件、图片上传等复杂交互问题,随机出错率从40%降至5%以下。

背景介绍

支付宝商家中心(b.alipay.com)是面向蚂蚁生态内所有商户的一站式服务平台,集产品签约、账户资金管理、营销推广、账单对账等核心功能于一体。团队负责该平台的PC端业务测试,日常工作中积累了丰富经验——今天这篇文章,将深入剖析核心思路与实践方法。

1.1 问题与挑战

挑战1:PC端业务繁多,测试链路长,且主要面向B端和小二端。

以支付宝商家中心的核心业务为例,店铺开通和商户入驻,每条都是跨系统、多步骤的长链路:

  • 店铺开通:登录 → 选择类目 → 选择经营类型 → 设置结算 → 上传资质 → 勾选协议 → 提交 → 产品签约 → DB验证,一个流程跑下来,至少15步。
  • 商户入驻:营业执照OCR → 经营场景 → 法人身份证 → 人脸核验 → 邮箱绑定 → 密码设置 → 签约,至少20步。

挑战2:无论是人工测试还是人工编写自动化脚本,成本都极高。

商家的业务特点是步骤多、弹窗多、上传多、异步等待多、SPA路由复杂。传统自动化编写用例,维护成本极高。React受控组件、qiankun微前端fetch隔离、弹窗内状态被上传重置——每一个都是坑。踩一个坑写一段workaround,换个业务场景又得从头开始。再加上公司内除商开部门外,其他团队对PC自动化依赖不高,导致自动化平台功能扩展缓慢(qiankun微前端、非标组件不支持)、录制调整成本高、部分功能不支持。在自动化ROI偏低的现实下,商开部门的大量外包只能花费大量时间去做前端页面点点点的验证,繁琐且人力成本极高。

挑战3:PC端线上问题风险高,前端研发人员持续缩减,风险进一步放大。

PC端是商家的主入口,近年先后出现过:组件升级导致某商家子页面不可用或提交报错等阻断性问题,前端代码冲突导致关键字段未提交至服务端,引发重大线上问题。加上前端监控覆盖率的缺失,以及前后端核对难以布防,很多前端线上问题的影响面不断扩大,最终导致客诉。

1.2 AI时代下的思考

核心思路的转变:不写测试代码,写测试知识。把踩过的坑、验证过的交互代码、有效的DOM选择器封装成“组件md”,AI执行时查阅对应组件直接复用。每一次执行,都在让组件库更完善,稳定性随知识积累递增。

核心公式:AI Agent + 组件化知识库 + 浏览器自动化 + DB验证 = 端到端AI测试

解决方案设计

关键词:稳定·通用·轻量

稳定执行不出错,一套方案通多业务,开箱即用成本低。AI替你跑浏览器、填表单、查DB、分析trace、出报告、发钉钉,验收一条龙。

2.1 方案演进:从使用平台到自建Skill

初期选用店铺业务作为试点,先后尝试了平台提供的两类AI测试能力。

  • 自然语言驱动:模型对自然语言理解不稳定,导致用例编排出现偏差;执行下游存在资源瓶颈,单用例执行成功率低;前置步骤繁琐,需先配置空间测试账号、选择登录方式和执行账号。尤其是店铺场景存在账号独占性(一个账号只能开通一个店铺),审核通过后该账号即不可复用,每次执行需重新配置账号,流程格外沉重。
  • 智能测试流:平台作为解决自然语言理解不稳定问题的推荐方案,但实际落地后,录制本身有成本,录制后仍需手动调整用例编排;后置执行也并不能解决业务问题。

实践过程中,平台方案在商家侧场景中暴露出明显短板:

痛点 具体问题
账号体系受限 不支持指定账号切换,审核通过分支每次必须换号,全流程用例无法自动执行
流程控制粒度不足 录制产出需大量手动修正;无法衔接DB验证、语雀归档等非浏览器环节,断链需人工补接
文件上传能力缺失 多处图片上传(营业执照、身份证、门头照)无法指定文件与校验
验证手段单一 无法获取接口响应和trace_id,无法从URL提取业务单号串联DB验证,页面验证仍依赖人工
扩展受平台排期约束 qiankun fetch隔离、非标组件、CDP真实鼠标事件等均需等排期,无法自主解决

结论很清楚:平台方案在通用场景有一定价值,但在多步骤、强状态、深交互的业务场景中,执行稳定性、维护成本与适配性尚存差距。经过一个月持续协作,店铺场景核心能力仍在推进中,暂未跑通完整链路。为更快支撑AI测试转型,决定同步探索自建Skill方案。

2.2 Skill设计:框架选型

选型原则:能稳定执行。

Browser Agent相比Playwright的核心差异在于,它在CDP之上引入了大模型推理层,能理解自然语言意图、自主定位元素并生成操作序列,省去预编写选择器脚本。简单页面导航和基础表单,它能精准理解步骤描述、准确定位交互位置。但在商家侧的复杂组件上,通用推理难以覆盖边界情况,执行出现大量偏差:

问题 偏差 解法
React受控组件 input.value = 'xxx'赋值后React不感知,提交拿不到值 走prototype.value setter + dispatchEvent触发合成事件
图片上传 CDP无法操作原生文件选择dialog 绕过dialog,用DOM.setFileInputFiles直塞文件路径
Cascader异步加载 AI倾向跳级选择,面板未展开就点击 逐级选 + 等待500ms下级菜单渲染
异构搜索组件 同一“搜索”功能三种实现(ant-select / .optionItem / input+button),定位策略不统一 DOM预扫描判断组件体系,分别走对应交互路径
上传触发重渲染 上传多图后 radio/cascader被清空 先上传、再选radio/cascader、最后填input,顺序与直觉相反
SPA路由销毁拦截器 提交前注入的fetch拦截器被路由切换销毁,拿不到响应 每次submit前0.5秒内重注入,不等“之前装过就用”
按钮无响应 button.click()和dispatchEvent均不响应 用CDP真实鼠标事件(mouse move → down → up)
页面崩溃表单丢失 CDP session崩溃,已填表单全部丢失 window.__formState表单快照 + 崩溃后重登恢复,上传放最后最小化崩溃暴露面

这些问题的共性是:同类交互的底层实现因框架、组件库、业务场景而异,我们靠组件知识逐一沉淀。每遇到一个偏差,就把正确的交互方式写入组件md的踩坑段,下次直接复用,而非重新推理。踩坑段只增不删,即使bug已修复也保留记录,避免同类问题换一种表现形式再次出现。不同业务场景持续喂入、持续校正、持续沉淀。随机出错率从首轮40%降到4轮后5%以下,靠的就是踩坑段的积累效果——它不是一次写对的,是在业务锤炼中变聪明的。

Skill架构设计

3.1 架构图

3.2 核心设计

1. 用例解析:四趟编译——把人话变成机器能跑的指令

用户写用例用自然语言,但AI不能直接拿着自然语言操作浏览器。于是设计了一个四趟编译管线,把人话逐步“翻译”成可执行内部指令——每一趟只做一件事、只承担一个职责,既保证解析精度,也让错误能被早发现、早拦截。

第1趟|风格检测

用户可能用三种风格写用例,AI自动识别,用户无需指定格式:

  • 表格风格(推荐,最易解析):
序号 操作 参数
1 选择主营类目 本地生活-餐饮
2 填写经营类型 个体工商户
  • 自然语言风格:“主营类目选本地生活-餐饮”(最常见、最灵活)
帮我执行 新增非标品牌 → 审核通过
站点:B站预发 https://b.alipay.com/page/brandManage/home
账号密码:**** / ***
数据库:数据库ARN:*****
商户载体ID(carrierId):******
审核工具:brand-audit skill
操作步骤:
登录B站,进入品牌管理首页
点击【添加品牌】→ 跳转 /page/brandManage/home/brandReport
添加方式:选择【新增品牌】
品牌材料:选择【非标品牌】
品牌名称:输入「测试+当前时间戳」
点击「补充更多品牌信息」,品牌logo:上传reference里的图片
品牌故事:输入「这个是一个品牌故事」
品牌类目:选择 电商平台 → 工厂优选平台
门头店招:上传reference里的图片
勾选同意《支付宝品牌商服务协议》
点击【确定】→ 跳转 /page/brandManage/home/confirmResult,提示"已提交,预计1-2个工作日完成审核"
审核(brand-audit skill):
从提交结果页获取brandId
调用 brand-audit,action=pass,eventCode=****_AUDIT
等待10s
预期结果:
提交后跳转确认页,文案含"已提交"
回到首页,已认领列表可见该品牌,状态为"审核通过"/"可使用"
DB校验:
SQL
-- 品牌主表:status=1(已通过),source=MRCH,owner_name=**测试的公司
SELECT * FROM **** WHERE brand_chs_name = '{brandName}' ORDER BY gmt_create DESC LIMIT 1;
-- 审批流水:approval_type=1,status=3(审核通过)
SELECT * FROM **** WHERE brand_id = '{brandId}' ORDER BY id DESC LIMIT 1;
  • 清单风格:- [ ] 主营类目选择本地生活(Markdown)

第2趟|元数据抽取

提取非操作步骤的结构化上下文,为执行准备“弹药”:账号密码、入口URL、DB ARN、期望断言、钉钉群号等。元数据与操作步骤分离,保证步骤序列干净,也保证执行阶段不会因为缺了密码而卡住。

第3趟|组件匹配 + 置信度评分

这是四趟编译的核心环节——也是最容易出错的地方。把每一步操作匹配到对应的UI组件,并给出“我有多确定”的评分。

置信度 匹配条件 说明
95%+ 确命中触发词 术语完全匹配,如“选择主营类目”→ CategorySelector
80-89% 部分命中 + 语义 关键词部分匹配 + 语义推理
60-69% 纯语义推理 仅靠语义推断,无关键词支撑
<50% 猜测 几乎无依据,不建议执行

未匹配到的步骤标记为unmatched,同时建议可能需要新建的组件——既暴露问题,也给出建设性方向。

第4趟|输出可执行的任务step列表

合并前三趟结果,输出AI能逐步执行的内部格式。最终产物是一个steps列表,每步绑定组件和参数。同时自动注入trace-collector作为第0步——用户不需要写“采集trace”,系统默认带上,保证可观测性。

置信度门控,可多问一句,不让AI猜错一步。置信度评分不是“参考值”,它是门控阈值,直接决定执行策略:

置信度区间 执行策略
90–100% 静默执行,不打扰用户
70–89% 展示摘要,需用户确认
50–69% 拒绝执行,要求修正用例
<50% 提示无法解析,建议改写

核心思想:一条用例15步操作,第3步猜错的代价是后面12步全白跑——宁可多问一句,不让AI猜错一步。这不是保守,是工程上的止损逻辑:在不确定的环节停下来让人类拍板,比让机器蒙头冲完再发现全错,成本要低得多。

2. 组件查找优先链——平台兜底,业务按需覆盖

第3趟组件匹配时,AI不是只在一个地方找组件,而是按优先级依次查找三层目录:

优先级 目录 职责 举例
最高 local-components/ 业务方本地自定义组件,覆盖平台默认行为 业务觉得平台的“类目选择”组件不够用,自己写了一个 category-selector.md,加了品牌绑定逻辑
其次 components/ 平台级共享组件,所有业务通用 平台提供的标准 category-selector.md,只做了基础Cascader逐级展开
未命中 无匹配 标记unmatched,提示用户新建 新业务“棋盘密云”有个“私域用户筛选”操作,目前两个目录都没有对应组件

核心逻辑:同名组件,local-components/胜出,业务方可以局部覆盖平台行为,而不需要修改平台源码。类比CSS的层叠规则:局部样式覆盖全局样式。业务方不需要向平台提排期等排期,自己写一个.md放进local-components/就能生效。

实际使用场景:

  • 覆盖:支小店的页面结构跟B站完全不同,同一个“登录”操作需要走不同的DOM路径→支小店在local-components/放自己的login.md,覆盖平台的login.md。
  • 扩展:店铺开通的“结算设置”需要额外做支付宝账号校验→在local-components/写一个settle-modal.md,比平台版多一步校验。
  • 新增:棋盘密云的“私域用户筛选”两个目录都没有→unmatched,提示用户新建,下次就不再unmatched了。

一句话总结:平台提供通用能力兜底,业务方按需局部定制覆盖,覆盖不了的新增。三层优先链保证了扩展性和可控性的平衡。

3. 脚本优于eval纪律

组件层(components/)写的是知识——“这个组件怎么交互、有什么坑”。但AI每次执行时如果自己拼agent-browser eval命令,拼出来的代码不稳定,容易出错。脚本层把验证过的操作固化成.sh文件。组件说“有脚本调脚本,禁手动拼eval”,确保每次走的是同一条经过实战的代码路径。

4. Phase 0→6门控

整个执行流程是7个阶段串联,但不是“无脑顺序往下跑”——每个Phase都有前置通过条件,条件不满足就卡住不推进,输出原因然后停下来。

Phase 干什么 门控条件(准入证) 不满足会怎样
Phase 0 执行环境precheck ODC MCP连通 + yuque CLI可用 + allowlist配好 ODC不通不执行——连数据库都查不了,跑下去验证也没意义
Phase 1 浏览器自动化执行 登录成功 + 页面已到达 登录失败不填表——没登录进去,后面填表点按钮都是空操作
Phase 2 URL提取 & ID解析 从URL/拦截器拿到brandId或astoreId 无ID不查DB——不知道查哪条记录,DB查询无从下手
Phase 3 数据库查询 SQL返回结果(至少1行) SQL无结果不比对——空结果比对什么?不是“比对失败”,是“没东西可比”
Phase 4 数据比对 比对完成,状态明确(PASS/FAIL/WARNING) 生成结论
Phase 5 生成报告 报告含截图 + 无敏感信息 报告无截图不归档——没有截图的报告无法回溯验证
Phase 6 归档到语雀 报告完整 + 图片已上传 归档成功

没有门控,AI一路往下跑,登录失败了还在“填表”,填完表发现页面没变,又去查DB,查到空结果还硬比,最后生成一个全是FAIL的报告归档到语雀——浪费了15分钟跑了一条从头就错的用例,浪费了token,浪费了context,产出的报告毫无价值。

  • 置信度门控解决的是:AI可能在猜→不确定时停下来让人类确认。
  • Phase门控解决的是:前置条件可能不成立→条件不足时停下来不白跑。

两者同源:宁可早停报告原因,不让错误往下传播放大。一条用例15步操作 + 7个Phase,如果在Phase 1就发现登录失败,后面6个Phase全免——省下来的不是时间,是整条链路的无效执行成本。一句话总结:每个Phase是一道关卡,关卡不放行,后面的路不许走。不是“跑完看结果”,是“跑前先验路”。

5. 失败自学习

用例失败→按errorCode匹配known-failures→命中则标注模式ID→未命中则自动补录新模式,只增不删。

假设场景你跑了一条用例,提交后返回错误码THIRD_SYSTEM_ERROR,用例失败了。第一次遇到这个错误
Skill去known-failures.md里搜THIRD_SYSTEM_ERROR,没找到——这是第一次遇到。
于是自动往文件里追加一条新记录:
  F-017
  状态: 活跃
  首次发现: 2026-06-22
  最近发现: 2026-06-22
  出现次数: 1
  errorCode: THIRD_SYSTEM_ERROR
  失败特征: 提交店铺开通时下游三方系统异常
  根因: 待补充
  owner: 待分配
  建议: 重试即可,非本系统问题
这就是“未命中则自动补录”——第一次见,记录下来。
第二次遇到同一个错误又跑了一条用例,同样的THIRD_SYSTEM_ERROR。这次去known-failures.md里搜,命中了F-017。
报告里直接写:失败模式F-017(THIRD_SYSTEM_ERROR),建议:重试即可,非本系统问题
不用再人工诊断——“命中则标注模式ID”,直接复用之前的结论。

业务实践 && 快速上手

4.1 优秀实践分享

案例1:蚂蚁答疑助手评测——4波137条用例AI自动评测,发现64个Bug

百晓蚂蚁答疑助手是AI驱动业务智答运营平台,一站式解答商家、商品、交易、营销技术和运营问题,需要验证多轮对话能力。评测方用Skill执行了4波自动化评测:

波次 用例数 类型 通过率 发现Bug
第一波 15条 单轮问答 73.3% 发现MCP工具列表泄露P0漏洞
第二波 35条 单轮问答 71.4% 发现“全公司”超范围查询未拦截
第三波 40条 单轮问答 75.0% 发现“导出数据”能力边界未拦截
第四波 47条 / 157轮 多轮对话 89.2% 发现64个问题(3类大问题)响应慢、无响应、响应空

原先人工怎么测:测试同学手动在对话框一条条输入、等回复、判断结果、截图、记录。一条用例平均5分钟,多轮用例更长。4波137条,人工约需2天(含截图整理和报告写作)。

AI自动执行:Skill按用例脚本自动输入、等回复、抽取响应内容、判定OK/FAIL、截图归档。4波合计约3小时完成(含等待Agent响应时间和截图整理),节省70%人力。

发现问题:4波累计发现10类Bug:P0级2个(MCP工具列表泄露 + 接受“生成周报”超能力请求),P1级4个(导出未拦截/超范围未拦截/Agent执行报错/能力边界未拦截),P2级4个(第四波多轮评测额外发现64个问题:无响应17次、响应超慢29次、上下文丢失4次、回复为空14次)。

案例2:支付宝卡券频道-店铺开通——7条用例30分钟跑完,人工需半天-1天

店铺开通是商家侧最复杂的长链路:每条用例15步表单填写 + 文件上传,涉及账号切换(B站/P站/支小店不同账号),结算信息填写,类目资质等重要材料上传,每步需要等页面渲染、等接口返回、截图留证。

原先人工:一条用例手动操作约30分钟(含等页面渲染、填表、上传、截图),7条需要半天-1天。

Skill自动执行:7条用例在30分钟内全部跑完,提交+撤销DB双验证全过,自动截图 + 自动归档语雀 + 自动发钉钉通知。

4.2 其它业务实践案例

店铺-神券 + 支小店——最成熟的业务域,7条用例全流程冷启动验证

店铺开通是商家侧最复杂的长链路:15步表单填写 + 文件上传 + 异步等待 + SPA路由切换。Skill覆盖了B站自开通(独立门店/品牌连锁/mall店)、P站代开通(独立/品牌)、支小店(官方旗舰店/普通企业店)共7条用例,提交+撤销DB双验证全部PASS,最长一条236秒完成。

企业商户入驻——跨iframe + 人脸验证 + 邮箱验证码

商户入驻20+步,是目前人工介入最密集的用例:iframe内嵌开户验证页面(必须直接打开iframe src操作)、人脸验证扫码等待(session 5-10分钟过期需重新登录)、邮箱验证码(必须先点发送按钮再填码),Skill跑通了97+50老页面全流程。

品牌管理(B站)——12条用例全量覆盖,通过率100%

首次做全量用例覆盖而非只跑关键用例,12条从非标/标准品牌新增、审核通过/驳回、认证、认领、搜索筛选、品牌资产(门店/收款账号/小程序/会员卡/设备)到修改品牌、驳回重申请、首页冒烟,11/11 PASS。

品牌管理(P站)——跨Skill联合验证,发现前端Bug

P站与B站共用组件体系但域名和交互细节不同。Skill首次实现UI自动化 + 品牌审核skill HTTP审核的跨Skill联合验证——AI提交品牌后自动调用brand-audit skill完成审核,再回到UI验证结果。7/12 PASS,3条BLOCKED发现了P站前端Bug(品牌资产面板API绑定错误brandId)。

数商域客户管理——非标准登录体系 + 表单动态联动

数商域用非标准登录体系三段登录(输密码→选账号→点登录)。行业字段有动态联动:选“自助餐”触发额外必填字段,选“日化家清”则不会,AI需动态对比表单差异才能正确填写。品牌选择弹“已被其他客户挂载”Modal,点取消会清空品牌——必须点确定继续挂载。

跨域扩展——万知管理平台 + 订单管理页面安全越权 + 蚂蚁答疑助手

Skill的组件库不止服务商家平台侧,已被三个跨域团队复用:

  • 万知管理平台:100条Monkey测试(导航/搜索/弹窗/表格),100% PASS,15分钟完成。首次适配Tailwind CSS(非Ant Design)组件体系。
  • 订单管理页面安全越权校验:两个账号交叉走“有权限UI正路 + 无权限接口攻击”双路径验证,4/4 PASS。
  • 蚂蚁答疑助手评测:90条三波评测,口径查询93%、数据资产查询100%,发现MCP工具泄露P0级漏洞。

4.3 组件能力全景

42个组件md + 34个脚本,分5类覆盖商家侧90%高频操作:

  • 基础能力9个:登录(authsa128/pubbuservice双体系)、入口校验、Trace采集、崩溃恢复、钉钉通知、ODC precheck。
  • React/Ant Design通用7个:表单填写(React setter)、Select(虚拟列表滚动)、Cascader(逐级+异步)、Modal、DatePicker、Form定位、高德地图。
  • 上传/CDP 5个:fiber注入上传、多图批量上传、CDP真实鼠标事件、资质/品牌logo上传。
  • 业务专属14+个:主营类目、经营类型、品牌搜索、结算弹窗、门店地址、经营/认证信息段、提交拦截、撤销审核、P站客户、商标、支小店组件组。
  • 流程归档7+个:语雀报告归档、DB查询、钉钉模板、报告三段式、失败模式库、安全清单、经验沉淀。

4.4 快速上手

前置依赖

依赖 用途
agent-browser 浏览器自动化(CDP)
ODC MCP 数据库查询验证
yuque CLI 报告归档 + 截图上传
Antding.app 钉钉消息发送

执行用例

① 建议先加载skill,避免模型幻觉未使用skill执行。

② 执行用例。

查看结果:

  • 本地截图:~/Documents/pc-e2e-ai-result/YYYYMMDD/
  • 语雀报告:自动创建并挂到指定目录节点,含截图。
  • 钉钉通知:执行完成 / 失败 / 需人工介入时自动发送。
来源:https://www.53ai.com/news/tishicikuangjia/2026071797615.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。