Jmeter学习笔记(8)- 集合点(线程组和同步定时器)
集合点
性能测试中最常见的一个场景莫过于同一时间N个用户同时进行操作。之前自己学习的时候,感觉使用线程组数在0秒内启动所有线程,不就基本实现并发了么?为啥还有个同步定时器呢?同步定时器是干啥的?看了好多篇文章和自己动手实践后,稍微有了些理解。
同步定时器Synchronizing Timer配置如图,主要有2个参数:
第一个参数,我自己翻译为每次集合的用户数,当线程组数达到这个数量时,触发一次并发。
第二个参数,超时时间,当数量没有达到集合用户数时,若超过了这个时间,也会触发并发。
几个例子
备注:线程组下添加了一个百度搜索的HTTP请求,添加了Listener - View Results in Table,方便结果查看。
配置一:线程组数10,启动时间为0秒,无同步定时器
效果:按下start按钮后,所有线程组的HTTP请求几乎同时启动运行。
配置二:线程组数10,启动时间为10秒,无同步定时器
效果:按下start按钮后,每1秒启动一个线程组,10秒完成所有10个线程组启动,如图:
配置三:线程组数10,启动时间为10秒,同步定时器中每次集合用户数10
效果:按下start按钮后,仍然是按照配置10秒内启动所有线程组,即每1秒启动一个线程组,但是HTTP请求并没有在线程组启动后立即发送,那是因为有同步定时器设置了10个为一个集合,所以会等待10秒钟,线程组个数凑够了10个之后,所有线程组的HTTP请求再同时发送,如图:
配置四:线程组数10,启动时间为10秒,同步定时器中每次集合用户数5
效果:按下start按钮后,每1秒钟启动一个线程组,但HTTP请求并没有立即发送,而是5秒钟后,当集合到了5个线程组后,5个HTTP请求一起发送,再过5秒钟后,剩余5个线程组的HTTP请求一起发送,如图:
其他配置
配置五:线程组数10,启动时间为10秒,同步定时器中每次集合用户数3,超时时间为0
这种配置…运行起来的效果…:按下start按钮,3秒后有3个线程组HTTP请求发送,6秒后有另3个线程组HTTP请求发送,9秒后又有3个线程组HTTP请求发送,然后就没有然后了,最后一个线程组的HTTP请求不会发送了,因为永远达不到集合数3。
配置六:线程组数10,启动时间为10秒,同步定时器中每次集合用户数3,超时时间为5000ms
开始时候的效果与上面配置类似,按下start按钮,3秒后有3个线程组HTTP请求发送,6秒后有另3个线程组HTTP请求发送,9秒后又有3个线程组HTTP请求发送。此时由于只剩一个线程,所以定然不会达到集合数量,但是设置了5秒超时,所以5秒钟后,最后一个线程组启动运行。如图
思考
最后的疑问是,使用
配置1(线程组数10,启动时间为0秒,无同步定时器)
配置3(线程组数10,启动时间为10秒,同步定时器中每次集合用户数10)
都能实现同一时间多用户并发。区别在哪儿呢?
1、配置3中这些线程是慢慢启动的,然后同一个时间并发访问。而配置1中的所有线程同时启动且并发访问。当并发用户数很大很大时,配置1会使得压力服务器瞬间压力太大,可能会影响并发效果(最后一句话是其他同学们说的,我也没试过,以后有机会再体验吧)。
2、loadrunner中管这种并发叫集合点。所谓集合,感觉更像是军训时候,教官突然吹了一个哨子,说5分钟后在楼下紧急集合。此时大家会各自开始准备,有的人很快就跑到楼下了,有的人穿衣服比较慢,或者跑的太慢,最后一秒钟才到楼下,总而言之,5分钟后大家集合完毕,准备统一行动。说着说着,是不是感觉同步计时器Synchronizing Timer才像是真正的集合呢?嘿嘿,大概是吧。