实操jmeter连数据库并使用数据库中的数据实现小批量并发
jmeter连数据库并使用数据库中的数据实现小批量并发
复盘一下周五遇到的问题,用jmeter的jdbc请求连接数据,并记录一下jmeter实现并发。
jmeter连接数据库
1、在jmeter中创建线程组,这里不详细说明
2、在该线程组下面,添加jdbc连接配置的配置元件
备注:
database url:jdbc:mysql://127.0.0.1/tinyshop?serverTimezone=UTC
jdbc driver class:com.mysql.jdbc.Driver
3、添加jdbc请求
备注:
sql语句:select name,password from tiny_user
到这里,我们就使用jmeter连接数据库,取到了tiny_user表中的name,password字段的所有数据,下面我们继续使用jmeter使用从数据库中取到的数据,进行登录接口的并发。
4、我这里最终实现的jmeter脚本结构如下:
先介绍一下,我这里登录接口并发的背景,我这里登录接口涉及到两个,第一个要先获取登录的token,第二使用该token登录相应的账号。所以在jmeter中,我们需要添加一个cookie manager(cookie管理器来保持会话不断开)。
再分析一下我们的场景,假设我们这里做10个用户登录的小并发,那么我们就要从数据库中取10个账号和密码,在下面的登录接口对这些账号进行引用。
怎样可以引用到这10个账号呢?可想而知,我们可以在里面添加一个循环控制器,在我们的取出的10个数据中去循环引用,但是需要考虑到的是我们每次循环的时候,我们最终引用到的变量名是类似于${name_N},这里的N又是不同的,所以我们还需要使用到jmeter中的嵌套函数:__V(有点抽象,可以看下面的图理解)
线程组设置:
请求默认值配置元件详细设置:
cookie管理器配置元件只需要添加,不需要配置参数
这个是上面说过的jdbc连接配置:
jdbc请求详细设置,这里取10条账户数据做并发,所以在sql语句上加了limit 10:
获取登录token接口:
为了方便理解循环控制器,我这里又加了一个debug sampler(调式取样器),想看到前面取到的变量,可以在调试取样器中看到,如下:
可以看到从数据库中取到的10个name值,jmeter中自动命名成了name_N的形式,并且我们可以看到 name_# 就是我们取到的name值的个数
所以我们的循环控制器的详细设置如下:
循环控制器下面还有一个计数器,因为是嵌套调用,这里需要一个计数器:
登录接口中参数的嵌套调用:
同步定时器(集合点)详细设置:
(同步定时器设置的是10个请求同步,所以前面的线程数为10,只要大于等于10的都可以)
执行该脚本,在以表查看结果中我们就可以看到,10个登录请求的时间是一样的,这里就实现了10个登录请求的并发
好了,到这里就在jmeter中实现了从数据库中获取数据,并且,使用该数据来实现并发的操作!
备注:可以在最后添加一个aggregate report聚合报告