端到端测试专家Skill e2e

端到端测试专家技能,专注于运行、调试和修复端到端测试。核心功能包括识别和修复不稳定测试(如竞态条件、选择器问题)、更新过时测试以匹配当前实现、以及根据规范修复代码缺陷。强调遵循测试最佳实践,如避免任意延迟、使用稳健的定位器、基于规范进行缺陷验证,并确保修复有单元测试支持。适用于软件测试、质量保证和DevOps流程。关键词:端到端测试,E2E测试,测试自动化,Playwright,测试修复,不稳定测试,测试分类,测试工作流,质量保证,软件测试。

测试 0 次安装 6 次浏览 更新于 2/23/2026

名称:端到端测试 描述:运行端到端测试,修复不稳定和过时的测试,根据规范识别缺陷。用于运行端到端测试、调试测试失败或修复不稳定测试。未经规范支持,绝不更改源代码逻辑或API。

端到端测试

原则(始终有效)

在处理端到端测试、测试失败或测试不稳定性时,这些原则始终适用:

失败分类

每个端到端失败都属于以下恰好一种情况:

A. 不稳定(测试基础设施问题)

  • 竞态条件、依赖时间的断言
  • UI变更后选择器过时
  • 缺少等待、等待目标不正确
  • 网络时序、模拟设置顺序
  • 症状:重试通过,间歇性失败

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

  • 测试断言已被故意更改的旧行为
  • 选择器引用已移除/重命名的元素
  • API合约已更改,测试未更新
  • 症状:一致失败,应用程序工作正常

C. 缺陷(实现不匹配规范)

  • 测试正确断言规范定义的行为,代码错误
  • 仅当存在规范可验证时才归类为缺陷
  • 如果不存在规范,归类为“未验证失败”并报告给用户

按类别修复规则

不稳定修复:

  • 用自动等待定位器替换 waitForTimeout
  • getByRole/getByLabel/getByTestId 替换脆弱的CSS选择器
  • expect() 网页优先断言修复竞态条件
  • 修复模拟/路由设置顺序(在导航之前)
  • 绝不添加任意延迟 - 修复底层等待问题
  • 绝不削弱断言 以使不稳定测试通过
  • 绝不在断言周围添加重试循环 - 使用框架内置的重试机制

过时修复:

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

缺陷修复:

  • 引用定义预期行为的规范部分
  • 修复源代码以匹配规范
  • 修复完成前必须存在单元测试
    • 如果存在单元测试,运行它们以确认
    • 如果不存在单元测试,先编写它们(TDD)
  • 绝不更改端到端断言 以匹配有缺陷的代码
  • 未经规范支持,绝不更改API合约或接口
  • 如果不存在规范,询问用户:是缺陷还是过时测试?

源代码边界

端到端测试修复不得更改:

  • 应用程序逻辑或业务规则
  • API合约、请求/响应结构
  • 数据库模式或迁移
  • 配置默认值

唯一例外:缺陷修复,其中规范明确定义了正确行为,并且单元测试覆盖了修复。

工作流程(当明确运行端到端测试时)

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

  1. 查找端到端配置:playwright.config.tsvitest.config.ts 或项目特定设置
  2. 阅读 package.json 获取规范的端到端命令
  3. 检查是否需要开发服务器或Tilt环境并正在运行
  4. 查找规范文件:*.spec.mddocs/*.spec.md - 缺陷决策的真相来源

步骤2:运行测试

使用最小报告器运行以避免上下文溢出:

# Playwright
yarn playwright test --reporter=line

# 或项目特定
yarn test:e2e

如果指定了过滤器,则应用它:

yarn playwright test --reporter=line -g "transfer"
yarn test:e2e -- --grep "transfer"

将失败解析为:

测试 文件 错误 类别
登录流程 auth.spec.ts:42 等待选择器超时 待定

步骤3:分类

对于每个失败:

  1. 阅读测试文件
  2. 阅读它执行的源代码
  3. 检查对应的规范文件
  4. 分配类别:不稳定、过时、缺陷或未验证

步骤4:按类别修复

按照上述原则应用修复,顺序如下:

  1. 不稳定 - 首先修复测试基础设施问题(解除其他测试的阻塞)
  2. 过时 - 更新过时的断言
  3. 缺陷 - 使用规范 + 单元测试门控进行修复

步骤5:重新运行并报告

所有修复后,重新运行套件:

## 端到端测试结果

**运行**:`yarn test:e2e` 于 <日期>
**结果**:X/Y 通过

### 已修复
- 不稳定:`auth.spec.ts:42` - 将 waitForTimeout 替换为 getByRole 等待
- 过时:`profile.spec.ts:88` - 在标题重新设计后更新选择器
- 缺陷:`transfer.spec.ts:120` - 根据 SPEC.md#transfers 修复金额验证

### 剩余失败
- 未验证:`settings.spec.ts:55` - 无规范,需要用户决策

### 新增单元测试
- `src/transfer.test.ts` - 金额验证边界情况(覆盖缺陷修复)