在jmeter里怎么插入jdbc请求

在jmeter里怎么插入jdbc请求,第1张

一、准备工作:

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数据库增删改查等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9485029.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存