Jmeter使用jdbc的场景:
1、接口功能测试时,需要查询验证码
2、通过数据库查询已经注册的手机号码
3、性能测试时,直接对某个SQL做性能测试,快速的发现性能问题
添加一个jdbc的配置元件
配置jdbc连接信息
配置说明:
1)variable name:jdbc创建的连接池的名称,这里测试的是MySQL,所以设置为MySQL,这里一定要注意与jdbc request中的variable name保持一致
2)max number of connection:jdbc连接池的最大连接数,如果该值设置为0,则表示线程之间不使用共享线程池,如果要使用共享线程池,则确保该值大于等于最大线程数
3) Max Wait (ms):在连接池中取回连接的最大等待时间,如果超过该时间,将抛出一个错误;
4) Time Between Eviction Runs (ms):数据库空闲连接的回收时间间隔。回收时,会将将空闲连接物理性的关闭掉。若为非正数,则空闲连接回收器不停运行;
5) Auto Commit:自动提交。有三个选项,true、false、编辑(自己通过jmeter变量值设置)。选择true后, 每条sql语句就是一个事务,执行结束后会自动提交;否则不会提交,需要自己手动提交;
6) Transaction Isolation:数据库事务隔离的级别设置,有6个选项(对JMX加解密):TRANSACTION_NODE:事务节点;TRANSACTION_READ_UNCOMMITTED:事务未提交读;TRANSACTION_READ_COMMITTED:事务已提交读; TRANSACTION_SERIALIZABLE:事务序列化;DEFAULT:默认;TRANSACTION_REPEATABLE_READ:事务重复读;编辑。
Connection Validation by Pool,连接池有效性验证配置部分:这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效,一般使用默认就可以。
1) Test While Idle:是否在空闲时进行连接有效性验证。Validation Quary被用来验证连接的有效性;
2) Soft Min Evictable Idle Time(ms):数据库连接池中的连接至少闲置多久才能被回收。额外的条件是,在连接池中至要保留有minIdle个连接
3) Validation Query:一个验证数据库仍然响应的简单查询语句。默认是JDBC驱动的 ‘isValid()’ 方法,它适合于很多数据库。可以通过jmeter.properties中jdbc.config.check.query属性设置默认的验证sql语句,有10个选项:Hsqldb select 1 from INFORMATION_SCHEMA.SYSTEM_USERS;Oracle select 1 from dual;DB2 select 1 from sysibm.sysdummy1;MySQL select 1;Microsoft SQL Server (MS JDBC driver) select 1;PostgreSQL select 1;Ingres select 1;Derby values 1;H2 select 1;Firebird select 1 from rdb$database。
Database Connection Configuration,数据库连接配置部分。
1) Database URL: 数据库的连接字符串;
2) JDBC Driver class:驱动程序类的完全限定名;
3) Username:连接数据库的合法用户名;
4) Password:用户对应的口令
JMeter测试数据库驱动名以及对应的URL
JMeter测试数据库对应的jar文件
创建MySQL数据库测试
数据库执行查询操作—单个sql查询
Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query type:select statement
SELECT * from cb_account WHERE mobile = '15900000000'
数据库执行查询操作—多个sql查询
需要在database URL加上: allowMultiQueries=true
Query type:callable statement
SELECT * from cb_account WHERE mobile = '15900000000';
SELECT * from cb_account WHERE mobile = '15398879230';
对数据进行新增query type:update statement
insert into cb_cars(car_num,user_id,is_delete,color) VALUES ('粤112112',101,0,2);
对数据进行删除操作:
DELETE FROM cb_cars WHERE id = '101'
Request参数化
方法一:定义变量,进行引用
方法二:在sql query中使用“?”作为占位符,并传递参数值和参数类型,如下图所示:
parameter values:${mobile}
parameter types:varchar
从csv文件中获取参数值
query Type:Prepared Select Statement
sql:SELECT * from cb_account WHERE mobile = ${mobile};
Parameter values:${__CSVRead(sql参数化.csv,0)}
Parameter types:varchar
当有多个时用“逗号”隔开
用正则表达式获取sql语句的字段信息
sql语句:SELECT CONCAT('"mobile_num":',mobile,'') FROM cb_account WHERE password = 'e10adc3949ba59abbe56e057f20f883e' ORDER BY id desc limit 1
正则表达式:
"mobile_num":(\d.+)