【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!

Jmeter使用jdbc的场景:

     1、接口功能测试时,需要查询验证码

     2、通过数据库查询已经注册的手机号码

     3、性能测试时,直接对某个SQL做性能测试,快速的发现性能问题

添加一个jdbc的配置元件

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第1张图片

配置jdbc连接信息

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第2张图片

配置说明:

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:事务重复读;编辑。

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第3张图片

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 JDBC脚本实战,让你的性能测试更高效!_第4张图片

JMeter测试数据库对应的jar文件

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第5张图片

创建MySQL数据库测试

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第6张图片

数据库执行查询操作—单个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参数化

方法一:定义变量,进行引用

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第7张图片

方法二:在sql query中使用“?”作为占位符,并传递参数值和参数类型,如下图所示:

parameter values:${mobile}

parameter types:varchar

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第8张图片

从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.+)

【揭秘】JMeter JDBC脚本实战,让你的性能测试更高效!_第9张图片

你可能感兴趣的:(Jmeter接口自动化测试,jmeter,oracle,数据库)