/api-testing
Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java). Use for standalone API tests covering schemas, auth, status/error handling, pagination, idempotency, rate limits, or contract checks; not for browser E2E specs.
$ npx -y skills add fugazi/test-automation-skills-agents --skill api-testing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/api-testing
Context preview
The summary Claude sees to decide when to auto-load this skill.
Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java). Use for standalone API tests covering schemas, auth, status/error handling, pagination, idempotency, rate limits, or contract checks; not for browser E2E specs.
SKILL.md
api-testing.SKILL.mdname: api-testing
description: 'Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java). Use for standalone API tests covering schemas, auth, status/error handling, pagination, idempotency, rate limits, or contract checks; not for browser E2E specs. Keywords: REST, GraphQL, API contract, schema validation, REST Assured.'
license: 'Complete terms in LICENSE.txt'
API Testing (Playwright + REST Assured)
Comprehensive API testing skill covering both Playwright TypeScript (request fixture, Supertest, Zod) and Java (REST Assured, AssertJ, JSON Schema Validator).
When to Use This Skill
- Create API tests for REST or GraphQL endpoints
- Validate request/response schemas (Zod, JSON Schema)
- Test authentication flows (OAuth2, JWT, API keys, Bearer tokens)
- Verify error handling (400, 401, 403, 404, 409, 422, 500)
- Test pagination, filtering, sorting edge cases
- Validate idempotency for PUT/DELETE operations
- Contract testing between services
- Rate limiting validation
Do NOT Use For
- Browser-driven UI flows (use `playwright-e2e-testing` for Playwright specs, or `webapp-selenium-testing` for Selenium)
- Live interactive browser sessions or snapshots (use `playwright-cli`)
- Visual/layout regression (out of scope — no DOM)
- End-to-end journeys that must drive a real browser across pages
Prerequisites
| Stack | Requirements | | ---------- | --------------------------------------------------------------------- | | TypeScript | Node.js 18+, `@playwright/test` or `supertest`, `zod` | | Java | Java 21+, REST Assured 5.x, AssertJ, Jackson, `json-schema-validator` |
Core Principles
1. **Schema validation on every response** — never trust an unvalidated response 2. **Test all HTTP status codes** — happy path AND error states 3. **Auth testing is mandatory** — verify 401/403 for protected endpoints 4. **Data-driven** — test with valid, invalid, boundary, and empty values 5. **Stateless where possible** — each test cleans up or uses unique data
Quick Reference — Playwright
import { test, expect } from "@playwright/test";
test("GET /api/users returns 200 with valid schema", async ({ request }) => {
const response = await request.get("/api/users");
expect(response.ok()).toBeTruthy();
const body = await response.json();
expect(body).toMatchObject({ data: expect.any(Array) });
});Quick Reference — REST Assured
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@Test
@DisplayName("GET /api/users returns 200 with valid schema")
void getUsers() {
String token = "test-token";
given()
.header("Authorization", "Bearer " + token)
.when()
.get("/api/users")
.then()
.statusCode(200)
.body("data", is(instanceOf(List.class)))
.body("data.size()", greaterThan(0));
}---
Red Flags
Stop and reconsider if you see any of these in generated API tests:
- Assertions only on status code with no body/schema validation — an unvalidated response hides contract drift.
- Hardcoded secrets/tokens committed to the test file — read from env or a secrets manager.
- Tests sharing mutable state with no cleanup — flaky and order-dependent.
- Skipping auth tests (no 401/403 assertions on protected endpoints) — security regression risk.
- No coverage of error states (only happy-path 200s) — error handling is untested.
---
References
| Document | Content | | ---------------------------------------------------------------- | --------------------------------------------------- | | [REST API Patterns](./references/rest-api-patterns.md) | CRUD, pagination, filtering, error patterns | | [Playwright API Testing](./references/playwright-api-testing.md) | Request fixture, Supertest, TypeScript patterns | | [REST Assured Testing](./references/rest-assured-testing.md) | REST Assured, AssertJ, Java patterns | | [Schema Validation](./references/schema-validation.md) | Zod (TS), JSON Schema (Java), strict vs loose | | [Contract Testing](./references/contract-testing.md) | Request/response contracts, idempotency, versioning |
Templates
- [Playwright API Spec](./templates/playwright-api-spec.ts) — starter test file for API testing
- [REST Assured Test](./templates/rest-assured-test.java) — starter Java test class
Scripts
- [API Health Check](./scripts/api-health-check.sh) — validate API endpoints respond correctly
Troubleshooting
| Issue | Solution | | ------------------------------ | ------------------------------------------------------------------------------ | | 401 on authenticated endpoints | Verify token is fresh; check expiry; re-authenticate | | Flaky API tests | Add retry logic; check for rate limiting; use unique test data | | Schema validation too strict | Use `.passthrough()` (Zod) or `additionalProperties: true` for flexible fields | | Timeout on slow endpoints | Increase `timeout` in request options; check for server load |
---
Verification
- [ ] **Schema validation in place** — Every response validated against a schema (Zod or JSON Schema)
- [ ] **Authentication tested** — 401 returned for protected endpoints without valid credentials
- [ ] **Idempotency verified** — PUT/DELETE produce same result when called multiple times
- [ ] **Edge cases covered** — Empty payloads, invalid types, boundary values, SQL injection attempts
Read more
name: api-testing description: 'Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java). Use for standalone API tests covering schemas, auth, status/error handling, pagination, idempotency, rate limits, or contract checks; not for browser E2E specs. Keywords: REST, GraphQL, API contract, schema validation, REST Assured.' license: 'Complete terms in LICENSE.txt'
API Testing (Playwright + REST Assured)
Comprehensive API testing skill covering both Playwright TypeScript (request fixture, Supertest, Zod) and Java (REST Assured, AssertJ, JSON Schema Validator).
When to Use This Skill
- Create API tests for REST or GraphQL endpoints
- Validate request/response schemas (Zod, JSON Schema)
- Test authentication flows (OAuth2, JWT, API keys, Bearer tokens)
- Verify error handling (400, 401, 403, 404, 409, 422, 500)
- Test pagination, filtering, sorting edge cases
- Validate idempotency for PUT/DELETE operations
- Contract testing between services
- Rate limiting validation
Do NOT Use For
- Browser-driven UI flows (use `playwright-e2e-testing` for Playwright specs, or `webapp-selenium-testing` for Selenium)
- Live interactive browser sessions or snapshots (use `playwright-cli`)
- Visual/layout regression (out of scope — no DOM)
- End-to-end journeys that must drive a real browser across pages
Prerequisites
| Stack | Requirements | | ---------- | --------------------------------------------------------------------- | | TypeScript | Node.js 18+, `@playwright/test` or `supertest`, `zod` | | Java | Java 21+, REST Assured 5.x, AssertJ, Jackson, `json-schema-validator` |
Core Principles
1. **Schema validation on every response** — never trust an unvalidated response 2. **Test all HTTP status codes** — happy path AND error states 3. **Auth testing is mandatory** — verify 401/403 for protected endpoints 4. **Data-driven** — test with valid, invalid, boundary, and empty values 5. **Stateless where possible** — each test cleans up or uses unique data
Quick Reference — Playwright
import { test, expect } from "@playwright/test";
test("GET /api/users returns 200 with valid schema", async ({ request }) => {
const response = await request.get("/api/users");
expect(response.ok()).toBeTruthy();
const body = await response.json();
expect(body).toMatchObject({ data: expect.any(Array) });
});Quick Reference — REST Assured
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@Test
@DisplayName("GET /api/users returns 200 with valid schema")
void getUsers() {
String token = "test-token";
given()
.header("Authorization", "Bearer " + token)
.when()
.get("/api/users")
.then()
.statusCode(200)
.body("data", is(instanceOf(List.class)))
.body("data.size()", greaterThan(0));
}---
Red Flags
Stop and reconsider if you see any of these in generated API tests:
- Assertions only on status code with no body/schema validation — an unvalidated response hides contract drift.
- Hardcoded secrets/tokens committed to the test file — read from env or a secrets manager.
- Tests sharing mutable state with no cleanup — flaky and order-dependent.
- Skipping auth tests (no 401/403 assertions on protected endpoints) — security regression risk.
- No coverage of error states (only happy-path 200s) — error handling is untested.
---
References
| Document | Content | | ---------------------------------------------------------------- | --------------------------------------------------- | | [REST API Patterns](./references/rest-api-patterns.md) | CRUD, pagination, filtering, error patterns | | [Playwright API Testing](./references/playwright-api-testing.md) | Request fixture, Supertest, TypeScript patterns | | [REST Assured Testing](./references/rest-assured-testing.md) | REST Assured, AssertJ, Java patterns | | [Schema Validation](./references/schema-validation.md) | Zod (TS), JSON Schema (Java), strict vs loose | | [Contract Testing](./references/contract-testing.md) | Request/response contracts, idempotency, versioning |
Templates
- [Playwright API Spec](./templates/playwright-api-spec.ts) — starter test file for API testing
- [REST Assured Test](./templates/rest-assured-test.java) — starter Java test class
Scripts
- [API Health Check](./scripts/api-health-check.sh) — validate API endpoints respond correctly
Troubleshooting
| Issue | Solution | | ------------------------------ | ------------------------------------------------------------------------------ | | 401 on authenticated endpoints | Verify token is fresh; check expiry; re-authenticate | | Flaky API tests | Add retry logic; check for rate limiting; use unique test data | | Schema validation too strict | Use `.passthrough()` (Zod) or `additionalProperties: true` for flexible fields | | Timeout on slow endpoints | Increase `timeout` in request options; check for server load |
---
Verification
- [ ] **Schema validation in place** — Every response validated against a schema (Zod or JSON Schema)
- [ ] **Authentication tested** — 401 returned for protected endpoints without valid credentials
- [ ] **Idempotency verified** — PUT/DELETE produce same result when called multiple times
- [ ] **Edge cases covered** — Empty payloads, invalid types, boundary values, SQL injection attempts
A practical library of agents, instructions, and skills designed specifically for QA Automation Engineers, focusing on production-oriented solutions.
Repo: fugazi/test-automation-skills-agents
Other skills on test-automation-skills-agents.
- /a11y-playwright-testing
Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core. Use to write, run, or debug WCAG 2.2 AA checks, keyboard and focus tests, ARIA/semantic validation, accessible names, form labels, color contrast, or screen-reader test
Open skill - /accessibility-selenium-testing
Accessibility testing toolkit using Selenium WebDriver 4+ with Java 21+ and axe-core engine. Use when asked to validate WCAG 2.2 AA compliance, scan pages or components for a11y violations, test keyboard navigation, audit color contrast, check ARIA semantics, generate
Open skill - /grill-me-qa
A guided interview to challenge and validate QA automation plans, test strategies, and framework designs before implementation. Use when the user wants to validate a test architecture, challenge a testing decision, prepare an AI-assisted testing rollout, or uses any "grill"
Open skill - /playwright-cli
Drive a live browser from the CLI with playwright-cli to navigate, interact, snapshot, and capture evidence. Use for ad-hoc browser commands, page inspection, screenshots, traces, network mocking, session management, or interactive debugging—not authoring @playwright/test specs.
Open skill - /playwright-e2e-testing
Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows. Use when asked to create, run, debug, or refactor E2E tests, form/navigation/auth flows, responsive checks, UI mocking, fixtures, Page Objects, or visual comparisons. Use
Open skill - /playwright-regression-testing
Govern Playwright TypeScript regression suites across many tests. Use when asked to plan, select, tier, execute, or optimize suites with risk/change analysis, tags, CI/CD, sharding, flaky-test management, or suite-health metrics; not for authoring one UI spec. Keywords:
Open skill

