用途
Automate E2E Tests 用于将已验证的行为转化为持久的回归覆盖,使用项目现有的 E2E、集成、契约或移动测试框架。它适用于用户要求添加或更新 E2E、集成、契约、浏览器、移动端、API、路由、认证或多服务测试的场景。这是一个通用起始技能,项目团队应运行 setup-task-to-pr 来用确切的路径、命令、夹具、认证、设备设置和 CI 规则丰富它。
何时不使用
- 不用于手动 QA、截图、视频或仅验证报告。应使用 test-feature。
- 不用于广泛的脆弱测试套件修复或跳过审计,除非用户要求套件维护。
- 当单元、组件、API、解析器、验证器或契约测试是更好的覆盖层级时,不使用。
- 不为仅文档或无用户可观察行为的内部重构添加 E2E 测试。
输入
在编辑测试之前,阅读:
- 需求或工单。
- 实现差异。
- 来自 test-feature 或配置的测试技能的 feature 验证报告(如果存在)。
- 现有的 E2E 配置、规格、夹具和助手。
- 项目测试说明。
发现常见框架:
rg --files -g 'playwright.config.*' -g 'cypress.config.*' -g 'wdio.conf.*' -g 'nightwatch.conf.*' -g 'detox.config.*' -g 'maestro.yaml' -g '.maestro/**' -g 'package.json' -g 'pom.xml' -g 'build.gradle*'
find . -maxdepth 4 -type d \( -name e2e -o -name cypress -o -name playwright -o -name specs -o -name tests -o -name maestro \) 2>/dev/null | sort
如果不存在 E2E 框架,未经用户批准不要引入一个。记录覆盖缺口并建议最小可行框架选择。
覆盖决策
在以下情况下添加或更新 E2E 覆盖:
- 认证、路由、浏览器/移动 UI、持久化、实时行为、支付、引导、结账、权限或多服务集成是被保护的对象。
- 核心用户旅程发生变化。
- 缺陷复现需要全栈回归测试。
- 项目已经为同一表面有附近的 E2E 覆盖。
在以下情况下优先使用较低层级测试,并记录原因:
- 行为是纯计算、解析、验证、格式化或数据映射。
- E2E 设置会因为缺少所需测试数据、认证或环境而脆弱。
- 等效的 E2E 覆盖已经存在。
- 变更不是用户可观察的。
编写流程
- 从验证报告或需求中识别最小的持久旅程。
- 在创建新文件之前搜索现有规格:
rg -n "<route|feature words|button text|test id|domain term>" .
- 复用现有的夹具、认证助手、页面对象、种子数据、服务器设置、设备设置和测试工具。
- 当现有规格已经拥有该行为时,更新它。
- 仅在最近的已建立 E2E 文件夹中创建新规格。
- 优先使用可访问的角色、标签和可见文本。仅当 UI 需要持久测试契约时添加稳定的测试选择器。
- 断言用户可见的结果和持久状态。不要断言私有实现细节。
- 覆盖变更的快乐路径,并在实际可行时至少覆盖一个有意义的失败、边界或恢复路径。
- 保持测试确定性。避免广泛的 sleep,除非现有套件有作用域内的 settle 助手且没有更好的信号存在。
表面指导
| 表面 | 指导 |
|---|---|
| Web/PWA | 优先使用现有的 Playwright、Cypress、WebdriverIO 或框架特定的浏览器测试。复用认证存储和夹具设置。 |
| 原生移动 | 优先使用现有的 Appium、Detox、Maestro、XCUITest、Espresso 或项目模拟器/设备测试装置。不要发明设备设置。 |
| API | 优先使用集成或契约测试而非浏览器 E2E,除非 UI 流程是需求的一部分。 |
| 桌面 | 使用项目已建立的桌面自动化测试装置。如果不存在,在添加工具之前记录缺口。 |
| Monorepo | 将测试放在应用旁边或已建立的跨应用 E2E 包中。 |
验证
首先运行最窄的聚焦命令。示例:
npx playwright test path/to/spec
npx cypress run --spec path/to/spec
npm run e2e -- path/to/spec
pnpm e2e path/to/spec
yarn e2e path/to/spec
./gradlew connectedAndroidTest
xcodebuild test -scheme <scheme> -destination <destination>
maestro test path/to/flow.yaml
使用项目已经记录的命令。对于新的或显著更改的浏览器/移动规格,在实际可行时重复聚焦测试以捕获明显的脆弱性。
仅当触及的助手、夹具、设置代码或共享流程使聚焦运行不足时,才运行更广泛的 E2E 或 CI 等效检查。
失败处理
- 规格暴露产品缺陷:如果在范围内,修复产品,然后重新运行聚焦规格。
- 规格脆弱:收紧选择器、设置、等待、数据隔离或断言。如果这变成广泛的套件修复,停止并报告任务已改变。
- 缺少夹具/认证/设备支持:如果安全,添加最窄的可复用支持;否则记录阻塞。
- 没有批准的 E2E 框架:在引入之前询问。
- 环境不可用:在 PR/测试笔记中记录确切的命令、错误和未验证的风险。
产物
成功产生以下之一:
- 新的或更新的 E2E 规格/流程。
- 当那是正确的回归层时,新的或更新的集成或契约测试。
- 该规格所需的窄夹具/助手更新。
- 记录的 E2E 覆盖例外及使用的替代覆盖。
报告确切的更改文件、运行的命令、通过/失败结果和剩余风险。
来源
来自 Supatest AI supa-skills automate-e2e-tests v1.0.1 的通用起始版本。在每个项目中运行 setup-task-to-pr 以创建本地丰富版本。
自我改进
如果此技能选择了错误的回归层、错过了项目测试框架或创建了脆弱的测试,在关闭之前修补此技能或配置的项目本地版本。