jmeter连接数据库
压测过程中使用jmeter连接数据库的场景:1、本身需要对数据库进行性能压测,需要jmeter连到数据库;2、接口用例中的传参进行了参数化设计,而参数的值需要从数据库中取,测试后的结果需要和数据库中的数据进行对比,判断是否一致。连接步骤如下。
压测过程中使用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 = "我是断言失败的信息";
}
更多推荐
所有评论(0)