JMeter的并发用户数是通过线程组(Thread Group) 来模拟的,一个线程就相当于一个虚拟用户。
1. 基础配置线程组
右键测试计划 - 添加 - 线程(用户)- 线程组,几个选项:
线程数(Number of Threads)
就是要模拟的最大并发用户数。填 100就代表最多有100个虚拟用户同时在线执行操作。
Ramp-Up时间(Ramp-Up Period)
指启动所有线程需要多长时间(单位:秒)。
线程数100,Ramp-Up20秒,则JMeter会每秒钟启动约5个线程,用 20 秒把100个线程全部拉起来。
如果设为 0,所有线程会在测试开始瞬间同时启动,容易对服务器造成瞬间高压,不推荐用于真实模拟但可用于瞬时并发测试。
循环次数
每个线程执行测试计划的次数。
填具体数字如10的话每个用户跑 10 遍。
勾选永远:线程会一直执行,直到你手动停止,或者配合调度器按不断时间控制。
调度器(Scheduler)
勾选后可以设置不断时间和启动延迟,适合做稳定性测试。
线程数100,Ramp-Up30秒,循环次数勾选永远,调度器不断时间设300 秒 -30秒内逐步加到100并发,然后保持100并发跑满5分钟。
2. 需要同时瞬间并发吗?
很多场景下我们说的并发100是指同一时刻有100个用户在线,而不是 100个用户必须毫秒不差地同时发出请求。
如果要模拟秒杀、抢购的绝对要测试同时并发,比如 100 个用户在 0.5 秒内全部点提交,单靠线程组不够需要加一个同步定时器(Synchronizing Timer)。
用法:
在线程组下,于需要并发的请求(如 HTTP 请求)上右键 - 添加 - 定时器 - Synchronizing Timer。
参数 Number of Simulated Users to Group by:
设为 0:会等待所有线程都到齐后,在同一时刻释放请求。
设为 N:每攒够 N 个线程就同时释放一次。
这样就能制造出瞬时尖峰压力。
3. 并发控制插件
原版线程组在控制阶梯加压时不够灵活,可以安装 JMeter Plugins,使用 Concurrency Thread Group 或 Stepping Thread Group。
可以直接用图形界面配置:目的并发数、用多长时间爬坡上来、保持多长时间、再逐步退去,对复杂场景非常友好。
4. 几个必须避开的误区
线程数 ≠ TPS
并发用户数大,吞吐量(TPS)不一定高,还要看响应时间。粗略估算:并发数 = TPS × 平均响应时间(理想无等待下)。
Ramp-Up时间不要太短
除非特意做冲击测试,否则过短的Ramp-Up会让负载生成器本身成为短板,导致结果失真。
不要无脑加线程
JMeter 消耗系统资源,单台机器一般建议不超过 500~1000 并发(视请求复杂度),更大并发请用分布式压测。
监听器别乱加
查看结果树聚合报告等监听器非常消耗资源,真正压测时只保留必要的简单报告,或者用命令行 jmeter -n -t test.jmx -l result.jtl 生成结果后离线分析。
并发用户数 = 线程数,通过 Ramp-Up 控制增涨速度,用不断时间或循环次数决定压测时长,需要瞬时并发则添加同步定时器。