JMeter逻辑控制器之ForEach控制器

一、背景

在使用Jmeter做性能测试、接口自动化测试时,需要循环遍历某些变量(用户定义的变量、从文件读取的某些变量)时,可以使用JMeter中的ForEach控制器。

二、控制器介绍

JMeter中的ForEach控制器,其主要作用就是用来遍历每个可迭代数组的数据(类似于python中的for循环),然后将遍历后的值,传递给后续进行某些操作。

1、控制器添加

在组件添加位置:选中“线程组”右键 —> 添加 —> 逻辑控制器 —>ForEach控制器,如图所示:

2、界面说明

  • 第一个参数:

    • Input Variable Prefix:输入变量名的前缀,默认为一个空字符串作为前缀。
  • 第二个参数:

    • Start index for loop(exclusive):循环起始索引,需要注意的是,循环操作不包含此索引值起始索引默认是从1开始,比如,填0时,其实是从1开始,若填2时,其实是从3开始算。
  • 第三个参数:

    • End index for loop(inclusive):循环结束索引。需要注意的是,循环操作包含此索引值比如,此处填10,那么循环执行时,会循环执行到索引10
  • 第四个参数:

    • Output variable: 输出变量名,也就是此变量名,在后续的操作中可以直接引用。比如,此处填city,那么其他地方引用时可以用${city}
  • 第五个参数:

    • Add”_”before number: 勾选变量名与索引之前有下划线"_",比如:city_1。不勾选,变量名与索引之前无下划线“—”,比如:city1。

三、Python代码比较

这里添加用户定义变量,输入变量名为citys,索引分别为1~5,值分别是"北京", "上海", "广州", "深圳", "成都"。

在python代码中,for循环也与此类似,如下所示,输入变量名为citys,索引从0开始,0~5,且不包含索引5

#列表
citys = ["北京", "上海", "广州", "深圳", "成都"]

在python代码中,for循环,输入变量名为city

#列表
citys = ["北京", "上海", "广州", "深圳", "成都"]

#循环遍历
for city in citys:
	print(city)

最后引用输出变量时,python直接调用city变量,而在jmeter中后续通过${city}来引用变量

四、示例演示(输入变量有下划线)

这里用百度搜索作为演示,通过用户定义变量,循环搜索不同的城市。如下所示:

1、添加用户定义变量

从图可以看出,输入变量名的前缀是citys,下划线后的为索引,分别是1~5。

2、配置ForEach控制器

如果要将上如中所有的城市名称值都遍历出来,那么ForEach控制器的索引需要设置为0~5,如下图所示:

3、发送请求

输出变量名称为city,后续可以通用${city}来引用变量,获得遍历后的所有城市名称,如图:

结果,可以看到每个城市名称均已获取。

五、示例演示(输入变量无下划线)

这里用百度搜索作为演示,通过用户定义变量,循环搜索不同的城市。如下所示:

1、添加用户定义变量

从图可以看出,输入变量名的前缀是citys,无下划线进行分割,索引分别是1~5。

2、配置ForEach控制器

如果要将上如中所有的城市名称值都遍历出来,那么ForEach控制器的索引需要设置为0~5,如下图所示:

3、发送请求

输出变量名称为city,后续可以通用${city}来引用变量,获得遍历后的所有城市名称,如图:

结果,可以看到每个城市名称均已获取。

六、示例演示(输出变量名为空时)

这里用百度搜索作为演示,通过用户定义变量,循环搜索不同的城市。如下所示:

1、添加用户定义变量

从图可以看出,输入变量名的前缀是citys,无下划线进行分割,索引分别是1~5。

2、配置ForEach控制器

如果要将上如中所有的城市名称值都遍历出来,那么ForEach控制器的索引需要设置为0~5,此处,输出变量设置为空,如下图所示:

3、发送请求

输出变量名称为空时,后续可以通用${}来引用变量,获得遍历后的所有城市名称,如图:

结果,可以看到,无输出变量,也可以用${}来获取变量值,每个城市名称均已获取。

七、参考

1、官方文档:https://jmeter.apache.org/usermanual/component_reference.html#ForEach_Controller

posted @ 2022-11-02 17:23  xyztank  阅读(920)  评论(0编辑  收藏  举报