项目场景:
在使用Jmeter测试接口时,有20多组变量需要引入,使用csv的话能够快速解决问题,考虑到后期维护会多出csv文件,不方便管理。于是使用现有的函数进行处理
描述
此处模拟需求数据
接口需要传入三个动态参数,“星期”,“活动”,“三餐”,通过csv文件管理如下,实际数据比模拟数据多
因为会多出一个文件并且jmeter还需配置文件路径,个人认为加大了保存和维护成本。所以准备弃用。
解决方案:
Jmeter提供了现有的函数,并且相关学习文档较多,使用起来容易,学习成本低。这里我将几个函数进行了组合,实现了类似CSV效果,大家可以参考。
使用如下方法加函数:
【Jmeter循环控制器,计数器,__V拼接变量,__split字符串切割】
1、首先循环控制器记录变量个数,因为要执行这么多次
2、计数器,记录循环到多少次,后续需要引用计数器定义变量。相当于定义一个索引
3、__V,是通过固定变量名 + 计数器索引来锁定实际调用变量。如:var1,var2…varn。直接通过
${__V(var${num})}
可以锁定执行变量
4、__split,将一组变量写在一个jmeter中,通过“@”符号隔开,利用__split函数分割,最终抓取结果
${__split(${__V(var${num})}, newVar, @)}
,分割后的结果会重新保存在newVar变量中。
此处有个问题:该函数需要放入前置处理器:BeanShell PreProcessor中调用一次,不然取样器拿不到。我也不明白咋回事!!!
实际使用效果可以参考,这里不过多展示、
1、整体结构树:
2、定义变量,变量结构类似csv,这里的@可以随便定义,我只是为了查看方便。
3、因为我有5个变量,这边循环5次
4、记录索引,初始值1,每次加1。索引:num
5、重点在与函数结合:
`${__split(${__V(var${num})}, newVar, @)}`;
${__V(var${num})} 提取出用户自定义变量 ,并将变量重新赋值给newVar。类似如下:
newVar = var1 = “星期一@上班@Object:{"早餐":"白兰","中餐":"白兰","晚餐":"白兰"}”
通过__split分割变量,按照@分割
分割结果类似这样,实际不是。仅供参考和理解:
newVar = [星期一, 上班, Object:{"早餐":"白兰","中餐":"白兰","晚餐":"白兰"}]
当我们需要使用分割后变量可以通过 newVar_N 来获取
newVar_1 = 星期一;
newVar_2 = 上班;
newVar_3 = Object:{"早餐":"白兰","中餐":"白兰","晚餐":"白兰"}];
6、需要提前放前置处理器调用一下,应该还有其他方法,我觉得这个好用点。
7、实际调用结果如下:
记录一个sql,用来从数据库拉取数据快速导入Jmeter变量中
SELECT
@id := @id + 1 AS id,
concat( "var", @id ),
CONCAT( 字段, "@", 字段, "@", 字段 )
FROM
TABLE,
( SELECT @id := 0 ) r;
版权归原作者 警漳 所有, 如有侵权,请联系我们删除。