You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter大量采样器场景下如何通过Throughput Controller实现请求等频次发送

JMeter多采样器请求数均等配置解决方案

问题核心根因

JMeter线程默认串行执行所属子节点,单线程单次循环会按顺序跑完所有100个采样器后才会进入下一轮循环。当测试总时长不足以支撑所有线程完成多轮全量采样器执行时,排序靠后的采样器会分配不到执行机会,最终出现请求数差异极大的情况。

可行配置方案

方案1:交替控制器(Interleaving Controller)实现轮询执行(最便捷)

这是实现100个采样器请求数差值不超过1的最优方案,配置步骤如下:

  • 移除原有直接挂在Ultimate Thread Group下的所有采样器
  • 右键Ultimate Thread Group添加 → 逻辑控制器 → 交替控制器
  • 将sampler1到sampler100全部放到交替控制器下
  • 按需在交替控制器外层添加循环控制器(如果需要控制总迭代次数)
  • 原理:每个线程每次进入交替控制器时,只会按顺序执行1个采样器,下一次进入时执行下一个,所有采样器轮询分配执行机会,天然保证请求数均等。

方案2:吞吐量控制器(Throughput Controller)按比例分配(适合灵活调整占比)

你之前使用吞吐量控制器未生效是因为配置逻辑错误,正确配置如下:

  • 每个采样器单独挂载1个吞吐量控制器,不要把所有采样器放到同一个吞吐量控制器下
  • 所有吞吐量控制器的执行模式选择Percent Executions(执行百分比),每个控制器的吞吐量值设为1.0(100个采样器各占1%)
  • 所有吞吐量控制器勾选Per User(按线程统计)选项
  • 外层添加循环控制器,保证总循环次数足够覆盖所有采样器的执行需求

方案3:JSR223采样器动态分发(适合自定义规则场景)

如果需要更灵活的分发逻辑,可通过代码实现:

  • 右键Ultimate Thread Group添加 → 采样器 → JSR223 Sampler
  • 将所有sampler1到sampler100设为禁用状态(右键选择Disable)
  • 在JSR223 Sampler中写入如下Groovy代码:
// 初始化线程安全计数器
def counter = ctx.getThreadGroup().getPropertyAsInt("samplerCounter", 0)
counter = (counter + 1) % 100
ctx.getThreadGroup().setProperty("samplerCounter", counter)
// 执行对应索引的采样器
def targetSampler = ctx.getThreadGroup().findTestElementByName("sampler" + (counter + 1))
targetSampler.sample(null)
  • 该方案可以精准控制每个采样器的执行顺序和次数,理论误差为0。

额外优化建议

  • 如果测试场景允许,可将ramp up时间适当调长,避免启动阶段线程资源不均导致的少量误差
  • 若需要严格保证总请求数相等,建议用循环控制器固定总迭代次数,而非依赖运行时长控制测试结束

内容的提问来源于stack exchange,提问作者Beklevir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:21:02