ApacheJMeterからJavaプログラムを使って負荷評価してみる
負荷評価を行うツールには「Apache JMeter」というものがあります。
周りを見渡すと、この「Apache JMeter」
Webアプリの負荷評価くらいにしか使われていないことが多いようですが、
汎用性のある負荷評価ツールなので、Webアプリケーション以外にも、
DBサーバやメールサーバなどを対象に負荷評価を行うことが出来ます。
それでは、ApacheJMeterから、
自分で作成したJavaのプログラムを呼び出して
負荷評価をする方法を紹介したいと思います。
# つまりJavaのプログラムで書ける処理であればどんな負荷評価でも出来る訳です。
ここでは、以下のシナリオで負荷評価を行います。
-負荷評価する処理:「C:sample.txt」に「test」という文字をappendする
-負荷をかける回数:10回
「負荷評価する処理」はJavaで作成するプログラムなので、
この部分を置き換えることでさまざまな負荷評価が可能です。
また負荷をかける回数などのテストシナリオはApacheJMeterの設定で変更が可能です。
そもそも、ApacheJMeterの準備
※jdkのセットアップ済みの前提です。
以下のURLからApacheJMeterをダウンロードします。
ダウンロード先URL:http://jakarta.apache.org/jmeter/
ダウンロードするファイル:jakarta-jmeter-2.4.zip「jakarta-jmeter-2.4.zip」を展開します。
bin/jmeter.batを実行してApacheJMeterが起動することを確認します。
Javaのプログラムを用意する
- 「jakarta-jmeter-2.4.zip」を展開した、
lib/ext配下から以下のファイルを取り出します。
- ApacheJMeter_core.jar
- ApacheJMeter_java.jar
lib配下から以下のファイルを取り出します。
- avalon-framework-4.1.4.jar
- jorphan.jar
- logkit-2.0.jar
- 次のようなjavaのプログラムを書きます。
ファイル名:sample/TestSamplerClient.java
package sample;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class TestSamplerClient extends AbstractJavaSamplerClient {
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
FileWriter fw = null;
try {
fw = new FileWriter("C:\sample.txt", true);
fw.append("test");
fw.flush();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} finally {
try {
if (fw != null) {
fw.close();
}
} catch(IOException e) {
}
}
return null;
}
}
※「C:sample.txt」に「test」という文字をappendするプログラムです。
- 1で取り出したファイルにclasspathを通してコンパイル&jar作成します。
> set CLASSPATH=ApacheJMeter_core.jar;ApacheJMeter_java.jar;avalon-framework-4.1.4.jar;jorphan.jar;logkit-2.0.jar
> javac sample/TestSamplerClient.java
> jar cf SampleSampler.jar .
- 3で作成したjarファイルを、ApacheJMeter展開先にlib/ext配下に配置します。
JMeterから負荷処理を呼び出す
bin/jmeter.batを実行してApacheJMeterを起動します。
ツリーの「テスト計画」のコンテキストメニュー「追加→Threads(Users)→スレッドグループ」を選択。
スレッドグループのコンテキストメニュー「追加→サンプラー→Javaリクエスト」を選択。
右ペイン「Javaリクエスト」のクラス名から「sample.TestSamplerClient」を選択。
ツリーから「スレッドグループ」を選択、
右ペイン「スレッドグループ」のループ回数を「10」に変更。メニューから「ファイル→テスト計画を保存」を選択。
メニューから「実行→開始」を選択。
「C:sample.txt」を開くと、「test」という文字が10回出力されていることを確認できます。
さらに細かな指定
sample/TestSamplerClient.javaのrunTestメソッドの中身を変更することで、
Javaのプログラムを使った任意の負荷処理を実施することが可能です。
また、runTestメソッドの引数、戻り値などを用いて、
ApacheJMeter側からパラメータを渡したり、戻り値を返却することも可能です。
以上、それでは。。