Setup线程组传值至多主线程组时迭代卡顿及随机传值问题求助
解决Setup线程组向并行循环主线程组传递随机关联值的问题
方案一:属性存储+随机索引取值
Setup线程组配置
- 完成接口请求后,用正则表达式提取器抓取所有关联值:设置匹配数字为
-1,引用名称设为比如token,这样会生成token_1、token_2...token_N以及token_matchNr(存储关联值总数量) - 添加JSR223 PostProcessor,用Groovy脚本将所有关联值存入全局属性:
def total = vars.get('token_matchNr') as int props.put('total_tokens', total.toString()) for (int i = 1; i <= total; i++) { props.put("token_${i}", vars.get("token_${i}")) }
主线程组配置
在需要使用随机关联值的位置,直接用函数组合生成随机索引并取值:
${__P(token_${__Random(1,${__P(total_tokens,)},rand_idx)},)}
__Random函数生成1到关联值总数量之间的随机索引__P函数根据索引取出对应的全局属性值- 主线程组循环运行时,每次迭代都会生成新的随机索引,拿到不同的关联值
方案二:修复Inter Thread Communication(ITC)插件的使用
Setup线程组配置
- 用正则提取器抓取所有关联值后,添加JSR223 PostProcessor将值批量放入ITC队列:
def total = vars.get('token_matchNr') as int def queueName = 'token_queue' for (int i = 1; i <= total; i++) { org.apache.jmeter.protocol.java.sampler.InterThreadCommunication.put(queueName, vars.get("token_${i}")) }
主线程组配置
- 添加Get Data from Queue元件,配置如下:
- 队列名称:
token_queue - 变量名:
random_token - 勾选
Random order(随机取值) - 勾选
Loop queue(队列取空后循环取值,适配多次迭代)
- 队列名称:
- 后续请求直接使用
${random_token}即可,每次迭代都会从队列随机获取一个关联值
关键注意事项
- 确保测试计划未勾选
Run thread groups consecutively,保证主线程组可以并行运行 - Setup线程组默认会在所有线程组之前执行,无需额外配置执行顺序
- 正则提取器的匹配数字必须设为
-1,才能抓取所有关联值而非单个值
内容的提问来源于stack exchange,提问作者Pradeep Reddy
相关产品推荐
相关产品推荐

