本篇博文讲解以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 使用详解的更多相关文章

  1. jmeter jdbc request使用详解

    1.在使用 jdbc request之前需要加载一个jar包 在test plan中将jar包引入到classpath中 2.创建一个JDBC Connection Configuration Var ...

  2. Jmeter 正则表达式提取器详解(Regular Expression Exactor)

    Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...

  3. request.getcontextPath() 详解

    request.getcontextPath() 详解 文章分类:Java编程 <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径. 但 ...

  4. IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构(转载)

    IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构 系列文章链接: IIS负载均衡-Application Request Route详解第一篇: ...

  5. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

  6. IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...

  7. django中request对象详解(转载)

    django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将  HttpRequest对象  作为第一个参数传入该函数. ...

  8. jmeter—JDBC request动态参数设置

    jmeter—JDBC request动态参数设置 重要参数说明: Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable ...

  9. IIS负载均衡-Application Request Route详解第一篇: ARR介绍

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...

随机推荐

  1. IOS 打包相关

    Unity 导出的Xcode工程 http://gad.qq.com/article/detail/29330 [Unity3D]Unity 生成的XCode工程结构 http://blog.163. ...

  2. Zabbix-4.0-设置钉钉报警脚本

    问题:当服务器发生报错时,有一个信息能实现自动发送到我的手机或者应用上,以达到对服务器的实时的监控与处理.邮件与短信不能满足实时性,于是想到了钉钉的通知. 思路:在钉钉里面建一个群,群里面拉个机器人. ...

  3. 分数运算(gcd)

    时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 计算机中采用浮点数表示所有实数,但这意味着精度丢失.例如无法精确 ...

  4. 什么是Nginx -九五小庞

  5. 三层架构的一点理解以及Dapper一对多查询

    1.首先说一下自己对三层架构的一点理解 论坛里经常说会出现喜欢面相对象的写法,所以使用EF的,我个人觉得他俩没啥关系,先别反对,先听听我怎么说吧. 三层架构,基本都快说烂了,但今天还是说三层架构:UI ...

  6. 2048游戏 - C语言不引入图形库简单实现

    声明:本程序绝大部分属于原创,交互部分参考了博客园 Judge Young的原创文章 游戏2048源代码 - C语言控制台界面版, 作者Judge Young的算法思想非常值得参考,感谢作者的分享 附 ...

  7. 在遍历ResultSet的循环中再执行SQL会发生什么(前提:同一个Statement)

    如下面代码: Class.forName(DBParam.Driver).newInstance(); conn = DriverManager.getConnection(DBParam.DbUrl ...

  8. ZK集群源码解读

    1.1. 集群模式 1.1.1.   数据同步总流程 1.1.1.1. OBSERVING 1.1.1.2. FOLLOWING 1.1.1.3. LEADING 1.1.2. 领导选举 1.1.2. ...

  9. Java实现内嵌浏览器

    创建项目 ---->   导入需要的jar ---->  代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...

  10. .NET Core加解密实战系列之——对称加密算法

    简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...