name: contract-test-design description: 使用Pact设计消费者驱动的合同测试策略,验证提供者合同,并通过合同优先方法管理API演化。 allowed-tools: Read, Write, Glob, Grep, Task, WebSearch, WebFetch
合同测试设计
何时使用此技能
在以下情况下使用此技能:
- 合同测试设计任务 - 使用Pact处理消费者驱动的合同测试策略
- 规划或设计 - 需要合同测试方法的指导
- 最佳实践 - 希望遵循既定模式和标准
概述
合同测试通过测试消费者和提供者之间的合同(API协议)来验证服务是否正确通信。消费者驱动的合同(CDC)确保提供者不会破坏其消费者。
合同测试与其他测试类型的比较
| 方面 | 端到端测试 | 集成测试 | 合同测试 |
|---|---|---|---|
| 范围 | 完整系统 | 组件 + 依赖 | 消费者-提供者 |
| 速度 | 慢(分钟) | 中(秒) | 快(毫秒) |
| 可靠性 | 经常不稳定 | 中等 | 非常稳定 |
| 部署耦合 | 高 | 中等 | 低(异步) |
| 故障定位 | 差 | 中等 | 优秀 |
| 维护 | 高 | 中等 | 低 |
消费者驱动合同流程
┌─────────────────────────────────────────────────────────────┐
│ 消费者端 │
│ │
│ 1. 消费者编写测试 2. 测试生成合同 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 消费者 │ │ 合同 │ │
│ │ 测试 │ ─────► │ (JSON) │ │
│ └──────────────┘ └──────────────┘ │
│ │ │
└──────────────────────────────────────┼──────────────────────┘
│
▼ 发布到经纪人
┌──────────────────┐
│ 合同经纪人 │
│ (Pact Broker) │
└────────┬─────────┘
│
┌──────────────────────────────────────┼──────────────────────┐
│ 提供者端 │ │
│ ▼ │
│ 3. 提供者验证合同 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 提供者 │ ◄───── │ 合同 │ │
│ │ 验证 │ │ (JSON) │ │
│ └──────────────┘ └──────────────┘ │
│ │ │
│ ▼ │
│ 4. 提供者测试通过 = 合同被遵守 │
│ │
└─────────────────────────────────────────────────────────────┘
快速参考:破坏性更改
| 更改类型 | 是否破坏? | 行动 |
|---|---|---|
| 移除字段 | 是 | 阻止部署 |
| 更改字段类型 | 是 | 阻止部署 |
| 添加必需字段 | 是 | 阻止部署 |
| 添加可选字段 | 否 | 允许 |
| 添加新端点 | 否 | 允许 |
工具选择
| 用途 | 工具 | 理由 |
|---|---|---|
| 合同框架 | PactNet | .NET原生,成熟 |
| 经纪人 | Pact Broker | 标准,免费层 |
| 异步合同 | Pact Message | 相同生态系统 |
| 模式验证 | OpenAPI | 行业标准 |
参考
| 参考 | 内容 | 何时加载 |
|---|---|---|
| strategy-template.md | 合同测试策略模板、服务地图、工作流 | 规划合同测试策略 |
| pact-dotnet-implementation.md | 消费者测试、提供者验证、提供者状态 | 在.NET中实现Pact |
| message-contracts.md | 异步消息/事件合同测试 | 测试事件驱动架构 |
| matchers-cicd.md | Pact匹配器、破坏性更改检测、CI/CD管道 | 匹配器语法、CI/CD集成 |
集成点
来自的输入:
- API规范 → 合同定义
- 服务架构 → 消费者-提供者地图
test-strategy-planning技能 → 合同测试范围
输出到:
- CI/CD管道 → 合同验证门控
- API治理 → 破坏性更改检测
api-design-fundamentals技能 → 合同优先设计
测试场景
场景1:规划合同测试策略
查询: “帮助我设计微服务的合同测试策略”
预期: 技能激活,提供策略模板,指导服务地图绘制
场景2:实现Pact测试
查询: “展示如何在.NET中编写Pact消费者测试”
预期: 技能激活,加载pact-dotnet-implementation.md参考,提供代码示例
场景3:CI/CD集成
查询: “如何将合同测试集成到GitHub Actions管道中?”
预期: 技能激活,加载matchers-cicd.md参考,提供管道示例
最后更新: 2025年12月28日
版本历史
- v1.1.0 (2025-12-28):重构为渐进式披露 - 提取实现到references/
- v1.0.0 (2025-12-26):初始发布