「JMeter」HTTPSampler を拡張してみる
JMeter の負荷試験の際に、リモートサーバごとに処理内容を変えたかったので、HTTPSampler を拡張して独自のサンプラーを作ってみた。その時のメモ。
・HTTPSampler (Apache JMeter API)
http://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/HTTPSampler.html
※ 以下の内容であれば、別に HTTPSampler でなく AbstractSampler で十分ではありますが・・・
・AbstractSampler (Apache JMeter API)
http://jmeter.apache.org/api/org/apache/jmeter/samplers/AbstractSampler.html
[ 環境情報 ]
- クライアント -
Windows 7
Apache JMeter 2.9
- リモートサーバ 1 - ( 192.168.1.x )
Windows 7
Apache JMeter 2.9
- リモートサーバ 2 - ( 192.168.1.y )
CentOS 6.2
Apache JMeter 2.9
1. 独自サンプラーの作成
package http.sampler; import java.net.InetAddress; import java.net.UnknownHostException; import org.apache.jmeter.protocol.http.sampler.HTTPSampler; import org.apache.jmeter.samplers.Entry; import org.apache.jmeter.samplers.SampleResult; public class HTTPTestSampler extends HTTPSampler implements TestBean { private final String REMOTE_HOST1 = "192.168.1.x"; private final String REMOTE_HOST2 = "192.168.1.y"; @Override public SampleResult sample(Entry paramEntry) { String IPAddress = getIPAddress(); if (REMOTE_HOST1.equals(IPAddress)) { System.out.println("REMOTE_HOST1 : 192.168.1.x"); } else if (REMOTE_HOST2.equals(IPAddress)) { System.out.println("REMOTE_HOST2 : 192.168.1.y"); } else { System.out.println("UNKOWN REMOTE_HOST : " + IPAddress); } return null; } private String getIPAddress() { String IPAddress = null; try { InetAddress addr = InetAddress.getLocalHost(); IPAddress = addr.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } return IPAddress; } }
IP アドレス取得して、コンソールに表示する内容を変更しているだけ。
※ < JMeter >\lib\ext 配下にある "ApacheJMeter_core.jar" と "ApacheJMeter_http.jar" はクラスパスに通す
※ マーカインタフェースの TestBean を実装する必要があるみたいです。これしてないとサンプラーの箇所に HTTPTestSampler が出てくれない。
コンパイルして、.jar ファイルにしておく。
2. .jar ファイルを JMeter に配置する
上記で作成した .jar ファイルを、「クライアント」、「リモートサーバ 1」、「リモートサーバ 2」の "< JMeter >\lib\ext" に、それぞれ配置する。
あとは、「リモートサーバ 1」、「リモートサーバ 2」を "jmeter-server" で起動、「クライアント」で独自サンプラーを使用したテストシナリオを作成 ( 上記の HTTPTestSampler があるはずです )、シナリオを実行すると、それぞれのリモートサーバで以下のような出力が得られるはず。
■ リモートサーバ 1 での出力
REMOTE_HOST1 : 192.168.1.x
■ リモートサーバ 2 での出力
REMOTE_HOST2 : 192.168.1.y
ちゃんとリモートサーバごとに処理内容が変更できてますね。
サンプルコードは < JMeter >\src\examples\org\apache\jmeter\examples あたりに入ってました。
以上です。