我用 AI 写了 96 个 E2E 测试,脚本效率提升 3 倍,这是完整方法论

136 阅读6分钟

10 年测试老兵的实战经验:Playwright + AI 辅助开发,脚本编写效率提升 3-4 倍。不谈概念,只聊哪些环节 AI 真的能帮你,哪些环节别指望它。


最近接手了一个监控平台的 E2E 自动化测试项目——12 个功能模块、近 100 个测试用例、覆盖云原生数据接入(Prometheus、InfluxDB、OpenTelemetry、OpenTSDB)等复杂场景。

按以前的做法,一个数据接入流程的测试脚本要写 2-3 个小时。但这次,我全程用 AI 辅助开发(Playwright + Claude Code),单个脚本降到了 30-45 分钟。

这篇文章不谈概念,只聊实战:哪些环节 AI 真的能帮你,哪些环节你别指望它。


背景:这个项目有多复杂

先说挑战,不然效率提升的数字没有体感:

  • 多租户 SaaS 架构:登录后还要切租户,级联菜单操作,偶尔还会切换失败
  • Ant Design 组件:DOM 层级深、class 名动态变化、选择器定位是噩梦
  • 长表单流程:一个数据接入要填 7-8 个字段、选下拉框、切 tab、等异步加载
  • 数据源种类多:Prometheus、InfluxDB、OpenTelemetry、OpenTSDB,每种接入流程不一样

以前写这种脚本,大部分时间不是在写逻辑,而是在 DevTools 里反复试选择器、调等待时间、处理异步。


AI 实际帮了什么:四个环节逐个说

环节一:脚本生成(效率提升最大)

这是 AI 最能发力的地方。

我的做法:把操作流程用自然语言描述清楚,让 AI 生成 Playwright 脚本初稿。

比如我会说:

我需要测试 InfluxDB 数据接入,操作流程:
1. 进入云原生数据接入页面
2. 点击"新建接入"
3. 选择数据源类型为 InfluxDB
4. 填写连接信息(地址、数据库名、用户名密码)
5. 点击"测试连接",等待成功提示
6. 点击"确认创建"
7. 验证列表中出现新创建的接入
页面用 Ant Design,请用 Playwright CommonJS 格式

AI 给出的初稿,80% 以上的代码是直接可用的。我需要做的是:

  • 微调几个选择器(AI 猜的 class 名可能不对)
  • 补充异步等待(AI 倾向于用 waitForTimeout,实际要用 waitForResponse
  • 加业务相关的断言

image.png

环节二:选择器定位(最烦的活)

做过 Ant Design 项目自动化的人都知道,选择器是最头疼的部分。

以前的流程:打开 DevTools → 找元素 → 试选择器 → 发现不唯一 → 换一个 → 再试……

现在我会直接告诉 AI:

页面上有一个 Ant Design 的级联选择器(Cascader),
我需要选择"租户A",
请给我 3 种定位策略

AI 会同时给出 XPath、CSS、Role-based 三种方案,我挑一个最稳的用。遇到动态 DOM,它还会主动建议加 waitForSelector 或重试逻辑。

省的不是写代码的时间,是试错的时间。

环节三:调试与修复(最意外的收获)

这个环节我没预期 AI 能帮这么多。

以前用例跑失败了,流程是:看报错 → 猜原因 → 改代码 → 再跑 → 还是挂 → 再猜……

现在我直接把报错贴给 AI:

这个用例报错了:
TimeoutError: locator.click: Timeout 30000ms exceeded.
waiting for locator('.ant-cascader-menu-item').filter({ hasText: '租户A' })

测试代码是:
await page.locator('span', { hasText: "新建接入任务" }).first().click();
const modal = page.locator('.ant-modal-content');
await modal.waitFor({ state: 'visible', timeout: 8000 });

AI 不仅能定位问题(比如"级联菜单可能还没展开就去点了子项"),还能给出修复方案("先等 .ant-cascader-menus 出现,再操作")。

尤其是 flaky test——以前处理手段就是加 sleep 然后祈祷。现在 AI 能分析时序问题,建议用 waitForResponsepage.waitForFunction 等更优雅的方案。

环节四:基础设施设计

项目里有一个核心认证模块,一行代码搞定登录 + 租户切换:

// 一行代码完成:导航 → 登录 → 租户切换 → 保存登录态
await setup(page, context, { tenant: "租户A" });

这个模块的架构设计,AI 参与了:

  • 封装思路(一站式 setup 函数)
  • 重试机制(租户切换失败自动重试 3 次)
  • 状态管理(登录态持久化,避免重复登录)

架构思路是 AI 给的,具体的登录页判断逻辑和租户切换细节是我根据实际系统调的。


AI 做不好什么:别神化它

用了两个月,也踩了不少坑,这几件事 AI 真的帮不了你:

1. 测试策略——该测什么、不该测什么

AI 可以帮你把 100 个用例都写出来,但它不知道哪 20 个是核心场景,哪些是浪费时间。这个判断需要你了解业务、了解风险分布。

2. 企业内部系统的认证和权限

你的 SSO 登录页长什么样、多租户怎么切换、Cookie 策略是什么——这些 AI 都不知道,必须你来处理。

3. 业务语义

AI 能帮你填表单,但它不知道"数据源名称"该填什么才有测试意义,不知道哪个下拉选项对应什么业务含义。

4. 最终的稳定性调优

AI 能给建议,但稳不稳定得反复跑才知道。这一步没有捷径。

5. 环境差异

多租户、多环境(预发/灰度/生产)的差异,需要你了解环境特点才能处理。


方法论:AI 辅助 E2E 测试的四步法

image.png

做完这个项目后,我提炼了一套协作模式:

第一步:需求 → 用例
  人:定义测试范围和优先级
  AI:辅助生成用例清单,查漏补缺

第二步:用例 → 脚本
  人:描述页面交互流程
  AI:生成脚本初稿
  人:调试通过、补充断言

第三步:失败 → 修复
  AI:分析报错,给出修复建议
  人:验证修复、判断根因

第四步:维护 → 优化
  AI:建议稳定性策略
  人:决策是否采纳

一句话总结:AI 做执行层的加速,人做决策层的把控。


三个实用 Prompt 模板(拿去就能用)

生成测试脚本:

我需要测试 [功能名称],页面 URL 是 [xxx]
操作流程:1. xxx 2. xxx 3. xxx
验证点:xxx
请用 Playwright 生成测试脚本,使用 [你的模块格式]

修复失败用例:

这个测试用例报错了:[贴报错信息]
测试代码是:[贴相关代码]
请分析失败原因,给出修复方案

优化选择器:

这个元素用 [当前选择器] 定位不稳定
页面使用 [UI 框架名]
请给出 3 种更稳定的替代选择器

最终成果

image.png

指标数据
功能模块覆盖12 个
测试用例数96 个
脚本编写效率提升 3-4 倍
调试效率提升 2-3 倍
CI/CD已集成,自动执行

写在最后

AI 不会取代测试工程师,但会取代不会用 AI 的测试工程师。

关键不是 AI 有多强,而是你能不能找到「人机协作」的正确姿势——把重复劳动交给 AI,把判断和决策留给自己。

后续会持续分享 AI + 测试的实战经验、方法论和工具链。如果你也在做类似的探索,欢迎关注交流。


更多 AI + 测试实战,关注公众号「测试进化论」—— 测试不会消失,只会进化。