mcpField
A
api-testing

api-testing

github.com/fugaziテスト・品質256103 回インストール6 日前に更新
リポジトリ

api-testing について

api-testing は、REST と GraphQL の API テスト向けスキルです。TypeScript または Java を使う開発・テストで、スキーマ検証、認証、エラー、境界値、サービス契約を扱います。

主な機能

  1. 01Playwright と REST Assured でテスト
  2. 02Zod または JSON Schema による検証
  3. 03認証とエラー状態を網羅
  4. 04ページネーション・フィルター・ソートのテスト
  5. 05冪等性とサービス契約の確認

活用シーン

  1. 01REST または GraphQL エンドポイントのテスト作成
  2. 02リクエストとレスポンスのスキーマ検証
  3. 03保護されたエンドポイントの認証確認
  4. 04ページネーションと不正入力のテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fugazi/test-automation-skills-agents --skill api-testing

インストール後、Claude Code で/api-testingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.txt
references/
contract-testing.md
playwright-api-testing.md
rest-api-patterns.md
rest-assured-testing.md
schema-validation.md
scripts/
api-health-check.sh
templates/
playwright-api-spec.ts
rest-assured-test.java

詳細

API テスト(Playwright + REST Assured)

Playwright TypeScript(request フィクスチャ、Supertest、Zod)と Java(REST Assured、AssertJ、JSON Schema Validator)の両方をカバーする、包括的な API テストスキルです。

このスキルを使用する場面

  • REST または GraphQL エンドポイントの API テストを作成する
  • リクエスト/レスポンスのスキーマを検証する(Zod、JSON Schema)
  • 認証フローをテストする(OAuth2、JWT、API キー、Bearer トークン)
  • エラー処理を検証する(400、401、403、404、409、422、500)
  • ページネーション、フィルタリング、ソートのエッジケースをテストする
  • PUT/DELETE 操作の冪等性を検証する
  • サービス間のコントラクトテストを行う
  • レート制限を検証する
使用しない場面
  • ブラウザーを操作する UI フロー(Playwright の仕様には playwright-e2e-testing、Selenium には webapp-selenium-testing を使用してください)
  • ライブの対話型ブラウザーセッションやスナップショット(playwright-cli を使用してください)
  • 視覚やレイアウトのリグレッション(対象外 — DOM は扱いません)
  • ページ間で実際のブラウザーを操作する必要があるエンドツーエンドの操作手順

前提条件

スタック要件
TypeScriptNode.js 18+、@playwright/test または supertest、zod
JavaJava 21+、REST Assured 5.x、AssertJ、Jackson、json-schema-validator

基本原則

  1. すべてのレスポンスでスキーマを検証する — 検証していないレスポンスを決して信頼しないでください
  2. すべての HTTP ステータスコードをテストする — 正常系とエラー状態の両方を対象にします
  3. 認証テストは必須です — 保護されたエンドポイントで 401/403 が返ることを検証します
  4. データ駆動型にする — 有効値、無効値、境界値、空の値でテストします
  5. 可能な限りステートレスにする — 各テストで後片付けを行うか、一意のデータを使用します

クイックリファレンス — 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) });
});

クイックリファレンス — 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));
}

危険信号

生成された API テストに以下のいずれかが見られる場合は、作業を止めて見直してください。

  • ステータスコードのみをアサーションし、本文やスキーマを検証していない — レスポンスを検証しないと、コントラクトのずれが見えなくなります。
  • テストファイルにハードコードされたシークレットやトークンをコミットしている — 環境変数またはシークレットマネージャーから読み込んでください。
  • クリーンアップを行わず、テスト間で変更可能な状態を共有している — テストが不安定になり、実行順序に依存します。
  • 認証テストを省略している(保護されたエンドポイントで 401/403 をアサーションしていない) — セキュリティのリグレッションにつながるリスクがあります。
  • エラー状態を網羅していない(正常系の 200 のみ) — エラー処理がテストされていません。

参考資料

ドキュメント内容
REST API パターンCRUD、ページネーション、フィルタリング、エラーパターン
Playwright API テストrequest フィクスチャ、Supertest、TypeScript のパターン
REST Assured テストREST Assured、AssertJ、Java のパターン
スキーマ検証Zod(TS)、JSON Schema(Java)、厳密/緩やかな検証
コントラクトテストリクエスト/レスポンスのコントラクト、冪等性、バージョニング

テンプレート

スクリプト

トラブルシューティング

問題解決策
認証が必要なエンドポイントで401トークンが有効か確認し、有効期限を確認して再認証します
API テストが不安定再試行ロジックを追加し、レート制限を確認して、一意のテストデータを使用します
スキーマ検証が厳しすぎる柔軟なフィールドには .passthrough()(Zod)または additionalProperties: true を使用します
応答の遅いエンドポイントでタイムアウトリクエストオプションの timeout を増やし、サーバーの負荷を確認します

検証

  • スキーマ検証の実装 — すべての応答をスキーマ(Zod または JSON Schema)で検証します
  • 認証のテスト — 有効な認証情報がない場合、保護されたエンドポイントが401を返すことを確認します
  • 冪等性の検証 — PUT/DELETE を複数回呼び出しても同じ結果になることを確認します
  • エッジケースへの対応 — 空のペイロード、無効な型、境界値、SQL インジェクションの試行を対象にします

コメント