添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

今回も前回に引き続き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する方法を紹介する予定です!!

    ではでは。