最近使用jmeter,csv数据进行接口验证。想着单线程实现使用loop controller遍历所有请求数据的时候发现了一个问题。明明request里面我引用了csv中的变量,但是他却一直没有变。通过log打印,发现也是没有变化的。

测试数据的csv文件

test0,test1,test2,test3,test4
0,1,2,3,4
1,2,3,4,5
2,3,4,5,6
3,4,5,6,7

写的JSR223 Sampler比较简单log.info("${test4}")

发现全部都是一个值以后,将结果树加上,发现其实变量是变的

但是为什么呢?后面我将log多打印了一行

log.info(vars.get("test4"))

可以发现vars.get的方法获取的值是对的。

翻找了一下官方api,只有简短的介绍,还是不知道有什么区别。

JMeterVariables (Apache JMeter dist API)https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html#get(java.lang.String)

由于最底层都是String,所以现在陷入了问题中。

后面我将loop controller删除掉,将线程调整到了N,发现两个对象打印一致了。

所以初步判断${变量名}在当前线程中,仅使用初始化的参数。但是使用vars.get(变量名)则可以动态获取变更后的数据。至此,所有脚本的中的${变量名}进行替换。

一些AI总结如下,对于vars.get方法,是API介绍中的方法。但是${变量名}方法使用的API是

CompoundVariable (Apache JMeter dist API)https://jmeter.apache.org/api/org/apache/jmeter/engine/util/CompoundVariable.html

意味着执行测试元素前,获取原始字符串内容,这样后续再变更,你这个变量还是初始化值。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐