Jmeter JDBC Request 使用详解

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

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

一、基本配置

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

Database   Driver class   Database URL  
MySQL   com.mysql.jdbc.Driver   jdbc:mysql://host[port]/dbname  
PostgreSQL   org.postgresql.Driver   jdbc:postgresql:{dbname}  
Oracle   oracle.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.IngresDriver   jdbc:ingres://host:port/db[;attr=value]  
Microsoft SQL Server (MS JDBC driver)   com.microsoft.sqlserver.jdbc.SQLServerDriver   jdbc:sqlserver://host:port;DatabaseName=dbname  
ApacheDerby   org.apache.derby.jdbc.ClientDriver   jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]  

 

 

 

 

 

 

 

 

 

 

 

 

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

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

Jmeter JDBC Request 使用详解

二、配置JDBC Connection Configuration

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

一下JDBC Connection Configuration的相关配置。

Jmeter JDBC Request 使用详解

这里我们主要关注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:要连接的数据库密码

三、配置JDBC Request

Jmeter 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语句返回的结果

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

Jmeter JDBC Request 使用详解

 需要注意的是,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);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjgpy.html