测试工作流Skill test

这个技能用于执行全面的软件测试工作流,包括单元测试、集成测试和E2E测试。它通过并行执行快速测试来提供快速反馈,并确保在运行缓慢的E2E测试之前所有基础测试通过。关键词:软件测试,单元测试,集成测试,E2E测试,并行执行,工作流,自动化测试,测试套件,快速反馈。

测试 0 次安装 0 次浏览 更新于 3/14/2026

name: test description: 全面测试工作流 - 单元测试 ∥ 集成测试 → E2E测试

/test - 测试工作流

运行全面的测试套件,支持并行执行。

何时使用

  • “运行所有测试”
  • “测试功能”
  • “验证一切正常”
  • “完整测试套件”
  • 发布或合并前
  • 重大更改后

工作流概览

┌─────────────┐      ┌───────────┐
│ 诊断        │ ──▶  │ 仲裁器    │ ─┐
│ (类型检查)  │      │ (单元测试)│  │
└─────────────┘      └───────────┘  │
                                    ├──▶ ┌─────────┐
                     ┌───────────┐  │    │ 阿特拉斯│
                     │ 仲裁器    │ ─┘    │ (E2E测试)│
                     │ (集成测试)│       └─────────┘
                     └───────────┘

  预检阶段          并行执行           顺序执行
  (~1秒)           快速测试           慢速测试

代理序列

# 代理 角色 执行方式
1 arbiter 单元测试、类型检查、代码规范 并行
1 arbiter 集成测试 并行
2 atlas E2E/验收测试 在阶段1通过后执行

为何按此顺序?

  1. 快速反馈:单元测试快速失败
  2. 并行效率:单元和集成测试之间无依赖
  3. E2E门控:仅在快速测试通过后运行缓慢的E2E测试

执行

阶段0:预检诊断(新)

运行测试前,检查类型错误 - 它们常导致测试失败:

tldr diagnostics . --project --format text 2>/dev/null | grep "^E " | head -10

为何先诊断?

  • 类型检查即时(约1秒),测试更耗时
  • 诊断显示根本原因,测试显示症状
  • "预期int,得到str"比"第50行AttributeError"更清晰
  • 捕获未测试代码路径的错误

如果发现错误: 在运行测试前修复它们。类型错误通常意味着测试会失败。

如果干净: 进入阶段1。

阶段0.5:变更影响(可选)

对于大型测试套件,仅查找受影响的测试:

tldr change-impact --session
# 或指定文件:
tldr change-impact src/changed_file.py

这返回基于更改应运行的测试。对于小型项目或需要全覆盖时跳过。

阶段1:并行测试

# 并行运行两者
Task(
  subagent_type="arbiter",
  prompt="""
  为范围运行单元测试:[SCOPE]

  包括:
  - 单元测试
  - 类型检查
  - 代码规范

  报告:通过/失败计数,失败详情
  """,
  run_in_background=true
)

Task(
  subagent_type="arbiter",
  prompt="""
  为范围运行集成测试:[SCOPE]

  包括:
  - 集成测试
  - API测试
  - 数据库测试

  报告:通过/失败计数,失败详情
  """,
  run_in_background=true
)

# 等待两者
[检查两个TaskOutput]

阶段2:E2E测试(如果阶段1通过)

Task(
  subagent_type="atlas",
  prompt="""
  为范围运行E2E测试:[SCOPE]

  包括:
  - 端到端流程
  - 验收测试
  - UI测试(如适用)

  报告:通过/失败计数,失败时截图
  """
)

测试范围

完整套件

用户:/test
→ 所有单元 + 集成 + E2E测试

功能范围

用户:/test authentication
→ 仅与认证相关的测试

快速检查

用户:/test --quick
→ 仅单元测试(跳过集成和E2E)

示例

用户:/test 新支付功能

Claude:开始/test工作流,用于支付功能...

阶段0:预检诊断...
$ tldr diagnostics . --project --format text | grep "^E "
(未发现类型错误)

阶段1:运行并行测试...
┌─────────────────────────────────────────┐
│ arbiter:运行单元测试...          │
│ arbiter:运行集成测试...   │
└─────────────────────────────────────────┘

arbiter:✅ 45/45 单元测试通过
arbiter:✅ 12/12 集成测试通过

阶段2:运行E2E测试...
atlas:✅ 8/8 E2E测试通过

测试总结:
┌─────────────┬─────────┬────────┐
│ 类型        │ 通过    │ 失败   │
├─────────────┼─────────┼────────┤
│ 单元        │ 45      │ 0      │
│ 集成        │ 12      │ 0      │
│ E2E         │ 8       │ 0      │
├─────────────┼─────────┼────────┤
│ 总计        │ 65      │ 0      │
└─────────────┴─────────┴────────┘

所有测试通过!✅

类型错误示例

用户:/test

Claude:开始/test工作流...

阶段0:预检诊断...
$ tldr diagnostics . --project --format text | grep "^E "
E src/payment.py:45:12: 参数类型'str'不可分配给'int'
E src/refund.py:23:8: 返回类型'None'不可分配给'float'

发现2个类型错误。运行测试前修复...

[Claude修复类型错误]

重新运行诊断... 干净。

阶段1:运行并行测试...

失败处理

如果阶段1失败:

arbiter:❌ 43/45 测试通过

2个失败:
- test_payment_validation:预期'invalid'得到'valid'
- test_refund_calculation:偏差0.01美元

停止工作流。运行E2E测试前修复失败。

标志

  • --quick:仅单元测试
  • --no-e2e:跳过E2E测试
  • --coverage:包括覆盖率报告
  • --watch:文件更改时重新运行