zoukankan      html  css  js  c++  java
  • jmeter数据库配置和数据库查询使用

    jdbc:mysql://test.mysql.xianghuanji.com:3306/xy_service_coupon?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

    Variable Name:数据库连接池的名称,需要与JDBC Connection Configuration的Variable Name名称保持一致

    Variable names:保存sql语句返回结果的变量名

    Variable names:保存sql语句返回结果的变量名,如果给这个参数设置了值,会保存sql

    语句返回的数据和返回数据的总行数。

    id name phone
    A_1 Mike C_1
    A_2 Lucy C_2

    假如,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}...来获取相应的值

    我们以上面的数据库为例,设置Variables names的值为p1、p2,并添加Debug Sampler

    ====


     
     
     
     
     
     

     

     

      本篇博文讲解以MySQL为例,搞懂JDBC Request中MySQL的使用方法,换成其它数据库,

    如Oracle、PSQL也会很容易上手。

    1|0一、基本配置

    1.首先我们先了解一下,不同数据库的驱动类和URL格式

    Database Driver class Database URL
    MySQL com.mysql.jdbc.Driver jdbc:mysql://host[port]/dbname
    PostgreSQL org.postgresql.Driver jdbc:postgresql:{dbname}
    Oracle oracle.jdbc.OracleDriver

    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) ingres.jdbc.IngresDriver jdbc:ingres://host:port/db[;attr=value]
    Microsoft SQL Server (MS JDBC driver) com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://host:port;DatabaseName=dbname
    ApacheDerby org.apache.derby.jdbc.ClientDriver jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]

    2.将MySQL的JDBC驱动jar包复制到Jmeter的lib目录下,本文中使用的是 mysql-connector-java-8.0.16.jar 

    或者在Jmeter的Test Plan中直接引入jar包,如下图所示:

    MySQL驱动下载:https://mvnrepository.com/artifact/mysql/mysql-connector-java

    2|0二、配置JDBC Connection Configuration

    JDBC Request经常需要配合配置元件JDBC Connection Configuration一起使用,先来看

    一下JDBC Connection Configuration的相关配置。

    这里我们主要关注Variable Name Bound to Pool和Database Connection Configuration两

    部分内容,其它字段可以保持默认值。

    Variable Name:数据库连接池的名称,后续配置还会用到这个名称

    Database URL:数据库的URL,jdbc:mysql://ip Of The Server:port/表名

    JDBC Driver class:JDBC驱动

    Username:要连接的数据库名称

    Password:要连接的数据库密码

    3|0三、配置JDBC Request

    Variable Name:数据库连接池的名称,需要与JDBC Connection Configuration的Variable Name名称保持一致

    Query:填写要被执行的SQL语句

    Parameter valus:参数值

    Parameter types:参数类型

    Variable names:保存sql语句返回结果的变量名

    Result variable name:创建一个对象变量,保存所有返回的结果

    Query timeout:查询超时时间

    Handle result set:定义如何处理由callable statements语句返回的结果

    我们添加一个监听器,保存脚本运行一次,查看执行结果。

     需要注意的是,Query Type不同时,对应执行代码也不一样:

    (1)Query Type为Select Statement时,对应执行代码为:
    stmt = conn.createStatement(); ResultSet rs = null; rs = stmt.executeQuery(sql); return getStringFromResultSet(rs).getBytes(ENCODING);
    (2)Query Type为Callable Statement时,对应执行代码为:
    CallableStatement cstmt = getCallableStatement(conn); int out[]=setArguments(cstmt); boolean hasResultSet = cstmt.execute(); String sb = resultSetsToString(cstmt,hasResultSet, out); return sb.getBytes(ENCODING);
    (3)Query Type为Update Statement时,对应执行代码为:
    stmt = conn.createStatement(); stmt.executeUpdate(sql); int updateCount = stmt.getUpdateCount(); String results = updateCount + " updates"; return results.getBytes(ENCODING);
    (4)Query Type为Prepared Select Statement时,对应执行代码为:
    PreparedStatement pstmt = getPreparedStatement(conn); setArguments(pstmt); ResultSet rs = null; rs = pstmt.executeQuery(); return getStringFromResultSet(rs).getBytes(ENCODING);
    (5)Query Type为Prepared Update Statement时,对应执行代码为: PreparedStatement pstmt = getPreparedStatement(conn); setArguments(pstmt); pstmt.executeUpdate(); String sb = resultSetsToString(pstmt,false,null); return sb.getBytes(ENCODING);
    (6)Query Type为Rollback时,对应执行代码为: conn.rollback(); return ROLLBACK.getBytes(ENCODING);
    (7)Query Type为Commit时,对应执行代码为: conn.commit(); return COMMIT.getBytes(ENCODING);
    (8)Query Type为AutoCommit(false)时,对应执行代码为:conn.setAutoCommit(false); return AUTOCOMMIT_FALSE.getBytes(ENCODING);
    (9)Query Type为AutoCommit(true)时,对应执行代码为: conn.setAutoCommit(true); return AUTOCOMMIT_TRUE.getBytes(ENCODING);
    (10)其它情况直接抛异常:throw new UnsupportedOperationException("Unexpected query type: "+_queryType);

    4|0四、JDBC Request参数化

    方法(一):自定义用户变量,然后进行引用

    1.在Test Plan界面User Defined Variables中定义需要的变量

    2.在JDBC Request界面SQL Query输入框中以${变量名}的形式引用变量

    方法(二):在被执行的SQL语句中使用“?”作为占位符,并传递参数值和参数类型。其中,

    传递的参数值有常量和变量之分。

    1.当传递的参数值是常量时,如下图所示,传入的用户ID和用户号码:

    2.当传递的参数值是变量时,如下图中的${user_id}:

    5|0五、Variables names参数使用方法

    Variable names:保存sql语句返回结果的变量名,如果给这个参数设置了值,会保存sql

    语句返回的数据和返回数据的总行数。

    id name phone
    A_1 Mike C_1
    A_2 Lucy C_2

    假如,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}...来获取相应的值

    我们以上面的数据库为例,设置Variables names的值为p1、p2,并添加Debug Sampler

    来查看输出结果。根据数据库的实际情况,我可以预期p1_#的值为22,p1_1的值为

    e59af3ba1110f433bd2b0f4996011cab。

    由执行结果可以看出我的预期是正确的。

    官方参考文档:https://jmeter.apache.org/usermanual/build-db-test-plan.html


    __EOF__

    本文作者:Edisonyao
    本文链接:https://www.cnblogs.com/Sweettesting/p/13787286.html
    关于博主:评论和私信会在第一时间回复。或者直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐】一下。您的鼓励是博主的最大动力!
     

    作者:Sweettesting —— 半醉半醒半浮生

    出处:http://www.cnblogs.com/Sweettesting/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
    分类: 【Jmeter】
    标签: JDBC Request
    好文要顶 关注我 收藏该文  
    1
    0
     
     
     
    « 上一篇: Jmeter逻辑控制器Switch Controller的用法
    » 下一篇: 在Windows下用VScode构造shell脚本的IDE
    posted @ 2020-10-10 11:47  EdisonYao  阅读(532)  评论(3)  编辑  收藏
     

     
    #1楼 2020-10-10 13:31 柠檬不酸啊

    官网的驱动都是最新的,博主能给个可以下载旧版本的地址吗?

    #2楼 [楼主] 2020-10-10 13:42 EdisonYao

    @柠檬不酸啊
    博文中已经更新

    #3楼 2020-10-16 15:44 落叶翎飒

    您好!我是51testing软件测试网编辑,您的这篇文章写得很好,我们想要转载让更多人看到,希望您能够同意,非常感谢!

     
     
     
     

     https://www.cnblogs.com/Sweettesting/p/13787286.html

  • 相关阅读:
    主函数main
    static关键字
    this关键字
    构造函数
    封装
    匿名对象
    java基础积累
    JAVA相关知识复习
    ORACLE数据库表空间查询
    两个日期的时间差
  • 原文地址:https://www.cnblogs.com/swiftycc/p/14690856.html
Copyright © 2011-2022 走看看