Jmeterでシナリオ的な処理をさせると1つ前のレスポンスの内容を次のリクエストに使いたくなります。
正規表現抽出とかもありますが、細かいことするには不十分です。
そこでJSR223 PostProcessorやJSR223 Samplerを使用します。
まずはJmeterをDLします。今回はJmeter4.0を使用します。
Apache Jmeter
ダウンロード:https://jmeter.apache.org/download_jmeter.cgi
実行環境
- Windows 10
- Java 8
- Apache Jmeter 4.0
- リクエスト先:https://api.github.com/ (用意が面倒なので・・・)
※JDK15以降を使用する場合はこちらも参照してください。
準備
Jmeterの左側のツリーにTestPlanがあります。
右クリックで追加→Threads(Users)→スレッドグループで追加します。
スレッドグループを右クリックして追加→サンプラー→HTTPリクエスト
さらにHTTPリクエストを右クリックして追加→後処理→JSR223 PostProcessor
ついでにリスナー→結果をツリーで表示も追加しておくとリクエストとレスポンスの内容が確認できて便利です。
追加したら赤枠のプロトコルにhttps、サーバ名またはIPにhttps://api.github.com/を入力します。
こんな感じ。
続いてJSR223 PostProcessorを選択し、画像のようにLanguageをjavascriptにします。
あとはscriptのところにレスポンスをごにょごにょする処理を書くだけです。
使ってみる
ブラウザでアクセスするとわかりますが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〇〇〇に記述できる言語は他にもあり、下記の画像のドロップダウンに色々出てきます。
また、選択肢以外にも使用できると思います。
Samplerの方にこんな記載がありました。by google翻訳
https://jmeter.apache.org/usermanual/component_reference.html#JSR223_Sampler
ドロップダウンリストに表示される言語以外の言語もサポートされています。適切なjarがJMeterのlibディレクトリにインストールされている場合は、他のものを使用できます。
まぁよほどのことがない限り今ある選択肢で十分かと思います。
関連記事
JmeterのJSR223でJavaScriptが使えなかった話
JDK15以降でJavaScriptが選択肢にない場合はこちらを参照してください。
以上です。
コメント