作成するシナリオの概要

本パートで作成するテストシナリオは次の通りです。

  • 対象サーバー: example.com(テスト用。実際は自分のサーバーに変更)
  • 同時ユーザー数(スレッド数): 10
  • ランプアップ期間: 10秒(1秒ごとに1ユーザー追加)
  • ループ回数: 3(1ユーザーが3回リクエストを繰り返す)
  • リクエスト: GET /(トップページ)
  • アサーション: ステータスコード 200 の確認

💡 実在するサービスへの無断負荷テストは禁止

負荷テストは必ず自分が管理・許可されたサーバーに対して実施してください。第三者のサーバーに対して無断で負荷をかけることは、サービス妨害行為(DoS)に相当し、法的問題になる可能性があります。

スレッドグループの設定

まず、テストプランにスレッドグループを追加します。

1
左ペインの「Test Plan」を右クリック → Add → Threads (Users) → Thread Group
2
Name フィールドに「シナリオ01 — トップページアクセス」など、分かりやすい名前を入力
3
以下の値を設定する
設定項目設定値意味
Number of Threads (users)10同時に実行する仮想ユーザー数
Ramp-up period (seconds)10全スレッドが起動するまでの時間(秒)。10秒で10スレッドなら1秒に1スレッド起動
Loop Count3各スレッドがテストを繰り返す回数。-1 にすると無限ループ(Scheduler と組み合わせる)

Ramp-up period はなぜ必要か

ランプアップ期間を設定しないと(0秒にすると)全スレッドが同時に起動し、瞬間的に最大負荷がかかります。実際のユーザーアクセスを模倣するためには、段階的にユーザー数を増やすことが重要です。スレッド数と同じ秒数(10スレッド → 10秒)を設定するのが基本的な目安です。

HTTP Request Defaultsの設定

テスト対象サーバーのホスト名・ポート番号・プロトコルは複数のリクエストで共通することが多いため、 HTTP Request Defaults に一元管理しておくと後の変更が楽になります。

1
Thread Group を右クリック → Add → Config Element → HTTP Request Defaults
2
以下の値を入力する
フィールド値(例)
Protocol [http]https
Server Name or IPexample.com
Port Number443

個々の HTTP Request でこれらを省略すると、HTTP Request Defaults の値が自動的に使われます。

HTTP Requestの追加と設定

次に実際のリクエストを追加します。

1
Thread Group を右クリック → Add → Sampler → HTTP Request
2
以下の値を入力する(Server Name は Defaults に設定済みなので省略可)
フィールド説明
NameGET トップページテストプランツリーに表示される名前
HTTP MethodGETHTTPメソッド。POST・PUT・DELETE なども選択可能
Path/リクエストパス
Follow Redirects✅チェック301/302 リダイレクトを自動的に追う
Use KeepAlive✅チェックHTTP Keep-Alive を有効にする(推奨)

POST リクエストの場合は「Body Data」タブに JSON や form-encoded のリクエストボディを入力できます。

Response Assertionの追加

テストがただリクエストを送るだけではなく、レスポンスが期待通りかどうかを検証するために Response Assertion(レスポンスアサーション)を追加します。 アサーションが失敗した場合、サンプルは「失敗」としてカウントされます。

1
HTTP Request を右クリック → Add → Assertions → Response Assertion
2
以下を設定する
設定項目説明
Apply toMain sample onlyメインリクエストのみ検証(サブリクエストを除く)
Field to TestResponse CodeHTTPステータスコードを対象にする
Pattern Matching RulesEquals値が一致するか確認
Patterns to Test200期待するステータスコード

同様に、レスポンスボディに特定の文字列が含まれるかも確認できます。 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 ファイルを用意します。

CSV
# test-paths.csv
path
/
/about
/products
/contact
/blog
1
Thread Group を右クリック → Add → Config Element → CSV Data Set Config
2
以下を設定する
フィールド説明
Filenametest-paths.csvCSVファイルのパス(.jmx と同じディレクトリなら相対パス可)
Variable NamespathCSV の各列に割り当てる変数名(カンマ区切りで複数指定可)
Delimiter,区切り文字
Ignore first lineTrueヘッダー行がある場合は True
Recycle on EOFTrueCSV の末尾に達したら先頭に戻って繰り返す
Stop thread on EOFFalseEOF でスレッドを止めない(Recycle が True なら不要)
3
HTTP Request の Path フィールドに ${path} と入力する。実行時に CSV の値が順次代入される。
JMeter 変数参照
Path: ${path}
# 実行時に /、/about、/products … に置き換わる

タイマーで待機時間を設定する

実際のユーザーはリクエストとリクエストの間に「読む・考える」といった操作時間(Think Time)があります。 JMeter では Constant TimerGaussian Random Timer を使ってこれを再現します。

1
Thread Group を右クリック → Add → Timer → Constant Timer
2
「Thread Delay (in milliseconds)」に 1000(1秒)を入力する。

より現実的に「1〜3秒のランダム待機」を実現したい場合は、 Gaussian Random Timer(Add → Timer → Gaussian Random Timer)を使い、 Deviation を 500、Constant Delay Offset を 1000 に設定します。 これで 1000ms ± 500ms の正規分布に従った待機時間が挿入されます。

テストシナリオの確認方法

シナリオを組み終えたら、まず スレッド数を 1、ループ回数を 1 にして小規模で実行し、リクエストが正しく送られているか・アサーションが正しく動作しているかを確認しましょう。問題がなければスレッド数を本番の負荷に合わせて増やしていきます。