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

JMeter中ForEach控制器提取值无法保留列表,如何生成JSON请求Payload?

解决JMeter循环提取值无法保留生成JSON Payload的问题

核心思路

每次循环提取的变量会被覆盖,需要将每次的值**追加到全局存储(JMeter属性)**中,循环结束后再将存储的集合转换为JSON数组作为请求体。

具体步骤

1. 循环内追加提取值到全局列表

在JSON Extractor之后添加JSR223 PostProcessor,用Groovy代码把当前循环提取的countryId、CurrencyId、countryCode追加到全局列表:

// 获取当前循环提取的字段值
def currCountryId = vars.get("countryId")
def currCurrencyId = vars.get("CurrencyId")
def currCountryCode = vars.get("countryCode")

// 从JMeter属性中获取已存储的列表,首次执行则初始化空列表
def countries = props.get("countriesCollection") ?: []

// 将当前国家信息以Map形式加入列表
countries.add([
    "countryId": currCountryId,
    "currencyId": currCurrencyId,
    "countryCode": currCountryCode
])

// 更新属性中的列表
props.put("countriesCollection", countries)

2. 循环结束后生成JSON Payload

在ForEach Loop Controller之后添加JSR223 Sampler/PreProcessor,把全局列表转换为JSON字符串并存入变量(比如finalPayload):

import groovy.json.JsonBuilder

// 获取存储的国家列表
def countries = props.get("countriesCollection") ?: []

// 转换为JSON格式
def jsonBuilder = new JsonBuilder(countries)
vars.put("finalPayload", jsonBuilder.toString())

3. 初始化清空全局列表(可选但建议)

在测试计划开头添加JSR223 Sampler,清空上次测试残留的全局列表:

// 清空存储的国家列表
props.remove("countriesCollection")

4. 使用生成的Payload

在需要发送JSON请求的HTTP Request中,将请求体设置为${finalPayload}即可。

替代方案(计数器+变量拼接)

如果不想用Groovy,也可以结合Counter Config元件(起始值1,递增1),每次循环把提取的值拼接到字符串变量:

  • 在JSON Extractor后添加JSR223 PostProcessor,执行:
def counter = vars.get("counter") // Counter的输出变量名
def currentEntry = """{"countryId":"${vars.get('countryId')}","currencyId":"${vars.get('CurrencyId')}","countryCode":"${vars.get('countryCode')}"}"""
vars.put("payloadPart_${counter}", currentEntry)
  • 循环结束后,用__groovy函数拼接所有payloadPart_变量为数组:
def parts = []
def count = Integer.parseInt(vars.get("counter"))
for(int i=1; i<=count; i++) {
    parts.add(vars.get("payloadPart_${i}"))
}
vars.put("finalPayload", "[" + parts.join(",") + "]")

内容的提问来源于stack exchange,提问作者Mandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:22:40