本文主要的內容是使用Jmeter對數據庫進行數據的操作,包括單條語句的增刪改查,多條語句的增刪改查,本文主要介紹操作流程,關於流程的運作原理,對原理感興趣的同學可自行查閱資料。
首先需要准備一個數據庫驅動Jar包【mysql-connector-java-bin.jar】可以直接百度下載,版本不建議特別低,jar包需要Jmeter引用才能使用,jar包引用如下:
將jar放入Jmeter安裝/解壓文件路徑:eg:D:\apache-jmeter-5.0\apache-jmeter-5.0\lib下,需要重啟Jmeter才能生效
驅動包的作用:沒有數據庫驅動,就不能連接數據庫,Jmeter在沒有驅動的情況下鏈接數據庫會報:no suitable jdbc driver 錯誤。
以下是常見的數據庫驅動:
圖一
漢化Jmeter:打開JMeter解壓/安裝路徑下的文件JMeter.properties,在#language=en下面添加:language=zh_CN保存文件,並重啟JMeter。
一:主要配置元件介紹(以下為增刪改查操作的共有元件)
如圖主要元件如下:
1、 添加測試計划:各個值直接默認就好,為空的地方也不用填
2、添加線程組:各個值默認,為空的地方也不用填
3、添加JDBC配置文件(JDBC Connection Configuration):
重要字段介紹
名稱:設置的是該元件的名稱,設置名稱后【測試計划】樹配置元件也會對應更改
Variable Name Bound to Pool:數據庫連接池的名稱。可以有多個jdbc connection configuration ,每個可以起不同的名稱,在Jmeter其他元件中只要需要用到數據庫的連接信息,直接引用該變量的變量名即可。可以理解為如果Jmeter其他的元件要獲取數據庫的連接信息,可以通過這個名稱進行獲取。
注意:變量的命名規范:命名要清晰,建議使用英文,便於引用。
Connection Pool Configuration 、 Connection Validation by Pool 這兩部分內容不需要更改,使用默認值即可
Database Connection Configuration(以MySQL數據庫為例):
Database URL: jdbc:mysql://host[:port]/dbname ——>【數據庫地址:jdbc:mysql://數據庫主機名或IP地址:端口號/需要使用的庫名】
JDBC Driver class:com.mysql.jdbc.Driver【其他數據庫跟進圖一展示進行選擇】
Username:數據庫名稱,即用戶名
Password:數據庫鏈接密碼
4、添加配JDBC Request 數據庫請求
重要字段解釋:
名稱:同JDBC配置文件
Variable Name Bound to Pool :引用JDBC Connection Configuration元件里面的參數值【test】寫法兩邊保持一致即可,不需要使用${}進行引用。錯誤的不存在的參數不能被引用。
Query type:必填,指SQL請求類型
Select statement:查詢語句類型(select),只支持一條查詢語句,多條查詢語句只執行第一條
Update statement:更新語句類(insert,update,delete),只支持一條更新語句,多條更新語句只執行第一條
Prepared Select statement:支持多條查詢(select)語句,查詢響應數據只展示第一條SQL的查詢結果
Prepared Update statement:支持多條更新(insert,update,delete)語句,響應數據展示多條更新提示
Callable Statement:支持多條查詢、更新(insert,update,delete,select)語句,響應數據展示展示多條數據更新結果。如果是多條select語句同時查詢,建議使用Callable Statement,響應數據可以展示多條查詢結果值
Parameter values:填寫參數的具體的值,或者參數的名稱。可以利用此字段對SQL語句進行參數化
Parameter types:指Parameter Values參數的數據類型,例如:integer,String,double類型
Parameter values 和Parameter types:必須成對出現,且SQL語句中有多個參數,就必須有多少個parameter values 和Parameter types。
Variable names:自己設置的變量名稱,用於存放select操作返回的查詢結果。有多個字段返回時,需用逗號隔開
Result variable name:用於存放select操作返回的查詢結果集
Query timeout:查詢超時時間
Handle result set:定義如何處理由callable statements 語句返回的結果
5、添加察看結果樹
在響應數據——Response Body :查看對數據庫進行增刪改查后的返回消息
6、測試表名city,表結構如下:
CREATE TABLE `city` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`code` varchar(255) NOT NULL,
`province_code` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=405 DEFAULT CHARSET=utf8;
二:共有元件數據配置如下
1、 添加測試計划:頁面數據顯示默認數值即可無需更改
2、 添加線程組:頁面數據顯示默認數值即可無需更改
3、添加配置元件——JDBC Connection Configuration數據庫連接配置元件
Variable Name Bound to Pool:test
Connection Pool Configuration 、 Connection Validation by Pool:默認值
Database Connection Configuration(以MySQL數據庫為例):
Database URL: jdbc:mysql://ip:3306/庫名?characterEncoding=UTF-8&allowMultiQueries=true
JDBC Driver class:com.mysql.jdbc.Driver
Username:hjphXXX
Password:XXXXX
注意:
A.【allowMultiQueries設置為true,就可執行多條sql語句,參數與參數之間連接需要使用“&”符號。使用場景:如果執行多條SQL語句就必須要加這個字段,否則會報錯;執行一條SQL語句可以不用加這個字段】
B.【characterEncoding=UTF-8:鏈接的數據庫的編碼格式,沒有設置該字段,將不會轉譯中文字符】
4、 添加取樣器——JDBC Request
Variable Name Bound to Pool :test
Query type:根據不同的SQL類型進行設置
其他字段根據實際情況進行填寫
5、 添加察看結果樹
請求為綠色表示執行成功,響應數據顯示1 updates 即為一條更新數據執行成功
請求為紅色表示執行失敗,根據提示修改自己配置的數據,SQL直到成功
三:執行增刪改查操作
1、 單個insert語句操作
共有元件及字段不變
變更:JDBC Request—Query Type配置:Update Statement
SQL:insert into city (name,code,province_code) values ("北京市","500000","520000");
執行結果:
2、多個inset語句操作
共有元件及字段不變
變更:JDBC Request—Query Type配置:Prepared Update Statement
SQL:
insert into city (name,code,province_code) values ("城市1","510000","512023");
insert into city (name,code,province_code) values ("城市2","510000","512023");
insert into city (name,code,province_code) values ("城市3","510000","512023");
查看執行結果:三條數據更新成功
3、單個Delete語句操作
共有元件及字段不變
變更:JDBC Request—Query Type配置:Update Statement
SQL1:delete from city where id=394;
執行結果:
4、 多個delete語句操作
共有元件及字段不變
變更:JDBC Request—Query Type配置:Prepared Update Statement
方法一:利用where語句
SQL1:delete from city where id in (388,399,320); 可以實現批量刪除
SQL2:delete from city where id > 381; 可以實現批量刪除
方法二:利用like 語句
SQL:delete from city where name like "%五家%";
方法三:利用 between and 語句
SQL:delete from city where id between 385 and 390;
方法四:執行多條SQL語句
delete from city where id =358;
delete from city where id =342;
delete from city where id =210;
delete from city where id =350;
執行即可
5、 Update 操作
Update 的操作和Delete的操作是一樣,所有的配置以及配置的值都與Delete相同,只是SQL不同
SQL1:update city set name ="測試city" where ID = 381;
執行即可
6、 單個select 操作
共有元件及字段不變
變更:JDBC Request—Query Type配置:Select Statement
SQL1:select * from city where id >358;
SQL2:select * from city where id = 342;
7、多條SQL語句同時查詢
共有元件及字段不變
變更:JDBC Request—Query Type配置:Callable Statement
方法一:SQL:
select * from city where id = 358;
select * from city where id = 342;
執行結果:在此場景下Callable Statemen會顯示多條查詢結果如下圖,而Prepared Select Statement值顯示一條查詢結果
方法二:Select查詢簡單參數化
JDBC Request配置:
Query Type:Callable Statement
Parameter value:410,411
Parameter types:integer,integer
select * from city where id = ?;
select * from city where id = ?;
第一個問號代表:第一個參數值
第二個問號代表:第二個參數值
執行結果:
方法三:CSV進行多條select語句查詢
使用場景:同一類型的數據,需要查詢多條
SQL1:select * from city where id = ? ;
配置文件數據展示如下:
每一個配置文件設置如下:
線程組:
JDBC Connection Configuration:
循環控制器:
CSV 數據文件設置:
引用的CSV文件:
JDBC Request:
執行結果:
以上部分就是關於Jmeter對數據庫增刪改查操作的具體方法,Jmeter對數據庫的操作靈活多變,方法較多,並沒有統一的方法,達到最終的目的即可。