今回も前回に引き続きJMeter(ジェイメーター)についての投稿です。
前回は変数周りの機能について紹介しましたが、
今回はサーバーから返却されたjsonの内容を後続のリクエストで利用する方法を紹介します。
▼全記事はこちら【JMeter講座③(全3回)】
【JMeter講座①(全3回)】カウンタ/Random Variable/CSV Data Set Config
【JMeter講座②(全3回)】正規表現抽出/BeanShell PostProcessor
【JMeter講座③(全3回)】BeanShell PreProcessor
jsonからデータを取得する方法はいくつか方法はありますが、
今回は以下の2つの方法を紹介します。
正規表現抽出
BeanShell PostProcessor
尚、サーバを以下のjsonを返却するようにしています。
{"token":"399f386b09eceddc472a4bd9c077c5f9","user_data":{"user_id":1,"user_name":"otwo"}}
正規表現抽出
単純なjsonの場合は正規表現抽出を使うと楽ちんです。
下の例ではHTTPリクエストの後処理として正規表現抽出を設定することで、
サーバから返却されたjsonからtokenを抽出し、
後続のリクエストでヘッダーに設定しています。
jsonが複雑な構造になってくると正規表現抽出ではなかなか面倒です。
そういう場合はBeanShell PostProcessorを使うとjsonをオブジェクトとして扱えるので便利です。
BeanShell PostProcessorはHTTPリクエストなどの後処理としてBeanShellを実行する機能になります。
なので、jsonから抽出したデータを加工することなんかもできます。
BeanShellからjsonをオブジェクトとして扱うにはライブラリが必要なので、
↓からjava-json.jarをダウンロードしてJMeterのlibフォルダにぶっこんでJMeterを再起動します。
http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm
import org.json.JSONObject;
log.info("BeanShell PostProcessor Start");
String body = prev.getResponseDataAsString();
log.info("response body=" + body);
JSONObject json = new JSONObject(body);
String token = json.get("token");
String user_id = String.valueOf(json.get("user_data").get("user_id"));
String user_name = json.get("user_data").get("user_name");
log.info("token = " + token);
log.info("user_id = " + user_id);
log.info("user_name = " + user_name);
vars.put("token", token);
vars.put("user_id", user_id);
vars.put("user_name", user_name);
log.info("BeanShell PostProcessor End");
↑がBeanShellで実装した内容です。
prev.getResponseDataAsString()でjson文字列を取得して、JSONObjectによりパースしています。
log.info()でログ出力もできるので、BeanShellのデバッグもしやすいです。
vars.put()でユーザー変数を定義して後続の処理で使っています。
他にもjsonはjavascriptだと文字列をそのまま評価できるんで、
BSF PostProcessorでjavascriptを使うのも楽なんですが、
ハッシュ生成やエンコードなどを使いたいときに、
個々に実装する必要があったのでBeanShellにしました^^;
BSF用に共通関数みたいなのが定義できたらよかったんですが、分からんかったですorz
いかがでしたでしょうか。
今回は後処理でjsonをパースする方法を紹介しました。
次回はJMeterからjsonをPOSTする方法を紹介する予定です!!
ではでは。