如何在HTTP请求循环迭代中存储JSON提取器值到数组并后续操作
JMeter循环提取地址并操作数组实现方案
一、将每次请求的地址存入全局数组
- 给获取用户地址的GET请求添加JSON Extractor:
- 引用名设为
userAddress,JSON Path表达式填写对应地址的提取路径(比如$.address,需根据实际响应结构调整)
- 引用名设为
- 在JSON Extractor后添加JSR223 PostProcessor,用Groovy脚本将提取的地址存入全局数组:
注:用全局属性// 获取当前请求提取到的地址 def currentAddr = vars.get("userAddress") // 从JMeter全局属性中获取已有的地址数组,不存在则初始化空数组 def addrArray = props.get("addressArray") ?: [] // 将当前地址加入数组 addrArray.add(currentAddr) // 更新全局属性中的数组 props.put("addressArray", addrArray)props存储数组,可跨循环、跨线程组访问;如果仅单线程循环,也可以用vars(线程局部变量)替代props。
二、获取数组长度
在需要获取长度的位置(比如JSR223 Sampler或JSR223 PostProcessor)执行以下脚本,将长度存入变量供后续使用:
def addrArray = props.get("addressArray") // 获取数组长度并转成字符串存入变量 vars.put("addrArrayLength", String.valueOf(addrArray.size()))
也可直接在其他组件中通过函数引用长度:
${__groovy(props.get("addressArray").size(),)}
三、检查指定数组元素是否包含特定数据
方式1:将检查结果存入变量
添加JSR223 PostProcessor,脚本示例(以检查第5个元素(索引从0开始,对应索引4)是否包含"北京"为例):
def addrArray = props.get("addressArray") // 先判断数组长度是否足够,避免索引越界 if (addrArray.size() > 4) { def targetAddr = addrArray.get(4) // 判断是否包含指定关键词 def hasKeyword = targetAddr.contains("北京") vars.put("checkResult", String.valueOf(hasKeyword)) } else { vars.put("checkResult", "false") }
方式2:直接用断言验证
添加JSR223 Assertion,脚本示例:
def addrArray = props.get("addressArray") // 验证数组长度足够且目标元素包含指定内容 if (addrArray.size() <= 4 || !addrArray.get(4).contains("北京")) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("第5个用户地址未包含指定关键词") }
内容的提问来源于stack exchange,提问作者ApprenticeOfCode90
相关产品推荐
相关产品推荐

