前言
JMeter 逻辑控制器可以对元件的执行逻辑进行控制,逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。
常用的逻辑控制器:事务控制器、仅一次控制器、吞吐量控制器、简单控制器。其余的逻辑控制器大家可以百度或者看《JMeter全栈性能测试修炼宝典实战》自行了解,下面我们对常用的这四个逻辑控制器来一一讲解。
事务控制器
事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。同时我们对每一个取样器的执行时间进行统计。事务控制下的取样器会依次请求。
这里我们需要理解一下什么是事务?
事务就是一个流程。比如说贴吧发帖这个流程,我们需要先登录然后发帖,这个事务就设计到登录和发帖两个步骤;又比如我们对单据进行新增、保存、提交、审核,这我们也可以定义为是一个事务。事务其实是我们可以自己定义的,可以流程长也可以流程短。
如图中两个可勾选的选项含义如下:
Generate Parent sample:选择是否生成一个父取样结果。不勾选的话在查看结果数和聚合报告中会将其包含的请求都显示出来。如图:
如果勾选的话就只显示事务控制器如图所示:
Include duration of timer and pre-post processors in generated sample:是否包含定时器,一般来说不建议勾选。
仅一次控制器
仅一次控制器,也就是此控制器下的子元件只运行一次。我们在模拟请求时有时只需要登录一次,就可以把登录的部分放在仅一次控制器下。
如图线程组设置为:线程数为5,启动时间为1s,循环5次运行。
执行后的结果如下,可以发现登录接口只运行了5次,而测试1接口运行了25次。因为5个线程运行每个线程运行仅一次控制器下的登录接口1次,然后运行测试1接口5次所以就产生了如图的查看结果数结果。
吞吐量控制器
用来控制其下元件的执行次数(如图所示),并无控制吞吐量的功能,想要控制吞吐量可以使用 Constant Throughput Timer,后面会讲解到。吞吐量控制器有两种模式:Total Executions 与Percent Executions。
如图各字段含义如下:
Percent Executions:按执行次数的百分比来计算执行次数,此时Throughput 取值是 0~100。Per User 是否勾选对 Percent Executions 模式无影响。
Total Executions:代表执行的总次数,当小于或者等于0时,则不执行,且勾选Per User对该模式有影响;吞吐量控制器的总吞吐量次数,不能大于外面线程组的总迭代次数;如果大于外面线程组的总迭代次数,以线程组迭代次数为准;吞吐量控制器的总吞吐量次数,小于外面线程组的总迭代次数,以吞吐量控制器的总吞吐量次数为准。
Per User:如果勾选 Per User选项,这个是代表每个用户执行多少请求,如果没选中 Per User 则是按所有虚拟用户来计算执行次数。
例一:如图线程组设置为20,循环5次,吞吐量控制器1勾选Percent Executions值为10,吞吐量控制器2勾选Percent Executions值为20。待运行完毕后如图所示:
我们可以发现请求1执行了10次,这10次怎么来的呢?就是线程数xPercent Executions设置的值(%)x循环次数,也就是20x10%x5=10。这样大家可以直观地理解了。
例二:如图线程组设置为20,循环5次,吞吐量控制器1勾选Total Executions值为1不勾选Per User,吞吐量控制器2勾选Total Executions值为6不勾选Per User。待运行完毕后如图所示:
例三:如图线程组设置为20,循环5次,吞吐量控制器1勾选Total Executions值为1勾选Per User,吞吐量控制器2勾选Total Executions值为6勾选Per User。待运行完毕后如图所示:
我们可以发现请求1执行了20次,请求2执行了200次。大家是不是很迷惑呢?勾选 Per User选项,这个是代表每个用户执行多少请求。以此例子就是20个用户每个用户执行请求1一次,一共执行20次;20个用户每个用户执行请求2六次,按理说应该一共执行120次,但是我们设置的线程组一共迭代20x5=100次,所以请求2一共执行了100次。这样大家是不是都懂了?
简单控制器
简单控制器用来指定了一个执行单元,它不改变元件的执行顺序。在它下面还可以嵌套其他控制器。简单控制器的可编辑属性只有名称与注释。