JMeter高阶系列--数据参数化及使用场景
1 概述
1.1 导语
在测试过程中,我们常常会遇到各种问题。
问题1
测试环境A能正常运行JMeter脚本,拿到其他环境,由于基础数据不兼容导致运行失败。
问题2
对数据进行操作时,如果写死数据,由于数据状态的变化,导致请求无法发送成功,业务逻辑没有正确的得到验证。
问题3
我们在批量操作时,数据量比较大,直接放在请求入参里,脚本显得臃肿,可读性差。
以上问题均可通过动态参数化来解决。
1.2 参数化类型
在JMeter中主要的动态参数化有以下几种方式:
beanshell脚本;
JDBC协议获取数据;
Jmeter自带函数;
正则表达式。
而常常将用户定义的变量、”CSV Data Set Config”、用户参数等定义为静态数据参数化,因为数据需要人为更改,才会变化。
本文承接文章 Jmeter高阶系列—使用JDBC协议获取数据(该文已讲解如何通过JDBC协议从数据库获取到数据,成为Jmeter数组变量),介绍如何对通过JDBC协议获取到的数据数组进行参数化及引用,满足我们日常复杂业务使用场景。
2 使用场景
2.1 使用场景一:随机取值
数组的使用方法之一,随机从数组中取某一个值。
以苍穹供应商为实例,从供应商列表获取fid形成数据池(数组),随机取值。可做提交、审核、反审核、撤销等操作的单条数据请求入参(多用于接口功能自动化)。
另外,造大单据可以通过随机关联基础数据的number或者id,从而让大单据关联的基础数据成均匀分配(多用于造数,性能测试等)。
1)目标
随机取SQL结果集中的一个值作为请求入参。如下图所示:
2)编写beanshell脚本
添加beanshell Sampler,编写beanshell脚本,实现随机取值:
vars.put("materialFidQa",vars.get("materialFidQ1_${__Random(1,${materialFidQ1_#},)}"));
其中${__Random(1,${materialFidQ1_#},)}materialFidQ1_#为数组的长度,该变量值可在Debug Sampler中查看,Random随机函数为Jmeter自带的函数。
3)设置全局变量
如果是跨线程组使用,需将变量设置为全局变量:
${__setProperty(materialFidQb,${materialFidQa},)}
4)引用变量
请求入参引用变量,全局变量可通过:${__property(materialFidQb,)}引用。
5) 查看响应
在查看结果树中,检查请求结果。
从结果中可看出,供应商的单个提交、撤销均成功从fid数据池(数组)中随机获取id,并请求成功。
响应结果
2.2 使用场景二:转换成Json数组
1)目标
将从数据库中得到的数据转换成Json数组。
使用场景:比如批量对供应商的数据进行提交、审核、反审核等操作(性能测试、造数、接口功能,测批量场景时使用)。
批量操作的入参根据接口的定义,为Json数组。如下图所示:
2)编写BeanShell脚本
编写beanshell脚本,如图中所示,此处需要编写生成Json数组的方法,形参为生成的Json数组的长度len以及变量前缀(上文中,从数据库提取数据池的变量前缀为materialFidQ1_,可在debugsampler中查看)。
结合实例,调用脚本:
//String materialFidQa=strList("materialFidQ1_",1000).toString();
//表示将前缀为”materialFidQ1_”下标为1到1000的数据转换成Json串
//vars.put("materialFidQa",materialFidQa);
//将得到的Json串--“materialFidQa”转成Jmeter变量“materialFidQa”
也可写成一步调用:
vars.put("materialFidQa",strList("materialFidQ1_",10000).toString())
3)设置全局变量
跨线程组调用,可将其设置为全局变量,如在同一个线程组,该步骤可以省略。
4)引用变量
请求入参引用变量,全局变量可通过“${__property(materialFidQb,)}”引用。
非全局变量直接通过“${ materialFidQb}”引用。
5)查看响应
查看请求。
2.3 使用场景三:结合foreach控制器使用
如果没有特殊设置,foreach控制器会依次执行完变量池(数组)中的每一个值,进行循环遍历。
比如此文实例,从数据库中取出的1999条fid组成的数组(前缀为materialFidQ1),foreach会遍历执行1999次请求(可以用于循环遍历发送请求)。
1)目标
从数据库中取出数据,通过foreach控制器,遍历数组中的每一个值,发出请求。
2)添加foreach控制器
添加foreach控制器,并进行配置。如下图所示:
配置内容。填写输入变量的前缀(Input variable prefix),下标的起始值,以及输出变量,如下图所示:
3)引用变量
在请求中,引用forEach的输出变量:materialFidQb。
4)查看响应
在查看结果树中,Foreach控制器将依次取值执行1999个请求,每个请求的入参按顺序取完1999个id。
2.4 使用场景四:结合循环器和counter计数器使用
1)目标
目标:通过循环器加conter计数器的结合使用,请求可以循环依次取数据池中的参数。
效果同foreach控制器,但是foreach控制器默认是数据池(前缀相同,使用下标标记成员,类似数组)中的所有值遍历,循环控制器可以控制循环的次数以及下标的范围,比foreach灵活。
2)添加循环控制器
添加循环可控制器。
设置循环次数。
3)添加计数器
操作方式如下:
4)引用变量
请求入参引用变量,{"ids":["${__V(materialFidQ1_${index})}"]}
其中,index是计数器输出的计数值变量。
5)查看响应
执行循环控制器下设置的次数,每个请求根据计数的范围循环取值。
比如计数器的范围为1-10,循环次数为30,那请求依次取materialFidQ_1…到materialFidQ1_10后,再从materialFidQ_1…到materialFidQ1_10,循环下去,直到结束。
JMeter高阶系列--数据参数化及使用场景
本文2024-09-23 01:12:18发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144443.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf