簡介
Jmeter 除了可以發起Http請求,還支持多種協議,可對數據庫和中間件發起請求。通過和數據庫的交互,Jmeter可以實現接口測試和性能測試的數據准備,數據校驗。Jmeter支持多種類型的數據庫,只要在引入數據驅動的時候加載不同的驅動包和數據庫連接信息即可。本文以Mysql為例詳細描述Jmeter如何處理數據庫,包含以下知識點:
-
Jmeter如何配置數據庫連接
-
Jmeter如何發起數據庫請求, 包括只讀請求和更新請求
-
Jmeter如何發起帶變量的數據庫請求
-
Jmeter如何存儲數據庫返回的結果,將其保存為變量供后續使用
Jmeter的核心數據庫組件有:JDBC Connection Configuration(數據庫連接配置)和JDBC Request(數據庫請求)
JDBC Connection Configuration數據庫連接配置
JDBC Connection Configuration是用於配置數據庫連接信息的,主要有如下選項:
-
Variable Name Bound to Pool: 數據庫連接名,JDBC Request通過此變量名定義要查詢的數據庫
-
Database Connection Configuration:
數據庫連接信息(連接URL,Driver類,用戶名,密碼)
-
Connection Pool Configuration:
線程池配置,多線程運行時的性能配置,接口測試采用默認配置
-
Connection Validation by Pool:
連接池驗證信息,采用默認值即可
發起JDBC Request以前需要指明對應的數據庫連接配置,一個Jmeter腳本中可以有多個數據庫連接配置
Jmeter支持不同類型的數據庫,針對不同類型的數據庫要引入不同的jar包(把jar包放到ext目錄下),並在JDBC Connection Configuration中選擇不同的 JDBC Driver class和數據庫URL,具體格式參見下圖
JDBC連接池配置完畢以后就可以通過JDBC Request發起數據庫查詢和更新操作。
JDBC Request 數據庫請求
JDBC Request 表示數據庫請求,功能類似於客戶端的SQL QUERY功能,關鍵配置信息如下:
-
Variable Name Bound to Pool: 指定要操作的數據庫信息,此處的名字為JDBC Connection Configuration中定義的名字
-
SQL Query: 查詢類型,常用的有Select,Update和 Prepared Statement
-
Select Statement: Select語句
-
Update Statement: Insert/Update/Delete 語句
-
Callable Statement:回調語句
-
Prepared Statement:預編譯語句
-
Commit:提交
-
Rollback:回滾
-
AutoCommit:自動回滾
-
Query:數據庫語句,可一次編寫多個數據庫處理語句,此處需要和QueryType匹配
-
當編寫的是Select語句時,QueryType需要選擇Select Statement
-
當編寫的是Update語句時,QueryType需要選擇Update Statement
-
當編寫的語句帶變量時,QueryType需要選擇Prepared Statement
當涉及事物時,需要選擇相應的Commit,Rollback和AutoCommit選項
JDBC Request 參數化數據庫請求
有時候操作數據庫操時,查詢或者更新的值是動態變化的,針對這種情況Jmeter提供了參數化的支持,可以將Jmeter的變量直接應用到數據庫查詢當中。在Jmeter中,參數化數據庫請求非常簡單,只需要把原有的固定值替換為變量即可(Jmeter中$符號表示變量)。Jmeter不僅可以直接引用腳本中已經生成的變量,還可以引用函數助手生成的變量,如下示例就是使用Jmeter函數助手通過RandomString生成隨機變量作為數據庫uname的插入值,通過這種方式實現了隨機往數據庫插入不同用戶名的用戶。
JDBC Request 定義數據庫返回的結果變量
Jmeter通過在JDBC Request中指明Variable names,來存儲數據庫的返回結果。下圖的示例就是查詢出指定條件的用戶,並且把查詢出的前七列數據賦值給n1,n2,n3,n4,n5,n6,n7.
-
在JDBC Request的Variables names中指定變量名,即可將查詢結果按順序存儲到對應的變量名當中,供后續使用。
-
Result variable name會存儲一個匯總的變量結果。
此處需注意,以查詢為例,返回的是一張2維表數據,n1...n7分別對應的是第1列到第7列,具體到某行某列還需通過debug sampler查看Jmeter生成的變量情況。Jmeter會自動根據行的情況擴展n1...n7,生成每個單元格數據對應的變量。
示例:如果查詢出來的數據有2行3列,並且將Variables names定義為a,b,c,則實際生成的變量: A_#=2 (總行數)A_1=第1列, 第1行 A_2=第1列, 第2行 B_#=2 (總行數) B_1=第2列, 第1行 B_2=第2列, 第2行 C_#=2 (總行數) C_1=第3列, 第1行 C_2=第3列, 第2行 Jmeter針對Mysql的數據庫處理的知識點主要包括以上四項,大家可以根據實際工作的需求去擴展使用~詳情可參照Jmeter官網 https://jmeter.apache.org/