JMeter-JDBC Request使用

Posted 流墨馨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter-JDBC Request使用相关的知识,希望对你有一定的参考价值。

JDBC Request需要配合JDBC Connection Configuration一起使用,JDBC Connection Configuration进行连接,JDBC Request进行请求,下面针对两个配置进行摘录

JDBC Connection Configuration 配置

Variable Name Bound to Pool:

元素功能
Variable Name for created pool数据库连接池名称
Max Number of Connections数据库最大连接数。在大多数情况下,将其设置为0,这意味着每个线程将得到它自己的池,其中只有一个连接,即线程之间不共享连接。如果您真的想要使用共享池,那么将max count与线程数相同,以确保线程不会相互等待。
Max Wait(ms)在连接池中取回连接最大等待时间
Time Between Eviction Runs(ms)在空闲对象驱逐线程运行期间,可以休眠的毫秒数。当非正值时,将运行无空闲对象驱逐器线程。(默认为“60000”,1分钟)(如果当前连接池中某个连接在空闲了time Between Eviction Runs Millis时间后任然没有使用,则被物理性的关闭掉。)
Auto Commit自动提交sql语句
Transaction Isolation设置事务的隔离级别
Preinit Pool立即初始化连接池,如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接池建立的时间
Init SQL statements separated by new lineSQL语句的集合,将在首次创建物理连接时用执行它们。这些语句仅执行一次,在创建连接时执行

五种事务隔离级别:
1).TRANSACTION_NONE 不支持事务
2).TRANSACTION_READ_UNCOMMITTED 读未提交,允许脏读,不可重复读和幻读
3).TRANSACTION_READ_COMMITTED 读已提交,禁止脏读,但允许不可重复读和幻读
4).TRANSACTION_REPEATABLE_READ 重复读,禁止脏读和不可重复读,允许幻读
5).TRANSACTION_SERIALIZABLE 串行化,禁止脏读,不可重复读和幻读
6).DEFAULT 数据库默认的隔离方式
脏读(dirty read):一个事务读取了另一个事务尚未提交的数据
不可重复读(Non-Repeatable Reads):一个事务的操作导致另一个事务前后两次读取到不同的数据
幻读(Phantom Reads):一个事务的操作导致另一个事务前后两次查询的结果数据量不同

元素功能
Test While Idle当空闲的时候测试连接是否断开
Soft Min Evictable Idle Time连接在连接池中闲置的最小时间,超出此闲置时间连接才会被回收。默认值为5000ms
Validation Query用于确定数据库是否仍在响应的简单查询语句
Database URLJDBC数据库的连接字符串,eg: jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
JDBC Driver classJDBC驱动
ussername数据库登录的用户名
Password数据库登录的密码
Connection Properties建立连接时要设置的连接属性

Validation Query 选项:

hsqldb选择:select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle选择:select 1 from dual
DB2选择:select 1 from sysibm.sysdummy1
MySQL/SQL Server/PostgreSQL/Ingres/Derby/H2选择:select 1
Firebird选择: select 1 from rdb$database

不同的数据库和JDBC驱动程序相对于Database URL和JDBC Driver class不一样,以下是常用的几种:

数据库类型JDBC Driver classDatabase URL
MySQLcom.mysql.jdbc.Driverjdbc:mysql://host[:port]/dbname
HSQLDBorg.hsqldb.jdbc.JDBCDriver
Oracleoracle.jdbc.OracleDriverjdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))
DB2com.ibm.db2.jcc.DB2Drivercom.ibm.db2.jdbc.app.DB2Driver
PostgreSQLorg.postgresql.Driverjdbc:postgresql:{dbname}
Microsoft.jdbc.sqlservercom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://host[:port];DatabaseName={databasename}

JDBC Request 配置

元素功能
Variable Name of Pool declared in JDBC Connection Configuration数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query Type
Qurey查询语句,未尾不要加“;”。(SQL中的数据可通过${变量名}获取到已定义的值 )
Parameter values参数值(1、可代替Query中的?占位符数据,多个占位符用逗号隔开;2、参数值可通过${变量名}获取到已定义的值
Parameter types参数类型(与Parameter value的数据一一对应的数据类型,多个用逗号隔开)
Variable name保存sql语句返回结果的变量名,可通过debug取样器查看结果
Result variable name创建一个对象变量,保存所有返回的结果,获取具体值的方法:columnValue = vars.getObject(“resultObject”).get(0).get(“Column Name”)
Query timeout查询超时时间
Limit ResultSet设置返回结果的数据条数

Variable name的使用规则:(引用https://www.cnblogs.com/puresoul/p/4908014.html
如果给这个参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。假如,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}…来获取相应的值

实例

使用占位符查询 melotpay.melotpay.agency_info表中role=2的前三条记录对应的agencyid、userno值,结果使用变量名a,b保存,并且返回结果创建的对象c

查看返回结果:

以上是关于JMeter-JDBC Request使用的主要内容,如果未能解决你的问题,请参考以下文章

关于String path = request.getContextPath(); String basePath = request.getScheme()+"://"+requ

jmeter-jdbc配置

jmeter-JDBC请求(sqlserver)

jmeter-jdbc连接数据库

jmeter-jdbc配置和jdbc取样器详解

request和response