压测过程中使用jmeter连接数据库的场景:
1、本身需要对数据库进行性能压测,需要jmeter连到数据库;
2、接口用例中的传参进行了参数化设计,而参数的值需要从数据库中取,测试后的结果需要和数据库中的数据进行对比,判断是否一致。
连接步骤如下。

1、下载数据库驱动并导入

1-1、下载数据库驱动

首先确认自己mysql版本,主流的是5.0和8.0,我本地是8.0版本。
在这里插入图片描述
mysql驱动下载官网:https://dev.mysql.com/downloads/connector/j/

在这里插入图片描述
下载解压后将jar包放到jmeter安装目录下
在这里插入图片描述

1-2、测试计划导入数据库驱动jar包

在这里插入图片描述

2、配置JDBC Connection Configuration

线程组-添加-配置元件-JDBC Connection Configuration,一般放在线程组的最上面。
在这里插入图片描述
配置
在这里插入图片描述

1、名称:默认为空,可自定义名称,也可为空

2、注释:默认为空,可自定义,也可为空

3、Variable Name for created pool:连接名称随意,需要唯一标识,后面的JDBC请求中需要用到,所以需要与JDBC取样器中的名称一致,简单理解就是jdbc request的时候需要确定去请求哪个数据库。

4、Max Number of Connections:连接池中允许的最大数据库连接数,默认10,做性能测试时,建议填 0

5、Max Wait(ms) :在连接池中取回连接最大等待时间,单位毫秒,默认10000,默认即可

6、Time Between Eviction Runs(ms):线程可空闲时间,单位毫秒,默认60000,默认即可
7、Auto Commit:自动提交sql语句,有三个选项:True、False、编辑(JMeter提供的函数设置),默认为true ,默认即可

8、Transaction Isolation:事务隔离级别,默认为DEFAULT,默认即可

9、Test While Idle: 当连接空闲时是否断开,默认为True,默认即可

10、Soft Min Evictable Idle Time(ms):连接池中连接的最小空闲时间,以毫秒为单位。当连接池中的连接处于空闲状态且超过了 “Soft Min Evictable Idle Time” 的设定值时,连接池可能会选择回收这些空闲连接,默认为5000,默认即可

11、Validation Query:验证sql语法,默认为select1,默认即可

12、Database URL:数据库连接 URL,可以带上字符集characterEncoding=utf-8,也可允许多条sql执行allowMultiQueries=true,还可指定时区serverTimezone=UTC,比如jdbc:mysql://10.0.41.104:33066/u_backend?serverTimezone=UTC&characterEncoding=utf-8&allowMultiQueries=true

13、JDBC Driver class:JDBC的类,默认为空,必填项,mysql就选择com.mysql.jdbc.Driver

14、Username:数据库的用户名

15、Password:数据库的密码

3、发送数据库请求

线程组-添加-取样器-JDBC Request,建议放在上面,只有发送了数据库连接请求,下面的请求才可以用。
在这里插入图片描述
在这里插入图片描述

名称:随意命名

Variable Name of Pool declared in JDBC Connection Configuration:要与JDBC Connection Configuration中的Variable Name for created pool值保持一致!!!(重点!!!)

Query Type:【查询】操作选择Select Statement,【增删改】操作选择Update Statement

SQL Qurry:输入对应的sql语句

Variable names:对应sql查询结果的字段值, 字段值有多少个,则对应值就有多少个。例如sql查有两个字段值:username,password,那么下面就对应两个变量resusername,respassword。username对应变量resusername,password对应变量respassword。

Handle ResultSet:默认为Store as String,选择默认值即可, 当选择此选项时,查询结果将以字符串的形式存储在变量中

4、引用数据库查询变量

在这里插入图片描述
在这里插入图片描述
我本地数据库表中有username,和password两列,总共有两行数据,JDBC Request中Variable names就要设置两个变量,可以在线程组下添加debug调试取样器查看每个变量值怎么取的。

引用变量的方式是:变量名_数字。
例如:resusername_1表示第一行的resusername变量值。resusername_#表示resusername返回了几行。

4-1、参数引用

在这里插入图片描述
比如登录接口用户名和密码是user_table表中第一行的用户名密码,那么可以将参数的admin改为${resusername_1},123改为${respassword_1}
在这里插入图片描述
测试登录成功,参数引用成功。

4.2断言引用

1、响应断言引用
比如接口响应中返回用户名,那么在断言中输入${resusername_1}
在这里插入图片描述
2、JSON断言引用
比如接口响应中返回了用户名,那么在断言中输入${resusername_1}
在这里插入图片描述3、beanshell断言应用
首先区分下JDBC request中Variable names和Result variable name变量。
在这里插入图片描述
在这里插入图片描述
可以看出是有区别的,所以beanshell脚本根据不同的设置编写

//定义一个字符串one_username
//获取数据库表中resusername变量值的第一行的数据
String one_username = vars.getObject("result").get(0).get("username");
log.info("result Variable names的结果"+one_username);
String one_username1 = vars.getObject("resusername_1");
log.info("Variable names的结果"+one_username1);
//获取上一个接口的返回值,保存为一个字符串,prev
String res = prev.getResponseDataAsString();
log.info(res);
//断言:从数据库中取得数据和返回的值对比
//判断如果接口返回值包含数据库的返回值,表示断言成功
if(res.contains(one_username)){
	log.info("断言成功");
	Failure = false;
	
}else{
	log.info("断言失败");
	Failure = true;
	FailureMessage = "我是断言失败的信息";
}

在这里插入图片描述
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐