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

JMeter如何模拟CSV配置的动态每分钟请求数?

JMeter实现动态每分钟吞吐量的解决方案

针对你需要按CSV中定义的每分钟请求数控制吞吐量的需求,推荐以下两种实用方案:

方案一:CSV读取+可变吞吐量定时器(推荐)

这种方式结合CSV数据读取和JMeter原生的吞吐量控制组件,配置简单且稳定:

  1. 添加CSV Data Set Config

    • 配置文件路径指向你的吞吐量CSV文件
    • 设置变量名:targetTime(对应timestamp列)、targetRequests(对应Num. Of. Request列)
    • 根据测试时长设置循环策略:若CSV覆盖整个测试周期,可勾选"Recycle on EOF"让数据循环读取
  2. 添加JSR223预处理器
    放在线程组顶层,编写Groovy脚本匹配当前时间与CSV中的时间戳,将对应请求数存入全局属性:

    // 格式化当前时间为HH:mm:00,匹配CSV中的时间格式
    def currentTime = new Date().format("HH:mm:00")
    // 匹配CSV时间戳(假设CSV时间末尾为HH:mm:00格式)
    if (vars.get("targetTime").endsWith(currentTime)) {
        props.put("currentThroughput", vars.get("targetRequests"))
    }
    
  3. 添加Variable Throughput Timer

    • 在"吞吐量"输入框中填写${__P(currentThroughput,0)},引用全局属性中的动态值
    • 根据测试场景选择吞吐量计算基准(如"所有活跃线程(共享)")

方案二:JSR223定时器直接控制请求间隔

如果不需要依赖吞吐量定时器,可通过计算请求间隔时间实现精准控制:

  1. 同样先添加CSV Data Set Config,配置方式同方案一

  2. 添加JSR223 Timer,放在需要控制的请求前,脚本计算并设置延迟:

    def currentTime = new Date().format("HH:mm:00")
    if (vars.get("targetTime").endsWith(currentTime)) {
        def reqPerMin = vars.get("targetRequests") as int
        if (reqPerMin > 0) {
            // 计算每个请求的间隔毫秒数
            def delay = 60000 / reqPerMin
            sleep(delay)
        }
    }
    

    注意:此方案适合单线程或固定线程数场景,需确保线程数量与目标请求数匹配,避免请求堆积。

关键注意点

  • 确保CSV时间格式与JMeter运行时区一致,避免时间匹配错误
  • 优先使用Groovy脚本(JSR223组件选择Groovy语言),性能远优于Beanshell
  • 若CSV时间为完整时间戳,可直接替换脚本中的endsWith为equals进行精确匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:24