『動善時』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)驅動放哪?

  1. 隨便放:需要在測試計劃介面中進行引入。
  2. 認真放:放到JMeter的安裝路徑的lib目錄下,就不需要再次引入了,需要重啟一次JMeter。

(2)mysql-connector-java與MySQL對應版本

image

官方推薦mysql-connector-java.jar8.0版本,與MySQL Server8.05.75.6版本一起使用。

(我的Mysql版本為5.7.30,用mysql-connector-java5.1和在8.0版本都可以,親測。)

(3)mysql-connector-java與Java對應版本

image

官方提示:JRE 1.7需要使用mysql-connector-java5.1.21及更高版本。

3、JDBC連接配置組件介面介紹

添加JDBC連接配置組件的操作:選中「執行緒組」右鍵 —> 添加 —> 配置元件 —> JDBC Connection Configuration

JDBC連接配置介面,如下圖所示:

image

介面詳細說明:

  • 名稱JDBC Connection Configuration組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備註資訊,對該JDBC連接配置組件的簡短說明,以便後期回顧時查看。

1)Variable Name Bound to Pool:綁定一個資料庫的鏈接。

Variable Name for created pool:定義資料庫連接池的名稱。(自定義填寫,一般與資料庫同名)

2)Connection pool Configuration:資料庫連接池配置,一般都保持默認,可根據特定需要進行修改。

  1. Max Number of Connections:對該資料庫的最大連接數。通常該值設置為0,意思是每個執行緒都使用單獨的資料庫連接,例如,配置在兩個執行緒間不共享。如果你確實想共享連接池,那麼最大連接數應當和執行緒數一樣,以便執行緒不用互相等待,做性能測試時用。
  2. Max Wait(ms):在連接池中取回連接最大等待時間,單位毫秒。如果超過改時間,將拋出一個錯誤。
  3. Time Between Eviction Runs(ms):資料庫空閑連接的回收時間間隔,單位毫秒。超過設置的空間時間後,該鏈接任然沒有使用,則會將該空閑鏈接物理性的關閉掉。次選項若為非正數,則空閑連接回收器不停運行。
  4. Auto Commit: 自動提交SQL語句。此處有三個選項true、false、編輯,如:選擇True後, 每條SQL語句就是一個事務,執行結束後會自動提交到資料庫。否則不會提交,需要自己手動提交。
  5. 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用來檢驗資料庫連接是否有效的一種機制。

  1. Test While Idle:是否對空閑連接進行有效性驗證(當連接空閑時是否斷開)。當連接空閑時,是否使用Validation Query去測試連接。
  2. Soft Min Evictable Idle Time(ms):連接在連接池中閑置的最小時間,超出此閑置時間連接才會被回收,默認值為5000ms。額外的條件是,在連接池中至要保留有minIdle個連接。
  3. Validation Query:用於驗證資料庫是否仍在響應的簡單查詢語句。默認是JDBC驅動的 isValid() 方法,它適合於很多資料庫。可以通過jmeter.propertiesjdbc.config.check.query屬性設置默認的驗證SQL語句。
    image

說明:默認配置的意思:表示每隔5000ms執行一次Validation Query選中的SQL,來驗證連接是否有效。默認Validation Query中填寫任何內容,就表示不進行驗證。

4)Database Connection Configuration:資料庫連接配置。

  1. Database URL:資料庫連接 URL 。例如:jdbc:mysql://127.0.0.1:3306/ecshop,表示本地資料庫,3306埠,資料庫名稱為ecshop。(後邊還可以加上來鏈接一些參數配置)
  2. JDBC Driver class:資料庫驅動程式的完全名稱,有下拉菜單可選。
  3. Username:資料庫登錄的用戶名。
  4. Password:資料庫登錄的密碼。

4、JMeter連接資料庫演示

以JMeter連接MySQL資料庫為例。

(1)測試計劃內包含的元件

添加元件操作步驟

  1. 創建測試計劃。
  2. 創建執行緒組:選中「測試計劃」右鍵 —> 添加 —> 執行緒(用戶) —> 執行緒組
  3. 在執行緒組中,添加配置元件JDBC Connection Configuration(JDBC連接配置)組件:選中「執行緒組」右鍵 —> 添加 —> 配置元件 —> JDBC Connection Configuration
  4. 在執行緒組中,添加取樣器JDBC Request(JDBC請求)組件:選中「執行緒組」右鍵 —> 添加 —> 取樣器 —> JDBC Request
  5. 在執行緒組中,添加監聽器「察看結果樹」組件:選中「執行緒組」右鍵 —> 添加 —> 監聽器 —> 察看結果樹

最終測試計劃中的元件如下:

image

點擊運行按鈕,會提示你先保存該腳本,腳本保存完成後會直接自動運行該腳本。

(2)測試計劃中添加鏈接資料庫所依賴的JAR包

在測試計劃中,點擊添加目錄或jar包到ClassPath 後的」瀏覽「按鈕,選擇mysql-connector-java.jar文件。

(如果放在JMeter的bin目錄下,直接就能夠看到,非常方便。放在lib\ext目錄下,每次自動載入也可以。)

如下圖所示:

image

(3)jdbc connection configuration組件內容

JDBC Connection Configuration(JDBC連接配置)組件,就相當於對一個資料庫鏈接配置。

一個測試計劃可以有多個JDBC連接配置組件,只要名稱不重複就行,即Variable Name for created pool命名不重複。

編輯後的jdbc connection configuration組件介面,如下圖所示:

image

我們把該資料庫鏈接命名為ecshop4,輸入資料庫地址Database URL,選擇資料庫鏈接所需要的驅動,填寫資料庫的用戶名密碼即可。(也就是填寫第一部分和第四部分的內容,其他內容默認即可)

(4)JDBC Request組件介面內容

在執行緒組下添加一個專門用於向資料庫發送SQL語句的取樣器JDBC Request組件。

操作方式:選中「執行緒組」右鍵 —> 添加 —> 取樣器 —> JDBC Request

編輯介面中的內容:

  1. 編輯Variable Name of Pool declared in JDBC Connection Configuration的內容:填寫資料庫連接池的名稱,也就是填寫一個定義好的JDBC Connection Configuration組件中的Variable Name名稱。例如我們上邊定義的ecshop4
  2. Query Type:選擇查詢類型,我們只進行一條查詢語句,所以選擇Select Statement即可。
  3. Query:的輸入框中編寫要發送的SQL語句。

其他默認即可,這樣我們就發送出一個最基礎的JDBC請求了。

如下圖所示:

image

提示:我們在這裡不詳解的介紹JDBC Request組件的說明和使用,在後面文章中,會詳細進行說明。

(5)查看結果

運行該JMeter腳本後,會自動去目標資料庫中進行查詢操作,之後會把查詢的結果返回到JMeter中。

如下圖所示:

image

以上就是使用JMeter連接資料庫的操作,我們以MySQL為例進行的演示,其他資料庫同理,學會舉一反三。

本篇文章主要說明的是:

  • JDBC連接配置JDBC Connection Configuration)組件的詳細說明。
  • 還有一個是使用JMeter連接資料庫的過程。
  • 關於JDBC Request組件詳細說明,和各種用法,在後面的文章會詳細介紹。