一.理解仅一次控制器
百度一下,都是下面的话。
仅针对 1个线程的,多线程的那个不生效,想实现多次执行某个请求只执行一次,需要设置为单线程,循环次数设置为多次就可以了
大致意思是,当线程组的线程数为1的时候,仅一次控制器才生效,只执行一次。当这个值大于1,就失效(失效的意思是什么呢?不执行还是跟普通的一样,执行多次??? 不知道,待会验证协一下)。然后就是,要执行很多请求,但是有一个请求呢只希望跑一遍,例如我想先调取登陆接口登陆一次,然后去访问工单页面,库存页面,采购页面。这个时候就可以把登陆接口放在仅一次控制器下,其他请求放在仅一次控制器外,线程数设置为1。
那我们就验证一下,看下多线程和单线程情况下,他的执行逻辑。
添加一个线程组
添加一个仅一次控制器
然后在仅一次控制器下添加一个http请求
简单测试,就访问百度吧
右击线程组,添加别的http请求,注意鼠标右击的位置很重要,是在 Thread Group
那。
图省事,也访问百度吧
为了查看接口访问情况,添加个结果树查看监听器。还是那句话,在哪右击很重要,此处只有一个线程组,在Test Plan
和Thread Group
添加效果一样,如果多个线程组,结果监听器就记录所有线程了。 而如果加在仅一次控制器下那就是只记录这个控制器的执行结果,以此类推。
为了区分把仅一次控制下的http请求命名only once,把外面的http请求命名为other 至此,整体结果如下:
设置下线程组,先看下设置为多个线程的时候,例如2,循环执行10次。
执行一下,查看下结果树
可以看到,only once执行了两次,这个数字跟设置的线程数是一样的。(可以改为3,5再运行验证)。而other请求执行了 2*10=20次。
以上设置,可以理解为两个用户,分别只登陆1次,然后另一个接口循环10次。
在来看下另一种场景,把线程数设置为1,其他的不变。
执行下,看下结果树
only once执行了1次,other循环了10次。
总结下,仅一次控制器,这里强调的一次,实质是指每个线程只执行一次 控制器下的请求,其他的还是照常,无论是按次数循环(Loop Count)还是限定时间持续循环(Scheduler–>Duration)。
二.实际使用场景举例
上面简单理解一下,在实际压测的时候,什么时候会用到呢?
其实最常用的还是作为登陆的时候,例如单个用户的大数据量查询操作,我只需要登陆一次,而查询会有很多情况,那么登陆就可以用仅以此控制器来。
又或者,针对某些迸发量大的接口,我需要测试同时100,200个用户去操作,可能还涉及到session的创建,同样可以使用仅一次控制器,每个用户登陆一次。