<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Jmeter JDBC Request 使用詳解

          共 4234字,需瀏覽 9分鐘

           ·

          2020-10-13 05:34

          點擊上方藍色字體,選擇“標(biāo)星公眾號”

          優(yōu)質(zhì)文章,第一時間送達

          ? 作者?|??Edisonyao?

          來源 |? urlify.cn/M77Zbi

          66套java從入門到精通實戰(zhàn)課程分享

          本篇博文講解以MySQL為例,搞懂JDBC Request中MySQL的使用方法,換成其它數(shù)據(jù)庫,

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

          一、基本配置

          1.首先我們先了解一下,不同數(shù)據(jù)庫的驅(qū)動類和URL格式

          DatabaseDriver classDatabase URL
          MySQLcom.mysql.jdbc.Driverjdbc:mysql://host[port]/dbname
          PostgreSQLorg.postgresql.Driverjdbc:postgresql:{dbname}
          Oracleoracle.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.IngresDriverjdbc:ingres://host:port/db[;attr=value]
          Microsoft SQL Server (MS JDBC driver)com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://host:port;DatabaseName=dbname
          ApacheDerbyorg.apache.derby.jdbc.ClientDriverjdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]

          2.將MySQL的JDBC驅(qū)動jar包復(fù)制到Jmeter的lib目錄下,本文中使用的是?mysql-connector-java-8.0.16.jar?

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

          MySQL驅(qū)動下載:https://mvnrepository.com/artifact/mysql/mysql-connector-java

          二、配置JDBC Connection Configuration

          JDBC Request經(jīng)常需要配合配置元件JDBC Connection Configuration一起使用,先來看

          一下JDBC Connection Configuration的相關(guān)配置。

          這里我們主要關(guān)注Variable Name Bound to Pool和Database Connection Configuration兩

          部分內(nèi)容,其它字段可以保持默認(rèn)值。

          Variable Name:數(shù)據(jù)庫連接池的名稱,后續(xù)配置還會用到這個名稱

          Database URL:數(shù)據(jù)庫的URL,jdbc:mysql://ip Of The Server:port/表名

          JDBC Driver class:JDBC驅(qū)動

          Username:要連接的數(shù)據(jù)庫名稱

          Password:要連接的數(shù)據(jù)庫密碼

          三、配置JDBC Request

          Variable Name:數(shù)據(jù)庫連接池的名稱,需要與JDBC Connection Configuration的Variable Name名稱保持一致

          Query:填寫要被執(zhí)行的SQL語句

          Parameter valus:參數(shù)值

          Parameter types:參數(shù)類型

          Variable names:保存sql語句返回結(jié)果的變量名

          Result variable name:創(chuàng)建一個對象變量,保存所有返回的結(jié)果

          Query timeout:查詢超時時間

          Handle result set:定義如何處理由callable statements語句返回的結(jié)果

          我們添加一個監(jiān)聽器,保存腳本運行一次,查看執(zhí)行結(jié)果。

          ?需要注意的是,Query Type不同時,對應(yīng)執(zhí)行代碼也不一樣:

          (1)Query Type為Select Statement時,對應(yīng)執(zhí)行代碼為:
          stmt?=?conn.createStatement();
          ResultSet?rs?=?null;
          rs?=?stmt.executeQuery(sql);
          return?getStringFromResultSet(rs).getBytes(ENCODING);

          (2)Query Type為Callable Statement時,對應(yīng)執(zhí)行代碼為:
          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時,對應(yīng)執(zhí)行代碼為:
          stmt?=?conn.createStatement();
          stmt.executeUpdate(sql);
          int?updateCount?=?stmt.getUpdateCount();
          String?results?=?updateCount?+?"?updates";
          return?results.getBytes(ENCODING);

          (4)Query Type為Prepared Select Statement時,對應(yīng)執(zhí)行代碼為:
          PreparedStatement?pstmt?=?getPreparedStatement(conn);
          setArguments(pstmt);
          ResultSet?rs?=?null;
          rs?=?pstmt.executeQuery();
          return?getStringFromResultSet(rs).getBytes(ENCODING);

          (5)Query Type為Prepared Update Statement時,對應(yīng)執(zhí)行代碼為:
          PreparedStatement?pstmt?=?getPreparedStatement(conn);
          setArguments(pstmt);
          pstmt.executeUpdate();
          String?sb?=?resultSetsToString(pstmt,false,null);
          return?sb.getBytes(ENCODING);

          (6)Query Type為Rollback時,對應(yīng)執(zhí)行代碼為:
          conn.rollback();
          return?ROLLBACK.getBytes(ENCODING);

          (7)Query Type為Commit時,對應(yīng)執(zhí)行代碼為:
          conn.commit();
          return?COMMIT.getBytes(ENCODING);

          (8)Query?Type為AutoCommit(false)時,對應(yīng)執(zhí)行代碼為:conn.setAutoCommit(false);
          return?AUTOCOMMIT_FALSE.getBytes(ENCODING);

          (9)Query?Type為AutoCommit(true)時,對應(yīng)執(zhí)行代碼為:
          conn.setAutoCommit(true);
          return?AUTOCOMMIT_TRUE.getBytes(ENCODING);

          (10)其它情況直接拋異常:throw new UnsupportedOperationException("Unexpected?query?type:?"+_queryType);

          四、JDBC Request參數(shù)化

          方法(一):自定義用戶變量,然后進行引用

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

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

          方法(二):在被執(zhí)行的SQL語句中使用“?”作為占位符,并傳遞參數(shù)值和參數(shù)類型。

          其中,傳遞的參數(shù)值有常量變量之分。

          1.當(dāng)傳遞的參數(shù)值是常量時,如下圖所示,傳入的用戶ID和用戶號碼:

          2.當(dāng)傳遞的參數(shù)值是變量時,如下圖中的${user_id}:

          五、Variables names參數(shù)使用方法

          Variable names:保存sql語句返回結(jié)果的變量名,如果給這個參數(shù)設(shè)置了值,會保存sql

          語句返回的數(shù)據(jù)和返回數(shù)據(jù)的總行數(shù)。

          idnamephone
          A_1MikeC_1
          A_2LucyC_2


          假如,sql語句返回2行,3列,且Variables names設(shè)置為A, ,C,那么如下變量會被設(shè)置為:

          A_#=2 (總行數(shù))  A_1=第1列, 第1行  A_2=第1列, 第2行   

          C_#=2 (總行數(shù))  ? C_1=第3列, 第1行  C_2=第3列, 第2行

          • 如果返回結(jié)果為0,那么A_#和C_#會被設(shè)置為0,其它變量不會設(shè)置值。

          • 如果第一次返回6行數(shù)據(jù),第二次只返回3行數(shù)據(jù),那么第一次那多的3行數(shù)據(jù)變量會被清除。

          • 可以使用${A_#}、${A_1}...來獲取相應(yīng)的值

          我們以上面的數(shù)據(jù)庫為例,設(shè)置Variables names的值為p1、p2,并添加Debug Sampler

          來查看輸出結(jié)果。根據(jù)數(shù)據(jù)庫的實際情況,我可以預(yù)期p1_#的值為22,p1_1的值為

          e59af3ba1110f433bd2b0f4996011cab。

          由執(zhí)行結(jié)果可以看出我的預(yù)期是正確的。






          粉絲福利:108本java從入門到大神精選電子書領(lǐng)取

          ???

          ?長按上方鋒哥微信二維碼?2 秒
          備注「1234」即可獲取資料以及
          可以進入java1234官方微信群



          感謝點贊支持下哈?

          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产久久久久久久久 | 粉嫩久久久久久久极品 | 久久久久久久久久久久久久精 | 成人片AV免费看FreeSex | 久久久精品欧美 |