一、下载mysql jar包
下载mysql jar包
网盘下载地址:mysql-connector-java-commercial-5.1.25-bin.jar
查看jar包支持的mysql版本:
查看mysql数据库版本:SELECT VERSION();
注:如果下载的jar包版本不支持mysql数据库,运行Jmter时可能会报错:no suitable driver found for jdbc:mysql//……..
为Jmeter添加jar文件
下载后解压.zip文件,把mysql-connector-java-x.x.x-bin.jar(例中:mysql-connector-java-commercial-5.1.25-bin.jar)放到Jmeter安装目录下的lib目录下(例中:D:\Program Files\apache-jmeter-2.13\lib)
2. 启动Jmeter,添加需要的原件,Sampler
二、配置JDBC Connection Configuration
重要参数说明:
- Variable Name:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用。
- Max Number of Connection: 数据库最大链接数
- PoolTimeout: 数据库链接超时,单位ms
- Idle Cleanup Interval (ms): 数据库空闲清理的间隔时间,单位ms
- Auto Commit:自动提交。有三个选项,true、false、编辑(自己通过jmeter提供的函数设置)
- Transaction Isolation:事务间隔级别设置,主要有如下几个选项:(对JMX加解密) 【TRANSACTION_NODE 事务节点 、TRANSACTION_READ_UNCOMMITTED 事务未提交读、TRANSACTION_READ_COMMITTED 事务已提交读 、TRANSACTION_SERIALIZABLE 事务序列化 、DEFAULT 默认、TRANSACTION_REPEATABLE_READ 事务重复读、
- Database URL:数据库url,jdbc:mysql://主机ip或者机器名称:mysql监听的端口号/数据库名称, 如:jdbc:mysql://localhost:3306/test
- JDBC Driver class:JDBC驱动
- username:数据库登陆的用户名
- passwrod:数据库登陆的密码
(1) Variable Name Bound to Pool
Variable Name,数据库连接池的变量名,之后JDBC request可以通过选择不同的连接池名来选择不同的数据库连接
Variable name变量名称:与JDBC Request的Variable name保持一致
原因:因为链接数据库是需要在JDBC Connection Configuration中配置好的,然后赋予一个变量名称,那么JDBC Request想要去访问数据库,就必须通过这个配置好的元件去链接,所以JDBC Reques就需要通过读取JDBC Connection Configuration的变量中的信息,
那怎么读取呢,JDBC Reques就需要用到这个变量了,就需要到名称为mysql的元件中去应用。
(2) Connection Pool Configuration
(3) Connection Validation by Pool
这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效
(4) Database Connection Configuration
Database URL: jdbc:mysql://服务器地址:3306/数据库名
(比如:jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true)
备注:“&allowMultiQueries=true” 这句话的意思呢 是为了在JDBC中执行多条select语句的时候用的!
JDBC Driver class:数据库JDBC驱动类名:com.mysql.jdbc.Driver
Username:数据库连接用户名
password:数据库连接密码
例如(上面url或class如有问题,可试一试下面的):
Database URL: jdbc:mysql://localhost:3306/information_schema?serverTimezone=GMT%2B8
JDBC Driver class: com.mysql.cj.jdbc.Driver
Username:root
password:xxx
不同数据库具体的填写方式,可以参考下面的表格:
Datebase | Driver class | Database URL |
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host:port/{dbname} |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql:{dbname} |
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:user/pass@//host:port/service |
Ingres (2006) | ingres.jdbc.IngresDriver | jdbc:ingres://host:port/db[;attr=value] |
MSSQL | com.microsoft.sqlserver.jdbc.SQLServerDriver 或者 net.sourceforge.jtds.jdbc.Driver | jdbc:sqlserver://IP:1433;databaseName=DBname 或者 jdbc:jtds:sqlserver://localhost:1433/"+"library"
|
填写后大致如下:
三、配置JDBC Request
重要的参数说明:
- Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
- Query:填写的sql语句未尾不要加“;”
- Parameter valus:参数值
- Parameter types:参数类型,可参考:Javadoc for java.sql.Types
- Variable names:保存sql语句返回结果的变量名
- Result variable name:创建一个对象变量,保存所有返回的结果
- Query timeout:查询超时时间
- Handle result set:定义如何处理由callable statements语句返回的结果
执行到这里,我们已经将数据从数据库中原样的查出来了,但具体如何之取出我们需要的数据呢,显然,假如我们查询的sql返回的只是一个数据,上面的方式已经可以满足我们的需求的,如我们查询数据的记录数,
select count(*) from test
查询出来的结果就是我们需要的内容,或者通过正则表达式的获取即可获取我们的内容。
但假如像上面那样子,我们获取出来的是多行数据,我们需要如何来对数据进行遍历,只获取出我们需要的数据呢?请看下面的分析。