負荷テスト
システムに大量のリクエストを送り、性能限界やボトルネックを特定するテスト手法
負荷テストとは
負荷テスト (Load Testing) は、システムに大量のリクエストを送り、性能限界やボトルネックを特定するテスト手法である。本番トラフィックを模擬し、レスポンスタイム、スループット、エラー率を測定する。
テストの種類
テストの種類を以下にまとめる。
| 種類 | 目的 | パターン |
|---|---|---|
| 負荷テスト | 想定負荷での性能確認 | 一定の負荷を維持 |
| ストレステスト | 限界値の特定 | 負荷を段階的に増加 |
| スパイクテスト | 急激な負荷増への耐性 | 突然の負荷急増 |
| 耐久テスト | 長時間稼働の安定性 | 一定負荷を長時間維持 |
k6 での負荷テスト
k6 での負荷テストのコード例を示す。
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '1m', target: 50 }, // 1分で50ユーザーまで増加
{ duration: '3m', target: 50 }, // 3分間50ユーザーを維持
{ duration: '1m', target: 0 }, // 1分で0に減少
],
thresholds: {
http_req_duration: ['p(95)<500'], // 95%タイルが500ms以下
http_req_failed: ['rate<0.01'], // エラー率1%以下
},
};
export default function () {
const res = http.get('https://api.example.com/users');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}
ツール比較
主なツールを以下にまとめる。
| ツール | 言語 | 特徴 |
|---|---|---|
| k6 | JavaScript | 軽量、CI/CD 統合が容易 |
| Artillery | YAML/JS | AWS Lambda での分散実行 |
| Locust | Python | リアルタイムダッシュボード |
| JMeter | Java | GUI、プロトコル対応が豊富 |
Lambda + API Gateway の負荷テスト
確認すべき項目は、コールドスタート (初回リクエストのレイテンシ)、同時実行数 (Lambda のデフォルト上限 1,000)、API Gateway スロットリング (429 エラーの発生率)、DynamoDB スロットリング (ProvisionedThroughputExceededException) である。
よくあるボトルネック
DB 接続数の枯渇はタイムアウトとして現れ、RDS Proxy やコネクションプーリングで対策する。Lambda 同時実行の上限は 429 エラーを引き起こし、上限引き上げ申請で対応する。DynamoDB の WCU 不足はスロットリングを起こし、オンデマンドモードで解消する。API Gateway のスロットリングは設定の調整で対応する。
理論と実装の両面から学ぶなら関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
関連する記事
テスト本ガイド - テスト設計を学べる技術書の選び方
テストの書き方からテスト戦略まで学べる技術書の選び方を紹介。テストピラミッド、TDD の正しい読み方、テストの ROI の考え方を解説します。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。
「動くコード」と「良いコード」の間にある本
コードが動くようになった後、次に何を学べばよいのか。「動くコード」を「良いコード」に変えるために必要な知識と、それを効率的に学べる本の選び方を解説します。