JMeter:如何递减 Foreach 控制器中为 End 索引字段提供的变量?

问题描述 投票:0回答:1

我正在制定 JMeter 测试计划,从 JSON 响应中提取各种值。该计划要求我执行依赖于提供给 ForEach 控制器的动态值的删除操作。我使用 JSON JMESPath 来获取生成这些动态值所需的出现次数。但是,当我在 ForEach 控制器的“循环结束索引(包含)”字段中使用此变量时,循环仅运行几次,然后在剩余迭代中失败。

以下是 JSON 响应的示例:

"companyRecords" :[
     {
        "employeeRecord": [
          {
           "employeeid" : "1234",
           "employeename" : "Joe",
           },
          {
           "employeeid" : "5678",
           "employeename" : "Matthew",
           }
          {
          "employeeid" : "1120",
          "employeename" : "David",
           }
          ],
         "joiningMonth" : "April",
         "employmentType" : "FullTime"
       }
 ],

JMESPath Extractor 中的 JMESPath 表达式:

length(companyRecords[].employeeRecord[].employeeid)

变量名称为NoOfRecords。 在当前实例中,这给了我 3 的计数。我将其用作 Foreach 控制器中的变量,如下所示。

input variable prefix: employeeid
start index for loop (exclusive) : 1
End index for loop (inclusive) : ${NoOfRecords}
Output variable name: employeeid

上面的 foreach 循环仅适用于 2 次迭代,而不是第三次迭代,我尝试将 JMESPath 中的起始索引设置为 0,但仍然给出 403 错误。

有办法让它发挥作用吗?预先感谢!

foreach jmeter jmespath foreach-loop-container
1个回答
0
投票

您的问题包含答案:

start index for loop (exclusive) : 1
End index for loop (inclusive) : ${NoOfRecords}

它将针对 2 和 3 个值迭代 2 次。所以你需要使用 0 而不是 1 作为循环的起始索引

如果您使用以下 JSON JMESPath Extractor 配置,将会更容易:

enter image description here

它将生成以下变量:

employeeid_1=1234
employeeid_2=5678
employeeid_3=1120
employeeid_matchNr=3

因此您将能够设置ForEach Controller,就像这样简单:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.