JMeter使用实践之造数据

做测试时不可避免会遇到一个场景就是造数据。造数据的途径也比较多,比如:

  1. 有界面操作的而且链路畅通的,可以使用软件操作生成数据。
  2. 没有界面的但是有接口的,可以调用接口生成数据。
  3. 有数据库存储的可以直接用SQL脚本在表里插入需要的数据。
  4. 也可以通过代码脚本调用接口或者连接数据库生成批量数据。

在我造数据的经验中还可以借用JMeter造数据——JMeter既可以批量发送http相关请求又可以连接数据库进行操作,而且代码化比较简单,学习成本低且快。

  实例:我在某个项目中需要41条数据来测试批量开发票的场景,而能开发票的数据如果从初始创建到能开发票的场景需要经过多步状态流转:创建订单受理—派单—待支付—支付—已支付—完成。这中间会涉及多个接口,多张表的数据,两个系统间状态流转:A系统创建订单—B系统改变订单状态—。。。(A与B系统间状态多次流转)—A系统记录最终状态,在A系统里开发票。虽然相关的操作平台软件和接口都支持这个链路,但是按照方法1或者2的话,这个操作链路很长,而且批量数据会耗费比较多的时间。仔细看了几个表的关系,发现这个场景涉及多张表,但是最后判断能否开票的状态是从某一个表里获取的,所以可以考虑采用方法3,但是最初创建数据时关联多张表,还是需要多个表联动更新,而且每条数据的一些key是不同的、唯一的,如果采用直接插入原始数据,就需要在SQL脚本中写入变量。也可以采用方法4调用接口创建最初订单,然后连接数据库去改某张表里的数据。不过考虑到方法4的成本和方法3的数据假性—造成每个表中假数据,刚好正在学习JMeter做压测,就选择了使用JMeter来造数据。

使用JMeter的环境之类的这里就不赘述,直接说造数据的实践过程吧。

第一步:新建一个线程组,在线程组里设置好请求次数(根据需要多少条数据),我们要生成41条数据,有三种方法:第一种是设置41个线程运行一次;第二种是设置一个线程循环41次;第三种是可以设置4个线程循环11次,总之线程数*循环数>=需要的数据条数。在这里其他设置可以默认。

第二步:按照按部就班的步骤的话,应该在线程组下面添加发送接口的”HTTP Request”样例了,但是考虑到业务的需求场景:开发票的订单是有不同主体的,我们这里有两个大类别X、Y,同时大类别下也可以有多个具体主体,也就是意味着生成订单的接口中body是不同值的。在这种情况下有多种方式实现生成的订单类别不一样,我实践的有两种方式:

第1种:我在线程组下面又添加了两个事务控制器X、Y,然后在事务控制器下面再去添加”HTTP Request”,如X-1去创建订单,这时X/Y下面的request的body可以不同且可采用某个固定值了。

 

第2种:在线程组下面直接添加”HTTP Request”去创建订单,但是request的body里值需要是变量,这个变量可从其他地方获取,比如变量有多个赋值时可以从文件里获取,那么就需要在线程组下面在添加一个配置元素—CSV Data Set Config了,在这个配置里可以从本地读取一个csv文件,然后把值赋予某个或者某些变量,最后给request的body里变量使用。

在第二步添加HTTP Request中——其实就是发送API接口,我们可以统一配置相关的一些数据,比如Header里的一些token、Content-Type、host之类的,给线程组下面的所有HTTP Request使用。

前面说到了,我们调用接口创建订单后,找到决定性的表去修改订单的状态和其他相关影响开票的字段就可以了,那么我们要去找这些数据,通过真实生成的订单号去找就行,而这些订单号又在发送的HTTP Request返回的response里,所以我们需要把这个订单号从response里取出来,在SQL里使用。

第三步:获取response里的值,留给其他request使用。获取response里的值,因为response是json结构的,所以我们在之前的HTTP Request下添加Post Processors—JSON Extractor就可以,在这个extractor里按照json结构形式提取值并赋予给某个变量就可以了。

第四步:连接数据库表修改数据。在HTTP Request同位置处添加JDBC Request。这个request用来编写SQL脚本修改我们需要的数据表。因为这个只负责脚本编写,所以需要一个JDBC连接配置:在线程组下面添加一个配置元素—JDBC Connection Configuration,在这个Configuration里我们配置连接数据库就行,要注意的一点就是这里的变量取名需要和JDBC Request里一致。

第五步:运行JMeter脚本。经过上面四步,我们造数据的步骤和脚本就完成了,最后就是运行脚本验证脚本是否可行,是否可生成自己想要的数据。在JMeter中点击运行脚本前,我们可以给这个线程组加一个监听器View Results Tree,用来观察我们相关request是否运行成功。

经过上面五步,我们批量开发票的订单数据就造成功了。而且这个脚本也可以反复利用,在HTTP Header Manager里我们配置了token(标识某个用户),我们可以修改token值来换用户;在HTTP Request Defaults里我们配置了环境,我们也可以修改Sever Name值来造不同环境的数据。

最后这个脚本就是下面这个结构。

第一种方式的:采用事务控制器来区分了不同类别。

第二种方式的:采用赋予变量值来改变body里的值。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjhluxun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值