Jmeter之控制器(一)

1,674 阅读3分钟

基于Jmeter5.2.1

目录

Jmeter系列之测试计划、线程组、采样器(一)
Jmeter系列之配置元件(一)
Jmeter系列之监听器(一)
Jmeter系列之控制器(一)
Jmeter系列之控制器(二)
Jmeter系列之作用域、执行顺序
Jmeter系列之BeanShell使用

  控制器基本每个都很常用,所以这次会分两节,讲完全部的控制器。

image.png

Once Only Controller

  仅一次控制器下的元件对每个线程只会执行一次。对于需要登录的请求,也可以将请求放在这个控制器下,保证一个线程只登录一次。
  举例
  线程组配置:

image.png

  测试计划下的元件:
屏幕快照 2020-03-21 下午8.42.33.png

  仅一次控制器下的采样器只会运行2次(Number of Threads参数的值),而仅一次控制器外的/order/getList会运行22=4次(Number of ThreadsLoop Count)。

Loop Controller

  指定子节点运行的次数,可以使用具体的数值,也可以设置为变量,勾选Lnfinite,则表示永远运行下去。

image.png

  如果同时设置了线程组的Number of Threads和Loop Count,及循环控制器的Loop Count,那么循环控制器下的元件运行次数是三者相乘。
  注意
  如果循环控制器下有仅一次控制器呢?仅一次控制器下的元件会执行几次?
  线程组配置和上述仅一次控制器中的相同
  循环控制器的配置:
image.png

  测试计划下的元件:
image.png

  结论:/v2/user/signin会运行四次,而/order/getList会运行8次。可以认为仅一次控制器放在线程组下和放在循环控制器下有两种行为:

  • 线程组下:仅一次控制器下的元件对每个线程只会执行一次
  • 循环控制器下:仅一次控制器下的元件每N次(N是循环控制器中配置的Loop Count)执行一次

Sample Controller

  这是Jmeter里最简单的一个控制器,可以提供一个分组控制,不具备任何的逻辑控制功能。

  还记得在Jmeter系列之配置元件(一) 中的HTTP Header Manager部分提到的怎么给不同请求设置不同的Header?可以利用简单控制器来达到这个功能,这里要完全理解还需要结合元件作用域问题,后续再继续讲解。

Random Controller

  随机控制器是,每次随机执行其下的某个子节点,在页面的随机访问这种场景会用到随机控制器。

image.png

  Ignore sub-controller blocks:

  • 不勾选:随机控制器如果本次随机到子控制器,那么子控制器下的全部请求都会执行
  • 勾选:随机控制器将子控制器视为单个请求,如果本次随机到子控制器,那么只会执行子控制器下的一个请求(我试验后,发现每次只会执行子控制器下的第一个请求)

  举例

image.png

  每次从/v2/user/signin和/order/getList中随机选择一个执行。

Random Order Controller

  随机执行其下的所有子节点,和Random Controller不同的是,这个控制器会随机执行所有需要随机的内容,只是顺序不定,和线程组的线程数和循环次数配置无关,就算只有一个线程,只循环一次,也是会全部执行Random Order Controller下的全部请求。