Jmeter在一次线程里多次调用同一个拼接参数,不使用自带拼接函数
记录一下使用Jmeter在一次线程里需要多次调用同一个参数时的拼接方法
在对创建、编辑等接口使用Jmeter进行性能、稳定性测试时,需要造多个名称相同,编号不同的参数。
例如:productName参数,对应字段分别为testCreate001、testCreate002、testCreate003……
原先是使用用户参数+计数器组件,加上Jmeter自带的__V{}函数,像这样:
这种方法在我没有将productName的字段testCreate参数化的时候很好用 ,无论怎么调用,在运行一次线程productName对应的字段总是testCreate001、testCreate002这样。但后来为了测试更方便一些,我把productName做了参数化,放在了CSV文件里。此时我把用户参数里productName对应的字段修改成了${__V(${productName}${n})},使用时发现了一个问题:
如果一个线程里使用了多次productName参数,每次调用的名称都不一样,第一次的时候是testCreate001001,第二次就变成了testCreate001001001001,因为调用的次数多,甚至看到了testCreate001001001001001001001001001001001001001001
思考了一下,应该是每次使用参数的时候,__V函数都在起作用。我需要让这个参数在多次调用和循环的线程中显示正常,尝试用仅一次控制器,结果这个组件似乎对用户参数不起作用,输出的参数直接变成了testCreate,都没有拼接。
最后的解决办法:
既然__V函数这么不智能,只能自己来了。直接使用Beanshell代码进行拼接。在线程的最前面放一个Beanshell Sampler,然后写拼接代码:
String productName = vars.get("productName"); String n = vars.get("n"); String productName = productName + n; vars.put("productName",productName);
最后输出的参数都一致了,而且会跟着计数器的循环自增。