JMeterでテストを作成していると、痒いところに手は届くがその指先には爪がない、のような、絶妙なソフトタッチに驚かされることがある。褒めてない。
JMeterには定数をあらかじめ設定しておける機能があり、定数の扱いは比較的簡単である。
しかしせっかくのテストで複雑なパラメータを作成したくなるのは世の常であり、Jmeterも当然プログラム処理を行った結果を変数として扱う方法が用意されている。そのひとつ、BeanShell PreProcessorにも何度か驚かされることがあった。
JMeterは5.0です。
使用例
String a = vars.get("A");
vars.put("B", a + "B");
例えばあらかじめAという変数を設定しておくと、その値をハッシュ的にvars.get()
で取得できる。
vars.put()
での置き換えや、他の変数を作成することも可能。
スレッド番号の取得
定数なら${__threadNum}
で宣言できるところだが、スクリプト上での取得はどうすればよいのか。
やれやれ。僕は検索した。
Jmeter. BeanShell PostProcessor
int threadNum = ctx.getThreadNum();
BeanShellではこう書けばよろしい。0始まりだったので注意。
文字列の数値変換
文字列だって数値置換したい。
String hoge = "100";
Integer.parseInt(hoge);
とやるとエラーになってしまった。やれやれ。
Beanshell Integer.parseInt() errors
String hoge = "100";
Integer.valueOf(hoge).intValue();
よくわからんが、まあよい。
数値の0パディング
String hoge = "100";
String.format("06%d", hoge);
とやるとエラーになってしまった。
……。
Generating sequence number in Beanshell scripting
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("000000");
String hoge = "100";
df.format(hoge);
上記だと000100が得られた。
といった塩梅で、比較的手軽なツールなうえに色々と細かいことも設定可能なのは非常にありがたいものの、いざ手を入れ始めるとしょうもないところにトラップがあったりして、別の箇所でむず痒さを覚えてしまうこともしばしば。それでも慣れたら楽ですが。