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

如何准确统计JMeter随机控制器下循环的实际执行次数

相关配置截图

配置截图1
以上是测试计划的部分配置片段,loop controller(循环控制器)与throughput controllers(吞吐量控制器)内部均配置了随机数生成逻辑。
配置截图2
配置截图3

实际总执行次数统计方案

吞吐量控制器在百分比执行模式下,是按单次执行概率判定是否放行,不会做总次数配额校准,所以多个吞吐量控制器叠加后,总执行次数必然和循环控制器的预设值存在偏差。要在保留两层随机逻辑的前提下拿到精准的实际执行次数,按以下步骤配置即可:

  • 初始化计数器
    在循环控制器的入口位置(循环控制器内部、所有子节点的最前方)添加JSR223 Sampler,写入初始化代码,循环启动时自动把计数清零:
    import java.util.concurrent.atomic.AtomicInteger
    vars.putObject("actualTotalCount", new AtomicInteger(0))
    
  • 执行埋点计数
    给每一个吞吐量控制器添加子级JSR223 前置处理器(放在控制器内部所有业务请求的最前方,不会生成额外采样结果干扰测试数据),写入累加逻辑:
    def counter = vars.getObject("actualTotalCount")
    counter.incrementAndGet()
    
    这个埋点只会在吞吐量控制器判定放行、请求实际要执行的时候触发,不会多记漏记。
  • 提取最终统计值
    整个循环控制器执行完成后,在循环控制器的同级后置位置添加任意JSR223元件,即可取出准确的总执行次数:
    Integer realTotalTimes = vars.getObject("actualTotalCount").get()
    log.info("循环预设次数:${vars.get("11-12")},循环块实际总执行次数:${realTotalTimes}")
    // 如需存入变量供后续逻辑调用,可添加下行代码
    vars.put("realTotalCount", realTotalTimes.toString())
    

补充:如果后续需要让循环块总执行次数严格匹配循环控制器的预设值,直接替换为加权开关控制器(Weighted Switch Controller)做按权重的固定配额调度即可,不会再出现概率偏差导致的次数浮动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:54:16