どうも、開発2部でサーバ担当してる山本です。
今回も前回に引き続き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を使うと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をオブジェクトとして扱うことができるので、
jsonの構造さえ分かれば複雑な内容であっても直感的に実装することが出来ます。
他にもjsonはjavascriptだと文字列をそのまま評価できるんで、
BSF PostProcessorでjavascriptを使うのも楽なんですが、
ハッシュ生成やエンコードなどを使いたいときに、
個々に実装する必要があったのでBeanShellにしました^^;
BSF用に共通関数みたいなのが定義できたらよかったんですが、分からんかったですorz
いかがでしたでしょうか。
今回は後処理でjsonをパースする方法を紹介しました。
次回はJMeterからjsonをPOSTする方法を紹介する予定です!!
ではでは。