0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JMeter BeanShell覚書き

Posted at

はじめに

JMeterでBeanShellを使う機会があったため、覚書きをここに記します。

文法

  • JDK1.4がベース
  • java標準で用意されているクラスを使用する場合はJDK1.4範囲内でのメソッドしか使えない
  • Java標準以外のクラスは、lib配下のjar中のクラス、および、lib/ext配下のjar中のクラスは通常通り使える

文法がJDK1.4ベースなのでかなり制約があります。
ジェネリクスが使えなかったり、プリミティブ型とラッパー型間での型変換を明示的にやらないとならなかったりする部分は特に不便です。
java標準クラスはJDK1.4範囲内でしか使えないため、例えば、数値をhex文字列に変換したい場合、通常なら

通常のjavaで数値をhex文字列に変換する場合のコード
String hexStr = String.format("%02x", intvalue);

とすべきところ、String.format がJDK1.5以降の機能のため使えないため、Integer.toHexStringメソッド、および、lib配下に格納されているcommons-lang3-x.x.x.jarのStringUtils.leftPadメソッドを使い、以下のようにする必要がありました。

BeanShellで数値をhex文字列に変換する場合のコード
String hex = Integer.toHexString(intvalue);
String hexStr = StringUtils.leftPad(hex, 2, "0");

そのため、複雑な処理を行いたい場合は、javaでクラスを作成し処理を記述してコンパイル後jar化して、lib/ext配下にjarファイルを格納。そして、シェルからはjavaで書いたクラス、メソッドを呼び出す形にした方が楽かもしれません。
なお、javaでクラスを作成してコンパイル&jar化する分においてはJDKのバージョンやコンパイルレベルは実行環境のjavaで動けば問題ありません。(つまり、JDK1.4以前の文法制約を受けない)

JMeterで使用できる変数

こちらで紹介記事がありましたので、説明はこちらに譲ります。

HTTPリクエストパラメータをBeanShellから取得する方法

BeanShellでリクエストパラメータを取得する例があまりないようなのでサンプルとしてあげたいと思います。

import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;

Arguments arguments = ctx.getCurrentSampler().getArguments();
for (int i=0; i<arguments.getArgumentCount(); i++) {
    Argument argument = arguments.getArgument(i);
    log.info("パラメータ名:"+arguments.getName());
    log.info("パラメータ値:"+arguments.getValue());

    // リクエストパラメータの値を変数に設定
    vars.put(arguments.getName(),arguments.getValue());
}

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?