控制器
Recording Controller
Controller
控制器相当于JMeter中的容器
或文件夹
,前面演示过的/authenticate-7
就是一个控制器。
首先,新建一个Test Plan,然后添加一个HTTP(S) Test Script Recorder,再依次添加Thread Group和Recording Controller。

添加完Recording Controller之后,再回头修改HTTP(S) Test Script Recorder的目标控制器,改为刚才创建的Recording Controller。

然后,开启代理服务器并开始录制
。

Transaction Controller
Transaction Controller是日常用的最多的控制器之一。
在不停止录制
的情况下,再在Thread Group上新建一个Transaction Controller,并重命名为Login
,同时把之前Recording Controller中的所有请求样本全部剪切到Login
中。

继续录制
选择航班,可以看到JMeter里面又多了一些请求样本。

如法炮制,新建Transaction Controller,重命名为Flight
,同时把之前Recording Controller中的所有请求样本全部剪切到Flight
中。

再接着录制
订购模块,以同样的方法创建Order
。

停止录制
,保存Test Plan,然后关闭JMeter,恢复代理服务器的设置后,再重新打开JMeter。
Simple Controller
给Thread Group添加View Results Tree
和Aggregate Report
,然后以默认设置运行。

这样一来,就可以很方便地基于不同的模块生成不同的测试报告。
除了Transaction Controller,还可以创建Simple Controller,但它除了作为容器
外,什么都做不了。

把前面的Login
中的请求拷贝一份到Simple Controller中,然后执行测试。

从上图右边显示的结果中可以看到,Simple Controller根本就没有出现在报告中。
和Simple Controller比较类似的是Random Order Controller,它们唯一的区别就是其子项的执行顺序。
Simple Controller会按顺序依次执行每个子项。
Random Order Controller执行子项的顺序是随机的。
Module Controller
将当前的Test Plan另存为一个.jmx
文件,然后在Thread Group中添加Module Controller,再对它执行配置。

然后执行对Module Controller的测试。

从上图可以看到这样的结果:整个登录请求全部执行了3次,而Login
作为Controller
执行了两次。
因为Simple Controller仅仅作为容器而不起到任何
控制
作用,所以只是执行了它里面的请求。Login Controller
最开始执行了1次,然后被Module Controller又调用了1次。这样一来,整个
Login Controller
就被执行了2次,而所有的登录请求则执行了3次。
也就是说,Module Controller的作用是它可以将不同的Controller
拼装起来,复用并实现自定义的测试逻辑。
Interleave Controller
删除之前的Module Controller和 Simple Controller等其他Controller
,仅保留Login Controller
。
在Thread Group中添加Interleave Controller,并调整结构如下。

将Thread Group的Loop Count
改为5
,也就是循环执行5次,然后执行测试。

Interleave Controller的测试结果如下图。

从上面View Results Tree显示的测试结果可以非常清晰地看到Interleave Controller中的三个welcome
请求和外部独立的请求nav
之间是怎么交替执行的。
因此,Interleave Controller可以很方便地将外部业务提取出来,然后将它们和核心业务组合执行迭代测试,考察核心业务的性能所受的影响究竟来自于哪里。
和Interleave Controller比较类似的是Random Controller,它们唯一的区别就是其子项的执行顺序。
Interleave Controller会按顺序依次迭代执行每个子项。
Random Controller每次迭代都会在子项中随机挑选一个执行。
Runtime Controller
Runtime Controller可用于观察Controller
的执行时间。
恢复之前Thread Group中的内容,并在它里面新建一个Runtime Controller。
将Order
拷贝一份到Runtime Controller,然后禁用Order
和Simple Controller。

测试结果如下图所示。

If Controller
If Controller可以根据指定的条件执行。
准备的测试环境如下图所示。

测试结果如下图所示。

如果将If Controller中的条件改为0 > 1
,那么if flight
将不会得到执行。
Loop Controller
顾名思义,就是不断地循环执行指定的控制器。
准备的测试环境如下图所示。

测试结果如下图所示。

While Controller的相当于把If Controller和Loop Controller结合在了一起,根据指定的条件执行若干次。
感谢支持
更多内容,请移步《超级个体》。