如何在JMeter中通过变量实现递增线程数的增量负载测试?
实现JMeter增量负载测试的正确方法
为什么你的原有配置不生效
线程组的线程数参数在测试启动阶段就已确定,后续通过Counter元件修改的变量无法动态更新线程组的线程数量。另外,Counter元件在同一线程组内是针对每个线程的迭代计数,没法控制整个线程组的线程启动规模,这就是你看到每次仅启动1个线程且持续循环的原因。
方法1:用jp@gc - Stepping Thread Group(最推荐)
这是JMeter插件管理器提供的专用线程组,能直接实现阶梯式增量负载:
- 先装插件:打开JMeter插件管理器,搜索并安装
jp@gc - Stepping Thread Group - 配置参数:
Start Threads Count:填初始线程数(比如10)Threads Ramp-Up:初始线程的启动时长(比如10秒)Hold Load For:初始线程持续运行的时长(比如60秒)Add Threads Count:每次要加的线程数(比如10)Add Threads Ramp-Up:增量线程的启动时长(比如10秒)Repeat:增量循环的次数(比如要到30线程就设2次,因为10→20→30是2次增量)
- 配置完直接运行,就能自动按10→20→30的阶梯负载执行。
方法2:普通线程组+测试计划循环+属性函数
不想用插件的话,可以这么搞:
- 给测试计划设置
循环次数,比如要3次增量就设3次 - 添加setUp Thread Group(前置线程组),用来计算并设置当前线程数:
- 加个
Counter元件:起始值10,增量10,最大值30,导出变量名设为threadCount - 再加个
JSR223 Sampler,输入代码:props.put("currentThreads", vars.get("threadCount"));
- 加个
- 配置主线程组:
- 线程数填
${__P(currentThreads,10)}(10是默认值) - 线程组的
循环次数设为1(或者你需要的单批次迭代次数)
- 线程数填
- 运行测试:测试计划每循环一次,前置线程组就更新一次
currentThreads属性,主线程组会用新的线程数启动。
方法3:命令行脚本循环启动
习惯用脚本的话,写个shell/batch脚本,每次启动JMeter时指定不同线程数:
- 示例shell脚本:
for i in 10 20 30 do jmeter -n -t your_testplan.jmx -JcurrentThreads=$i -l result_$i.jtl done - 每次启动都会用指定的线程数跑测试,完成10、20、30的增量负载。
内容的提问来源于stack exchange,提问作者Юлия Самохина
相关产品推荐
相关产品推荐

