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