JMeterでリクエストパラメータを使いまわす

こんにちはこんばんは!JMeterシナリオ、書いてますか!
僕は書いてません!


例のごとく質問されて調べたりしたので覚書です。


以前こんなのを書いたんですけど、
JMeterでCSVファイルのランダムな行を抽出する! - するめとめがね
「ランダムに取るのはこれで出来るようになったけど、取った値を連続で次のリクエストに使うにはどうすればいいんだよコラ、教えろよコラ、お前のブログ情報足りねーんだよクソが」みたいな質問を受けました。
具体的にはデータ登録のリクエストを投げたのち、その更新が果たして成功してるか確認するリクエストを同じパラメータを用いて行うみたいなシナリオです。


確かに普通にやるとサンプラーごとに取れる値が変わっちゃうので上手くいきません。
またBeanShellみたいなめんどくさいことをせずに直後のリクエストまで参照可能な変数作れないかなーとか考えたんですけど、どうにも思いつかないので正規表現を使います。


まず、CSVファイルからランダムで値を取得して変数にセットする処理は上に書いた記事と同じ形にします。
すると、userIdとentryIdの組み合わせをランダムで取得することができます。
次にまず登録のリクエストを投げるサンプラーを作ります。
普通にサンプラー>HTTPリクエストを選択し、パスを以下のような感じにします。
※URLとかパラメータの型とかはご自分の環境に置き換えてください。

add?user_id=${userId}&entry_id=${entryId}


次に生成したサンプラーを右クリック、追加>後処理>正規表現抽出を選択し、以下のように設定します。

Response Field to Check : URL
参照名 : req_param
正規表現 : .*(user_id=([a-z0-9-]+)&&entry_id=([0-9]+))
テンプレート : $1$
一致番号 : 0


Response Field to Check項目はデフォルトだとBodyになっていて、この場合レスポンスの中身を参照しますが、URLにするとリクエストのURLが対象になります。
なのでURLを指定し、その中から必要な部分だけ抽出してやればいいわけです。
今回はまとめて取りましたけど、パラメータの名前が変わったりする場合は必要な部分だけ抜き出せばよいです。


で、仕上げに先ほどのサンプラーの下にサンプラーを追加し、パスを以下のような感じにします。

get?${req_param}


かんたんですね。
リダイレクトとかがあるとうまくいかないかもしれないので、その場合は2つ目のサンプラーを実行する前にロジックコントローラを噛ませてreq_paramの存在確認とかをしてやればよいかなと。


なんかもっとスマートな方法があるといいんですが、思いつかず。
とりあえずやりたいことは実現できたのでよいかなという感じで。

スポンサーリンク