JMeter中如何等待直至接口响应中出现指定的字段内容
JMeter 等待JSON指定字段返回实现方案
整体逻辑为:轮询调用目标接口,校验响应中data.mylist下的1、2字段是否存在,两个字段都存在则结束等待执行后续步骤,同时设置最大超时时间避免死循环。具体配置步骤如下:
步骤1:配置循环控制器
在测试计划中目标HTTP请求的上级添加循环控制器:
- 可选方案1:循环次数设置为
永远,后续通过条件判断主动跳出 - 可选方案2:直接设置最大循环次数,比如每次请求间隔1秒、最多等待30秒的话,循环次数设为
30,超时自动跳出
步骤2:配置接口请求与字段提取
在循环控制器内部添加目标HTTP请求,正常配置请求地址、参数等信息后,给请求添加JSON提取器,提取目标字段:
- 提取
data.mylist.1:引用名称填list1,JSON路径表达式填$.data.mylist.1,匹配模式填0,默认值填NOT_FOUND - 提取
data.mylist.2:引用名称填list2,JSON路径表达式填$.data.mylist.2,匹配模式填0,默认值填NOT_FOUND
步骤3:配置跳出逻辑
在HTTP请求后添加If控制器,配置如下:
- 勾选
Interpret Condition as Variable Expression?选项 - 条件框填入:
"${list1}" != "NOT_FOUND" && "${list2}" != "NOT_FOUND" - 在If控制器内部添加测试动作组件,操作选择
Break Current Loop,命中条件时会直接跳出循环控制器
步骤4:配置请求间隔
在HTTP请求前添加固定定时器,设置线程延迟为1000毫秒(可根据实际需求调整),避免短时间高频请求给服务器造成压力。
灵活扩展方案(复杂场景适用)
如果有更复杂的校验逻辑(比如不仅要字段存在,还要内部元素数量符合要求),可以把JSON提取器替换为JSR223后置处理器,语言选择groovy,代码示例:
import groovy.json.JsonSlurper // 解析响应 def respJson = new JsonSlurper().parseText(prev.getResponseDataAsString()) // 自定义校验逻辑 def hasList1 = respJson?.data?.mylist?.get("1") != null && !respJson.data.mylist.get("1").isEmpty() def hasList2 = respJson?.data?.mylist?.get("2") != null && !respJson.data.mylist.get("2").isEmpty() // 存储校验结果 vars.put("allFieldsValid", hasList1 && hasList2 ? "true" : "false")
之后If控制器的条件修改为"${allFieldsValid}" == "true"即可。
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

