mcpField
P
pactflow

pactflow

github.com/pactflow测试与质量7139 次安装1 天前更新
代码仓库

关于 pactflow

pactflow 是面向 PactFlow 与 Pact Broker 合约测试的 Agent Skill,供开发和测试团队编写、验证及排查消费者驱动的 API 合约。它结合工作流参考资料与 contract-testing_* MCP 工具,并涵盖双向合约测试及 PactFlow Cloud AI 测试功能。

主要功能

  1. 01指导消费者合约测试与提供方验证
  2. 02发布合约并检查兼容矩阵
  3. 03排查 can-i-deploy 部署问题
  4. 04管理 Pacticipant、环境及部署记录
  5. 05支持双向合约测试与异步 API
  6. 06使用 AI 生成和审查测试

适用场景

  1. 01在 CI 中验证提供方对消费者合约的支持
  2. 02发布版本前检查 can-i-deploy 结果
  3. 03排查 Pact 验证失败及部署记录缺失
  4. 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.json
references/
asyncapi.md
bdct.md
dsl.dotnet.md
dsl.golang.md
dsl.java.md
dsl.javascript.md
dsl.kotlin.md
dsl.php.md
dsl.python.md
dsl.swift.md
dsl.typescript.md
mcp-setup.md
pact-broker-advanced.md
pact-broker-setup.md
pact-cicd.md
pact-concepts.md
pact-consumer.md
pact-docs-index.md
pact-faq.md
pact-implementations.md
pact-messages.md
pact-plugins.md
pact-provider.md
pact-recipes.md
tools.md
workflow.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 API
  • references/pact-recipes.md — 可选字段、GraphQL、Kafka、API Gateway、Cypress、UI 测试模式
Pact Broker 与 CI/CD
  • references/pact-broker-advanced.md — Consumer 版本选择器、Pending/WIP Pact、分支、部署、Webhook
  • references/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。


工作区管理

设置新服务或引入新团队时:

  1. contract-testing_create_pacticipant — 注册服务
  2. contract-testing_patch_pacticipant — 设置 mainBranch(例如 main),以确保基于分支的 can-i-deploy 正常工作
  3. contract-testing_list_environments — 查找现有环境 UUID
  4. contract-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)。

评论

支持 Markdown