如何使用Weighted Switch Controller实现带权重的同步并行请求执行?
正确的JMeter测试计划结构与实现方案
核心结构层级
测试计划 - 线程组 - 登录请求(或登录逻辑控制器) - 同步定时器(Synchronization Timer) - 加权开关控制器(Weighted Switch Controller) - [权重值]:组1事务控制器(可选,用于统计) - 并行控制器(Parallel Controller) - 组1请求1 - 组1请求2 - [权重值]:组2事务控制器(可选,用于统计) - 并行控制器(Parallel Controller) - 组2请求1 - 组2请求2 - [权重值]:组3事务控制器(可选,用于统计) - 并行控制器(Parallel Controller) - 组3请求1 - 组3请求2
关键组件配置说明
1. 同步定时器
- 作用:确保所有登录后的用户统一等待,直到指定数量的线程全部到达后再执行后续操作
- 配置:
- 勾选「同组内的所有线程」
- 「要等待的线程数」设为线程组总用户数(若需分批同步可设为单批数量)
- 可设置合理超时时间,避免无限等待
2. 加权开关控制器
- 作用:按权重分配用户到3组并行请求
- 配置:
- 直接给子节点(事务控制器/并行控制器)的名称添加权重前缀,格式为
[权重数值]:节点名称,例如40:组1事务、35:组2事务、25:组3事务 - JMeter会按权重比例分配流量(总权重无需强制为100,按比例计算即可,如3:2:1对应50%、33%、17%的分配比例)
- 直接给子节点(事务控制器/并行控制器)的名称添加权重前缀,格式为
3. 并行控制器
- 作用:执行组内的并行请求
- 配置:
- 默认使用当前线程组的线程数,即每个用户独立并行执行本组内的请求
- 若需限制并行数量,可在控制器设置中调整「使用的线程数」
原方案问题分析
- 同步定时器位置错误:若放在加权开关控制器内部,仅会触发选中组的用户同步,而非所有用户统一等待
- 权重分配逻辑失效:若并行控制器嵌套在未加权重前缀的事务控制器内,加权开关会将事务控制器视为无权重的子节点,导致权重规则不生效
实现步骤
- 创建线程组,设置总用户数、Ramp-Up时间等基础参数
- 添加登录请求,确保用户完成身份验证
- 添加同步定时器,配置全局等待规则
- 添加加权开关控制器,为3组请求的父节点(事务/并行控制器)设置带权重的名称
- 在每个权重节点下添加并行控制器,再放入对应组的请求
- (可选)给每组添加事务控制器,用于统计该组请求的响应时间、成功率等指标
内容的提问来源于stack exchange,提问作者Guru
相关产品推荐
相关产品推荐

