Jmeter逻辑控制器之Foreach控制器如何控制多个变量输入

本文探讨了在JMeter中如何利用ForEach控制器与__V函数解决多变量输入问题,尤其适用于需要同步变化的场景,如班次信息的批量处理。详细介绍了__V函数与计数器的配置方法,以及它们在ForEach控制器中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ForEach Controller只支持一个变量作为输入,但是有时候我们其它的输入变量也同步随着ForEach Controller中的变量值不同而不同,我们需要使用多个变量作为输入变量。

除了ForEach控制器中的变量,其它变量我们可以用__V函数和__counter函数(或计数器)来生成Debug sampler/Debug PostProcessor中的变量,__V函数可以处理带有内嵌变量的值,而__counter函数则可以从1递增的生成数字

比如如下场景:

某个班次有班次代码,班次开始时间,班次结束时间。先需要从A表查出这3个变量,然后将这3个变量作为一个insert的输入值,插入到B表,由于B表与A表的班次关系是一一对应的,所以需要用到ForEach控制器来控制。

然而ForEach只支持一个变量的输入,我们怎么引用3个变量呢?这里我们无法通过ForEach控制器直接处理,我们需要借助Jmeter __V函数和计数器来实现
备注:__V函数可以嵌套函数使用

**计数器配置:**一般情况下勾选上与每用户独立的跟踪计数器、在每个线程组迭代上重置计数器

在这里插入图片描述

提取的变量:

如下将提取的taskId用于ForEach控制器,其它变量的值随着taskId的不同而变化:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ForEach控制器配置:

在这里插入图片描述
ForEach控制器中的变量值:

注意:foreach中的变量必须在此逻辑控制器下面的第一个服务请求中的变量中

在这里插入图片描述

变量嵌套使用,其它变量对应的变量值:

在这里插入图片描述

ForEach控制器可以嵌套使用

在外层 ForEach 控制器内部添加另一个 ForEach 控制器,对外层获取到的某个参数的多个值,每个值都执行一次服务请求;

关联的灵活使用:

背景:在一个线程组的两个服务请求存在关联时,后一个服务请求将前一个服务请求的的两个或者多个提取值都作为请求数据,但是这多个值存在对应关联,如果获取正确的所有值作为后一个服务请求的请求数据

数据格式:

前一个服务请求列表嵌套Json,每个Json都作为列表中的一个元素,那么:
1、前一个服务请求每个字段有很多值;我们要提取中的两个或者多个字段,作为后一个服务请求的请求数据,但是提取的字段中不同Json的值都有对应关系,如列表中第一个Json中字段A的值,对应列表中的第一个Json中字段B的值,列表中第二个Json中字段A的值,对应列表中的第一个Json中字段B的值…,这样下一个服务请求的请求数据才能正确,可以使用JSR223前置处理器实现。

1、获取前一个服务请求需要用到的相关字段的所有值,然后都放到列表中
2、对于字段A,获取其当前取值,根据当前取值,获取其索引位置
3、通过索引,在另一个列表中获取其对应值,因为索引一样,和步骤2中的当前值存在对应关系


truckCustomerId = vars.get('truckCustomerIds_ALL')
truckCustomerIdList = truckCustomerId.split(',')   #将字段A的所有值放在列表ListA中

trSpStoreId = vars.get('trSpStoreIds_ALL')  #将字段B的所有值放在列表ListB中
trSpStoreIdList = trSpStoreId.split(',')

selectCustomerId=vars.get('customerId_item')  #获取当前字段A的取值
i=truckCustomerIdList.index(selectCustomerId)  #通过当前字段A的取值获取该值在列表ListA中的索引
selecttrSpStoreId=trSpStoreIdList[i]  #通过索引获取列表ListB中对应的值,因为索引一样,和ListA中的当前值存在对应关系
vars.put('trSpStoreId_item',selecttrSpStoreId)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值