読者です 読者をやめる 読者になる 読者になる

ぺーぺーSEのブログ

備忘録・メモ用サイト。

JMeter覚書

Java JMeter

JMeterの覚書。
JMeter2.12でやった。
入門内容については下記を参照。

blog.pepese.com

  • コマンドライン実行
  • JVMオプション等の設定
  • Master/Slave構成
  • 正規表現による値の抽出
  • 外部ファイル(CSV)の参照
  • 結果のファイル(CSV)出力


コマンドライン実行

jmeter.bat -n -t sample.jmx -l result.jtl

※Windowsは「jmeter.bat」、Linuxは「jmeter.sh」

■オプション

オプション 説明
-n コマンドライン実行を有効化
-t シナリオを記録したjmxファイルを指定
-l 実行結果を出力するファイルを指定
-j JMeterの実行ログを出力するファイルを指定
-r Run the test in the servers specified by the JMeter property "remote_hosts"
-R [list of remote servers] Run the test in the specified remote servers
-H プロキシサーバのホスト名orIPアドレス
-P プロキシサーバのポート番号

jmxファイルはGUIで作成した際、「テスト計画に名前を付けて保存」(Save Selection As...)で保存しないとテストプランとして認識されないので注意が必要。


JVMオプション等の設定

ApacheJMeter.jarをダブルクリックしてGUIモードで起動してしまいがちだが、jmeter.bat/jmeter.shが用意されていて、それで起動するとよい。
JVMオプション等はjmeter.batの場合は下記の箇所を編集すればコントロールできる。

■bin/jmeter.bat

set HEAP=-Xms512m -Xmx512m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m

「50スレッド‐Javaヒープ1G‐New領域512M」程度が目安。
また後述のjmeter-serverスクリプト(bat/sh)でも内部で本jmeterスクリプトが呼び出されているので、ここでの設定は有効。
設定系は起動シェルの他にも「jmeter.properties」もあり、他の機能を使用する際に編集する必要がある。


Master/Slave構成

性能試験の際、大きな負荷をかけるためには、JMeter用のクライアントマシンが1台では不足する場合がある。
JMeterはMaster/Slave構成構成を取ることができ、以下のようになる。

  • Master/1台
    • JMeterクライアント(GUIモード)
      • jmeter.bat/shで起動
    • 1099番ポート(デフォルト)で命令を通知し、30000-60000番ポート(ランダムで選択される1つ)でRMI通信をする
      • RMIポートを指定したい場合は、「jmeter.properties」の「server.rmi.localport」で指定する
  • Slave/複数台
    • JMeter Server
      • jmeter-server.bat/shで起動

1台のJMeter GUIクライアント(Master)は、複数台のリモートJMeterインスタンス(Slave)をコントロールし、Slaveから全てのデータ(結果)をMasterに収集することができる。
また、テストシナリオ(jmxファイル)は各サーバにコピーする必要はなく、Masterが全てのサーバに送信してくれる。
ただし、テストシナリオが外部ファイル(CSV等)を参照する場合、MasterはSlaveにそのデータを送信しないので、各サーバに配布する必要がある。
★注意・・・Master側に設定したスレッド数やスループットタイマの設定は、Slaveの挙動にそのまま反映される。つまり、スレッド数を30と設定してSlaveが全部で3台の場合は全部で90スレッド、スレッド数を30と設定してSlaveが全部で5台の場合は全部で150スレッド、というふうになる。

■設定手順
1.Slaveでjmeter-serverスクリプトを実行し、RMIを起動する
2.Masterの「jmeter.properties」の「remote_hosts」にSlaveのIP・PORTを設定する

remote_hosts=127.0.0.1
#remote_hosts=[Slave1_IP]:[PORT],[Slave2_IP]:[PORT],...

3.Masterでjmeterスクリプトを実行・GUIモードで起動し、「実行」→「開始(リモート)」にSlaveが登録されていることを確認する

また、JVMオプション等の設定は「JVMオプション等の設定」でも書いた通り、jmeter-serverスクリプト内部でjmeterスクリプトが呼び出されているため、「JVMオプション等の設定」の内容でjmeter-serverにおいても有効となる。

参考:http://jmeter.apache.org/usermanual/remote-test.html


正規表現による値の抽出

HTTPリクエスト等のサンプラーの配下に「後処理」→「正規表現抽出」を配置・設定することで、サンプラーが得たレスポンス結果から正規表現を用いて値を抽出およびユーザ変数化することができる。
設定は下記のようになる。

「Apply to」項目を下記のラジオボタンから選択する。

項目 設定例 補足
Apply to Main sample only どのサンプラを対象とするか
Field to check Body レスポンス結果のどこに正規表現を適用するか
参照名 RESULT_1 参照する際の変数名(${RESULE_1}のように参照)
正規表現 value="(.*?)" ()で括った正規表現部を取得
テンプレート $1$ ()で括った部分が複数ある場合に抽出する部分を$n$で指定
一致番号(0から乱数) 1 複数行取得した場合に抽出する行数を指定(1:先頭、-1:全て、0:ランダム)
初期値 ERROR 抽出できなかった時の値を指定

参考:http://jmeter.apache.org/usermanual/regular_expressions.html


外部ファイル(CSV)の参照

「テスト計画」や「スレッドグループ」配下に「設定エレメント」→「CSV Data Set Config」を配置し、下記の設定を行うことで外部ファイルからデータを読み込み変数化して使うことができる。

項目 設定例 補足
Filename C:\sample.csv 読み込むファイルパス jmxファイルからの相対パスでもいい
File encoding ファイルのエンコーディング
Variable Names (comma-delimited) name,password CSVの各列に変数名を付ける ${name}で参照できる
Delimiter (use '\t' for tab) , 読み込むファイルのデリミタ
Allow quoted data? True クォートで囲まれたデータを許容するか否か
Recycle on EOF? True ファイルを読み終わったときに最初に戻るかどうか
Stop thread on EOF? False ファイルを読み終わったときにスレッドを止めるかどうか
Sharing mode Current thread group ファイル読み込みシーケンスをどこで共有するか

スレッドのループとの関係、Master/Slave構成の場合とかもわかったら書きたい。


結果のファイル(CSV)出力

「結果を表で表示」と「統計レポート」は結果をファイル出力できる。
CSVで出したいときは「jmeter.properties」に

jmeter.save.saveservice.output_format=csv

を設定し

jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS

を設定しておくと便利。
さらにGUIで出力したい項目を設定する必要がある。
「結果を表で表示」「統計レポート」の「参照」で出力ファイルを指定し、「Configure」で出力したい項目を選択する。