load-testing-apis について
API の負荷・ストレス・ソークテストを計画、分析するスキルです。k6 や Artillery などのスクリプトを生成し、トラフィックをモデル化して、閾値に対する性能とボトルネックをレポートします。
主な機能
- 01負荷・ストレス・ソークテストの計画
- 02k6 と Artillery のスクリプト生成
- 03トラフィックシナリオの設定
- 04合否判定の閾値設定
- 05性能・ボトルネックレポート
活用シーン
- 01SLO に対する API 性能の測定
- 02急増トラフィック下での API テスト
- 03継続負荷テストでのボトルネック特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jeremylongshore/ tons-of-skills-marketplace --skill load-testing-apisインストール後、Claude Code で/load-testing-apisを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/errors.mdexamples.mdimplementation.md詳細
API の負荷テスト
概要
包括的な負荷テスト、ストレステスト、ソークテストを実行し、API のパフォーマンスを検証してボトルネックを特定し、スループットのベースラインを確立します。設定可能な仮想ユーザーのランプアップ、リクエスト分布、失敗しきい値のアサーションを使用して、実際のトラフィックパターンをシミュレートする k6、Artillery、または wrk 用のテストスクリプトを生成します。
前提条件
- 負荷テストツールがインストールされていること:k6(推奨)、Artillery、wrk、または Apache JMeter
- 対象 API がステージング/パフォーマンス環境にデプロイされていること(安全対策なしに本番環境で負荷テストを実施しないでください)
- 監視スタックにアクセスできること:テスト結果とサーバーメトリクスを関連付けるための Grafana/Prometheus、Datadog、または CloudWatch
- テスト用の API 認証情報があること(API キー、テストユーザーの JWT トークン)
- パフォーマンスのベースラインとなる SLO が定義されていること(目標 p95 レイテンシ、最大エラー率、最小スループット)
手順
- Glob と Read を使用して API 仕様とルート定義を読み込み、エンドポイントの完全な一覧を作成して、トラフィックの多いパスとリソース負荷の高い操作を特定します。
- 現実的なユーザー行動をモデル化するテストシナリオを定義します。ブラウジング(読み取り 80%)、チェックアウト(読み取りと書き込みの混在)、スパイクトラフィックのパターンを作成し、リクエスト間に適切な思考時間を設けます。
- 設定可能なステージを備えた k6 または Artillery のテストスクリプトを生成します。ランプアップ(2 min)、持続負荷(10 min)、スパイク(3 倍で 2 min)、クールダウン(2 min)を設定します。
- リクエストの分布が本番環境のトラフィックパターンに一致するよう設定します。均等な分布ではなく、エンドポイント全体から重み付けしてランダムに選択します。
- 合否基準のしきい値アサーションを追加します。p95 レスポンスタイム < 500ms、エラー率 < 1%、スループット > 100 requests/second とします。
- CSV または JSON のフィクスチャを使用して、現実的なペイロード、一意のユーザー ID、さまざまなクエリパラメーターを使ったデータ駆動型リクエストを実装し、キャッシュだけをテストする状態を避けます。
- 想定される本番負荷でベースラインテストを実行し、その後 2x、5x、10x へと段階的に負荷を増やして、限界点と飽和時の挙動を特定します。
- 結果を分析します。レイテンシの急増をサーバーメトリクス(CPU、メモリ、DB 接続数、イベントループの遅延)と関連付け、ボトルネック(データベース、ネットワーク、コンピューティング)を特定し、調査結果を記録します。
- 結果を SLO のしきい値と比較し、最適化の推奨事項を含むパフォーマンスレポートを生成します。
実装ガイドの全文は ${CLAUDE_SKILL_DIR}/references/implementation.md を参照してください。
出力
${CLAUDE_SKILL_DIR}/load-tests/scenarios/- トラフィックシナリオごとの k6/Artillery テストスクリプト${CLAUDE_SKILL_DIR}/load-tests/data/- テストデータのフィクスチャ(ユーザー、ペイロード、トークン)${CLAUDE_SKILL_DIR}/load-tests/thresholds.json- 合否しきい値の設定${CLAUDE_SKILL_DIR}/reports/load-test-results.json- タイミングデータを含む生のテスト結果${CLAUDE_SKILL_DIR}/reports/load-test-summary.md- 人が読める形式のパフォーマンス分析レポート${CLAUDE_SKILL_DIR}/reports/bottleneck-analysis.md- 特定したボトルネックと対処方法の推奨事項
エラー処理
| エラー | 原因 | 解決方法 |
|---|---|---|
| 接続拒否 | 対象サーバーのファイル記述子が不足した、または接続プールが枯渇した | サーバーの ulimit と接続プールのサイズを増やします。同時接続数の上限に注意してください |
| ランプアップ時のタイムアウト急増 | サーバーが接続確立の速度に対応できない | 接続の事前ウォームアップを実装します。ランプアップ時間を延長し、接続プーリングを追加します |
| 429 応答が結果の大部分を占める | 負荷テスト中にレートリミッターが作動している | レートリミッターで負荷テストの送信元 IP を許可リストに追加するか、レートリミッターの挙動を個別にテストします |
| ベースライン結果に一貫性がない | ステージング環境が他のトラフィックと共有されている | テスト環境を分離し、時間外にテストを実施するか、専用のパフォーマンス環境を使用します |
| メモリリークが検出された | ソークテスト中、数時間にわたってメモリが継続的に増加している | 開発チームに報告し、テストシナリオを分離してリークしているエンドポイントを特定します |
包括的なエラーパターンについては ${CLAUDE_SKILL_DIR}/references/errors.md を参照してください。
例
Eコマースのチェックアウトフロー:500人の同時ユーザーが商品を閲覧(GET、70%)、カートに追加(POST、20%)、購入手続きを完了(POST、10%)する状況を、各アクションの間に2~5秒の思考時間を設けてシミュレートします。
APIのスパイクテスト:マーケティングキャンペーン開始によるトラフィックの急増をシミュレートするため、30秒で仮想ユーザー数を50人から1000人に増やします。オートスケーラーが応答し、60秒以内にレイテンシが回復することを確認します。
メモリリークのためのソークテスト:200人の同時ユーザーを4時間維持し、サーバーのメモリ、接続数、応答時間を監視して、リソースリークを示す劣化パターンがないか確認します。
その他の例については、${CLAUDE_SKILL_DIR}/references/examples.md を参照してください。
リソース
- k6 のドキュメント:https://k6.io/docs/
- Artillery のドキュメント:https://www.artillery.io/docs
- Google SRE:負荷テストの章
- パフォーマンステストのアンチパターンとベストプラクティス