負荷テストとは?
負荷テストは、想定される同時トラフィックのレベル下でシステムがどのように振る舞うかを測定し、高速かつ安定した状態を保つかを確認します。
機能テストはシステムが1人のユーザーに対して機能することを証明します。負荷テストは、多数のユーザーに対して同時に機能することを証明します。現実的な同時トラフィックをシミュレートし、レスポンスタイム・throughput・エラー率を観察して、システムが処理すべき負荷に耐えることを確認します。これはパフォーマンス検証の最初のステップです。
負荷テストが測定するもの
負荷テストは仮想ユーザーを想定レベルまで増やし、システムがどう応答するかを記録します。遅延のパーセンタイル、秒あたりのリクエスト数、エラー率、リソース使用量です。目的は、通常の想定される需要下でシステムがパフォーマンス目標を満たすことを確認することです。
負荷テスト対ストレステスト対ソークテスト
- 負荷テスト: 想定トラフィック、目標が満たされることを確認する。
- ストレステスト: 限界を超えて押し込み、破綻点を見つける。
- ソークテスト: 数時間にわたる持続的な負荷でリークを見つける。
- スパイクテスト: 突然のトラフィック急増で弾力性をテストする。
ツールの例
k6 のようなツールは、仮想ユーザーのプロファイルをコードで記述し、メトリクスを収集しながら同時実行数を増減させます。
A k6 load profile
export const options = {
stages: [
{ duration: "1m", target: 100 }, // ramp to 100 users
{ duration: "3m", target: 100 }, // hold
],
};結果の読み方
見出しとなる平均値は問題を隠すため、負荷が高まるにつれて p95 や p99 遅延といったパーセンタイルとエラー率に注目します。中央値では高速でもテールで遅いシステムは、それでも相当な割合のユーザーを苛立たせます。
CI における負荷テスト
より軽い負荷テストは pipeline で実行してパフォーマンスのリグレッションを検出でき、より重いものは staging 環境に対してスケジュールで実行します。いずれにせよ、トラフィックを生成するには十分で一貫した計算資源が必要です。高速な専用 runner 上で実行することで、実行ごとに結果を比較可能に保てます。
重要なポイント
- 負荷テストは、想定される同時トラフィック下での挙動を確認します。
- 平均値ではなく、テール遅延のパーセンタイルとエラー率に注目します。
- 軽い負荷テストは CI で実行してパフォーマンスのリグレッションを検出できます。
関連ガイド
What Is Stress Testing?Stress testing explained: pushing a system past its limits to find the breaking point and how it fails, an ex…
What Is Performance Testing?Performance testing explained: the umbrella for load, stress, and soak tests, key metrics, an example, and ho…
What Is Fuzz Testing?Fuzz testing explained: feeding random or malformed input to find crashes and security bugs, coverage-guided…
What Is End-to-End Testing?End-to-end testing explained: simulating a real user through the whole stack, an example, why E2E tests are s…