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包,如下图所示:

二、配置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:要连接的数据库密码
三、配置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);
四、JDBC Request参数化
方法(一):自定义用户变量,然后进行引用
1.在Test Plan界面User Defined Variables中定义需要的变量

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

方法(二):在被执行的SQL语句中使用“?”作为占位符,并传递参数值和参数类型。其中,
传递的参数值有常量和变量之分。
1.当传递的参数值是常量时,如下图所示,传入的用户ID和用户号码:

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

五、Variables names参数使用方法
Variable names:保存sql语句返回结果的变量名,如果给这个参数设置了值,会保存sql
语句返回的数据和返回数据的总行数。
| id | name | phone |
| A_1 | Mike | C_1 |
| A_2 | Lucy | C_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
Jmeter JDBC Request 使用详解的更多相关文章
- jmeter jdbc request使用详解
1.在使用 jdbc request之前需要加载一个jar包 在test plan中将jar包引入到classpath中 2.创建一个JDBC Connection Configuration Var ...
- Jmeter 正则表达式提取器详解(Regular Expression Exactor)
Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...
- request.getcontextPath() 详解
request.getcontextPath() 详解 文章分类:Java编程 <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径. 但 ...
- IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构(转载)
IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构 系列文章链接: IIS负载均衡-Application Request Route详解第一篇: ...
- IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)
IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...
- IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)
IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...
- django中request对象详解(转载)
django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函数. ...
- jmeter—JDBC request动态参数设置
jmeter—JDBC request动态参数设置 重要参数说明: Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable ...
- IIS负载均衡-Application Request Route详解第一篇: ARR介绍
IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...
随机推荐
- HDU多校1003-Divide the Stones(构造)
Problem Description There are n stones numbered from 1 to n.The weight of the i-th stone is i kilogr ...
- 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client
简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...
- 10.redis cluster介绍与gossip协议
一.redis cluster 介绍 自动将数据进行分片,每个 master 上放一部分数据 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的 redis cluster架构下的 ...
- VS提交码云权限问题
提交代码时出现Git failed with a fatal error. Authentication failed的问题. 如果没有像当前代码库提交过代码(所有项目),那么提交时会提示输入账号密码 ...
- 基于django快速开发一个网站(一)
基于django快速开发一个网站(一) * 创建虚拟环境.基于虚拟环境创建django==2.0.0和图片加载库和mysql数据库驱动 1. 创建目录并创建虚拟环境 ╰$ mkdir Cornuco ...
- php cookie及session
1.会话控制概括 1)http协议的缺陷 无状态,就是无记忆,不能让同一浏览器和服务器进行多次数据交换时,产生业务的连续性, 2)什么是会话控制 会话控制就是解决http无记忆缺陷的,能够==将数据持 ...
- GET请求和POST请求的request和response的中文乱码问题
GET请求(request)中文乱码解决方案: 在Services的server.xml的配置文件的第一个Connector标签中添加属性URIEncoding="UTF-8" P ...
- CentOS 7常用命令
常用命令 文件与目录操作 命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 返回上次所在目录 cp file1 file ...
- Java实现随机生成由字母、数字组合的N位随机数
通过Math.random函数生成所需的字符所有序列,通过判断当前字符是否属于大小写.数字,符合者加入数组内,直到数组存储N位为止,最后把当前数组转为字符串返回调用处. /** * 随机生成由数字.字 ...
- 车联网容器应用探索:5G下边缘云计算的车路协同实践
导语 | 5G网络下,多接入边缘计算(MEC)应运而生.结合TKEStack强大的集群管理能力和异构计算资源管理能力,腾讯打造了一个功能完备的边缘计算PaaS平台TMEC,提供了高精确度定位.视频处理 ...
port]/dbname