JMeter脚本求助:5用户20秒生成20请求却产生约40请求
解决JMeter请求量超标的问题
问题根源
你遇到的请求量翻倍(40个而非预期20个),核心原因是Constant Throughput Timer的作用范围或配置逻辑错误,叠加事务控制器的统计方式导致重复计数:
- 默认情况下,Constant Throughput Timer会让每个线程都达到设置的吞吐量(60请求/分钟),5个线程的总吞吐量会变成300请求/分钟,20秒对应100请求;你实际得到40个,大概率是Timer被应用到了两个事务控制器上,每个控制器都按60请求/分钟执行;
- 若事务控制器勾选了
Generate Parent Sample,会把控制器本身也算作一个请求,导致统计时重复计数。
修复步骤
1. 调整Constant Throughput Timer的配置
- 将Timer放在线程组最外层,确保它控制整个线程组的总吞吐量,而非单个线程或事务控制器;
- 在Timer的
Calculate Throughput based on选项中,选择 "All active threads in current thread group",这样设置的60请求/分钟就是整个线程组的总吞吐量,20秒正好对应20个请求; - 确认Timer的作用范围仅覆盖线程组内的所有请求,不要单独绑定到某个事务控制器。
2. 修正事务控制器的统计逻辑
- 对于内部、外部用户的两个事务控制器,取消勾选"Generate Parent Sample",避免将控制器本身统计为请求,导致请求数翻倍;
- 可以在事务控制器名称中明确标注(如"内部用户流程"、"外部用户流程"),方便后续区分统计数据。
3. 实现内部/外部用户的随机分配
- 在线程组中添加Random Variable元件,设置变量名(如
userType),值范围设为0-1; - 在两个事务控制器上分别添加If Controller:
- 内部用户控制器的If条件:
${__javaScript(${userType} == 0,)} - 外部用户控制器的If条件:
${__javaScript(${userType} == 1,)}
这样每个线程启动时会随机选择执行内部或外部用户的流程,实现用户数的随机分配。
- 内部用户控制器的If条件:
4. 验证请求数
- 运行脚本前,在查看结果树中开启“仅日志错误”,减少冗余日志;
- 运行后查看聚合报告,确认总请求数是否为20左右;
- 若仍有偏差,检查是否存在其他定时器(如Constant Timer)干扰请求间隔,或微调Constant Throughput Timer的吞吐量值。
内容的提问来源于stack exchange,提问作者TTDS
相关产品推荐
相关产品推荐

