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