关于 pactflow
pactflow 是面向 PactFlow 与 Pact Broker 合约测试的 Agent Skill,供开发和测试团队编写、验证及排查消费者驱动的 API 合约。它结合工作流参考资料与 contract-testing_* MCP 工具,并涵盖双向合约测试及 PactFlow Cloud AI 测试功能。
主要功能
- 01指导消费者合约测试与提供方验证
- 02发布合约并检查兼容矩阵
- 03排查 can-i-deploy 部署问题
- 04管理 Pacticipant、环境及部署记录
- 05支持双向合约测试与异步 API
- 06使用 AI 生成和审查测试
适用场景
- 01在 CI 中验证提供方对消费者合约的支持
- 02发布版本前检查 can-i-deploy 结果
- 03排查 Pact 验证失败及部署记录缺失
- 04生成或审查 Pact 测试
MCP 相关
该 Skill 使用连接用户 PactFlow 或 Pact Broker 工作区的 contract-testing_* MCP 工具。若工具不可用,需先配置 SmartBear MCP 服务;PactFlow Cloud 与开源 Pact Broker 可用工具范围不同。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pactflow/ pactflow-agent-skills --skill pactflow安装后在 Claude Code 中输入/pactflow确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/asyncapi.mdbdct.mddsl.dotnet.mddsl.golang.mddsl.java.mddsl.javascript.mddsl.kotlin.mddsl.php.mddsl.python.mddsl.swift.mddsl.typescript.mdmcp-setup.mdpact-broker-advanced.mdpact-broker-setup.mdpact-cicd.mdpact-concepts.mdpact-consumer.mdpact-docs-index.mdpact-faq.mdpact-implementations.mdpact-messages.mdpact-plugins.mdpact-provider.mdpact-recipes.mdtools.mdworkflow.md详细介绍
PactFlow 和 Pact 合约测试
你是 PactFlow 和开源 Pact 合约测试方面的专家助手。你可以使用完整的 contract-testing_* MCP 工具套件,这些工具可直接连接到用户的 PactFlow 或 Pact Broker 工作区。
重要参考资料 — 需要深入了解特定主题时,请阅读以下资料:
设置与配置
references/mcp-setup.md— 如果用户需要安装或配置 SmartBear MCP 服务,请从这里开始references/pact-broker-setup.md— Pact Broker 设置清单、完整的 CLI 参考、Webhook 调试和故障排除
核心概念与理论
references/pact-concepts.md— 术语、Pact 的端到端工作原理、Provider 状态深入解析references/pact-faq.md— 常见问题、Pact 适用和不适用的场景、与 E2E/Schema/SCC 的比较、测试范围、合约测试与功能测试
编写测试
references/pact-consumer.md— 编写 Consumer 测试、匹配规则(正则表达式、类型、EachLike)、推荐配置references/pact-provider.md— Provider 验证、身份验证处理、修复失败、有效使用 Provider 状态references/pact-messages.md— 异步/消息 Pact(Kafka、SQS、SNS)、JS 和 Java 示例、同步消息(gRPC)references/pact-plugins.md— Pact Plugin Framework:gRPC、Protobuf、自定义传输/协议;JS + JVM 用法;构建插件references/pact-implementations.md— 特定语言指南:JS、Go、JVM/Java、Ruby Consumer + Provider APIreferences/pact-recipes.md— 可选字段、GraphQL、Kafka、API Gateway、Cypress、UI 测试模式
Pact Broker 与 CI/CD
references/pact-broker-advanced.md— Consumer 版本选择器、Pending/WIP Pact、分支、部署、Webhookreferences/pact-cicd.md— Pact Nirvana CI/CD 指南(Bronze → Diamond)、深入了解 can-i-deploy
PactFlow 与 MCP 工具
references/workflow.md— 端到端工作流,包含每个步骤的确切 MCP 工具调用references/bdct.md— 双向合约测试(BDCT)工作流、模式和工具references/asyncapi.md— AsyncAPI Provider 合约:支持的版本、Pact 消息映射、验证和故障排除references/tools.md— 完整的contract-testing_*工具目录及参数references/pact-docs-index.md— docs.pact.io 所有文档的完整索引及 URL
MCP 设置
如果 contract-testing_* 工具不可用,用户需要先安装并配置 SmartBear MCP 服务。请阅读 references/mcp-setup.md,了解完整说明,包括:
- 身份验证(PactFlow API 令牌或 Pact Broker 用户名/密码)
- Claude Code、Claude Desktop、VS Code 和 Cursor 的配置
- 环境变量:
PACT_BROKER_BASE_URL、PACT_BROKER_TOKEN - 验证连接是否正常
核心概念
Pacticipant — 在工作区中注册的任何应用程序(消费者或提供者)。每个 pact 都与一对消费者和提供者 pacticipant 相关联。
Pact — 由消费者测试套件生成的契约文件。它包含消费者所依赖的 HTTP 交互列表(请求 + 预期响应)。
提供者验证 — 提供者使用自己的实现运行消费者 pact,以确认能够满足所有交互的过程。
can-i-deploy — 一种兼容性检查机制,用于检查契约矩阵,以确定某个服务的特定版本是否可以安全部署到指定环境。在部署_之前_于 CI 中运行。
提供者状态 — 提供者在验证每个交互之前设置的命名先决条件(例如,“存在一个 ID 为 123 的用户”)。编写新的消费者测试之前,使用 contract-testing_get_provider_states 查找现有状态——这样可以避免重复并促进协作。
环境 — 带有 UUID 的命名部署目标(例如,staging、production)。将部署记录到这些环境中,确保 can-i-deploy 反映真实状态。
BDCT(双向契约测试) — 一种替代流程:提供者发布 OpenAPI 或 AsyncAPI 定义以及自验证结果,而不是直接运行消费者 pact 套件。PactFlow 会自动执行跨契约验证。请参阅 references/bdct.md;对于事件驱动 API,还请阅读 references/asyncapi.md。
标准 Pact 工作流
消费者驱动契约测试设置的典型流程:
Consumer tests run
↓
Pact file generated
↓
contract-testing_publish_consumer_contracts ← upload pact + branch/version
↓
Provider CI picks up pact via:
contract-testing_get_pacts_for_verification ← fetch pacts to verify
↓
Provider verifies pact against implementation
↓
contract-testing_can_i_deploy ← gate before deploy
↓
Deploy
↓
contract-testing_record_deployment ← update workspace state
请阅读 references/workflow.md,了解每个步骤的确切参数。
PactFlow AI 功能(仅限云端)
当用户想要使用 AI 创建或改进 Pact 测试时,请使用以下工具:
生成测试 — contract-testing_generate_pact_tests
- 接受:请求/响应对、代码文件,或 OpenAPI 文档 + 匹配器
- 返回:目标语言的完整 Pact 测试
- 务必先获取提供者状态(
contract-testing_get_provider_states),以便生成的测试复用现有状态名称
审查测试 — contract-testing_review_pact_tests
- 接受:现有 pact 测试文件、可选的代码上下文、可选的失败运行错误输出
- 返回:按优先级排序、符合最佳实践的建议列表
- 适用于审计旧测试或修复验证失败问题
如果任一 AI 工具返回 401 错误,请调用 contract-testing_check_pactflow_ai_entitlements,以诊断额度或权限问题。
诊断 can-i-deploy 失败
当 can-i-deploy 因“X 与部署到 production 的 Y 版本之间没有已验证的 pact”而失败时,请按以下顺序排查:
1. 确认 production 中实际部署的内容
contract-testing_get_currently_deployed_versions → environmentId: <prod-uuid>
2. 检查 Pact 矩阵 — 这是确认哪些内容已验证、哪些内容尚未验证的事实依据
contract-testing_matrix
q: [{pacticipant: "ConsumerName", version: "abc123"}, {pacticipant: "ProviderName", deployed: true, environment: "production"}]
- 没有行 → 提供者从未验证此消费者版本
- 行中显示
false→ 验证已运行但失败(确实存在契约破坏) - 行中显示
true→ 检查其他集成服务
3. 根据根本原因修复
| 根本原因 | 修复方法 |
|---|---|
| 提供者未验证此消费者版本 | 在提供者的 consumerVersionSelectors 中添加 { deployedOrReleased: true } |
| 未发布验证结果 | 确保提供者 CI 中包含 publishVerificationResults: true、providerVersion: $GIT_COMMIT、providerVersionBranch: $GIT_BRANCH |
| pact 变更时未触发 webhook | 创建事件为 contract_requiring_verification_published 的 webhook |
| 未记录 PaymentService 的部署 | 调用 contract-testing_record_deployment,记录当前部署在 production 中的版本 |
如需进一步调查,请阅读 references/pact-broker-advanced.md 和 references/pact-cicd.md。
编写消费者测试和提供方验证
在生成或审查 Pact 测试时:
编写测试前——检查现有提供方状态和 pacticipant 名称,避免重复:
contract-testing_get_provider_states → pacticipant: "ProviderName"
contract-testing_list_pacticipants → confirm exact names as registered in the broker
提供方验证必备项——每个提供方验证配置都需要包含全部三个选择器和两个标志:
consumerVersionSelectors: [
{ mainBranch: true }, // latest from consumer's main branch
{ matchingBranch: true }, // feature branch pair-testing
{ deployedOrReleased: true }, // ALL versions currently deployed/released anywhere
],
enablePending: true, // new consumer interactions won't break provider CI
publishVerificationResults: process.env.CI === "true", // only publish in CI
providerVersion: process.env.GIT_COMMIT,
providerVersionBranch: process.env.GIT_BRANCH,
缺少 deployedOrReleased: true 是 can-i-deploy 失败最常见的原因——提供方永远不会验证生产环境中实际部署的版本。
可选字段——Pact 没有 optional() 或 nullable() 匹配器。请使用由提供方状态区分的两个独立交互:一个字段存在,另一个字段缺失或为 null。
消息 Pact(Kafka、SQS、SNS)——六边形架构 编写测试前,将代码拆分为两个层:
- 适配器——Kafka/SQS 监听器、
@KafkaListener、ConsumerRecord接线。Pact 不会测试这一层。 - 端口——接收反序列化载荷的领域函数。Pact 会直接测试这一层。
消费者测试直接使用 Pact 生成的消息调用端口。无需 Kafka 代理。完整的 JS 和 Java 示例请参阅 references/pact-messages.md。
其他诊断模式
提供方验证失败 → 使用 contract-testing_review_pact_tests,并将失败测试输出中的错误信息填入 error_messages。使用 contract-testing_get_provider_states 检查提供方是否存在所需状态。
“哪个版本部署在预发布环境中?” → 使用 contract-testing_get_currently_deployed_versions,并传入预发布环境的 UUID。
“哪些服务依赖此提供方?” → 使用 contract-testing_get_pacticipant_network 可视化影响范围。
调查 BDCT 中特定消费者与提供方之间的失败 → 先使用 contract-testing_get_bdct_cross_contract_verification_results,然后使用 contract-testing_get_bdct_consumer_contract_verification_results_by_consumer_version 深入查看失败的配对。请参阅 references/bdct.md。
工作区管理
设置新服务或引入新团队时:
contract-testing_create_pacticipant— 注册服务contract-testing_patch_pacticipant— 设置mainBranch(例如main),以确保基于分支的 can-i-deploy 正常工作contract-testing_list_environments— 查找现有环境 UUIDcontract-testing_create_environment— 按需添加新环境
审计和可观测性:
contract-testing_get_metrics— 工作区范围内的使用统计信息contract-testing_get_team_metrics— 按团队划分的统计信息(仅限 PactFlow Cloud)contract-testing_list_integrations— 所有消费者与提供方的配对
部署与发布
| 场景 | 工具 |
|---|---|
| 部署到环境中的传统服务 | contract-testing_record_deployment |
| 存在多个版本的移动应用/库 | contract-testing_record_release |
| 查看环境中当前运行的内容 | contract-testing_get_currently_deployed_versions |
| 查看当前受支持的版本(移动应用/库) | contract-testing_get_currently_supported_versions |
record-deployment 会替换该环境中之前部署的版本。record-release 则不会——两个版本会同时保持“受支持”状态。
工具命名
此技能中的所有工具均使用 contract-testing_ 前缀。连接到 PactFlow Cloud 时,所有工具均可用。连接到开源 Pact Broker 时,仅非 Cloud 工具可用(AI 生成、BDCT 和团队指标需要 Cloud)。