【发布时间】:2021-12-16 06:56:48
【问题描述】:
我有一个场景,其中 API 响应的值出现超过 1000 次,我使用带有 ${variable}_all 的 Json 提取器捕获它。
我需要将其拆分为 50 个或更少的集合,并将这些 50 个集合多次参数化到下一个 API 调用中。
有没有办法做到这一点?
【问题讨论】:
我有一个场景,其中 API 响应的值出现超过 1000 次,我使用带有 ${variable}_all 的 Json 提取器捕获它。
我需要将其拆分为 50 个或更少的集合,并将这些 50 个集合多次参数化到下一个 API 调用中。
有没有办法做到这一点?
【问题讨论】:
解决方案 1
您需要对 JSON 响应中的值进行切片。您可以使用JSON JMSEPath Extractor 对前五十个进行切片。来自大量值的值。
解决方案 2 如果您想处理串联结果,下面的示例可能会很有用。
def values_ALL = vars.get("<variable name>_ALL")
def filteredValues = values_ALL.split(",")[0..50]
for (i in 0..<filteredValues.size()) {
println(filteredValues[i])
}
注意:JMeter 变量名区分大小写
【讨论】:
添加 Loop Controller 并使用以下 __groovy() 函数作为“循环计数”
${__groovy(vars.get('variable_ALL') as int / 50,)}
在循环控制器内部,您可以使用JSR223 PreProcessor 生成请求正文并引用变量的每个“块”,例如:
def offset = (vars.get('__jm__Loop Controller__idx')) as int * 50
def payload = new StringBuilder()
offset.upto((offset + 50), { index ->
payload.append(vars.get('variable_' + index)).append(System.getProperty('line.separator'))
})
sampler.addNonEncodedArgument('', payload.toString(), '')
sampler.setPostBodyRaw(true)
有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - Why and How You Should Use It
如果您需要生成 JSON 有效负载,您可能会发现 Parsing and producing JSON 文章也很有趣
【讨论】: