SuperAPI AI 工具集

e2e

测试与质量

查看项目

更新于 10-15 16:16

技能介绍

用途

该技能用于运行端到端(e2e)测试、调试测试失败以及修复不稳定的测试。它通过一套明确的分类与修复规则,帮助区分失败来自测试基础设施、过时测试还是真实代码缺陷,从而做出正确的修复决策。

失败分类法

每一次 e2e 失败被严格归为以下类别之一:

A. Flaky(测试基础设施问题)

  • 竞态条件、时序相关断言、过期选择器、缺失等待
  • 症状:重试后通过,间歇性失败

B. Outdated(测试不再匹配实现)

  • 测试断言了被有意更改的旧行为;选择器引用已移除元素
  • 症状:持续性失败,但应用本身工作正常

C. Bug(实现不符合规格)

  • 测试正确断言了规格行为,代码有误
  • 仅当存在可供校验的规格时,才归类为 Bug
  • 若无规格,归类为“未验证失败(unverified failure)”并报告给用户

按类别的修复规则

Flaky 修复:

  • 将 waitForTimeout 替换为自动等待定位器
  • 将脆弱的 CSS 选择器替换为 getByRole/getByLabel/getByTestId
  • 用 expect() web-first 断言修复竞态条件
  • 修复 mock/路由设置顺序(应在导航之前)
  • 绝不添加任意延迟——应修复底层等待
  • 绝不在断言周围添加重试循环——使用框架内置重试

Outdated 修复:

  • 更新测试断言以匹配当前(正确)行为
  • 更新选择器以匹配当前 DOM/API
  • 绝不更改源代码——实现是正确的,测试已过时

Bug 修复:

  • 引用定义预期行为的规格章节
  • 修复源代码以匹配规格
  • 修复完成前必须有单元测试——缺失时先写(TDD)
  • 绝不更改 e2e 断言以匹配有缺陷的代码
  • 绝不在无规格支持的情况下更改 API 契约或接口
  • 若无规格,询问用户:是 Bug 还是过时测试?

源代码边界

E2e 测试修复不得更改应用逻辑、API 契约、数据库架构或配置默认值。唯一例外:Bug 修复中规格明确定义了正确行为,且单元测试覆盖了该修复。

工作流程

步骤 1:发现测试基础设施

  • 找到 e2e 配置:playwright.config.ts、vitest.config.ts 或项目特有设置
  • 读取 package.json 获取规范的 e2e 命令
  • 检查是否需要并已运行 dev server 或 Tilt 环境
  • 查找规格文件:.spec.md、docs/.spec.md —— 作为 Bug 判定的真相来源

步骤 2:运行测试

# Playwright
yarn playwright test --reporter=line

# 或项目特有
yarn test:e2e

将失败解析为:测试、文件、错误、类别,例如:

测试 文件 错误 类别
login flow auth.spec.ts:42 timeout waiting for selector TBD

步骤 3:分类 对每个失败:读取测试文件、读取其涉及的源代码、检查对应规格文件,分配类别(flaky / outdated / bug / unverified)。

步骤 4:按类别修复 按顺序应用修复:先 flaky(可解除其他测试阻塞),再 outdated,最后 bug。

步骤 5:重新运行并报告

## E2E Results

**Run**: `yarn test:e2e` on <date>
**Result**: X/Y passed

### Fixed
- FLAKY: `auth.spec.ts:42` - replaced waitForTimeout with getByRole wait
- OUTDATED: `profile.spec.ts:88` - updated selector after header redesign
- BUG: `transfer.spec.ts:120` - fixed amount validation per SPEC.md#transfers

### Remaining Failures
- UNVERIFIED: `settings.spec.ts:55` - no spec, needs user decision

### Unit Tests Added
- `src/transfer.test.ts` - amount validation edge cases (covers BUG fix)

更多关于异步处理、flake 分类与预检模式,参见 testing-best-practices。

适用场景

适用于需要运行、调试和修复端到端测试的开发团队,尤其是面对间歇性失败难以判断根因、或需要在不破坏源代码逻辑的前提下修复测试的场景。

限制

在缺少规格文件时,无法将失败归类为 Bug,只能标记为未验证失败并交由用户决定。该技能侧重于测试层面的修复规则与工作流,具体框架命令与配置取决于项目本身。