ダウンロード・起動

GUI 起動まで

$ wget http://www-eu.apache.org/dist/jmeter/binaries/apache-jmeter-3.1.tgz
$ tar xvzf apache-jmeter-3.1.tgz
$ cd apache-jmeter-3.1
$ bin/jmeter

GUI mode should only be used for creating the test script, NON GUI mode must be used for load testing

とある通り、GUI モードはテストスクリプトを生成するためだけに使う。実際に負荷テストを行う際には CUI から。

※ JVM のパラメータを指定して実行することもできる。

$ JVM_ARGS="-Xms1024m -Xmx1024m" bin/jmeter -t bin/examples/CSVSample.jmx

クイックスタート

GUI で

  1. 「テスト計画」を右クリック→「追加」→「スレッドグループ」
  2. 「スレッドグループ」を選択し、スレッド数、Ramp-Up期間(秒)、ループ回数を設定
  3. 「スレッドグループ」を右クリック→「追加」→「サンプラー」→「HTTP リクエスト」
  4. 「HTTP リクエスト」を選択し、編集
  5. 「スレッドグループ」を右クリック→「追加」→「リスナー」→「統計レポート」
  6. 「開始」

スレッドグループの定義

項目 内容 備考
サンプラーエラー後のアクション サンプラー = HTTP リクエストなど、クライアントからの何らかのアクション。これがエラーになった際の挙動を定義 ・「Start Next Thread Roop」と「続行」の違い: 前者はそのスレッドを中断して次のスレッドループを開始する。後者は(おそらく)スレッドの処理を継続する
・「テスト停止」と「Stop Test Now」の違い:前者はいずれかのサンプルの終了を待って、後者は即座にテストを停止
スレッド数 同時に何スレッド動かすか(最大同時セッション数)。1スレッドはブラウザの1つのタブに相当  
Ramp-Up 期間 このスレッドグループのテストを1回回すのに何秒かけるか(スレッドの起動間隔を調整)。 ex. スレッド数30、Ramp-Up 期間120であれば、 各スレッドはおおむね4秒おきに起動される
ループ回数 テストの実行回数  
Delay Thread creation untill needed    
スケジューラ これを有効にすると、「指定のループ回数終了時、」「終了時刻に達した時」「持続時間に達した時」のうち一番早いものに達した時点でテストが終了する 応答を待っているサンプラーへの割り込みは行われないため、終了時刻は状況次第で遅れることがある
持続時間 この時間だけテストを実施する(終了時刻よりもこちらが優先される???)  
(??)起動遅延 この秒数だけテストの実行を遅延する  
開始時刻 この時刻が来るまでテストの実施を待つ  
終了時刻 この時刻までテストを実施する  
     
     
     
     

【スレッド数・Ramp-Up 期間・ループ回数】 | スレッド数 | Ramp-Up | ループ回数 | 結果 | | :– | :– | :– | :– | | 5 | 10 | 3 | 2秒ごとにスレッド起動、ループ開始(次のスレッドが起動するより先に前のスレッドのループ3回が終了している) | | 2 | 10 | 3 | 5秒ごとにスレッド起動、ループ開始(同上) | | 5 | 0 | 3 | 同時に全てのスレッドが起動、3回数ループして即時終了 |

定数スループットタイマー

これを追加することで、負荷テストのスループットを指定できる。

項目 説明
ターゲットスループット(サンプル数/分) 1分あたりのリクエスト数を指定
Calculate Throughput based on 上記の指定値をどう解釈するか

「Calculate Throughput based on」の設定の違いについて実験:

  • スレッド数: 6
  • Ramp-Up: 0
  • 無限ループ
  • 持続時間: 60
  • ターゲットスループット/分: 60 | 設定 | 総リクエスト数 | 特徴の考察 | | :– | :– | :– | | this thread only | 366 | 各スレッドそれぞれが指定したスループットでリクエストを投げようとする(全体のスループットは指定した値にスレッド数をかけると出てくる) | | all active threads | 66 | ・スレッド数がいくらであっても、全体のスループットが指定した値になるよう調整される。
    ・各スレッドが同じタイミングでリクエストして1秒休むので、全体で見ると「6件連続リクエスト→1秒休み」が繰り返される | | all active threads (shared) | 66 | ・スレッド数がいくらであっても、全体のスループットが指定した値になるよう調整される。
    ・スレッドどうしが連携して、全体として均等なペースでリクエストを投げようとする(毎秒1件ずつリクエストが飛ぶ) |

サンプラーの定義

Http Request

項目 内容 備考
Implementation    
プロトコル HTTP, HTTPS, FILE デフォルトは HTTP
Content encoding   文字のエンコーディングとして使われ、HTTP の Content-Encoding ヘッダには影響しない
     
     
     
     

リスナーの追加

結果を見るためにリスナーを追加する。

スレッドグループを右クリック >「追加」>「リスナー」>「結果を表で表示」/「グラフ表示」など

NON-GUI モード

-nオプションを使うと NON-GUI モードで起動する。その他、必要な設定ファイルをオプションで指定する。

オプション 説明
-n JMeter を非 GUI モードで起動
-t [ファイル名] テスト計画の JMX ファイル名を指定
-l [ファイル名] テスト結果を格納する JTL ファイル名を指定
-j [ファイル名] JMetter の実行ログファイル名を指定

設定ファイル

JMX

テスト計画本体。GUI で作成して CUI で実行するのが良さそう?

テストレポート作成

  1. 実行時オプションで-l hoge.jtlのようにして JTL ファイル(↓)を作成する cf. JTLFiles
# unixtime[ms], ...
1503484686997,19,HTTP リクエスト,200,OK,スレッドグループ 1-1,text,true,194,3,3,19
1503484686997,22,HTTP リクエスト,200,OK,スレッドグループ 1-2,text,true,194,3,3,22
1503484687004,20,HTTP リクエスト,200,OK,スレッドグループ 1-3,text,true,194,1,1,20
1503484687174,30,HTTP リクエスト,200,OK,スレッドグループ 1-4,text,true,194,1,1,30
...
  1. これを使って

Tips

外部ファイルに書かれたパラメータを順に使ってリクエスト

  1. スレッドグループを右クリック >「追加」>「前処理」>「ユーザーパラメータ」
  2. 「変数の追加」> 適当なパラメータ名(!= リクエストパラメータ名)と読み込むファイルのパスを設定
    • ex. 名前: query
    • ex. ユーザー_1: ${_StringFromFile(queries.txt)}

指定するファイルパスは以下のいずれか

  • 絶対パス
  • (要確認)jmx ファイルのパス or jmeter 実行ディレクトリからの相対パス
  1. スレッドグループを右クリック >「追加」>「サンプラー」>「HTTP リクエスト」
  2. 「追加」> 2で設定したパラメータ名をリクエストパラメータの値に設定
    • ex. 名前: q
    • ex. 値: ${query}

ファイルの上から順にパラメータに代入してリクエストが実行される

  • リクエストの合計回数がファイルの行数に満たない場合、それ以降の行は読み込まれない
  • リクエストの合計回数がファイルの行数を超える場合、再びファイル先頭から読み込まれる