如何在JMeter的一个线程组存储请求值到数组并在另一线程组使用?
实现步骤
1. 在T1中收集参数到全局共享列表
在T1中每个需要提取参数的HTTP请求下,添加JSR223后置处理器,选择Groovy语言,输入以下代码:
// 获取当前请求中目标参数的值(替换成你的参数名) def targetParam = sampler.getArguments().getArgument("your_param_name").getValue() // 从JMeter全局属性中获取已有的参数列表,不存在则初始化新列表 def paramList = props.get("global_param_list") ?: new ArrayList<>() // 将当前参数值追加到列表 paramList.add(targetParam) // 更新全局属性中的列表 props.put("global_param_list", paramList)
- 替换
your_param_name为你要提取的请求参数名。 props是JMeter的全局属性对象,跨所有线程组可见,从根源避免了局部变量每次初始化的问题。
2. 配置T2的执行时机
在T2线程组的设置中:
- 勾选Run thread group consecutively (i.e. after previous thread group ends),确保T1完全执行完毕后才启动T2。
- 在**线程延迟(毫秒)**输入框中填写
30000,实现30秒延迟启动。
3. 在T2中迭代使用参数列表
方法:循环控制器+Groovy函数引用
- 在T2中添加循环控制器,将循环次数设置为:
${__groovy(props.get("global_param_list").size(),)}
这会让循环次数自动匹配T1收集到的参数总数。
- 在循环控制器内添加需要使用参数的HTTP请求,在参数值位置填写:
${__groovy(props.get("global_param_list").get(${__jm__循环控制器__idx}),)}
${__jm__循环控制器__idx}是循环控制器的内置变量,代表当前循环的索引(从0开始),用来依次取出列表中的每个参数值。
可选:测试后清理全局属性
在测试计划最后添加一个JSR223采样器,输入以下代码,避免下次测试残留数据:
props.remove("global_param_list")
内容的提问来源于stack exchange,提问作者Sangeeta Agarwal
相关产品推荐
相关产品推荐

