「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 あたりに入ってました。

以上です。