jmeter_参数化登录业务流(读数据库)

我们拿登录举例来说,测试思路大约是这样的

1、为了不污染原有数据库数据,且找一种比较容易控制的方式,我们可以往数据库中造一批测试数据

2、执行完测试以后,为了将数据库恢复成原来的样子,我们要在测试完毕后,将造的数据全部删除

方法一:

一、设计思路如下

1、setup线程组

      (1) 查看之前是否有之前造的数据,如果有先删除(因为压力测试总会返复执行,重复插入同样的用户名密码,数据库会报错)

       (2)向数据库中插入数据(要用到mysql的一些组件,计数器,循环控制器)

  2、业务线程组

            发送登录请求,用户名参数化

3、teardown线程组

             将自己造的数据从数据库中删除

三、首先说笔者遇到的一些问题和解决问题的方式

1、问题一:怎样造数据

      原本想用户名和密码都造数据,但登录接口一般只用户名不重复,密码无所谓,所以造数据只考虑用户名就好,密码统一用123456都无所谓

2、问题二:原本思路是在teardown线程组中造完数据后,直接从数据库里读数据,将读出来的结果跨线程组的方式传给业务线程组

      试了几次,用jp@gc - Inter-Thread Communication PreProcessor的方式确实取到了值,但取值了以后,数组变成了字符串,所以参数化的时候比较困难

     所以想了个方式,自己造的数据,当然知道自己的数据是啥,也知道自己造了多少个数据,比如说用户名son_1,son_2,son_3,son_4,则参数化用户名时的字符串“son_(1-4的随机数),这样就好了,也算是曲线救国,所以这也要求了计数器的“数字格式”要写成0,如果是0000,那后面的随机数很难控制

以上问题虽然不是高大上的解决方式,但确实解决了实际问题,之前在学loadrunner的时候想起了老师说的一句话,工作的时候,你是自己写lr脚本呢,还是录制呢,给出的结论是能录就录,录完改改,不行再写,工作嘛,合理就行,何必难为自己,想想还是有用的

四、解决了以上问题,我们就开始吧

1、连接数据库

(1)下载对应数据库的jdbc驱动jar包

下载地址:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.44.zip

文件名:mysql-connector-java-5.1.44.zip

下载任意目录下并解压

(2)jmeter导入对应数据库的jdbc驱动jar包

  将解压后的文件mysql-connector-java-5.1.44-bin.jar拷贝到jmeter/lib目录下

(3)在配置原键中选择 “JDBC Connection Configuration”

database URL的格式是:jdbc:mysql://host:port/datbase_name

2、造用户名数据,用户名不能重复,这次我们可以用到配置原件中的计数器

starting value:给定计数器的起始值、初始值 

递增:每次迭代后,给计数器增加的值

Maximum value:计数器的最大值,比如你想造100个数据,这就可以写100

Number format:可选格式,比如000,格式化为001,002;因为上面说了参数化时要产生随机数,所以这个格式要与随机出来的数一致,因此这里我填了0,这样产生的数就会是1,2,3,4,5

引用名称:存储数值的变量,调用形式:${index}

与每用户独立的跟踪计数器():全局的计数器,如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值还是为1;

如果勾选,即独立的,则每个用户有自己的值:比如用户#1 获取值为1,用户#2获取值为2。

Reset counter on each Thread Group Iteration:可选,仅勾选与每用户独立的跟踪计数器时可用;

如果勾选,则每次线程组迭代,都会重置计数器的值,当线程组是在一个循环控制器内时比较有用。

3、灌数据

添加一个取样器-》jdbc request  这里可以写select语句,完成对数据库的一些增删改查的操作

"son_${index}": son是用户名的前缀,因为是自己造的数据,为了别跟数据库中其他数据混了,最好启的特殊一点,${index}就是计数器产生的值,所以生成的数据会是son_1  son2   son3

4、在setup里对上面的流程进行组装

我只用了一个线程去跑

首先删除之前的一些垃圾数据

然后加上循环控制器,迭代十次,向数据库中查入十条数据

插入的数据

 这样setup的业务就完成了

5、业务流线程组

按上面的思路,我已经往数据库里插入了用户名,而且我知道了我插入了10个,所以我可以随机用我插入的用户名进行登录

用户名是 son_(1到10的随机数)

生成随机数

 所以用户名的表达式是:son_${__Random(1,10,)}

测试结果如下

6、teardown 清除自己造的数据

总结:遇到问题别死磕,其实换个思路,也能很好的解决问题,但努力解决问题的过程是要有的,毕竟能学到很多新的知识


方法二:

上面的setup线程组所有内容一致

1、在业务线程组中:从数据库中将用户名读出来。放到变量里,为了减少数据库的开销。每个线程只读一次,因此将他放到“仅一次控制器”中

读出来的结果

2、此时可以用foreach迭代器

这里引用变量

与之前的效果一致

 个人觉得方法一更真实,因为用户登录就是随机的,这个相当于每个线程都会把用户登录一次,流程上也可以,也是完成了对登录的接口压力测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值