You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTTP请求循环迭代中存储JSON提取器值到数组并后续操作

JMeter循环提取地址并操作数组实现方案

一、将每次请求的地址存入全局数组

  1. 给获取用户地址的GET请求添加JSON Extractor:
    • 引用名设为userAddress,JSON Path表达式填写对应地址的提取路径(比如$.address,需根据实际响应结构调整)
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:35:13