はじめに
JMeterにて、リクエストの結果一覧をもとに、一覧の一行ずつ処理を回したい、というケースがあったとします。このようなケースに関しては、ForEachコントローラーとJSON Executor(または正規表現抽出)を組み合わせることにより実現できます。
日本語のサンプルが少なそうだったのでここで紹介したいと思います。
やり方
前提条件
まずは、前提条件として以下のような場面を想定してます。
- 処理Aを行うと、JSONで以下のレスポンスが返る
{
"members":[
{
"id":101,
"name":"山田 太郎",
"性別":"男"
},
{
"id":102,
"name":"山田 花子",
"性別":"女"
},
...
}
- 処理Bでは、処理Aで帰ってきたリストの件数分、
members要素のid
の値をリクエストパラメータとして繰り返し処理を行う
JSON Executorの設定
サンプラーの処理Aの「後処理」→「JSON Executor」を選択する。
この例では、以下のような設定としています。
設定項目 | 設定値 |
---|---|
Names of created variables | members |
JSON Path expressions | $.mambers[*].id |
Match No.(0 for Random) | -1(※ForEachと組み合わせる場合は必ず負の値を指定する) |
これにより、変数members
に、membersの要素idの値
がコレクションとして格納されます。
JSON Executorではなく「正規表現抽出」を使用して実現する場合
こちらの処理は、JSON Executorではなく、後処理の「正規表現抽出」を使用しても実現可能です。
その場合の設定値の例は以下の通りです。
設定項目 | 設定値 |
---|---|
参照名 | members |
正規表現 | "id":([0-9]+) |
テンプレート | \$1\$ |
一致番号 | -1(※ForEachと組み合わせる場合は必ず負の値を指定する) |
ForEach Controllerの設定
次に、Foreach Controllerを設定します。この例では、members要素の件数分、リクエスト処理Bを行うことを想定しています。
この例では以下のような設定としています。
設定項目 | 設定値 |
---|---|
Input変数名接頭辞 | members |
Output変数名 | id |
これにより、変数membersに格納されたidの値
が1つずつ取り出されて変数id
に格納され、membersの要素分ループすることとなります。
サンプラーの設定
処理BのサンプラーをForEachの子要素として追加します。
その後、この例では、以下のように、リクエストパラメータに、ForEach ControllerのOutput変数名
に設定した変数(ここではid
)を使用して値を設定します。
これにより、
- 1回目のループ:パラメータmemberIdの値は101
- 2回目のループ:パラメータmemberIdの値は102
として処理Bのリクエスト処理が実行されます。
参考記事