1 Jmeter常用逻辑控制器

1.1 简单控制器

作用:Jmeter中最简单的一个控制器,只是分组的功能,不具有逻辑控制的功能。

示例:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试

 运行结果:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_02

1.2 随机控制器

作用:随机选择控制器下的某1个请求运行。

应用场景:页面的随机访问(比如审批时有可能通过,有可能拒绝)。

示例:在随机控制器下放3个请求,查看运行结果。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_03

 运行结果:随机运行了第2个请求。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_04

1.3 随机顺序控制器

作用:执行控制器下的所有请求,但执行顺序随机

应用场景:页面的随机访问,但所有页面都需访问,只是访问顺序随意(比如用户可能先访问我的订单页再访问购物车页,也有可能反之)。

示例:在随机顺序控制器下放3个请求,查看运行结果。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_05

运行结果:3个请求均会执行,但执行顺序是随机的。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_06

1.4 循环控制器

作用:指定控制器下请求的运行次数,勾选“永远“则会一直循环下去。

   如果同时设置了线程组的循环次数和循环控制器的循环次数,则循环控制器的子节点运行的次数为两个数值相乘。(线程数*循环控制器数值)

应用场景:一对多的关系。比如 创建一个部门,然后在该部门下创建多个员工。就用到了循环控制器。

示例:在循环控制器下放1个请求,设置运行3次,查看运行结果。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_07

运行结果:运行了3次。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_08

1.5 仅一次控制器

作用:在测试计划执行期间,该控制器下的元件对每个线程只执行一次。

应用场景:登录后访问其他请求,但只需登录一次。

示例:设置循环次数3,一个请求不在此控制器下(查询所有学生1),一个请求在此控制器下(仅一次控制器案例)。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_09

运行结果:不在此控制下的请求(查询所有学生1)执行了3次,在此控制器下的请求(仅一次控制器案例)只执行了1次。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_10

1.6 Switch控制器

作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:

  · 第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。

  · 第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。

  当Value为空时,默认执行第1个子节点元素。

示例:此控制器下建立多个请求,Switch Value填写哪个请求名称就执行哪个请求,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_11

运行结果:Switch Value为“查询所有学生3”,所以只执行“查询所有学生3”这个请求,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_12

1.7 ForEach控制器

作用:ForEach 控制器一般与“用户定义的变量”一起使用,此控制器下的请求,会将“用户定义的变量”中的参数每个都传进去执行一次。

示例:使用“通过学生姓名查询学生信息”接口,"用户定义的变量"以“下划线拼接数字”的形式设置姓名,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_13

“输入变量前缀”:下划线之前的部分;

“开始循环字段(不包含)”、“结束循环字段(含)”:下划线后的索引;

“输出变量名称”在请求中引用;

“数字之前加上下划线"_"”:变量名称以下划线分隔索引则需要勾选,若无下划线分隔则无需勾选。

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_14

请求中引用控制器中设置的“输出变量名称”:Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_15

运行结果:按用户定义的变量中的姓名每个都执行了一次请求,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_16

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_17

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_18

1.8 事务控制器

作用:多线程并发测试时,多个请求不一定按顺序执行,事务控制器可以控制子节点严格按顺序执行,保证请求的正确性;而且会生产一个额外的采样器,用来统计该控制器子节点的所有时间。

应用场景:完成一个完整的页面请求或一组请求。比如浏览商品列表页面,需将获取商品信息与获取商品照片等接口作为一组请求,且需要先获取到商品id才能去获取商品照片。

示例:设置50个线程,循环2次,观察不设置事务控制器与设置事务控制器执行结果的区别。

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_19

运行结果:

未设置事务控制器,结果中请求出现乱序的情况,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_20

 设置事务控制器后,请求未出现乱序的情况,且自动生成了一个“事务控制器”的取样器,统计数据为1-5这一组请求的总时间,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_21

1.9 如果(If)控制器

作用:根据给定表达式的值决定是否执行该节点下的子节点,常用函数:__jexl3和__groovy。

比如:${__jexl3("${query}"=="success",)}  ${__groovy("${query}"=="success",)}  (如果是字符串比较条件,参数和字符串都需要加引号。)

示例:变量query为fail时,不会执行控制器下的请求(查询所有学生1);为success时,才会执行。

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_22

 If控制器中判断条件为query为success时才会执行控制器下的请求:Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_23

 运行结果:无“查询所有学生1”请求Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_24

 将query变量的值改为success,重新执行:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_25

 运行结果:执行了“查询所有学生1”请求

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_26

1.10 Runtime控制器

作用:设置控制器中的请求运行时间,单位:秒。

  • 和线程组的循环次数也有关系,如果指定循环次数的话,总的运行时间 = 循环次数 * runtime。
  • 如果循环次数是永远或者设置了调度器持续时间,那么 Runtime 控制器下的子项运行时间以线程组中设置的时间为准。

应用场景:对业务请求时间进行限制。

示例:设置运行时间10s,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_27

运行结果:循环运行10秒后停止,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_28

1.11 While控制器

应用场景:

值为空:只有最后一个取样器执行失败才退出循环。循环执行一个请求,仅判断一种状态下退出循环。

值为LAST:如果进入循环之前的请求失败,则不进入循环。比如前面有依赖的话,依赖执行失败则后面就不执行了。

示例1:值为空时,只有最后一个取样器执行失败才退出循环:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_29

 使请求2执行失败,观察运行结果:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_30

请求2执行失败但没有退出循环,一直在运行,如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_31

 将请求2改为正确的,请求3改为错误的,执行:Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_32

 请求3执行失败后就退出了循环,如下图:Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_33

示例2:值为LAST, 如果进入循环之前的请求失败,则不进入循环:

在循环之前再建一个请求,使其执行失败,运行:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_34

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_35

 运行结果:没有进入循环。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_36

对比“值为空”时的运行情况,循环前的请求失败仍进入了循环。如下图:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_37

2 CSV Data Set Config参数化

2.1 使用Fiddler抓包

请求路径及请求参数如下:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_38

 2.2 CSV文件准备

先新建xls文件,再另存为csv格式:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_39

2.3 Jmeter脚本编写

变量名称:在下方取样器中会引用。

忽略首行:csv文件中第一行为列标题则选为True,若无标题则选为False。

分隔符:csv文件默认为逗号分隔。

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_40

 参数值引用上面设置的变量名称:Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_41

设置线程数或循环次数,运行,第1个请求为第1个用户,第2个请求为第2个用户,以此类推:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_42

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_43

 登录成功:

Jmeter常用逻辑控制器、CSV Data Set Config参数化_Jmeter、测试_44