본문으로 건너뛰기
cccskills
무료GitHub에 공개

testing-api-contracts

Validates API responses against OpenAPI or JSON Schema, detects breaking changes between spec versions, and builds consumer-driven contract checks. Use when an API has a published spec, when a backend change might break a client, when API tests assert only status codes, or when mocked fixtures need a guard against drifting from the real service.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers스타 118(GitHub 118 + cccskills 0)
연동 도구Playwright

실행 점수 미검증

설치 방법 보기

포함된 파일(5)

  • SKILL.md9.1 KB
  • resources/breaking-change-checklist.md4.8 KB
  • resources/contract-coverage-checklist.md3.4 KB
  • resources/contract-report-template.md4.0 KB
  • resources/schema-validation-recipes.md6.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Testing API Contracts

Use this skill when the question is not "does the endpoint work" but "does the endpoint still promise what its consumers were built against".

A contract test checks shape and compatibility, not business behaviour. It answers: did a field disappear, did a type change, did an enum gain a value the client cannot handle, did a required field become optional. Functional API tests answer whether the value is correct. Both are needed and they fail for different reasons, which is the point of keeping them separate.

When to Use

  • an API publishes an OpenAPI or JSON Schema document and nothing verifies the implementation matches it
  • API tests assert status === 200 and nothing about the body
  • a backend change is about to ship and no one can say which clients it breaks
  • mocked fixtures need a drift guard against the real service
  • two teams are arguing about whether a change is breaking
  • a spec exists but has visibly diverged from what the service returns

Operating Principles

  • The spec is the contract, the implementation is the claim. Test the claim against the contract, in both directions.
  • Shape checks and value checks stay separate. Mixing them produces a test that fails for two unrelated reasons and reports one message.
  • Additive is safe, subtractive is not. Adding an optional response field breaks nobody. Removing one, or tightening a type, breaks everybody who read it.
  • Validate every response, not a sampled one. Schema validation is cheap enough to run on every API call the suite already makes.
  • A breaking change is defined by consumers, not by the provider. A field no client reads can be removed freely; the argument is about evidence, not opinion.
  • Undocumented behaviour is a finding. A response field absent from the spec is either a spec gap or an accidental leak. Both get reported.

Workflow

Phase 0: Locate the contract

Find the authoritative artifact and record which it is:

  • an OpenAPI document in the repository, generated from code or hand-written
  • an OpenAPI document served at runtime (/openapi.json, /swagger.json, /v3/api-docs)
  • standalone JSON Schema files
  • a GraphQL SDL
  • none of the above, in which case the first deliverable is a spec derived from observed traffic, marked as derived rather than authoritative

If the spec is hand-written and the implementation is not generated from it, say so. Hand-written specs drift, and the drift is exactly what this skill exists to surface.

Phase 1: Decide which side you are testing

SideQuestionTypical artifact
ProviderDoes our service return what our spec promises?Schema validation over live responses
ConsumerDo we still work against what the provider promises?Fixture validation plus a live sample check
BothAre these two versions of the spec compatible?Spec diff and breaking-change report

Choose one per run. A single output that mixes provider defects with consumer risks is unreadable to either team.

Phase 2: Wire validation into requests already being made

The cheapest contract coverage is a validator attached to the existing API test suite. Every request the suite already sends gets its response validated for free.

Recipes for ajv, zod, openapi-response-validator, and a Playwright expect extension are in ./resources/schema-validation-recipes.md.

Rules for the validator:

  • Strict by default. additionalProperties: false when the spec allows it, so undocumented fields surface instead of passing silently.
  • Validate the error responses too. The 4xx body shape is part of the contract and is where drift is most common.
  • Report the path, not just "invalid". /items/0/price: expected number, got string is actionable; schema validation failed is not.
  • Fail the test. A validator that logs a warning gets ignored within a week.

Phase 3: Cover the shape, not the sample

For each endpoint in scope, check the cases in ./resources/contract-coverage-checklist.md. The ones that catch real defects:

  • empty collection - items: [] with the pagination envelope intact
  • nullable fields actually null - the spec says nullable, so make one null
  • optional fields absent - not present rather than present-and-null; these are different contracts
  • maximum-length and boundary values - the field the spec caps at 255 characters
  • every enum member - a client switch statement that has no default breaks on the value you never sent
  • error responses - one per documented status code
  • pagination edges - first page, last page, past the end

Phase 4: Diff the versions

When a spec has changed, produce a compatibility verdict rather than a list of edits. Classify every change using ./resources/breaking-change-checklist.md:

ClassExamplesVerdict
SafeNew optional response field, new endpoint, new optional request parameter, widened response enum a client treats as opaqueShip
RiskyNew enum value in a field clients branch on, tightened validation, changed default, changed ordering, changed pagination sizeShip with a consumer check
BreakingRemoved or renamed field, narrowed type, required field added to a request, optional response field made absent, status code change, auth requirement changeVersion it or coordinate

For every Risky and Breaking item, name the affected consumers if they are knowable, and say what evidence supports the claim. "Unknown consumers" is a valid finding and raises the severity.

Phase 5: Guard the mocks

If the codebase mocks this API anywhere, the spec is also the guard for those fixtures. Validate the fixtures against the same schema:

  • fixtures that fail validation are stale and are reported as defects in the test suite, not in the API
  • run this check on the same cadence as the spec changes, not on every commit

This is the handoff point with mocking-network-and-time.

Phase 6: Report

Use ./resources/contract-report-template.md. A useful report contains:

  • which spec, which version, which side was tested
  • endpoints covered and endpoints skipped, with the reason for skipping
  • validation failures grouped by endpoint, with the JSON path and both values
  • the compatibility verdict per change, with severity
  • undocumented fields found in responses
  • what remains unverified

Common Failure Modes

  • asserting only the status code and calling it an API test
  • validating the happy path and never the documented error bodies
  • additionalProperties left permissive, so a leaked internal field passes forever
  • diffing two specs and reporting every line changed rather than classifying compatibility
  • calling a change non-breaking because no test failed, when no test covered it
  • treating a generated spec as proof of correctness; a spec generated from the code agrees with the code by construction
  • one report that mixes provider bugs, consumer risks, and spec gaps

Resource Map

  • ./resources/schema-validation-recipes.md - ajv, zod, openapi-response-validator, and a reusable Playwright matcher
  • ./resources/breaking-change-checklist.md - full classification of spec changes into safe, risky, and breaking, for requests and responses
  • ./resources/contract-coverage-checklist.md - the response shapes to force per endpoint
  • ./resources/contract-report-template.md - report structure with a worked example

Related Skills

  • api-playwright-test-developer - when the functional API tests these validators attach to are being written
  • mocking-network-and-time - when the spec is being used to guard mocked fixtures against drift
  • analyzing-regression-scope - when a breaking change needs its retest blast radius mapped
  • verifying-acceptance-criteria - when the question is whether behaviour meets its stated contract rather than its shape
  • assessing-release-readiness - when a breaking change feeds a go/no-go decision
  • documenting-test-suites - when the spec gaps found here need writing up

Definition of Done

This skill is complete when:

  • the authoritative spec is identified and its trustworthiness stated
  • the side under test (provider, consumer, or version diff) is declared
  • validation runs on every response the suite produces, including error responses, and fails the test on mismatch
  • the shape cases from the coverage checklist are forced rather than hoped for
  • every spec change carries a safe, risky, or breaking classification with its rationale
  • undocumented response fields are reported
  • mocked fixtures for this API are validated against the same schema, or their absence is noted
  • the report says what was not covered

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Defines, computes, and interprets test and quality metrics: pass rate, flake rate, suite duration, defect escape rate, time to detect, and coverage with its caveats. Use when building a QA dashboard, reporting suite health to stakeholders, comparing releases over time, or when a coverage percentage or a bug count is being treated as a measure of quality.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

Analyzes diffs, changed files, hotfixes, and release candidates to identify where regression risk spreads and what must be retested first. Use when scoping retest after a change, reviewing QA impact for a pull request, or building a minimal confidence suite for release validation.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

Writes and reviews API automation tests with Playwright Test, covering setup/teardown, assertions, data management, and hybrid API+UI flows. Use when creating backend API tests, contract checks, data-driven API coverage, API+UI hybrid workflows, or reviewing existing Playwright API suites.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

Measures the risk that code shipped without anyone understanding it: a teach-back attestation on high-risk changes, a risk band from changed-code complexity, diff size and whether a human explanation accompanied it, and optional AI-authorship provenance. Findings stay advisory by design. Use when an AI-assisted codebase grows faster than the team reads it, when reviews are rubber-stamped, when nobody can explain a module that ships weekly, or when leadership asks how much of the code the team can actually maintain.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

Produces an evidence-backed go/no-go recommendation: exit criteria status, open-defect risk profile, coverage against risk, environment parity, rollback readiness, and the residual risk stated plainly. Use when preparing a release sign-off, when someone asks whether a build is ready to ship, or when a decision to release is being made on impressions rather than evidence.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

Records human verification - code review, exploratory sessions, UAT, accessibility passes, UX and observability reviews - as dated, attributed attestations in a register, so human-centric practices stay in the quality contract without pretending to be automated checks. Use when a strategy requires verification no tool can prove, when sign-off evidence is scattered across chats and tickets, when a gap matrix needs to distinguish "attested" from "passed", or when an audit asks who verified what and when.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

jaktestowac의 스킬 모두 보기

이 스킬의 문제 신고