JDBC Connection Configuration 數據庫連接配置
數據庫連接配置器,用來連接數據庫,是一個連接池。 界面介紹
1.右鍵線程組->添加->配置元件->JDBC Connection Configuration
-
Variable Name for created pool:數據庫連接池的名稱,我們可以有多個jdbc connection configuration,每個可以起個不同的名稱,在jdbc request中可以通過這個名稱選擇合適的連接池進行使用。
-
Max Number of Connections:連接池的最大連接數,在大多數情況下,將其設置為零(0)。這意味着每個線程將獲得其自己的池,其中包含單個連接,即線程之間不共享連接。如果你真的想使用共享池),那么將最大鏈接數設置為與線程數相同,以確保線程不會相互等待。
-
Max Wait (ms):最大超時間
-
Time Between Eviction Runs (ms) :空閑連接池清理的時間間隔。
-
Auto Commit:事務是否自動提價選項,比如Oracle執行一條更新操作,不Commit一下,數據不會更新到數據庫中的,這個選項幫我們自動提交。
-
Transaction Isolation:JDBC事務控制 數據庫的事務控制ADIC傳送門
-
-
TRANSACTION_NONE:不支持的事務,TRANSACTION-NONE=0
-
TRANSACTION_READ_UNCOMMITEED:允許臟讀,不可重復讀和幻讀
-
TRANSACTION_READ_COMMITEED:禁止臟讀,允許不可重復讀和幻讀
-
TRANSACTION_REPEATABLE_READ:禁止臟讀和不可重復讀,允許幻讀
-
TRANSACTION_SERILIZABLE:禁止臟讀,不可重復讀和幻讀
-
DEFAULT:JMETER設定的。默認值是1,其實是TRANSACTION_READ_COMMITEED 禁止臟讀,允許不可重復讀和幻讀。
-
什么是臟讀,不可重復讀,幻讀
-
臟讀:一個事務讀取另外一個事務未提交的數據。 不可重復讀:一個事務再次讀取之前的數據時,這個數據已經被另外一個事務修改。 幻讀:一個事務重新執行一個查詢,返回的記錄包含了其他事務提交的新紀錄。
-
Test While Idle:測試池的空閑連接,請參閱BasicDataSource.html#getTestWhileIdle。查詢驗證。
-
Soft Min Evictable Idle Time(ms):
-
Validation Query:驗證SQL的語法
-
Database URL:數據庫地址,以下為不同數據庫的連接方式
MySQL Driver class com.mysql.jdbc.Driver Database URL jdbc:mysql://host[:port]/dbname PostgreSQL Driver class org.postgresql.Driver Database URL jdbc:postgresql:{dbname} Oracle Driver class oracle.jdbc.OracleDriver Database URL jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid}))) Ingress (2006) Driver class ingres.jdbc.IngresDriver Database URL jdbc:ingres://host:port/db[;attr=value] Microsoft SQL Server (MS JDBC driver) Driver class com.microsoft.sqlserver.jdbc.SQLServerDriver Database URL jdbc:sqlserver://host:port;DatabaseName=dbname Apache Derby Driver class org.apache.derby.jdbc.ClientDriver Database URL jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]
-
JDBC Driver class:數據庫類型,數據庫的驅動包需要放到
/lib
目錄下,使用mysql依賴mysql-connector-java-8.0.13.jar
下載地址 -
Username:用戶名
-
Password:密碼
JDBC Request JDBC 請求
數據庫連接配置器,用來連接數據庫,是一個連接池。 界面介紹
右鍵線程組->添加->取樣器->JDBC Request
-
Variable Name of Pool declared in JDBC Connection Configuration(必須) :連接池綁定的JMeter變量的名稱。這必須與JDBC連接配置的“變量名稱”字段一致。
-
Query Type:查詢類型,根據語句設置查詢的類型
- Select Statement:執行查詢語句的時候使用。可以使用
${}
引入參數,不可使用占位符進行參數化 - Update Statement :執行更新操作的時候用到,包括插入與修改。可以使用
${}
引入參數,不可使用占位符進行參數化。 - Callable Statement:對應JDBC規范中的CallableStaenent對象,它為所有的DBMS提供了一種以標准形式調用存儲過程的方法,白話就是可以調用存儲過程,也就是可以有入參,有占位符。可以使用
${}
引入參數,也可以使用占位符引入參數。 - Prepared Select Statement:預編譯查詢語句,與Select Statement相比效率更好,可以使用
${}
引入參數,可以使用占位符引入參數。 - Prepared Update Statement:預編譯更新語句,包括查詢與插入,與Update Statement 效率更好,支持占位符引入參數。 可以使用
${}
引入參數,可以使用占位符引入參數。 - Commit:當前連接狀態中的內容提交,查詢語句中的SQL在執行完成后馬上提交,使用該項時JDBC Connection Configuration 中的 Auto commint 選項為False。可以使用
${}
引入參數,可以使用占位符引入參數。 - Rollback:當前連接狀態中的內容可回滾。可以使用
${}
引入參數,可以使用占位符引入參數。 - Autocommit(false):指明不要自動提交,如果JDBC Connection Configuration 中的 Auto commint為true 覆蓋該選項。可以使用
${}
引入參數,可以使用占位符引入參數。 - Autocommit(true):指明允許自動提價。可以使用
${}
引入參數,可以使用占位符引入參數。 - Edit :變量應用,引用的為上述的任意一個變量
- Select Statement:執行查詢語句的時候使用。可以使用
-
SQL Query SQL查詢語句,
不需要輸入行尾的分好
-
Parameter values:參數值,多個值用
,
分割 -
Parameter types:參數類型,
INTEGER, DATE, VARCHAR, DOUBLE
-
Variable Names:SQL的執行語句往往返回的是一個數據集,我們可以把它保存的變量中,讓后面的元件調用。
-
Result variable name :上面的 Variable Names中額變量是個數與隊列對應的,Result variable name創建一個數組,保存所有返回的結果。
-
Query timeout:定義查查詢時間
-
Handle result set:定義如何處理由callable- statements語句返回的結果
實例1 連接mysql數據庫 ,並查詢數據庫的表
-
連接mysql數據庫,
- 定義數據庫連接池名稱:MYSQL
- URL:
jdbc:mysql://rm-wz955w1jr2dnj6u9bo.mysql.rds.aliyuncs.com:3306/majiang
- JDBC Driver class:com.mysql.jdbc.Driver
- Username:
- Password:
查詢全部表 :
查詢結果 :
實例2 對查詢數據進行參數化
- 使用${}引入參數 用戶自定義的變量添加用戶昵稱變量
nickname
- 查詢語句中使用通過
${nickanme}
引入變量, 注意加括號,不然報錯
- 通過占位符
?
引入變量 Parameter values:hunan%, 9586 Parameter types:VARCHAR,INTEGER 查詢語句
select Nike, id, unionid, openid from user where Nike like ? and openid=?
實例3 、引用返回的的結果
- 通過設置Variable Names來保存變量 查詢語句
select Nike, id, unionid, openid from user where Nike like ? and openid<?
我們的查詢語句中指定了4個返回的值,也就是說會返回4個列。在Variable Names 設置A,B,C,D
。A
保存第一列的數據,B
保存第二列的數據以此類推。那么如下變量會被設置為。
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}...來獲取相應的值
使用Beanshell Sampler 輸出結果:
日志結果:
請求返回的結果:
- 通過Result variable name保存結果,Result variable name會將返回的結果保存為數組,通過
vars.getObject("result").get(0).get("Nike")
獲取值
輸出語句:
執行結果:
- 在http元件中使用結果,通過函數
__jexl3()
執行vars.getObject("result").get(0).get("Nike")