Skip to content
Skillv1.0.0

contract-testing

Consumer-driven contract testing for microservices using Pact, schema validation, API versioning, and backward compatibility testing. Use when testing API contracts or coordinating distributed teams.

by proffesor-for-testing(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from proffesor-for-testing/agentic-qe (.claude/skills/contract-testing/SKILL.md). Install upstream with npx skills add proffesor-for-testing/agentic-qe --skill contract-testing. Copyright stays with the author.

Contract Testing

<default_to_action> When testing API contracts or microservices:

  1. DEFINE consumer expectations (what consumers actually need)
  2. VERIFY provider fulfills contracts (Pact verification)
  3. DETECT breaking changes before deployment (CI/CD integration)
  4. VERSION APIs semantically (breaking = major bump)
  5. MAINTAIN backward compatibility for supported versions

Quick Contract Testing Steps:

  • Consumer: Define expected request/response pairs
  • Provider: Verify against all consumer contracts
  • CI/CD: Block deploys that break contracts
  • Versioning: Document supported versions and deprecation

Critical Success Factors:

  • Consumers own the contract (they define what they need)
  • Provider must pass all consumer contracts before deploy
  • Breaking changes require coordination, not surprise </default_to_action>

Quick Reference Card

When to Use

  • Microservices communication
  • Third-party API integrations
  • Distributed team coordination
  • Preventing breaking changes

Consumer-Driven Contract Flow

Consumer → Defines Expectations → Contract
                    ↓
Provider → Verifies Contract → Pass/Fail
                    ↓
CI/CD → Blocks Breaking Changes

Breaking vs Non-Breaking Changes

Change Type Breaking? Semver
Remove field ✅ Yes Major
Rename field ✅ Yes Major
Change type ✅ Yes Major
Add optional field ❌ No Minor
Add new endpoint ❌ No Minor
Bug fix ❌ No Patch

Tools

Tool Best For
Pact Consumer-driven contracts
OpenAPI/Swagger API-first design
JSON Schema Schema validation
GraphQL Schema-first contracts

Consumer Contract (Pact)

// Consumer defines what it needs
const { Pact } = require('@pact-foundation/pact');

describe('Order API Consumer', () => {
  const provider = new Pact({
    consumer: 'CheckoutUI',
    provider: 'OrderService'
  });

  beforeAll(() => provider.setup());
  afterAll(() => provider.finalize());

  it('creates an order', async () => {
    await provider.addInteraction({
      state: 'products exist',
      uponReceiving: 'a create order request',
      withRequest: {
        method: 'POST',
        path: '/orders',
        body: { productId: 'abc', quantity: 2 }
      },
      willRespondWith: {
        status: 201,
        body: {
          orderId: like('order-123'),  // Any string matching pattern
          total: like(19.99)           // Any number
        }
      }
    });

    const response = await orderClient.create({ productId: 'abc', quantity: 2 });
    expect(response.orderId).toBeDefined();
  });
});

Provider Verification

// Provider verifies it fulfills all consumer contracts
const { Verifier } = require('@pact-foundation/pact');

describe('Order Service Provider', () => {
  it('fulfills all consumer contracts', async () => {
    await new Verifier({
      provider: 'OrderService',
      providerBaseUrl: 'http://localhost:3000',
      pactUrls: ['./pacts/checkoutui-orderservice.json'],
      stateHandlers: {
        'products exist': async () => {
          await db.products.create({ id: 'abc', price: 9.99 });
        }
      }
    }).verifyProvider();
  });
});

Breaking Change Detection

// Agent detects breaking changes
await Task("Contract Validation", {
  currentContract: 'openapi-v2.yaml',
  previousContract: 'openapi-v1.yaml',
  detectBreaking: true,
  calculateSemver: true,
  generateMigrationGuide: true
}, "qe-api-contract-validator");

// Output:
// Breaking changes found: 2
// - Removed field: order.discount
// - Type change: order.total (number → string)
// Recommended version: 3.0.0 (major bump)

CI/CD Integration

name: Contract Tests
on: [push]

jobs:
  consumer-tests:
    steps:
      - run: npm run test:contract
      - name: Publish Pacts
        run: npx pact-broker publish ./pacts --broker-base-url $PACT_BROKER

  provider-verification:
    needs: consumer-tests
    steps:
      - name: Verify Provider
        run: npm run verify:contracts
      - name: Can I Deploy?
        run: npx pact-broker can-i-deploy --pacticipant OrderService --version $VERSION

Agent Coordination Hints

Memory Namespace

aqe/contract-testing/
├── contracts/*           - Current contracts
├── breaking-changes/*    - Detected breaking changes
├── versioning/*          - Version compatibility matrix
└── verification-results/* - Provider verification history

Fleet Coordination

const contractFleet = await FleetManager.coordinate({
  strategy: 'contract-testing',
  agents: [
    'qe-api-contract-validator',  // Validation, breaking detection
    'qe-test-generator',          // Generate contract tests
    'qe-security-scanner'         // API security
  ],
  topology: 'sequential'
});

Agent CLI & Advanced Patterns

For v3 agent-specific commands (aqe contract ...), GraphQL contracts, event contracts, and Pact Broker integration, see references/agent-commands.md.

Related Skills


Remember

Consumers own the contract. They define what they need; providers must fulfill it. Breaking changes require major version bumps and coordination. CI/CD blocks deploys that break contracts. Use Pact for consumer-driven, OpenAPI for API-first.

With Agents: Agents validate contracts, detect breaking changes with semver recommendations, and generate migration guides. Use agents to maintain contract compliance at scale.

Gotchas

  • Pact broker URL must be configured before running — agent will generate tests that silently skip verification without it
  • Consumer tests pass locally but fail in CI when provider states aren't set up — always verify both sides
  • Adding a required field to a response is a BREAKING change even though provider tests pass — consumer didn't expect it
  • Agent may generate contracts from API docs instead of actual consumer usage — contracts must reflect real consumer needs
  • GraphQL contract testing requires schema stitching awareness — fragments may reference types from other services

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/proffesor-for-testing-agentic-qe-contract-testing/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

proffesor-for-testing-agentic-qe-contract-testing.ocm.jsonjson
{
  "ocm": "1",
  "id": "proffesor-for-testing-agentic-qe-contract-testing",
  "kind": "skill",
  "name": "contract-testing",
  "description": "Consumer-driven contract testing for microservices using Pact, schema validation, API versioning, and backward compatibility testing. Use when testing API contracts or coordinating distributed teams.",
  "publisher": "proffesor-for-testing",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "coding",
      "legal"
    ],
    "tags": [
      "skill-md",
      "contract",
      "pact",
      "consumer-driven",
      "api",
      "microservices",
      "schema-validation",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "Consumer-driven contract testing for microservices using Pact, schema validation, API versioning, and backward compatibility testing. Use when testing API contracts or coordinating distributed teams."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/proffesor-for-testing/agentic-qe",
      "path": ".claude/skills/contract-testing/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/proffesor-for-testing/agentic-qe/blob/HEAD/.claude/skills/contract-testing/SKILL.md",
      "key": "proffesor-for-testing/agentic-qe/.claude/skills/contract-testing/SKILL.md"
    }
  },
  "instructions": "# Contract Testing\n\n<default_to_action>\nWhen testing API contracts or microservices:\n1. DEFINE consumer expectations (what consumers actually need)\n2. VERIFY provider fulfills contracts (Pact verification)\n3. DETECT breaking changes before deployment (CI/CD integration)\n4. VERSION APIs semantically (breaking = major bump)\n5. MAINTAIN backward compatibility for supported versions\n\n**Quick Contract Testing Steps:**\n- Consumer: Define expected request/response pairs\n- Provider: Verify against all consumer contracts\n- CI/CD: Block deploys that break contracts\n- Versioning: Document supported versi",
  "cost": {
    "context_tokens": 1620
  }
}

Fetch it by URL: GET /api/v1/registry/proffesor-for-testing-agentic-qe-contract-testing/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.