JMeter 集合点技术详解
Posted 七月的小尾巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter 集合点技术详解相关的知识,希望对你有一定的参考价值。
集合点目的
在性能测试过程中,我们通常会在线程组中设置并发用户数,但是在Jmeter的各个线程在进行业务操作的顺序会存在一定的随机性。
那么集合点的目的主要是让各个线程步调一致,对系统进行加压,从而达到模拟真实并发访问的效果。
创建集合点
如图,我们在定时器中,添加 Synchronizing Timer 同步定时器
同步定时器参数设置
模拟用户的数量:
- 每集合够多少线程后发送一次测试请求;
- 如何设置为0,等同于设置为线程组中的线程数;
- 确保设置的值不大于它所在线程组包含的线程数,否则一直集结线程而不发出测试请求,直到超时(如果设置了的话)。
超时时间以毫秒为单位
- 超时时间,即多少毫秒后同时释放已集结的线程,发送测试请求;
- 设置为0,则表示默认未设置超时时间
- 如果设置大于0,则超过设置的最大值,Timer将不再等待,释放已达到的线程。
集合点技术实战
很多朋友在初次使用同步定时器的时候,会犯一个错误,就是将集合点放在一个事务外层,即放在某一个线程组下方,那么这就意味着,这个同步定时器会对一整个线程组中的所有请求生效,下方我们来做一个错误的示范:
- 集合点错误实例
我们将同步定时器放在线程组下方,那么线程组下方的登录请求和浏览商品列表请求,都会收到同步定时器的影响。
下面我们将同步定时器放到浏览商品列表请求下方,并且将线程组设置为3个,时长设置为5秒,我们可以看到登录接口的请求时间,分别为38s、39、41s,但是设置了同步定时器的请求,同时在41s执行
由此可见,设置同步定时器之后,相当于设置了一个集合点,如我们设置了5个线程,他会达到5个线程数之后,在同步去执行请求。
- 集合点参数都设置成0,则表示初始未设置请求
这里需要注意的是,如果我们添加了集合点,但是未设置参数,则系统表示未设置模拟用户组数量及超时时间。
- 设置模拟用户组的数量大于线程组数量,一直集结线程而不发出测试请求,直到超时
这里是一个非常需要注意的点,如下图,我的线程组设置了3个,但是模拟用户数设置了4个,大于了线程组本身的线程数量,会导致线程无法发出请求,如图
如上图所示,我的超时时间设置为0,并且模拟用户数量大于线程组,我们可以看到结果中,登录的接口正常执行了,但是浏览商品列表的接口,不会执行,需要手动终止程序。所以这是在测试过程中,需要注意的地方。
同理,有些朋友会有疑惑,那如果我线程组设置了3个,但是同步定时器中设置的模拟用户组数量为4个时,会怎么样呢?
我们来看一下执行结果:
会发现,同样登录的接口正常执行了,但是商品列表的接口,只执行了2个,那么我们就能总结出当集合点中设置的模拟用户组数量和线程组不对等时,会根据集合点中设置的模拟用户数数量做一个划分,如上方设置的2个,则2个为一组,如果设置的线程数是10个,模拟用户数为3个的话,则3个为一组,当执行到第9个请求时,则不会再执行,除非设置了超时时间。
- 集合点设置超时时长,以毫秒为单位
如上图所示,我们仍然线程数设置的为3个,上方模拟用户组数量设置的2个,超时时长设置的为10s,我们可以看到下图,商品列表的接口,第一组请求了2次,在第二组还剩一个的情况下,与上一个请求的时间,间隔了10s以上,说明集合点设置的超时时间生效了。
这里可能有写朋友会有疑惑,集合点设置的时间不是10s吗?为什么最后一个商品列表的请求会大于10s而不是刚好10s就发起请求了?
这个跟自身的请求会有一定的关系,集合点我们只需要关注他的请求时间大于我们所设置的时间就可以了~
集合点注意事项
如果设置的超时时间为0,且线程数量无法达到模拟用户组数量时,那么Test将无限等待,除非手动终止。
这个无法达到的情况有如下几种:
- 设置的值大于线程数,这样就永远无法达到了
- 最后一批线程数不够集合点数量
以上是关于JMeter 集合点技术详解的主要内容,如果未能解决你的问题,请参考以下文章