Jmeter-JDBC获取数据库数据并作为变量传输
一、添加数据库对应引入的jar包:
oracle:oracle数据安装目录下\product\12.1.0\client_1\jdbc\lib\ojdbc8.jar;
mysql:mysql-connector-java-5.1.46-bin.jar;
sql server:sqljdbc.jar ;
添加jar包有两种方式 :
1.(推荐)将jar包复制到jmeter的lib目录 ;
2.Test Plan引入jar包,如图:
二、Jmeter配置
1、配置JDBC Connection Configuration(例:oracle)
线程组右键-“添加--配置元件--JDBC Connection Configuration”
参数:
1)Variable Name: 数据库连接池的名称(可以多个),与jdbc request中Variable Name保持一致;
2)Validation Query :选择select 1 from dual;
3)Database URL:jdbc:oracle:thin:@数据库连接串(数据库IP:1521:数据库ID 未成功);
4)JDBC Driver class:oracle.jdbc.driver.OracleDriver 数据库驱动程序;
5)Username:数据库用户名;
6)Password:对应的数据库用户密码;
三、配置JDBC Request
线程组右键-“添加--Sampler--JDBC Request”
参数:
Variable Name: 数据库连接池名称,与JDBC Connection Configuration中Variable Name Bound Pool的Variable Name一致 ;
Query Type:SQL的类型,查询选择Select Statement;查询SQL需传递参数选择Prepared Select Statement;多个查询语句(不使用参数的情况下)放在一起执行选择Callable statement;
Query:SQL后不要添加分号“;” ;
Parameter valus:参数值 ;
Parameter types:参数化对应的数据类型,可参考:Javadoc for java.sql.Types
Variable names:sql语句返回结果的变量名 ;
Result variable name:创建一个对象变量,保存所有返回的结果 ;
Query timeout:查询超时时间 ;
Handle result set:定义如何处理由callable statements语句返回的结果;
使用jdbc request的结果作为参数时,要写成${user_1}这样子,1代表你查出来的数据第一行,想取第几行就把1改成对应数值;
四、配置计数器
线程组右键-“添加--配置元件--计数器”
index就是我们设置的计数器的变量名,可以直接用他来代替我们的数字1,2,3,等等,现在把username和index两个变量拼接起来,拼接后的username变量应该是${__V(user_${index})}
通过函数助手获取嵌套函数
五、查看结果
如果需多次调用重复数据,需配置循环控制器;
6、循环控制器
线程组右键-“添加--逻辑控制器--循环控制器”
错误分析:
1.Cannot create PoolableConnectionFactory ;
jmeter未引入(或jar版本不匹配)jar包(3.3 用 ojdbc8.jar);
2.Cannot create PoolableConnectionFactory (Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor )
Cannot create JDBC driver of class 'oracle.jdbc.OracleDriver' for connect URL '
database :URL(数据库连接池)写错了;
例:jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = URL)(PORT = 端口))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = name)))