1、為什么要使用JMeter連接數據庫
我們測試的軟件項目中,所有的數據都是存儲在數據庫。我們可以直接使用JMeter鏈接數據庫,把需要的數據取出來,和通過接口方式取出來的返回數據進行比對,如果數據一致,說明后台程序開發的沒有問題。
2、JMeter連接數據庫的前提
由於JMeter本身沒有提供鏈接數據庫的功能,所以我們需要借助三方的工具包來實現。
也就是下載JMeter鏈接MySQL數據庫的JAR包:mysql-connector-java.jar。
需要根據自己MySQL的版本下載對應驅動,盡量保證其版本和你數據庫的版本一致,至少不低於數據庫版本,否則可能有問題。
MySQL各版本驅動JAR包下載地址:https://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組件詳細說明,和各種用法,在后面的文章會詳細介紹。
