Apache Jmeter 4.0でレスポンスをJavaScriptで解析する

ほしがき2018/09/08(土) - 17:54 に投稿

Jmeterでシナリオ的な処理をさせると1つ前のレスポンスの内容を次のリクエストに使いたくなります。

正規表現抽出とかもありますが、細かいことするには不十分です。

そこでJSR223 PostProcessorJSR223 Samplerを使用します。

まずはJmeterをDLします。今回はJmeter4.0を使用します。


ダウンロード:https://jmeter.apache.org/download_jmeter.cgi

 

  • 実行環境


  • Windows 10
  • Java 8
  • Apache Jmeter 4.0
  • リクエスト先:https://api.github.com/ (用意が面倒なので・・・)
  • 準備


Jmeterの左側のツリーにTestPlanがあります。

右クリックで追加→Threads(Users)→スレッドグループで追加します。

スレッドグループを右クリックして追加→サンプラー→HTTPリクエスト

さらにHTTPリクエストを右クリックして追加→後処理→JSR223 PostProcessor

ついでにリスナー→結果をツリーで表示も追加しておくとリクエストとレスポンスの内容が確認できて便利です。

追加したら赤枠のプロトコルにhttps、サーバ名またはIPにhttps://api.github.com/を入力します。

こんな感じ。

HTTPリクエスト

 

続いてJSR223 PostProcessorを選択し、画像のようにLanguageをjavascriptにします。

あとはscriptのところにレスポンスをごにょごにょする処理を書くだけです。

Language

 

  • 使ってみる


ブラウザでアクセスするとわかりますがhttps://api.github.com/のレスポンスはAPIのURLが返ってきています。

その値を取得する処理を書いてみます。

ソース

// レスポンス取得
var response = JSON.parse(ctx.getPreviousResult().getResponseDataAsString());
// メニューのオプション→ログビューアでログ確認できます
log.info(response.current_user_url);
// イメージ的にはpublicな変数?に格納。他のサンプラーとかで${next_access}で格納した値を使用できる。
// scriptで使う場合はvars.get("next_access")
vars.put("next_access", response.current_user_url);

 

実行するとログにレスポンス内から値を取得できていることが確認できます。

あとはこんな感じで処理を書いて意図したレスポンスではなかった場合にAssertionResult.setFailure(true)とかでアサーション書いてみたりするといいかもしれません。

実行結果

 

  • 余談


この記事ではJavaScriptを使用しますがJSR223〇〇〇に記述できる言語は他にもあり、

下記の画像のドロップダウンに色々出てきます。

Language

 

また、選択肢以外にも使用できると思います。

Samplerの方にこんな記載がありました。by google翻訳

https://jmeter.apache.org/usermanual/component_reference.html#JSR223_Sampler

ドロップダウンリストに表示される言語以外の言語もサポートされています。適切なjarがJMeterのlibディレクトリにインストールされている場合は、他のものを使用できます。

まぁよほどのことがない限り今ある選択肢で十分かと思います。