Apache JMeterのBSF PostProcessorを使ったHTTPレスポンスの処理

2012-06-28


最近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ページ目参照)、今回はお手軽に正規表現抽出モジュールを使用。 JSONレスポンスのパース

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辺りを使ってやれば各言語のライブラリを使用したより複雑な処理も書けると思われ。 おしまい。


Profile picture of sakama

Written by sakama Data engineer who lives and works in Tokyo for successful data analytics You can follow me on Twitter

© 2022, sakama.dev - Built with Gatsby

Author

Profile picture of sakama

Written by sakama Data engineer who lives and works in Tokyo for successful data analytics You can follow me on Twitter

Socials

github.com/sakama

Recent Posts

Categories

Tags