
Api Contract Testing
Add consumer-driven contract tests with Pact so microservice API changes are caught in CI before consumers break in production.
Install
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill api-contract-testingWhat is this skill?
- Consumer-driven contracts with PactV3 and MatchersV3 (like, eachLike, iso8601DateTimeWithMillis)
- Catches breaking request/response and versioning drift without full integration environments
- Validates OpenAPI/Swagger expectations against provider behavior
- Fits microservices and third-party API dependency boundaries
- Designed for CI contract violation failures early in the pipeline
Adoption & trust: 683 installs on skills.sh; 250 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Agent Browservercel-labs/open-agents
Tddmattpocock/skills
Use My Browserxixu-me/skills
Test Driven Developmentobra/superpowers
Verification Before Completionobra/superpowers
Webapp Testinganthropics/skills
Journey fit
Primary fit
Contract validation is the canonical Ship testing shelf even though specs are written while services are still being built. Pact and schema checks are automated test artifacts aimed at regression and compatibility, not greenfield API design alone.
Common Questions / FAQ
Is Api Contract Testing safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Api Contract Testing
# API Contract Testing ## Table of Contents - [Overview](#overview) - [When to Use](#when-to-use) - [Quick Start](#quick-start) - [Reference Guides](#reference-guides) - [Best Practices](#best-practices) ## Overview Contract testing verifies that APIs honor their contracts between consumers and providers. It ensures that service changes don't break dependent consumers without requiring full integration tests. Contract tests validate request/response formats, data types, and API behavior independently. ## When to Use - Testing microservices communication - Preventing breaking API changes - Validating API versioning - Testing consumer-provider contracts - Ensuring backward compatibility - Validating OpenAPI/Swagger specifications - Testing third-party API integrations - Catching contract violations in CI ## Quick Start Minimal working example: ```typescript // tests/pact/user-service.pact.test.ts import { PactV3, MatchersV3 } from "@pact-foundation/pact"; import { UserService } from "../../src/services/UserService"; const { like, eachLike, iso8601DateTimeWithMillis } = MatchersV3; const provider = new PactV3({ consumer: "OrderService", provider: "UserService", port: 1234, dir: "./pacts", }); describe("User Service Contract", () => { const userService = new UserService("http://localhost:1234"); describe("GET /users/:id", () => { test("returns user when found", async () => { await provider .given("user with ID 123 exists") .uponReceiving("a request for user 123") .withRequest({ method: "GET", path: "/users/123", headers: { // ... (see reference guides for full implementation) ``` ## Reference Guides Detailed implementations in the `references/` directory: | Guide | Contents | |---|---| | [Pact for Consumer-Driven Contracts](references/pact-for-consumer-driven-contracts.md) | Pact for Consumer-Driven Contracts | | [OpenAPI Schema Validation](references/openapi-schema-validation.md) | OpenAPI Schema Validation | | [JSON Schema Validation](references/json-schema-validation.md) | JSON Schema Validation | | [REST Assured for Java](references/rest-assured-for-java.md) | REST Assured for Java | | [Contract Testing with Postman](references/contract-testing-with-postman.md) | Contract Testing with Postman | | [Pact Broker Integration](references/pact-broker-integration.md) | Pact Broker Integration | ## Best Practices ### ✅ DO - Test contracts from consumer perspective - Use matchers for flexible matching - Validate schema structure, not specific values - Version your contracts - Test error responses - Use Pact broker for contract sharing - Run contract tests in CI - Test backward compatibility ### ❌ DON'T - Test business logic in contract tests - Hard-code specific values in contracts - Skip error scenarios - Test UI in contract tests - Ignore contract versioning - Deploy without contract verification - Test implementation details - Mock contract tests # REST Assured for Java ## REST Assured for Java ```java // ContractTest.java import io.restassured.RestAssured; import io.restassured.module.jsv.JsonSchemaValidator; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class UserAPIContractTest { @Test public void getUserShouldMatchSchema() { given() .pathParam("id", "123") .when() .get("/api/users/{id}") .then() .statusCode(200) .body(JsonSchemaValidator.matchesJsonSchemaInClasspath("schemas/user-schema.json")) .body("id", notNullValue()) .body("email", matchesPattern("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$"))