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

如何在JMeter中随机提取JSON里Options的子项及对应Values?

在JMeter中随机提取JSON里的Options子项及对应Values的实现方法

嘿,我来帮你搞定这个需求,步骤很清晰,跟着来就行:

方法一:用JSON Extractor + 内置函数(可视化配置,适合新手)

这种方式不需要写代码,全靠JMeter自带的元件配置就能完成:

1. 先提取完整的Options数组

添加一个JSON Extractor到你的请求后面,配置如下:

  • 变量名:all_options
  • JSON Path表达式:$.options
  • 匹配数字:-1(表示提取数组里所有的Option元素)
  • 其他保持默认即可

这一步会把JSON里的所有Option都提取出来,同时JMeter会自动生成${all_options_matchNr}变量,代表提取到的Option总数。

2. 随机选一个Option的索引

用JMeter的__Random()内置函数生成一个随机索引(数组索引从0开始),把这个索引存到变量里。你可以在User Defined Variables里添加,或者直接在后续元件中引用:

${__Random(0,${all_options_matchNr}-1,selected_option_index)}

这里selected_option_index就是我们选中的那个Option的索引变量。

3. 提取选中Option的Values数组

再添加一个JSON Extractor,针对刚才选中的Option提取它的Values数组:

  • 变量名:selected_option_values
  • JSON Path表达式:$.options[${selected_option_index}].values
  • 匹配数字:-1
    同样,JMeter会生成${selected_option_values_matchNr}变量,代表这个Option下的Value总数。

4. 随机选一个Value的索引

还是用__Random()函数生成Value的随机索引:

${__Random(0,${selected_option_values_matchNr}-1,selected_value_index)}

selected_value_index就是选中的Value的索引。

5. 提取最终需要的字段

如果需要获取选中Option的code、label,或者Value里的具体内容(假设Value有字段的话),再添加JSON Extractor即可。比如:

  • 提取选中Option的Label:
    • JSON Path表达式:$.options[${selected_option_index}].label
    • 变量名:selected_option_label
  • 提取选中Value的内容(假设Value有value字段):
    • JSON Path表达式:$.options[${selected_option_index}].values[${selected_value_index}].value
    • 变量名:selected_value

方法二:用JSR223 Sampler(代码方式,更灵活高效)

如果觉得多个JSON Extractor太繁琐,可以直接用JSR223 Sampler写Groovy代码一次性处理,效率更高:

添加一个JSR223 Sampler,选择Groovy语言,然后粘贴以下代码:

import groovy.json.JsonSlurper

// 假设你的接口返回的JSON存在变量"response"里,如果是直接用固定JSON,就把下面的字符串换成你的JSON
def jsonString = vars.get("response") ?: '''{ "id":37, "merchant_id":"39", "title":"Parker Pens", "subtitle":null, "price":1000, "description":null, "images":[ ], "image_thumbs":[ ], "options":[ { "code":"color", "label":"Color", "extra_info":"", "values":[ { "value":"red" }, { "value":"blue" }, { "value":"black" } ] }, { "code":"size", "label":"Size", "extra_info":"", "values":[ { "value":"small" }, { "value":"medium" }, { "value":"large" } ] } ],"options_available":[ { }, { } ] }'''

def jsonData = new JsonSlurper().parseText(jsonString)

// 随机挑选一个Option
def randomOption = jsonData.options.getAt(new Random().nextInt(jsonData.options.size()))

// 随机挑选这个Option下的一个Value
def randomValue = randomOption.values.getAt(new Random().nextInt(randomOption.values.size()))

// 把结果存到JMeter变量里,方便后续请求使用
vars.put("selected_option_code", randomOption.code)
vars.put("selected_option_label", randomOption.label)
// 如果Value有具体字段,比如value,就存对应的内容
vars.put("selected_value", randomValue.value ?: "")

代码里我给Values加了示例字段,你可以根据实际JSON结构调整字段名。运行后,你就能在后续元件里用${selected_option_code}、${selected_value}这些变量了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:31