一、准备工作:
1、本文使用oracle 数据库进行测试,数据库实例名为ORCL,用户名密码为scoff/
2、数据库中有表:DEPT,表中数据如下:
3、复制ORACLE的JDBC驱动JAR包文件(我的在:D:\oracle\product\1020\db_1\jdbc\lib\ojdbc14jar)到JMeter的lib目录下
或者
在Jmeter的Test Plan中引入ojdbc14jar包
二、配置JDBC Connection Configuration:
重要参数说明:
Variable Name:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用。
Database URL:数据库url,jdbc:oracle:thin:@host_ip or machine_name:Oracle 监听器监听的端口:Oracle实例的名 (可在oracel安装目录下tnsnamesora文件中找到这些信息)
JDBC Driver class:JDBC驱动
username:数据库登陆的用户名
passwrod:数据库登陆的密码
三、配置JDBC Request:
1、重要参数说明:
Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query:填写的sql语句未尾不要加“;”
Parameter valus:参数值
Parameter types:参数类型,可参考:Javadoc for javasqlTypes
Variable names:保存sql语句返回结果的变量名
Result variable name:创建一个对象变量,保存所有返回的结果
Query timeout:查询超时时间
Handle result set:定义如何处理由callable statements语句返回的结果
2、执行结果:
四:JDBC Request参数化:
方法(一): 定义变量,在sql quety中使用变量:
1、在Test plan中定义三个变量(当然也可以使用参数化:Jmeter参数化):
2、在sql query中使用${变量名}的方式引用:
方法(二): 在sql quety中使用“?”作为占位符,并传递参数值和参数类型,如下图:
1、传递的参数值是常量,如下图传递了3个常量:10,ACCOUNTINGNEW YORK:
2、传递的参数值是变量,如下图中${DNAME}:
五:Variables names参数使用方法:
Jmeter官网给的解释是:如果给这个参数设置了值,它会保存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}来获取相应的值
示例:
我们还是用上面的数据库,把所有数据查出来,DEPT表有有3个字段,4条记录(忘记了的可以回到第一步那里查看)
1、添加一个jdbc request名为select4,添加一个Debug Sampler用来查看输出的结果,设置 variables name为a,b,c:
2、执行结果:
六:Result variable name参数使用方法:
如果给这个参数设置值,它会创建一个对象变量,保存所有返回的结果,获取具体值的方法:columnValue = varsgetObject("resultObject")get(0)get("Column Name")
执行结果:
七:数据库驱动类和URL格式:
Datebase
Driver class
Database URL
MySQL
commysqljdbcDriver
jdbc:mysql://host:port/{dbname}
PostgreSQL
orgpostgresqlDriver
jdbc:postgresql:{dbname}
Oracle
oraclejdbcdriverOracleDriver
jdbc:oracle:thin:@//host:port/service OR
jdbc:oracle:thin:@(description=(address=(host={mc-name})
(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))
Ingres (2006)
ingresjdbcIngresDriver
jdbc:ingres://host:port/db[;attr=value]
MSSQL
commicrosoftsqlserverjdbcSQLServerDriver
或者
netsourceforgejtdsjdbcDriver
jdbc:sqlserver://IP:port;databaseName=DBname
或者
jdbc:jtds:sqlserver://localhost:1433/"+"library"
import javaioBufferedWriter;
import javaioFileWriter;
import javaioWriter;
import javautilRandom;
import javautilArrays;
FileWriter fstream = new FileWriter("D:\\Jmeter\\测试集_rita\\添加产品csv",false);
// 1 设置为true时,从第2行开始插入数据;设置为false时,从第一行开始插入数据。
// 2 设置为true时,后面运行时不会覆盖原先的数据;设置为false时,会覆盖原先的数据。
BufferedWriter out = new BufferedWriter(fstream);
Object result=varsgetObject("pro_res");
loginfo("结果是"+ result);
int len = resultsize();
loginfo("个数是"+ len);
String p_ids="";
String p_types="";
String p_grades="";
String p_commerce_types="";
String p_air_conditioning_types="";
for(int i=0;i<len;i++){
String p_id= resultget(i)get("product_id")toString();
String p_type=resultget(i)get("product_types")toString();
String p_type2 = p_typereplace(","," "); //写入文件时是以“,”区分单元格的,所以得替换原先的符号
String[] p_type3 = p_type2split(" ");
String p_grade= resultget(i)get("grades")toString();
String p_grade2=p_gradereplace(","," ");
String[] p_grade3 = p_grade2split(" ");
String p_commerce_type= resultget(i)get("commerce_types")toString();
String p_commerce_type2=p_commerce_typereplace(","," ");
String[] p_commerce_type3 = p_commerce_type2split(" ");
String p_air_conditioning_type=resultget(i)get("air_conditioning_types")toString();
String p_air_conditioning_type2=p_air_conditioning_typereplace(","," ");
String[] p_air_conditioning_type3 = p_air_conditioning_type2split(" ");
loginfo("p_ids为" + p_id);
loginfo("p_types为" + p_type2);
loginfo("p_grades为" + p_grade2);
loginfo("p_commerce_types为" + p_commerce_type2);
loginfo("p_air_conditioning_types为" + p_air_conditioning_type2);
loginfo("长度为" + p_type3length);
loginfo("长度为" + p_grade3length);
loginfo("长度为" + p_commerce_type3length);
loginfo("长度为" + p_air_conditioning_type3length);
Random random = new Random();
int i = randomnextInt(p_type3length);
int j = randomnextInt(p_grade3length);
int k = randomnextInt(p_commerce_type3length);
int l = randomnextInt(p_air_conditioning_type3length);
outwrite(p_id + ",");
if (p_type3length == 1){
outwrite(null + ","); //当属性为空时,需要传null
}else{
outwrite(p_type3[i]toString() + ",");
}
if (p_grade3length == 1){
outwrite(null + ",");
}else{
outwrite(p_grade3[j]toString() + ",");
}
if (p_commerce_type3length == 1){
outwrite(null + ",");
}else{
outwrite(p_commerce_type3[k]toString() + ",");
}
if (p_air_conditioning_type3length == 1){
outwrite(null + ",");
}else{
outwrite(p_air_conditioning_type3[l]toString() + ",");
}
}
outclose();
fstreamclose();
package basic;
import javasqlConnection;
import javasqlDriverManager;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
import javasqlStatement;
public class JDBC {
public void findAll() {
try {
// 获得数据库驱动
//由于长时间不写,驱动名和URL都忘记了,不知道对不对,你应该知道的,自己改一下的哈
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String userName = "system";
String password = "system";
ClassforName("oraclejdbcdriverOracleDriver");
// 创建连接
Connection conn = DriverManagergetConnection(url, userName,
password);
// 新建发送sql语句的对象
Statement st = conncreateStatement();
// 执行sql
String sql = "select from users";
ResultSet rs = stexecuteQuery(sql);
// 处理结果
while(rsnext()){
//这个地方就是给你的封装类属性赋值
Systemoutprintln("UserName:"+rsgetString(0));
}
// 关闭连接
rsclose();
stclose();
connclose();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
public void delete(){
try {
//步骤还是那六个步骤,前边的两步是一样的
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String userName = "system";
String password = "system";
ClassforName("oraclejdbcdriverOracleDriver");
Connection conn = DriverManagergetConnection(url,userName,password);
//这里的发送sql语句的对象是PreparedStatement,成为预处理sql对象,因为按条件删除是需要不定值的
String sql = "delete from users where id = ";
PreparedStatement ps = connprepareStatement(sql);
pssetInt(0, 1);
int row = psexecuteUpdate();
if(row!=0){
Systemoutprintln("删除成功!");
}
// 关闭连接
rsclose();
stclose();
connclose();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
在Jmeter中建立一个JDBC Request 测试计划主要分两步。
(1)设置JDBC连接池(在JDBC Connection Configuration)
(2)添加JDBC Request
其他步骤就是设置参数化、断言、监听结果。
第一步:添加 JDBC Connection Configuration
需要设置jdbc线程池变量的名称,这里设置为jdbcConfig,这个变量在JDBC Request中要使用的;还有要设置Database URL,格式为:jdbc:mysql://localhost:3306/chenserverTimezone=UTC&characterEncoding=utf-8,注意:?后面的serverTimezone=UTC&characterEncoding=utf-8不能缺少,否则会报时区错误。
第二部:设置JDBC Request
以上就是关于在jmeter里怎么插入jdbc请求全部的内容,包括:在jmeter里怎么插入jdbc请求、Jmeter进阶三:把数据库的结果处理后保存到本地的文件、如何用jmeter实现mysql数据库增删改查等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)