JMeterのコンフィグレーションファイルである、jmeter.properties
を変更する必要がある。特に Distributed Testing を実現するためには、SlaveのIPアドレスをMaster側に渡すremote_hosts
というプロパティの変更は必須だ。どれがベストプラクティスなのかよくわからなかったので、調べてみた。
コンフィグレーションの上書き
jmeter.properties を上書きする
JMETER_HOME/bin
に jmeter.properties
が存在し、それがデフォルトで参照されるので、これを変更するのはどうだろうか?公式のConfiguring JMeterによるとお勧めしないらしい。もしやりたい場合は、JMETER_HOME/bin/user.properties
を編集するか、もしくは、自分用にjmeter.properties
を作成して、JMeterの実行時に指定することがお勧めらしい。その場合は次のオプションを使う。
-p, --propfile <argument>
the jmeter property file to use
コマンドラインパラメータで上書きする
他の方法では、コマンドラインパラメータで上書きする方法がある。1.4.6 Overriding Properties Via The Command Line によると、いくつかのオーバーライドのオプションがある。-J
オプションを使えば良さげ。また、Masterだけでなく、Slaveにも設定を転送したい場合は、-G
を使えば良さげ。
Java system properties and JMeter properties can be overridden directly on the command lin (instead of modifying jmeter.properties). To do so, use the following options:
-D[prop_name]=[value]
defines a java system property value.
-J[prop_name]=[value]
defines a local JMeter property.
-G[prop_name]=[value]
defines a JMeter property to be sent to all remote servers.
-G[propertyfile]
defines a file containing JMeter properties to be sent to all remote servers.
-L[category]=[priority]
overrides a logging setting, setting a particular category to the given priority level.
The -L flag can also be used without the category name to set the root logging level.
Examples:
jmeter -Duser.dir=/home/mstover/jmeter_stuff \
-Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG
jmeter -LDEBUG
JMeter 実行で使うオプション
今回のプロジェクトで必要になってくるオプションを整理してみたい。
-
-n
: ヘッドレスモード -
-t
: jmxファイルのパス -
-l
: ログのパス -
-e
: レポートの出力 -
-o
: レポート出力のパス -
-J
:jmeter.properties
の上書き -
-r
: リモートサーバをスタートする (remote_hosts
で定義されたもの) -
-R <argument>
: リモートサーバをスタートする。argument
で remote_hosts を上書きする -
-X
: リモートサーバーをテスト実行後終了させる
Distributed Testing を実行する
次のオプションを使ってテストを起動してみた。要件は下記の通り
- ヘッドレスモードにしたい
- jmx ファイルを指定したい
- レポートを出力したい
- リモートサーバーを指定して実行したい
- ログファイルを出力したい
- リモートサーバーは実行後終了はしてほしくない
Slave でnohup jmeter-server &
を実行後に、Master で次のコマンドを実行する。
$ jmeter -n -t ./DocumentApi.jmx -l exec.log -e -o report -R 10.0.0.5
これで無事上記の要件が実現する。ちなみに、この例だと Slave は1台だが、複数ある場合は、10.0.0.5,10.0.0.6
みたいにすると良い。
csv ファイルの転送
衝撃的なことだが、jmxファイル内でつかわれる、cvsファイルは、Slave 側のサーバーに自動で転送されない。つまり、csvファイルを使っている場合は、Slave のパスが通っているディレクトリに csvファイルを転送してから、テストを実行しなくてはいけない。実際に私の環境でも、これがないためにテストが失敗していた。現在は最新5.2を使っている。
# まとめ
このセッティングで、無事 Distributed Testing を実行することができた。尚、この他にもJVMのチューニングなどを行う必要がありそう(ヒープの設定など)それはまた別のブログで。