jpskill.com
🛠️ 開発・MCP コミュニティ 🔴 エンジニア向け 👤 エンジニア・AI開発者

🛠️ APIテストSuiteビルダー

api-test-suite-builder

APIのテストに必要な一連のテストスイートを、効率的に構築するための自動化された仕組みを提供し、開発者のテスト作業を支援するSkill。

⏱ RAG構築 1週間 → 1日

📺 まず動画で見る(YouTube)

▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗

※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。

📜 元の英語説明(参考)

API Test Suite Builder

🇯🇵 日本人クリエイター向け解説

一言でいうと

APIのテストに必要な一連のテストスイートを、効率的に構築するための自動化された仕組みを提供し、開発者のテスト作業を支援するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o api-test-suite-builder.zip https://jpskill.com/download/4374.zip && unzip -o api-test-suite-builder.zip && rm api-test-suite-builder.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/4374.zip -OutFile "$d\api-test-suite-builder.zip"; Expand-Archive "$d\api-test-suite-builder.zip" -DestinationPath $d -Force; ri "$d\api-test-suite-builder.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して api-test-suite-builder.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → api-test-suite-builder フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
2

💬 こう話しかけるだけ — サンプルプロンプト

  • API Test Suite Builder を使って、最小構成のサンプルコードを示して
  • API Test Suite Builder の主な使い方と注意点を教えて
  • API Test Suite Builder を既存プロジェクトに組み込む方法を教えて

これをClaude Code に貼るだけで、このSkillが自動発動します。

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[スキル名] api-test-suite-builder

APIテストスイートビルダー

ティア: POWERFUL カテゴリ: エンジニアリング ドメイン: テスト / API品質


概要

Next.js App Router、Express、FastAPI、Django RESTなどのフレームワーク全体でAPIルート定義をスキャンし、認証、入力検証、エラーコード、ページネーション、ファイルアップロード、レート制限をカバーする包括的なテストスイートを自動生成します。Vitest+Supertest(Node)またはPytest+httpx(Python)用のすぐに実行できるテストファイルを出力します。


コア機能

  • ルート検出 — ソースファイルをスキャンしてすべてのAPIエンドポイントを抽出します
  • 認証カバレッジ — 有効/無効/期限切れトークン、認証ヘッダーの欠落
  • 入力検証 — 必須フィールドの欠落、誤った型、境界値、インジェクション試行
  • エラーコードマトリックス — 各ルートの400/401/403/404/422/500
  • ページネーション — 最初/最後/空/大きすぎるページ
  • ファイルアップロード — 有効、大きすぎる、誤ったMIMEタイプ、空
  • レート制限 — バースト検出、ユーザーごと vs グローバル制限

使用するタイミング

  • 新しいAPIが追加された場合 — 実装を記述する前にテストの足場を生成(TDD)
  • テストのないレガシーAPI — スキャンしてベースラインカバレッジを生成
  • API契約レビュー — 既存のテストが現在のルート定義と一致するか検証
  • リリース前リグレッションチェック — すべてのルートに少なくともスモークテストがあることを確認
  • セキュリティ監査準備 — 敵対的入力テストを生成

ルート検出

Next.js App Router

# Find all route handlers
find ./app/api -name "route.ts" -o -name "route.js" | sort

# Extract HTTP methods from each route file
grep -rn "export async function\|export function" app/api/**/route.ts | \
  grep -oE "(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)" | sort -u

# Full route map
find ./app/api -name "route.ts" | while read f; do
  route=$(echo $f | sed 's|./app||' | sed 's|/route.ts||')
  methods=$(grep -oE "export (async )?function (GET|POST|PUT|PATCH|DELETE)" "$f" | \
    grep -oE "(GET|POST|PUT|PATCH|DELETE)")
  echo "$methods $route"
done

Express

# Find all router files
find ./src -name "*.ts" -o -name "*.js" | xargs grep -l "router\.\(get\|post\|put\|delete\|patch\)" 2>/dev/null

# Extract routes with line numbers
grep -rn "router\.\(get\|post\|put\|delete\|patch\)\|app\.\(get\|post\|put\|delete\|patch\)" \
  src/ --include="*.ts" | grep -oE "(get|post|put|delete|patch)\(['\"][^'\"]*['\"]"

# Generate route map
grep -rn "router\.\|app\." src/ --include="*.ts" | \
  grep -oE "\.(get|post|put|delete|patch)\(['\"][^'\"]+['\"]" | \
  sed "s/\.\(.*\)('\(.*\)'/\U\1 \2/"

FastAPI

# Find all route decorators
grep -rn "@app\.\|@router\." . --include="*.py" | \
  grep -E "@(app|router)\.(get|post|put|delete|patch)"

# Extract with path and function name
grep -rn "@\(app\|router\)\.\(get\|post\|put\|delete\|patch\)" . --include="*.py" | \
  grep -oE "@(app|router)\.(get|post|put|delete|patch)\(['\"][^'\"]*['\"]"

Django REST Framework

# urlpatterns extraction
grep -rn "path\|re_path\|url(" . --include="*.py" | grep "urlpatterns" -A 50 | \
  grep -E "path\(['\"]" | grep -oE "['\"][^'\"]+['\"]" | head -40

# ViewSet router registration
grep -rn "router\.register\|DefaultRouter\|SimpleRouter" . --include="*.py"

テスト生成パターン

認証テストマトリックス

認証された各エンドポイントについて、以下を生成します。

テストケース 期待されるステータス
Authorizationヘッダーなし 401
無効なトークン形式 401
有効なトークン、誤ったユーザーロール 403
期限切れJWTトークン 401
有効なトークン、正しいロール 2xx
削除されたユーザーのトークン 401

入力検証マトリックス

リクエストボディを持つすべてのPOST/PUT/PATCHエンドポイントについて:

テストケース 期待されるステータス
空のボディ {} 400 または 422
必須フィールドの欠落(一度に1つずつ) 400 または 422
誤った型(intが期待される場所でstring) 400 または 422
境界値: min-1の値 400 または 422
境界値: minの値 2xx
境界値: maxの値 2xx
境界値: max+1の値 400 または 422
文字列フィールドへのSQLインジェクション 400 または 200 (サニタイズ済み)
文字列フィールドへのXSSペイロード 400 または 200 (サニタイズ済み)
必須フィールドのnull値 400 または 422

テストファイルの例

→ 詳細については references/example-test-files.md を参照してください

ルートスキャンからのテスト生成

コードベースが与えられた場合、以下のプロセスに従います。

  1. 上記の検出コマンドを使用してルートをスキャンします
  2. 各ルートハンドラーを読み取り、以下を理解します。
    • 期待されるリクエストボディスキーマ
    • 認証要件(ミドルウェア、デコレーター)
    • 戻り値の型とステータスコード
    • ビジネスルール(所有権、ロールチェック)
  3. 上記のパターンを使用して、ルートグループごとにテストファイルを生成します
  4. テストに記述的な名前を付けます:「"auth test 3"」ではなく、「"トークンが期限切れの場合に401を返す"」のようにします
  5. テストデータにはファクトリ/フィクスチャを使用します — IDをハードコードしないでください
  6. ステータスコードだけでなく、レスポンスの形状をアサートします

よくある落とし穴

  • ハッピーパスのみをテストする — バグの80%はエラーパスに存在します。まずそれらをテストしてください
  • ハードコードされたテストデータID — ファクトリ/フィクスチャを使用してください。IDは環境間で変更されます
  • テスト間の共有状態afterEach/afterAllで常にクリーンアップしてください
  • 実装ではなく動作をテストする — APIが何を返すかをテストし、どのように返すかはテストしないでください
  • 境界テストの欠落 — ページネーションと制限ではオフバイワンエラーが非常に一般的です
  • トークンの有効期限をテストしない — 期限切れトークンは無効なトークンとは異なる動作をします
  • Content-Typeを無視する — APIが誤ったコンテンツタイプ(jsonが期待される場所でxml)を拒否することをテストしてください

ベストプラクティス

  1. エンドポイントごとに1つのdescribeブロック — 失敗を分離し、読みやすくします
  2. 最小限のデータをシードする — データベース全体をロードせず、テストに必要なものだけを作成します
  3. 共有セットアップにはbeforeAll、クリーンアップにはafterAllを使用します — 高価な操作にbeforeEachは使用しません
  4. ステータスコードだけでなく、特定のエラーメッセージ/フィールドをアサートします
  5. 機密フィールド(パスワード、シークレット)がレスポンスに含まれないことをテストします
  6. 認証テストでは、「ヘッダーの欠落」ケースを「無効なトークン」ケースとは別に常にテストします
  7. レートを追加します

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

API Test Suite Builder

Tier: POWERFUL Category: Engineering Domain: Testing / API Quality


Overview

Scans API route definitions across frameworks (Next.js App Router, Express, FastAPI, Django REST) and auto-generates comprehensive test suites covering auth, input validation, error codes, pagination, file uploads, and rate limiting. Outputs ready-to-run test files for Vitest+Supertest (Node) or Pytest+httpx (Python).


Core Capabilities

  • Route detection — scan source files to extract all API endpoints
  • Auth coverage — valid/invalid/expired tokens, missing auth header
  • Input validation — missing fields, wrong types, boundary values, injection attempts
  • Error code matrix — 400/401/403/404/422/500 for each route
  • Pagination — first/last/empty/oversized pages
  • File uploads — valid, oversized, wrong MIME type, empty
  • Rate limiting — burst detection, per-user vs global limits

When to Use

  • New API added — generate test scaffold before writing implementation (TDD)
  • Legacy API with no tests — scan and generate baseline coverage
  • API contract review — verify existing tests match current route definitions
  • Pre-release regression check — ensure all routes have at least smoke tests
  • Security audit prep — generate adversarial input tests

Route Detection

Next.js App Router

# Find all route handlers
find ./app/api -name "route.ts" -o -name "route.js" | sort

# Extract HTTP methods from each route file
grep -rn "export async function\|export function" app/api/**/route.ts | \
  grep -oE "(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)" | sort -u

# Full route map
find ./app/api -name "route.ts" | while read f; do
  route=$(echo $f | sed 's|./app||' | sed 's|/route.ts||')
  methods=$(grep -oE "export (async )?function (GET|POST|PUT|PATCH|DELETE)" "$f" | \
    grep -oE "(GET|POST|PUT|PATCH|DELETE)")
  echo "$methods $route"
done

Express

# Find all router files
find ./src -name "*.ts" -o -name "*.js" | xargs grep -l "router\.\(get\|post\|put\|delete\|patch\)" 2>/dev/null

# Extract routes with line numbers
grep -rn "router\.\(get\|post\|put\|delete\|patch\)\|app\.\(get\|post\|put\|delete\|patch\)" \
  src/ --include="*.ts" | grep -oE "(get|post|put|delete|patch)\(['\"][^'\"]*['\"]"

# Generate route map
grep -rn "router\.\|app\." src/ --include="*.ts" | \
  grep -oE "\.(get|post|put|delete|patch)\(['\"][^'\"]+['\"]" | \
  sed "s/\.\(.*\)('\(.*\)'/\U\1 \2/"

FastAPI

# Find all route decorators
grep -rn "@app\.\|@router\." . --include="*.py" | \
  grep -E "@(app|router)\.(get|post|put|delete|patch)"

# Extract with path and function name
grep -rn "@\(app\|router\)\.\(get\|post\|put\|delete\|patch\)" . --include="*.py" | \
  grep -oE "@(app|router)\.(get|post|put|delete|patch)\(['\"][^'\"]*['\"]"

Django REST Framework

# urlpatterns extraction
grep -rn "path\|re_path\|url(" . --include="*.py" | grep "urlpatterns" -A 50 | \
  grep -E "path\(['\"]" | grep -oE "['\"][^'\"]+['\"]" | head -40

# ViewSet router registration
grep -rn "router\.register\|DefaultRouter\|SimpleRouter" . --include="*.py"

Test Generation Patterns

Auth Test Matrix

For every authenticated endpoint, generate:

Test Case Expected Status
No Authorization header 401
Invalid token format 401
Valid token, wrong user role 403
Expired JWT token 401
Valid token, correct role 2xx
Token from deleted user 401

Input Validation Matrix

For every POST/PUT/PATCH endpoint with a request body:

Test Case Expected Status
Empty body {} 400 or 422
Missing required fields (one at a time) 400 or 422
Wrong type (string where int expected) 400 or 422
Boundary: value at min-1 400 or 422
Boundary: value at min 2xx
Boundary: value at max 2xx
Boundary: value at max+1 400 or 422
SQL injection in string field 400 or 200 (sanitized)
XSS payload in string field 400 or 200 (sanitized)
Null values for required fields 400 or 422

Example Test Files

→ See references/example-test-files.md for details

Generating Tests from Route Scan

When given a codebase, follow this process:

  1. Scan routes using the detection commands above
  2. Read each route handler to understand:
    • Expected request body schema
    • Auth requirements (middleware, decorators)
    • Return types and status codes
    • Business rules (ownership, role checks)
  3. Generate test file per route group using the patterns above
  4. Name tests descriptively: "returns 401 when token is expired" not "auth test 3"
  5. Use factories/fixtures for test data — never hardcode IDs
  6. Assert response shape, not just status code

Common Pitfalls

  • Testing only happy paths — 80% of bugs live in error paths; test those first
  • Hardcoded test data IDs — use factories/fixtures; IDs change between environments
  • Shared state between tests — always clean up in afterEach/afterAll
  • Testing implementation, not behavior — test what the API returns, not how it does it
  • Missing boundary tests — off-by-one errors are extremely common in pagination and limits
  • Not testing token expiry — expired tokens behave differently from invalid ones
  • Ignoring Content-Type — test that API rejects wrong content types (xml when json expected)

Best Practices

  1. One describe block per endpoint — keeps failures isolated and readable
  2. Seed minimal data — don't load the entire DB; create only what the test needs
  3. Use beforeAll for shared setup, afterAll for cleanup — not beforeEach for expensive ops
  4. Assert specific error messages/fields, not just status codes
  5. Test that sensitive fields (password, secret) are never in responses
  6. For auth tests, always test the "missing header" case separately from "invalid token"
  7. Add rate limit tests last — they can interfere with other test suites if run in parallel

同梱ファイル

※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。