JMeter如何实现每20-30分钟自动提升10%-20%负载的配置?
JMeter动态阶梯负载调整实现方案
完全可以在同一个JMeter脚本的执行过程中实现你需要的动态负载调整需求,无需中途停止测试修改配置,以下是两种常用的落地方式:
方案1:低代码插件实现(推荐新手使用)
- 每个业务线程组替换为
Concurrency Thread Group,该组件属于JMeter标准插件集,通过内置插件管理器可直接安装 - 针对每个线程组单独配置阶梯负载规则,以Bulk Upload线程组、每30分钟涨幅10%、总时长2小时为例,可配置4个阶梯:
- 第一阶:初始并发250,持续运行30分钟
- 第二阶:30分钟节点并发升至275,持续运行30分钟
- 第三阶:60分钟节点并发升至303(四舍五入取整),持续运行30分钟
- 第四阶:90分钟节点并发升至333,持续运行30分钟至测试结束
- 若需要10%-20%的随机涨幅,可通过JMeter内置随机函数生成动态涨幅值,填入对应阶梯的并发数配置位即可
方案2:纯原生功能实现(无需安装插件)
- 先将所有业务线程组的线程数配置改为读取JMeter属性,示例:
- Bulk Upload线程数填
${__P(bulk_upload_threads,250)} - Log Analyzer线程数填
${__P(log_analyzer_threads,50)} - 剩余3个线程组同理分别配置对应的属性名,属性默认值即为初始用户数
- Bulk Upload线程数填
- 新增1个独立的调度线程组,配置为1个线程、永远循环
- 在调度线程组内依次添加以下组件:
- 固定定时器,线程延迟填
${__Random(1200000,1800000,)},可实现20-30分钟的随机触发间隔(单位为毫秒) - JSR223采样器,写入Groovy代码动态更新负载属性,示例逻辑:
// 生成10%-20%的随机涨幅 def increaseRate = 1 + (new Random().nextInt(11) + 10) / 100 // 更新Bulk Upload线程数 def bulkCurrent = props.get("bulk_upload_threads", 250) as int def bulkNew = Math.round(bulkCurrent * increaseRate) as int props.put("bulk_upload_threads", bulkNew) // 剩余4个线程组按上述逻辑依次更新对应属性即可 - 固定定时器,线程延迟填
- 所有业务线程组勾选
永远循环,配合你已配置的2小时总测试时长规则,到时间后测试会自动停止
注意:调整前请确保脚本的线程初始化逻辑(如登录、参数分配)是线程安全的,避免新启动的线程与已运行线程出现参数冲突。
内容的提问来源于stack exchange,提问作者user14435933
相关产品推荐
相关产品推荐

