Jmeter循环指定接口并接收不同参数值
背景:在做接口自动化流程中我们会遇到需要提取上个接口的返回值作为下个接口的传参,在提取值数量不固定的情况下,如何在一个线程让指定接收参数的接口自动循环完所有的传参呢?
解决:添加【循环控制器】指定循环次数,并使用__V函数和__counter计数器函数组合传参即可在【循环控制器】循环完所有的参数。如${__V(name_${__counter(1,)},)}循环3次相当于分别传入${name_1}、${name_2}、${name_3}
接下来我们以下面例子展述,已知:
- 一次自动化盘点流程需要用到7个接口
- 其中第4个接口的请求值需要从第3个接口的返回值里提取。第3个接口提取值数量不固定,第4个接口需要依次循环提取的每个参数值
- 也就是这个线程里第1、2、3、5、6、7接口只需跑一次,而第4个接口根据第3个接口提取n个值而跑n次且每次传值为当前提取值
做法
1、首先我们先处理第3个接口,我提前已经使用json提取器将需要用到的值获取出来了。可看出当前一共获取到3组数据,分别是productCode_1和stockQty_1、productCode_2和stockQty_2、productCode_3和stockQty_3
2、接下来我们需要将这3组数据分别传给第4个接口
- 先添加一个循环控制器,循环次数=${productCode_matchNr}(即获取到几组数据)
- ▲重点是第4个接口,需要接收3组数据。我的实现方法是使用__V函数和__counter函数来完成
- ${__counter(1,)} 在循环控制器3次后分别=1、2、3
- ${__V(productCode_${__counter(1,)},)} 循环3次相当于分别传入${productCode_1}、${productCode_2}、${productCode_3}。另外一个参数stockQty同理传入${__V(stockQty_${__counter(1,)},)}
3、上面设置完后,执行整个线程查看运行结果。我们看到第1、2、3、5、6、7个接口只跑了一次,而第4个接口跑了3次且参数均不一致如下
取第4个接口第3次循环的数据进行验证,循环结果正确
- ${__counter(1,)} =3
- ${__V(stockQty_${__counter(1,)},)} =stockQty_3=20.0
- ${__BeanShell(${__V(stockQty_${__counter(1,)},)}+${__counter(1,)},)} =${__BeanShell(20.0+${__counter(1,)},)}=${__BeanShell(20.0+3,)}=23.0
- ${__V(productCode_${__counter(1,)},)} =productCode_3=8
至此我们已实现开篇我们想要的循环指定接口并接收不同参数值的效果