作成するシナリオの概要
本パートで作成するテストシナリオは次の通りです。
- 対象サーバー:
example.com(テスト用。実際は自分のサーバーに変更) - 同時ユーザー数(スレッド数): 10
- ランプアップ期間: 10秒(1秒ごとに1ユーザー追加)
- ループ回数: 3(1ユーザーが3回リクエストを繰り返す)
- リクエスト: GET
/(トップページ) - アサーション: ステータスコード 200 の確認
💡 実在するサービスへの無断負荷テストは禁止
負荷テストは必ず自分が管理・許可されたサーバーに対して実施してください。第三者のサーバーに対して無断で負荷をかけることは、サービス妨害行為(DoS)に相当し、法的問題になる可能性があります。
スレッドグループの設定
まず、テストプランにスレッドグループを追加します。
| 設定項目 | 設定値 | 意味 |
|---|---|---|
| Number of Threads (users) | 10 | 同時に実行する仮想ユーザー数 |
| Ramp-up period (seconds) | 10 | 全スレッドが起動するまでの時間(秒)。10秒で10スレッドなら1秒に1スレッド起動 |
| Loop Count | 3 | 各スレッドがテストを繰り返す回数。-1 にすると無限ループ(Scheduler と組み合わせる) |
✅ Ramp-up period はなぜ必要か
ランプアップ期間を設定しないと(0秒にすると)全スレッドが同時に起動し、瞬間的に最大負荷がかかります。実際のユーザーアクセスを模倣するためには、段階的にユーザー数を増やすことが重要です。スレッド数と同じ秒数(10スレッド → 10秒)を設定するのが基本的な目安です。
HTTP Request Defaultsの設定
テスト対象サーバーのホスト名・ポート番号・プロトコルは複数のリクエストで共通することが多いため、 HTTP Request Defaults に一元管理しておくと後の変更が楽になります。
| フィールド | 値(例) |
|---|---|
| Protocol [http] | https |
| Server Name or IP | example.com |
| Port Number | 443 |
個々の HTTP Request でこれらを省略すると、HTTP Request Defaults の値が自動的に使われます。
HTTP Requestの追加と設定
次に実際のリクエストを追加します。
| フィールド | 値 | 説明 |
|---|---|---|
| Name | GET トップページ | テストプランツリーに表示される名前 |
| HTTP Method | GET | HTTPメソッド。POST・PUT・DELETE なども選択可能 |
| Path | / | リクエストパス |
| Follow Redirects | ✅チェック | 301/302 リダイレクトを自動的に追う |
| Use KeepAlive | ✅チェック | HTTP Keep-Alive を有効にする(推奨) |
POST リクエストの場合は「Body Data」タブに JSON や form-encoded のリクエストボディを入力できます。
Response Assertionの追加
テストがただリクエストを送るだけではなく、レスポンスが期待通りかどうかを検証するために Response Assertion(レスポンスアサーション)を追加します。 アサーションが失敗した場合、サンプルは「失敗」としてカウントされます。
| 設定項目 | 値 | 説明 |
|---|---|---|
| Apply to | Main sample only | メインリクエストのみ検証(サブリクエストを除く) |
| Field to Test | Response Code | HTTPステータスコードを対象にする |
| Pattern Matching Rules | Equals | 値が一致するか確認 |
| Patterns to Test | 200 | 期待するステータスコード |
同様に、レスポンスボディに特定の文字列が含まれるかも確認できます。
Field to Test を「Response Body」に変更し、Pattern Matching Rules を「Contains」にして
期待文字列(例: Welcome)を入力するだけです。
💡 Duration Assertion でレスポンスタイムを検証する
Response Assertion でレスポンスコードを確認するのに加えて、Duration Assertion を追加することでレスポンスタイムが一定時間以内かどうかも検証できます。Add → Assertions → Duration Assertion で追加し、「Duration in milliseconds」に許容する最大応答時間(例: 2000 ms)を設定します。
CSVデータでパラメータ化する
同じ URL だけでなく、ユーザーごとに異なるパスやパラメータを渡したい場合は CSV Data Set Config を使います。 テスト対象の URL リストや認証トークンを CSV で管理し、スレッドごとに異なる値を割り当てることができます。
まず、テストで使用する CSV ファイルを用意します。
# test-paths.csv
path
/
/about
/products
/contact
/blog
| フィールド | 値 | 説明 |
|---|---|---|
| Filename | test-paths.csv | CSVファイルのパス(.jmx と同じディレクトリなら相対パス可) |
| Variable Names | path | CSV の各列に割り当てる変数名(カンマ区切りで複数指定可) |
| Delimiter | , | 区切り文字 |
| Ignore first line | True | ヘッダー行がある場合は True |
| Recycle on EOF | True | CSV の末尾に達したら先頭に戻って繰り返す |
| Stop thread on EOF | False | EOF でスレッドを止めない(Recycle が True なら不要) |
${path} と入力する。実行時に CSV の値が順次代入される。Path: ${path}
# 実行時に /、/about、/products … に置き換わる
タイマーで待機時間を設定する
実際のユーザーはリクエストとリクエストの間に「読む・考える」といった操作時間(Think Time)があります。 JMeter では Constant Timer や Gaussian Random Timer を使ってこれを再現します。
1000(1秒)を入力する。
より現実的に「1〜3秒のランダム待機」を実現したい場合は、
Gaussian Random Timer(Add → Timer → Gaussian Random Timer)を使い、
Deviation を 500、Constant Delay Offset を 1000 に設定します。
これで 1000ms ± 500ms の正規分布に従った待機時間が挿入されます。
✅ テストシナリオの確認方法
シナリオを組み終えたら、まず スレッド数を 1、ループ回数を 1 にして小規模で実行し、リクエストが正しく送られているか・アサーションが正しく動作しているかを確認しましょう。問題がなければスレッド数を本番の負荷に合わせて増やしていきます。