環境
JMeter 2.7
Windows XP
BSF Processor(JavaScriptで使用)

最近Apache JMeterのBSF Processorを使った負荷テスト計画の作成を行ったのでメモ。

 

負荷テストで広く使われているApache JMeterですが、BSF(Pre|Post)Processorという機能があります。
JMeterの標準機能では処理できない場合にJavaScriptやRuby、Pythonなどを使った処理を使うことが出来るもの。

 

今回はWebAPIにGETでリクエストを投げ、返ってきたJSONレスポンスをパースした後、その値を元に再度リクエストを投げるという処理を実装。
大まかな流れとしては
・CSVファイルを読み込み、各種パラメータを決定
・WebAPIにGETでリクエストを投げる
・JSONレスポンス内の結果件数を示す値が0になるまで次のリクエストを投げる
・結果件数が0になった段階で全体の処理を終了
となります。

以下詳細。
■スレッドグループの詳細は以下の画像のようになっています。

スレッドグループの設定

パラメータ設定

Whileコントローラ内で送信される次のリクエストまでの間隔を設定。
JMeterのスレッドグループの「スレッドプロパティ」で設定した値はここには影響せず、インターバル0で次のリクエストを送信してしまう為このようにしました。

パラメータ設定

CSV読み込み処理

5列のデータが存在するCSVの想定。JMeterの.jmxファイルを設置したディレクトリと同階層にあるparams.csvを読み込み。

CSVの読み込み処理

 

Whileコントローラ

Whileコントローラに処理継続条件を記述します。
今回はBSF PostProcessorでJavaScriptを使用しているので、以下のように処理継続条件を記述しました。
${__javaScript(${isContinue}==1)}

Whileコントローラの処理

HTTPリクエストの生成

CSVから読み込んだデータをそのまま投げてます。

HTTPリクエストの生成

JSONレスポンスのパース

JSONレスポンスから結果件数を抽出します。
BSF PostProcessor使ってJSONをパースしてもいいんですが(負荷テストことはじめ 41ページ目参照)、今回はお手軽に正規表現抽出モジュールを使用。

正規表現抽出

BSF PostProcessorを使用した処理

ここからBSF PostProcessorを使用した処理を進めます。
今回はJavaScriptを使用していますが、Languageのプルダウンには以下ようなリストが。

javascript
jexl
jpython
jscript
judoscript
jython
lotusscript
netrexx
objectscript
perl
perlscript
pnuts
prolog
rexx
ruby
vbscript
xslt

 
JMeterで設定された変数は以下のような記述で参照・代入が可能。

//参照
var hoge = vars.get('変数名');
//代入
vars.put(変数名, 値);

 
BSF PostProcessorを使った処理

スリープ

次のHTTPリクエストまでの間隔を指定。パラメータ設定で代入した値が使用されます。
BSF PreProcessorで事前に処理してやればスリープ時間をランダムにすることも可能ですね。

定数タイマーを使用したスリープ処理
 
 
実際に使用したテスト計画より単純化していますが、上のような流れでBSF PostProcessorを使用したループ処理を行うことができます。
実案件ではJSONレスポンスから他のパラメータも読み込んでよりダイナミックに次のHTTPリクエストを作成しました。
Ruby、Python辺りを使ってやれば各言語のライブラリを使用したより複雑な処理も書けると思われ。
おしまい。

関連記事

コメント一覧

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スパム防止のため下の計算結果を入力して下さい *

トラックバック一覧

トラックバックURL:

ページの先頭へ