JMeter覚書
JMeterの覚書。
JMeter2.12でやった。
入門内容については下記を参照。
- コマンドライン実行
- 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」で指定する
- JMeterクライアント(GUIモード)
- Slave/複数台
- JMeter Server
- jmeter-server.bat/shで起動
- JMeter Server
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」で出力したい項目を選択する。