『動善時』JMeter基礎 — 41、使用JMeter連接資料庫(MySQL)
1、為什麼要使用JMeter連接資料庫
我們測試的軟體項目中,所有的數據都是存儲在資料庫。我們可以直接使用JMeter鏈接資料庫,把需要的數據取出來,和通過介面方式取出來的返回數據進行比對,如果數據一致,說明後台程式開發的沒有問題。
2、JMeter連接資料庫的前提
由於JMeter本身沒有提供鏈接資料庫的功能,所以我們需要藉助三方的工具包來實現。
也就是下載JMeter鏈接MySQL資料庫的JAR包:mysql-connector-java.jar
。
需要根據自己MySQL的版本下載對應驅動,盡量保證其版本和你資料庫的版本一致,至少不低於資料庫版本,否則可能有問題。
MySQL各版本驅動JAR包下載地址://repo1.maven.org/maven2/mysql/mysql-connector-java/
最後將下載好的MySQL驅動,放在JMeter的bin
目錄下。(因為方便找到,也可以放在lib
目錄下,或者公司規範的目錄中。)
提示:
(1)驅動放哪?
- 隨便放:需要在測試計劃介面中進行引入。
- 認真放:放到JMeter的安裝路徑的
lib
目錄下,就不需要再次引入了,需要重啟一次JMeter。
(2)mysql-connector-java
與MySQL對應版本:
官方推薦mysql-connector-java.jar
的8.0
版本,與MySQL Server
的8.0
、5.7
和5.6
版本一起使用。
(我的Mysql版本為5.7.30
,用mysql-connector-java
的5.1
和在8.0
版本都可以,親測。)
(3)mysql-connector-java
與Java對應版本:
官方提示:JRE 1.7
需要使用mysql-connector-java
的5.1.21
及更高版本。
3、JDBC連接配置組件介面介紹
添加JDBC連接配置組件的操作:選中「執行緒組」右鍵 —> 添加 —> 配置元件 —> JDBC Connection Configuration
。
JDBC連接配置介面,如下圖所示:
介面詳細說明:
- 名稱:
JDBC Connection Configuration
組件的自定義名稱,見名知意最好。 - 注釋:即添加一些備註資訊,對該JDBC連接配置組件的簡短說明,以便後期回顧時查看。
1)Variable Name Bound to Pool
:綁定一個資料庫的鏈接。
Variable Name for created pool
:定義資料庫連接池的名稱。(自定義填寫,一般與資料庫同名)
2)Connection pool Configuration
:資料庫連接池配置,一般都保持默認,可根據特定需要進行修改。
Max Number of Connections
:對該資料庫的最大連接數。通常該值設置為0,意思是每個執行緒都使用單獨的資料庫連接,例如,配置在兩個執行緒間不共享。如果你確實想共享連接池,那麼最大連接數應當和執行緒數一樣,以便執行緒不用互相等待,做性能測試時用。Max Wait(ms)
:在連接池中取回連接最大等待時間,單位毫秒。如果超過改時間,將拋出一個錯誤。Time Between Eviction Runs(ms)
:資料庫空閑連接的回收時間間隔,單位毫秒。超過設置的空間時間後,該鏈接任然沒有使用,則會將該空閑鏈接物理性的關閉掉。次選項若為非正數,則空閑連接回收器不停運行。Auto Commit
: 自動提交SQL語句。此處有三個選項true、false、編輯
,如:選擇True後, 每條SQL語句就是一個事務,執行結束後會自動提交到資料庫。否則不會提交,需要自己手動提交。Transaction isolation
:資料庫的事務隔離級別設置,JDBC定義了五種事務隔離級別:TRANSACTION NONE
:不支援事務。TRANSACTION READ UNCOMMITTED
:事務讀取未提交內容,允許臟讀,不可重複讀和幻讀。TRANSACTION READ COMMITTED
:事務讀取已提交讀內容,禁止臟讀,但允許不可重複讀和幻讀。TRANSACTION SERIALIZABLE
:事務序列化。一個事務讀時,其他事務只能讀,不能寫。禁止臟讀、不可重複讀和幻讀。TRANSACTION REPEATABLE READ
:事務重複讀。兩個事務同時進行時,其中一個事務修改數據對另一個事務不會造成影響,即使修改的事務已經提交也不會對另一個事務造成影響。禁止臟讀,不可重複讀,但允許幻讀。DEFAULT
:使用相應資料庫對應的默認事務隔離級別,例如大多數的資料庫系統中,默認事務隔離級別都是Read committed
,而MySQL的默認事務隔離級別是Repeatable Read
。
拓展一點:
- 臟讀(
dirty read
):一個事務讀取了另一個事務尚未提交的數據。- 不可重複讀(
Non-Repeatable Reads
):一個事務的操作導致另一個事務前後兩次讀取到不同的數據。- 幻讀(
Phantom Reads
):一個事務的操作導致另一個事務前後兩次查詢的結果數據量不同。
3)Connection Validation by Pool
:連接池有效性驗證配置,這是JMeter用來檢驗資料庫連接是否有效的一種機制。
Test While Idle
:是否對空閑連接進行有效性驗證(當連接空閑時是否斷開)。當連接空閑時,是否使用Validation Query
去測試連接。Soft Min Evictable Idle Time(ms)
:連接在連接池中閑置的最小時間,超出此閑置時間連接才會被回收,默認值為5000ms。額外的條件是,在連接池中至要保留有minIdle個連接。Validation Query
:用於驗證資料庫是否仍在響應的簡單查詢語句。默認是JDBC驅動的isValid()
方法,它適合於很多資料庫。可以通過jmeter.properties
中jdbc.config.check.query
屬性設置默認的驗證SQL語句。
說明:默認配置的意思:表示每隔5000ms執行一次
Validation Query
選中的SQL,來驗證連接是否有效。默認Validation Query
中填寫任何內容,就表示不進行驗證。
4)Database Connection Configuration
:資料庫連接配置。
Database URL
:資料庫連接 URL 。例如:jdbc:mysql://127.0.0.1:3306/ecshop
,表示本地資料庫,3306埠,資料庫名稱為ecshop。(後邊還可以加上?
來鏈接一些參數配置)JDBC Driver class
:資料庫驅動程式的完全名稱,有下拉菜單可選。Username
:資料庫登錄的用戶名。Password
:資料庫登錄的密碼。
4、JMeter連接資料庫演示
以JMeter連接MySQL資料庫為例。
(1)測試計劃內包含的元件
添加元件操作步驟:
- 創建測試計劃。
- 創建執行緒組:
選中「測試計劃」右鍵 —> 添加 —> 執行緒(用戶) —> 執行緒組
。 - 在執行緒組中,添加配置元件
JDBC Connection Configuration
(JDBC連接配置)組件:選中「執行緒組」右鍵 —> 添加 —> 配置元件 —> JDBC Connection Configuration
。 - 在執行緒組中,添加取樣器
JDBC Request
(JDBC請求)組件:選中「執行緒組」右鍵 —> 添加 —> 取樣器 —> JDBC Request
。 - 在執行緒組中,添加監聽器「察看結果樹」組件:
選中「執行緒組」右鍵 —> 添加 —> 監聽器 —> 察看結果樹
。
最終測試計劃中的元件如下:
點擊運行按鈕,會提示你先保存該腳本,腳本保存完成後會直接自動運行該腳本。
(2)測試計劃中添加鏈接資料庫所依賴的JAR包
在測試計劃中,點擊添加目錄或jar包到ClassPath
後的」瀏覽「按鈕,選擇mysql-connector-java.jar
文件。
(如果放在JMeter的bin
目錄下,直接就能夠看到,非常方便。放在lib\ext
目錄下,每次自動載入也可以。)
如下圖所示:
(3)jdbc connection configuration
組件內容
JDBC Connection Configuration
(JDBC連接配置)組件,就相當於對一個資料庫鏈接配置。
一個測試計劃可以有多個JDBC連接配置組件,只要名稱不重複就行,即Variable Name for created pool
命名不重複。
編輯後的jdbc connection configuration
組件介面,如下圖所示:
我們把該資料庫鏈接命名為ecshop4
,輸入資料庫地址Database URL
,選擇資料庫鏈接所需要的驅動,填寫資料庫的用戶名密碼即可。(也就是填寫第一部分和第四部分的內容,其他內容默認即可)
(4)JDBC Request
組件介面內容
在執行緒組下添加一個專門用於向資料庫發送SQL語句的取樣器JDBC Request
組件。
操作方式:選中「執行緒組」右鍵 —> 添加 —> 取樣器 —> JDBC Request
。
編輯介面中的內容:
- 編輯
Variable Name of Pool declared in JDBC Connection Configuration
的內容:填寫資料庫連接池的名稱,也就是填寫一個定義好的JDBC Connection Configuration
組件中的Variable Name
名稱。例如我們上邊定義的ecshop4
。 Query Type
:選擇查詢類型,我們只進行一條查詢語句,所以選擇Select Statement
即可。- 在
Query:
的輸入框中編寫要發送的SQL語句。
其他默認即可,這樣我們就發送出一個最基礎的JDBC請求了。
如下圖所示:
提示:我們在這裡不詳解的介紹
JDBC Request
組件的說明和使用,在後面文章中,會詳細進行說明。
(5)查看結果
運行該JMeter腳本後,會自動去目標資料庫中進行查詢操作,之後會把查詢的結果返回到JMeter中。
如下圖所示:
以上就是使用JMeter連接資料庫的操作,我們以MySQL為例進行的演示,其他資料庫同理,學會舉一反三。
本篇文章主要說明的是:
- JDBC連接配置(
JDBC Connection Configuration
)組件的詳細說明。- 還有一個是使用JMeter連接資料庫的過程。
- 關於
JDBC Request
組件詳細說明,和各種用法,在後面的文章會詳細介紹。