本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Jmeter JDBC Request 使用详解
huasy · 526浏览 · 发布于2020-10-10 +关注

本篇博文讲解以MySQL为例,搞懂JDBC Request中MySQL的使用方法,换成其它数据库,

如Oracle、PSQL也会很容易上手。

1|0一、基本配置

1.首先我们先了解一下,不同数据库的驱动类和URL格式

DatabaseDriver classDatabase URL
MySQLcom.mysql.jdbc.Driverjdbc:mysql://host[port]/dbname
PostgreSQLorg.postgresql.Driverjdbc:postgresql:{dbname}
Oracleoracle.jdbc.OracleDriver

jdbc:oracle:thin:@//host:port/service OR

jdbc:oracle:thin:@(description=(address=(host={mc-name})

(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))

Ingres(2006)ingres.jdbc.IngresDriverjdbc:ingres://host:port/db[;attr=value]
Microsoft SQL Server (MS JDBC driver)com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://host:port;DatabaseName=dbname
ApacheDerbyorg.apache.derby.jdbc.ClientDriverjdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]

 

 

 

 

 

 

 

 

 

 

 

 

2.将MySQL的JDBC驱动jar包复制到Jmeter的lib目录下,本文中使用的是 mysql-connector-java-8.0.16.jar 

或者在Jmeter的Test Plan中直接引入jar包,如下图所示:

 

MySQL驱动下载:https://mvnrepository.com/artifact/mysql/mysql-connector-java

 

 

2|0二、配置JDBC Connection Configuration

JDBC Request经常需要配合配置元件JDBC Connection Configuration一起使用,先来看

一下JDBC Connection Configuration的相关配置。

这里我们主要关注Variable Name Bound to Pool和Database Connection Configuration两

部分内容,其它字段可以保持默认值。

Variable Name:数据库连接池的名称,后续配置还会用到这个名称

Database URL:数据库的URL,jdbc:mysql://ip Of The Server:port/表名

JDBC Driver class:JDBC驱动

Username:要连接的数据库名称

Password:要连接的数据库密码

3|0三、配置JDBC Request

Variable Name:数据库连接池的名称,需要与JDBC Connection Configuration的Variable Name名称保持一致

Query:填写要被执行的SQL语句

Parameter valus:参数值

Parameter types:参数类型

Variable names:保存sql语句返回结果的变量名

Result variable name:创建一个对象变量,保存所有返回的结果

Query timeout:查询超时时间

Handle result set:定义如何处理由callable statements语句返回的结果

我们添加一个监听器,保存脚本运行一次,查看执行结果。

 需要注意的是,Query Type不同时,对应执行代码也不一样:

(1)Query Type为Select Statement时,对应执行代码为:
stmt = conn.createStatement();
ResultSet rs = null;
rs = stmt.executeQuery(sql);return getStringFromResultSet(rs).getBytes(ENCODING);
(2)Query Type为Callable Statement时,对应执行代码为:
CallableStatement cstmt = getCallableStatement(conn);int out[]=setArguments(cstmt);
boolean hasResultSet = cstmt.execute();
String sb = resultSetsToString(cstmt,hasResultSet, out);return sb.getBytes(ENCODING);
(3)Query Type为Update Statement时,对应执行代码为:
stmt = conn.createStatement();
stmt.executeUpdate(sql);int updateCount = stmt.getUpdateCount();
String results = updateCount + " updates";return results.getBytes(ENCODING);
(4)Query Type为Prepared Select Statement时,对应执行代码为:
PreparedStatement pstmt = getPreparedStatement(conn);
setArguments(pstmt);
ResultSet rs = null;
rs = pstmt.executeQuery();return getStringFromResultSet(rs).getBytes(ENCODING);
(5)Query Type为Prepared Update Statement时,对应执行代码为:
PreparedStatement pstmt = getPreparedStatement(conn);
setArguments(pstmt);
pstmt.executeUpdate();
String sb = resultSetsToString(pstmt,false,null);return sb.getBytes(ENCODING);
(6)Query Type为Rollback时,对应执行代码为:
conn.rollback();return ROLLBACK.getBytes(ENCODING);
(7)Query Type为Commit时,对应执行代码为:
conn.commit();return COMMIT.getBytes(ENCODING);
(8)Query Type为AutoCommit(false)时,对应执行代码为:conn.setAutoCommit(false);return AUTOCOMMIT_FALSE.getBytes(ENCODING);
(9)Query Type为AutoCommit(true)时,对应执行代码为:
conn.setAutoCommit(true);return AUTOCOMMIT_TRUE.getBytes(ENCODING);
(10)其它情况直接抛异常:throw new UnsupportedOperationException("Unexpected query type: "+_queryType);

4|0四、JDBC Request参数化

方法(一):自定义用户变量,然后进行引用

1.在Test Plan界面User Defined Variables中定义需要的变量

2.在JDBC Request界面SQL Query输入框中以${变量名}的形式引用变量

方法(二):在被执行的SQL语句中使用“?”作为占位符,并传递参数值和参数类型。其中,

传递的参数值有常量和变量之分。

1.当传递的参数值是常量时,如下图所示,传入的用户ID和用户号码:

 

2.当传递的参数值是变量时,如下图中的${user_id}:

5|0五、Variables names参数使用方法

Variable names:保存sql语句返回结果的变量名,如果给这个参数设置了值,会保存sql

语句返回的数据和返回数据的总行数。

idnamephone
A_1MikeC_1
A_2LucyC_2

 

 

 

假如,sql语句返回2行,3列,且Variables names设置为A, ,C,那么如下变量会被设置为:

A_#=2 (总行数)  A_1=第1列, 第1行  A_2=第1列, 第2行   

C_#=2 (总行数)    C_1=第3列, 第1行  C_2=第3列, 第2行

  • 如果返回结果为0,那么A_#和C_#会被设置为0,其它变量不会设置值。

  • 如果第一次返回6行数据,第二次只返回3行数据,那么第一次那多的3行数据变量会被清除。

  • 可以使用${A_#}、${A_1}...来获取相应的值

我们以上面的数据库为例,设置Variables names的值为p1、p2,并添加Debug Sampler

来查看输出结果。根据数据库的实际情况,我可以预期p1_#的值为22,p1_1的值为

e59af3ba1110f433bd2b0f4996011cab。

由执行结果可以看出我的预期是正确的。

 

官方参考文档:https://jmeter.apache.org/usermanual/build-db-test-plan.html


相关推荐

使用SELECT语句检索数据

奔跑的男人 · 804浏览 · 2019-06-03 09:33:43
部署MySQL延迟从库的几个好处

吴振华 · 663浏览 · 2019-05-14 21:57:51
MongoDB凭什么跻身数据库排行前五?

iamitnan · 723浏览 · 2019-06-18 10:04:56
Oracle开启和关闭的几种模式

qq2360248666 · 751浏览 · 2019-06-04 10:18:47
加载中

0评论

评论
nothing is impossible
分类专栏
小鸟云服务器
扫码进入手机网页