mcpField
A
api-testing

api-testing

github.com/scientiacapitalテスト・品質2880 回インストール4 週間前に更新
リポジトリ

api-testing について

api-testingは、コードベースのテストフレームワークではなく、PostmanとBrunoで既存APIを検証するチーム向けのスキルです。コレクション、環境、アサーション、認証、テストデータ、CI連携を扱います。

主な機能

  1. 01PostmanとBrunoのコレクション設計
  2. 02環境と変数の管理
  3. 03レスポンスとスキーマの検証
  4. 04認証とエラーのテスト
  5. 05CLIを使ったCI連携

活用シーン

  1. 01リソース別のエンドポイントテスト整理
  2. 02環境ごとのレスポンス検証
  3. 03認証と失敗ケースのテスト
  4. 04CIパイプラインでのAPIコレクション実行

インストール

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

$npx skills add https://github.com/scientiacapital/skills --skill api-testing

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

同梱ファイル

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

config.json
reference/
bruno-patterns.md
ci-integration.md
data-management.md
postman-patterns.md
test-design.md

詳細

Postman と Bruno を使用したツールベースの API テストに関するエキスパートレベルのスキルです。コレクションの整理、環境管理、テストスクリプト、レスポンス検証、CI/CD 統合を網羅します。

このスキルは testing-skill(コードベースのテスト)および api-design-skill(API 構造)を補完します。プログラムによるテストを書くのではなく、専用ツールで既存の API をテストする必要がある場合に使用します。

主な違い:

  • testing-skill: コードベースのテスト(supertest、MSW、pytest requests)
  • api-testing-skill: ツールベースのテスト(Postman、Bruno コレクション)
  • api-design-skill: API の設計方法(構造、規約)

<quick_start> Postman クイックテスト:

// Tests tab in Postman
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response has user data", function () {
    const json = pm.response.json();
    pm.expect(json).to.have.property("id");
    pm.expect(json).to.have.property("email");
});

Bruno クイックテスト:

// tests/get-user.bru
meta {
  name: Get User
  type: http
  seq: 1
}

get {
  url: {{baseUrl}}/api/users/{{userId}}
}

tests {
  test("should return 200", function() {
    expect(res.status).to.equal(200);
  });
}

環境のセットアップ:

{
  "baseUrl": "https://api.example.com",
  "apiKey": "test_key_xxx"
}

</quick_start>

<success_criteria> API テストは、次の条件を満たす場合に成功です:

  • すべてのエンドポイントに少なくとも 1 つのハッピーパステストがある
  • エラーケースがテストされている(4xx、5xx レスポンス)
  • レスポンススキーマが検証されている(ステータスコードだけでなく)
  • すべての設定可能な値に環境変数が使用されている
  • コレクションがリソース/ドメインごとに整理されている
  • 認証フローがエンドツーエンドでテストされている
  • CI パイプラインがすべての PR でコレクションを実行する
  • テストデータが再現可能である(フィクスチャまたは動的生成) </success_criteria>

<tool_comparison>

Postman と Bruno

機能PostmanBruno
ストレージクラウド/ローカルGit ネイティブ(.bru ファイル)
コラボレーションチーム同期Git ブランチ
料金無料枠 + 有料無料かつオープンソース
オフラインデスクトップアプリ完全オフライン
スクリプティングJavaScriptJavaScript
CI/CDNewman CLIBruno CLI
スキーマJSONプレーンテキスト .bru
最適な用途チーム、API ドキュメントGit ワークフロー、プライバシー
それぞれをいつ使用するか

Postman を選ぶ場合:

  • チームがリアルタイムのコラボレーションを必要としている
  • API ドキュメントが主要な成果物である
  • フロントエンド開発にモックサーバーが必要である
  • トークンリフレッシュを伴う複雑な OAuth フローがある

Bruno を選ぶ場合:

  • Git ネイティブのワークフローを好む
  • プライバシー/セルフホストが必須である
  • よりシンプルなテストシナリオである
  • 開発者がコードライクな構文を好む </tool_comparison>

<collection_organization>

コレクション構造

フォルダ階層
my-api-tests/
├── auth/
│   ├── login.bru
│   ├── refresh-token.bru
│   └── logout.bru
├── users/
│   ├── create-user.bru
│   ├── get-user.bru
│   ├── update-user.bru
│   └── delete-user.bru
├── orders/
│   ├── create-order.bru
│   ├── get-orders.bru
│   └── cancel-order.bru
├── environments/
│   ├── local.bru
│   ├── staging.bru
│   └── production.bru
└── collection.bru
命名規則
要素規則例
フォルダkebab-case、複数形users、auth-flows
リクエスト動詞-名詞create-user、get-orders
変数camelCase{{baseUrl}}、{{authToken}}
環境小文字local、staging、production
リクエストの順序

依存するリクエストには連番を使用します:

1. auth/login.bru          (seq: 1)
2. users/create-user.bru   (seq: 2) - needs auth token
3. users/get-user.bru      (seq: 3) - uses created user ID

</collection_organization>

<test_patterns>

テストアサーションのパターン

アサーションの種類確認する内容例
ステータスコード200、201、400、401、404pm.response.to.have.status(200)
レスポンスボディ必須フィールド、型、パターンpm.expect(json).to.have.property("id")
レスポンス時間しきい値未満pm.expect(pm.response.responseTime).to.be.below(500)
ヘッダーContent-Type、X-Request-Idpm.response.to.have.header("Content-Type")
JSON スキーマ完全なスキーマ検証pm.response.to.have.jsonSchema(schema)

Postman と Bruno の例を含む完全なアサーションパターンについては、reference/test-design.md を参照してください。 </test_patterns>

<environment_management>

環境管理

変数のスコープ(Postman): グローバル → コレクション → 環境 → データ → ローカル(最優先)。

環境ごと(local/staging/production)の baseUrl、apiKey には環境ファイルを使用します。レスポンスの値を保存することでリクエストを連鎖させます(pm.environment.set("authToken", json.accessToken))。これは後続のリクエストで使用します。

環境ファイルの形式、動的変数、リクエスト連鎖のパターンについては、reference/data-management.md を参照してください。 </environment_management>

<authentication_testing>

認証テスト

認証タイプメソッドキーパターン
Bearer トークンログインレスポンスから保存し、Authorization ヘッダーで使用pm.environment.set("accessToken", json.accessToken)
API キーヘッダー(X-API-Key)またはクエリパラメータ{{apiKey}} 変数
OAuth 2.0プリリクエストスクリプトで有効期限を確認し、自動的に更新pm.sendRequest() でトークンを更新

常にテストする項目: トークンなしで 401、誤ったロールで 403。

OAuth 2.0 のリフレッシュフローと認証失敗のテストパターンについては、reference/postman-patterns.md を参照してください。 </authentication_testing>

<error_testing>

エラーレスポンスのテスト

各エラークラスをテストします: 400(details 配列を含むバリデーションエラー)、404(見つからない)、429(レート制限ヘッダーが存在する)、5xx(requestId を持つ)。

エラーレスポンスのアサーションパターンについては、reference/test-design.md を参照してください。 </error_testing>

<ci_integration>

CI/CD 統合

ツールCLI実行コマンド
PostmanNewmannewman run collection.json -e staging.json
BrunoBruno CLIbru run --env staging

GitHub Actions 経由で統合します: CLI をインストールし、コレクションを実行し、HTML レポートをアーティファクトとしてアップロードします。機密性の高い環境変数には ${{ secrets.* }} を使用します。

GitHub Actions ワークフロー、レポーター、シークレットの扱いについては、reference/ci-integration.md を参照してください。 </ci_integration>

<data_management>

テストデータ管理

イテレーションベースのテストにはデータファイル(newman run -d test-data.json)を使用します。Postman には組み込みの動的変数({{$guid}}、{{$randomEmail}}、{{$timestamp}})があります。作成したリソースを削除するクリーンアップスクリプトをポストリクエストに追加します。

データファイルの形式、動的生成、クリーンアップパターンについては、reference/data-management.md を参照してください。 </data_management>

## API テストチェックリスト

コレクションを作成する前に:

  • API ドキュメントを確認した
  • 認証方法を特定した
  • すべての環境のベース URL を定義した
  • テストデータ戦略を決定した

各エンドポイントについて:

  • ハッピーパステスト(期待する入力、期待する出力)
  • 必須フィールドのバリデーション(400 エラー)
  • 認証テスト(トークンなしで 401)
  • 認可テスト(誤った権限で 403)
  • 見つからない場合のテスト(無効な ID で 404)
  • レスポンススキーマを検証した
  • レスポンス時間をアサートした

コレクションの構成:

  • リクエストをリソースごとにグループ化した
  • 依存するリクエストにシーケンス番号を付けた
  • ローカル/ステージング/本番用の環境を用意した
  • 機密性の高い値をシークレットとしてマークした

CI 統合:

  • Newman/Bruno CLI を構成した
  • GitHub Actions ワークフローを作成した
  • テストレポートをアーティファクトとしてアップロードした
  • シークレットを CI 環境に保存した
詳細なパターンについては、適切なリファレンスを読み込んでください:
トピックリファレンスファイル読み込むタイミング
Postman の高度なパターンreference/postman-patterns.mdコレクション、スクリプティング、モニター
Bruno ワークフローreference/bruno-patterns.md.bru ファイル、git 統合
テストケース設計reference/test-design.mdカバレッジ戦略、エッジケース
テストデータ戦略reference/data-management.mdフィクスチャ、動的データ、クリーンアップ
CI/CD パイプラインreference/ci-integration.mdNewman、GitHub Actions、レポーティング

読み込むには: 特定のトピックを尋ねるか、コンテキストが示唆しているか確認してください。

結果サイドカーの出力

最後のステップとして、~/.claude/skill-analytics/last-outcome-api-testing.json に書き込みます:

{"ts":"[UTC ISO8601]","skill":"api-testing","version":"1.0.0","variant":"default",
 "status":"[success|partial|error]","runtime_ms":[estimated ms from start],
 "metrics":{"tests_created":[n],"endpoints_tested":[n],"assertions_written":[n]},
 "error":null,"session_id":"[YYYY-MM-DD]"}

一部のステージが失敗しても結果が生成された場合は、ステータスに "partial" を使用してください。出力がまったく生成されなかった場合にのみ、"error" を使用してください。

コメント