jmeter JDBC Request
*************
JDBC 请求
jdbc连接配置:引入模板JDBCLoad Test,设置配置参数
连接配置参数说明:
# Variable Name Bound to Pool
Variable Name for created pool:连接池名称,供jdbc request引用,如果有多个需确保该值唯一
# Connection Pool Configuration:连接池配置
max number of connections:最大连接数
max wait(ms):最长等待时间,单位为毫秒
time between eviction runs(ms):每个指定时间回收一次空闲连接,单位为毫秒
auto commit:自动提交,默认true
transaction isolation:事务隔离级别,默认deafult
preinit pool:是否预先初始化线程池,默认false
init sql statements seperated by new line:首次建立连接时执行的sql语句,可为多行,每行一条
# Connection Validation By Pool:连接验证
test while idle:测试空闲连接是否回收
soft min evictable idle time(ms):连接最小空闲时间,超过该时间连接回收,单位为毫秒
validation query:验证数据库是否正常工作
# Database Connection Configuration:数据库连接配置
database url:数据库连接url
jdbc driver class:数据库连接驱动,需导入对应的jar包到%JMETER_HOME%/lib目录中
username:用户名
password:密码
connection properties:连接属性
JDBC 请求取样器
相关参数说明:
# Variable Name Bound to Pool:绑定线程池
Variable Name of Pool declared in JDBC Connection Configuration:在JDBC连接配置中定义的线程池名称
# sql query
query type:查询类型,可选值如下
select statement:查询语句
update statemnt:更新语句(update、insert、delete)
callable statement:调用存储过程,存储过程预先在数据库中定义,支持占位符(?)、${...}
prepared select statement:预编译查询语句,可使用占位符(?)
prepared update statement:预编译更新语句,可使用占位符(?)
commit:提交sql语句
rollback:回滚sql语句
autoCommit(false):取消自动提交,如果连接配置中设置autoCommit为true,该配置会覆盖改为false
sql:需要执行的sql语句
parameter values:参数值,预编译语句占位符使用
parameter types:参数类型,与parameter values对应,说明对应字段存储类型
variable names:数据集,每个name对应一个列,为数组,
如a,b ==> 第一列的第一个元素a_1、第一列第二个元素a_2 ...
第二列的第一个元素b_1、第二列第二个元素b_2 ...
result variable name:存储所有查询结果(json字符串)
query timeout(s):查询超时时间,单位为秒
limit resultset:限制返回的结果集的行数
handle resultset:任何处理结果集,可选值:store as string、store as object、count resords
*************
示例
连接配置
数据库:lihu
数据库表:person
mysql> select * from person;
+----+---------------+-----+
| id | name | age |
+----+---------------+-----+
| 1 | 瓜田李下 | 20 |
| 2 | 海贼王 | 21 |
| 3 | 瓜田李下2 | 20 |
| 4 | 海贼王2 | 21 |
| 5 | 瓜田李下 | 20 |
| 6 | 火影忍者 | 22 |
| 8 | 瓜田李下4 | 24 |
+----+---------------+-----+
7 rows in set (0.00 sec)
***********
select、update语句
JDBC Request:查询所有数据
JDBC Request 2:插入数据
JDBC Request 3:查询所有数据
JDBC Request 4:删除插入的数据
JDBC Request 5:查询所有数据
查看结果树:数据查询、插入、删除执行成功
***********
预编译语句
JDBC Request:预编译查询语句
JDBC Request 2:预编译更新语句
查看结果树
预编译更新语句执行前后查询数据库
mysql> select * from person;
+----+---------------+-----+
| id | name | age |
+----+---------------+-----+
| 1 | 瓜田李下 | 20 |
| 2 | 海贼王 | 21 |
| 3 | 瓜田李下2 | 20 |
| 4 | 海贼王2 | 21 |
| 5 | 瓜田李下 | 20 |
| 6 | 火影忍者 | 22 |
| 8 | 瓜田李下4 | 24 |
| 12 | 瓜田李下2 | 20 |
+----+---------------+-----+
8 rows in set (0.00 sec)
mysql> select * from person;
+----+---------------+-----+
| id | name | age |
+----+---------------+-----+
| 1 | 瓜田李下 | 20 |
| 2 | 海贼王 | 21 |
| 3 | 瓜田李下2 | 20 |
| 4 | 海贼王2 | 21 |
| 5 | 瓜田李下 | 20 |
| 6 | 火影忍者 | 22 |
| 8 | 瓜田李下4 | 24 |
| 12 | 瓜田李下2 | 20 |
| 20 | 瓜田李下2 | 20 |
+----+---------------+-----+
9 rows in set (0.00 sec)
***********
查询结果处理
JDBC Request:获取所有结果列、结果集、限制返回数据(limit 4)
JDBC Request 2:获取所有第一列、结果集、限制返回数据(limit 4、limit resultset)
调试取样器
查看结果树
调试取样器响应数据:
JMeterVariables:
JMeterThread.last_sample_ok=true
JMeterThread.pack=org.apache.jmeter.threads.SamplePackage@2ec11d42
START.HMS=111218
START.MS=1642043538355
START.YMD=20220113
TESTSTART.MS=1642052049898
__jm__线程组__idx=0
__jmv_SAME_USER=true
a_#=4
a_1=1
a_2=2
a_3=3
a_4=4
b_#=4
b_1=瓜田李下
b_2=海贼王
b_3=瓜田李下2
b_4=海贼王2
c_#=4
c_1=20
c_2=21
c_3=20
c_4=21
jdbcConfig=org.apache.jmeter.protocol.jdbc.config.DataSourceElement$DataSourceComponentImpl@6e7c4cbc
m_#=1
m_1=1
result=[{name=瓜田李下, age=20, id=1}, {name=海贼王, age=21, id=2}, {name=瓜田李下2, age=20, id=3}, {name=海贼王2, age=21, id=4}]
result2=[{name=瓜田李下, age=20, id=1}]
# JDBC Request取样结果说明
映射了所有列,用数组存储,第一个元素为name_1;
用自定义的名称result存储结果集;
# JDBC Request 2取样结果说明
只映射了第一列,用数组存储,第一个元素为name_1;
用自定义的名称result2存储结果集;
limit resultSet对sql语句作了进一步限制
***********
调用存储过程
数据库预先定义存储过程
mysql> delimiter ;
mysql> delimiter //
mysql> create procedure insertData(in id integer, in name varchar(20), in age integer)
-> begin
-> insert into person values(id,name,age);
-> end//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
JDBC Request:调用存储过程
查看结果树
查询数据库:存储过程调用前后分别查询一次
mysql> select * from person;
+----+---------------+-----+
| id | name | age |
+----+---------------+-----+
| 1 | 瓜田李下 | 20 |
| 2 | 海贼王 | 21 |
| 3 | 瓜田李下2 | 20 |
| 4 | 海贼王2 | 21 |
| 5 | 瓜田李下 | 20 |
| 6 | 火影忍者 | 22 |
| 8 | 瓜田李下4 | 24 |
| 12 | 瓜田李下2 | 20 |
| 20 | 瓜田李下2 | 20 |
+----+---------------+-----+
9 rows in set (0.00 sec)
mysql> select * from person;
+----+---------------+-----+
| id | name | age |
+----+---------------+-----+
| 1 | 瓜田李下 | 20 |
| 2 | 海贼王 | 21 |
| 3 | 瓜田李下2 | 20 |
| 4 | 海贼王2 | 21 |
| 5 | 瓜田李下 | 20 |
| 6 | 火影忍者 | 22 |
| 8 | 瓜田李下4 | 24 |
| 12 | 瓜田李下2 | 20 |
| 20 | 瓜田李下2 | 20 |
| 30 | 瓜田李下 | 20 |
+----+---------------+-----+
10 rows in set (0.00 sec)