『動善時』JMeter基礎 — 41、使用JMeter連線資料庫(MySQL)

繁華似錦Fighting發表於2021-06-14

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)驅動放哪?

  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元件詳細說明,和各種用法,在後面的文章會詳細介紹。

相關文章