最近在工作中用到了jmeter进行压测(其他同事负责),有一个场景是100个人同时在线登录系统。

配置如下所示:
1、线程组设置了100个,10秒内启动完毕,如图所示:
Jmeter小白学习笔记(9)- 同步定时器为什么没同步?
2、设置了同步定时器,如图所示:
Jmeter小白学习笔记(9)- 同步定时器为什么没同步?
但是结果呢,这1000个线程并没有同时执行用户登录的HTTP请求,而是在10秒内陆续登录了。why?

研究了一下,原来是同步定时器的Timeout时间设置错了,应该保持默认的0才对。
Jmeter小白学习笔记(9)- 同步定时器为什么没同步?
此时再执行的话,就是100个用户在10秒后同时执行登录的HTTP请求啦。

所以,Timeout in milliseconds这个参数非常重要,它的意思就是,
如果未设置或者设置为0:则等待100个线程组全部启动以后,统一发送HTTP请求,也就是真正的并发。
如果设置为其他数值如3:则每次等待3毫秒后,即使不够100个线程组,当前有多少线程组,就会发送多少个HTTP请求。

【总结如下】
1、线程组数100,Ramp-Up Period为0,同步计时器中集合用户数100,Timeout in milliseconds为0:
结果:可以实现100个并发。

2、线程组数100,Ramp-Up Period为0,同步计时器中集合用户数100,Timeout in milliseconds为其他值如3:
结果:也基本可以实现100个并发。因为100个线程是同时启动的。(不推荐使用)

3、线程组数100,Ramp-Up Period为10,同步计时器中集合用户数100,Timeout in milliseconds为0,可以实现100个并发。
结果:此情况可以实现并发,但并发是发生在测试启动的10秒之后。
过程:10秒内100个线程陆续启动,在第10秒时100个线程启动完毕,统一发送HTTP请求。

4、线程组数100,Ramp-Up Period为10,同步计时器中集合用户数100,Timeout in milliseconds为其他值如3
结果:此情况不能实现并发。
过程:10秒内100个线程陆续启动,但由于同步计时器有3毫秒超时,每3毫秒同步计时器都会进行超时处理,即使当前线程数不够100个,也会发送HTTP请求,所以效果就是,10秒内这100个HTTP请求时陆续发送的,不是并发。

所以保险起见,为了实现并发,建议将同步定时器的Timeout in milliseconds设置为0
以上仅为有限经验的总结,如有错误,欢迎指正。

相关文章: