JMeter中JSON响应转数组及后续请求参数复用方案问询
嘿,这个需求在JMeter里完全能搞定,我给你一步步拆解实操方案,亲测好使:
JMeter实现JSON数组转appid-Role键值对并用于后续请求
1. 提取JSON数组中的appid和Role列表
首先,在返回目标JSON数组的请求下面添加 JSON Extractor 组件:
- 引用名称1:
appid_list - JSON Path表达式1:
$..appid(这个表达式会提取所有层级下的appid字段值) - 匹配数字:
-1(表示提取所有匹配项,结果会以逗号分隔的字符串形式存储)
再添加第二个JSON提取规则(同一个JSON Extractor里可以加多个):
- 引用名称2:
role_list - JSON Path表达式2:
$..Role - 匹配数字:
-1
这样就把所有appid和对应的Role分别提取成了两个逗号分隔的字符串变量。
2. 将提取结果转为appid为键、Role为值的JMeter变量
接下来在同一个请求下面添加 JSR223 PostProcessor 组件,选择Groovy语言(JMeter里Groovy效率最高),粘贴以下脚本:
// 从变量中获取提取到的appid和Role列表,分割成数组 def appidArray = vars.get("appid_list").split(",") def roleArray = vars.get("role_list").split(",") // 循环遍历数组,将每个appid作为变量名,对应的Role作为变量值存入JMeter for (int i = 0; i < appidArray.size(); i++) { // 去除可能存在的首尾空格 String appid = appidArray[i].trim() String role = roleArray[i].trim() // 存入JMeter变量,后续请求直接通过${appid}就能拿到对应的Role vars.put(appid, role) }
这段脚本会把每个appid(比如4a157c66-4965-30b2-af47-7dc68651c350)变成JMeter变量名,对应的Role(AD SERVER)就是变量值。
3. 后续请求中使用这些键值对
方式1:直接引用单个键值对
如果后续请求需要指定某个appid对应的Role,直接在参数里写${4a157c66-4965-30b2-af47-7dc68651c350}即可,JMeter会自动替换成对应的AD SERVER。
方式2:自动添加所有appid-Role作为请求参数
如果需要把所有提取到的键值对都作为请求参数(比如POST表单参数),可以在后续的HTTP请求下面添加 JSR223 PreProcessor,用以下脚本自动生成参数:
// 创建参数集合 def paramMap = new HashMap<>() // 遍历所有JMeter变量,筛选出符合UUID格式的appid变量 vars.entrySet().each { entry -> String key = entry.getKey() // 匹配UUID格式的appid(根据你的实际格式调整正则) if (key.matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")) { paramMap.put(key, entry.getValue()) } } // 将参数添加到当前请求中 sampler.addArguments(paramMap)
这样后续请求就会自动带上所有appid-Role的键值对参数。
验证方法
可以添加一个 Debug Sampler 和 View Results Tree 组件,运行后查看Debug Sampler的输出,确认所有appid变量已经正确生成并对应到了Role值。
内容的提问来源于stack exchange,提问作者Ralph
相关产品推荐
相关产品推荐

