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变量“maJMeter高阶系列--数据参数化及使用场景
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



