JMeter如何将首个POST请求多组返回值迭代传入第二个POST请求
JMeter遍历多组接口返回值批量发起请求实现方案
前置配置:JSON提取器参数调整
在首个返回100条JSON数据的POST请求下添加JSON提取器,对需要用到的4个字段分别配置提取规则,每个字段的提取配置统一遵循以下规则:
- 引用名称:和字段名保持一致,分别填
Category、NumberX、departureDate、arrivalDate - JSON路径表达式:分别对应
$..Category、$..NumberX、$..departureDate、$..arrivalDate - 匹配数字:统一填
-1,代表提取返回结果中所有匹配的值 - 缺省值:可填
NOT_FOUND方便调试定位问题
配置完成后,JMeter会自动生成两类变量:
- 序列变量:格式为
{字段名}_序号,比如Category_1对应第一条数据的Category值,Category_2对应第二条,一直到Category_100 - 计数变量:格式为
{字段名}_matchNr,值为该字段匹配到的总条数,这里4个字段的matchNr值都是100,可直接作为总条目数使用,不需要额外手动计数。
遍历逻辑配置
在首个POST请求的同级位置(即执行完首个请求拿到所有返回值之后)添加以下组件:
- 添加循环控制器,循环次数直接填入
${Category_matchNr},不需要硬编码写100,后续接口返回条目数变化时会自动适配循环次数。 - 在循环控制器内部添加计数器配置元件,参数设置如下:
- 起始值:
1 - 递增步长:
1 - 最大值:
${Category_matchNr} - 引用名称:
idx
配置后每次循环idx的值会自动从1递增到总条目数,用来标记当前取第几组数据。
- 起始值:
- 将第二个POST请求拖到循环控制器内部,作为循环执行的取样器。
第二个POST请求参数调整
修改第二个POST的请求体,通过嵌套函数取当前循环序号对应的变量值,替换原来的无序号变量引用,正确的请求体格式如下:
{ "vehicleCategory": "${__V(Category_${idx})}", "NumberOfTasks": "${__V(NumberX_${idx})}", "departureDate": "${__V(departureDate_${idx})}", "arrivalDate": "${__V(arrivalDate_${idx})}" }
说明:
__V函数是JMeter内置的嵌套取值函数,用来解析拼接出来的变量名,比如当idx值为1时,__V(Category_${idx})会自动解析为${Category_1}的取值,实现按序号取对应组数据的效果。
可选优化方案
如果不想配置4个独立的JSON提取器,可以只配置1个JSON提取器:
- 引用名称填
allData - JSON路径表达式填
$.[*] - 匹配数字填
-1
配置后每次循环时,直接通过JMeter内置的__jmespath函数从单条全量对象中提取字段即可,比如${__jmespath(${__V(allData_${idx})}, Category)}就能拿到当前条目的Category值,减少配置工作量。
调试阶段可以在循环控制器内添加调试取样器,配合查看结果树观察每次循环的变量取值是否正确,排查传参问题。
内容的提问来源于stack exchange,提问作者Weronika
相关产品推荐
相关产品推荐

