转自http://blog.csdn.net/ck3207/article/details/52704923
jmeter实际应用过程中,都免不了要连接数据库。主流数据库有Oracle、sqlserver、MySQL…由于我实际用到的数据库只有mysql 与 oracle 就只介绍这两种数据库的配置及运用。
数据库驱动
连接数据库,需要下载对应的数据库驱动jar包
建议都去从官网下载:
mysql jar包地址:http://dev.mysql.com/downloads/connector/j/
oracle jar包下载地址:
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
提示:mysql jdbc driver下载最新的就可以;但是oracle jdbc driver建议下载为对应数据库版本的驱动。下载oracle驱动包需要登录,如果没有建议建一个账号,两分钟就可以搞定。
分享一个我目前的驱动:
链接:http://pan.baidu.com/s/1ctDMpw 密码:twqn
加载驱动
mysql 的驱动包可以放在对应Java安装目录下的jdk下的jre下的lib下的ext目录下。
Example:C:Program FilesJavajdk1.7.0_79jrelibext
oracle 的驱动包需要放在对应的jmter安装目录下的lib目录下。
Example:D:apache-jmeter-3.0lib
配置数据库连接
Mysql
如上图,配置的时候需要注意两点。一是:Variable Name 这个变量就是数据库配置的名称。若进行jdbc Request,必须输入数据库配置名称。如果找不到这个数据库配置名称,那么相当于不知道你要连的数据库的地址、用户名以及密码。
mysql数据库连接地址格式为:
jdbc:mysql://主机ip或者机器名称:mysql监听的端口号/数据库名称
Example: jdbc:mysql://localhost:3306/test
oracle
oracle相对于mysql稍有写区别。oracle数据库地址连接格式为:
jdbc:oracle:thin:@ip:port:实例名
eg:如果是本地的oracle数据库,端口为1521,数据库实例名为:test
那么连接地址为:jdbc:oracle:thin:@localhost:1521:test
注意:实例名称并不是数据库名称
如果不知道实例名,那么可以在pl sql可以查看。
操作过程为:菜单栏 help > Support Info… >TNS Names
上图 SERVICE_NAME既是实例名。另外oracle配置时,需设置Validation Query为:select 1 from dual,如果是默认 select 1执行时会出现错误。
访问数据库
以下主要以mysql为例,oracle与之相似。
JDBC Request时用到了前面说到的 Variable Name,需对应。运行如图语句,可以得到如下图的结果。
由此可见,数据库连接是成功了。
含变量的sql语句实现
sql中含变量是在所难免,当需要填入变量时候,可以用?代替变量,在参数值(Parameter values)中输入变量值,参数类型(Parameter types)中输入参数的实际类型。如图:
但这样的变量输入方式没有实际意义,所以需要一个真正的变量而不是为变量。定义一个用户自定义变量name,并赋值为:ck1。如图:
在 JDBC Request中,输入参数值中改成 ${name}(在jmter中,变量表达方式为:${variable})如图:
在执行有变量的sql时,需注意QueryType应选择Prepared Select Statement。当有多个参数时,参数间需要用逗号隔开。对应的,参数类型个数需与参数个数对应,参数类型与参数类型也是用逗号隔开。
获取JDBC Request结果
数据库交互后,可能需要提取对应字段的值,那么需要提取结果。如图,先设置输入变量(Variable Names)。注意:一:输出变量值个数若为多个,中间用逗号隔开;二:输出变量值个数必须与选取的个数一致,不能多也不能少。
其执行结果是一个两行三列的数据。那么三列(id,name,agend)分别对应为:A,B,C。如果想得到name列的第二条数据,则变量值为:B_2。如果想得到agend列的第一条数据,则变量值为:C_1。想得到X列第Y条数据,器变量值为:X_Y。
如果想得到执行结果的总数,则可用 A_#(A列数据总数)表示,也可以用B_#或C_#。
当你执行oracle数据时候,发现sql没有问题,但是就是报语法错误了。有两点建议,一:查看QueryType值是否正确;二:查看sql最后有没有分号(;),绝对不能含有分号。mysql目前没有这个问题。还有一点,当进行增、删、改语句时,都是选择QueryType为Update Statement(Prepared Update Statement)