JMeter如何模拟CSV配置的动态每分钟请求数?
JMeter实现动态每分钟吞吐量的解决方案
针对你需要按CSV中定义的每分钟请求数控制吞吐量的需求,推荐以下两种实用方案:
方案一:CSV读取+可变吞吐量定时器(推荐)
这种方式结合CSV数据读取和JMeter原生的吞吐量控制组件,配置简单且稳定:
添加CSV Data Set Config
- 配置文件路径指向你的吞吐量CSV文件
- 设置变量名:
targetTime(对应timestamp列)、targetRequests(对应Num. Of. Request列) - 根据测试时长设置循环策略:若CSV覆盖整个测试周期,可勾选"Recycle on EOF"让数据循环读取
添加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")) }添加Variable Throughput Timer
- 在"吞吐量"输入框中填写
${__P(currentThroughput,0)},引用全局属性中的动态值 - 根据测试场景选择吞吐量计算基准(如"所有活跃线程(共享)")
- 在"吞吐量"输入框中填写
方案二:JSR223定时器直接控制请求间隔
如果不需要依赖吞吐量定时器,可通过计算请求间隔时间实现精准控制:
同样先添加CSV Data Set Config,配置方式同方案一
添加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
相关产品推荐
相关产品推荐

