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 line | SQL语句的集合,将在首次创建物理连接时用执行它们。这些语句仅执行一次,在创建连接时执行 |
五种事务隔离级别:
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 URL | JDBC数据库的连接字符串,eg: jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true |
JDBC Driver class | JDBC驱动 |
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 class | Database URL |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host[:port]/dbname |
HSQLDB | org.hsqldb.jdbc.JDBCDriver | |
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}))) |
DB2 | com.ibm.db2.jcc.DB2Driver | com.ibm.db2.jdbc.app.DB2Driver |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql:{dbname} |
Microsoft.jdbc.sqlserver | com.microsoft.jdbc.sqlserver.SQLServerDriver | jdbc: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