做效能測試定位瓶頸的時候,定位到是因為某些 SQL 語句的查詢慢所影響的,此時我們提出優化方案,肯定希望驗證下優化後的 SQL,此時需要藉助 JMeter 的 JDBC 請求,那麼我們就需要學習 JMeter 如何與 MySQL 進行整合測試。
環境準備
除了 JMeter 外,還需要準備以下軟體和 Jar 包:
- MySQL 資料庫服務端;
- MySQL 的 JDBC 驅動 mysql-connector-java-5.1.13-bin.jar;
其中 MySQL 資料庫下載完成後,按照提示安裝即可,安裝完畢在 cmd 命令列,執行 net start mysql 將其啟動即可;當然這是驗證自己本地資料庫的操作,如果有遠端資料庫,那麼請忽略此操作。
JDBC 驅動直接放置在 Jmeter/lib 目錄下即可。
JMeter 測試 JDBC 請求
JMeter 測試 JDBC 請求,主要就是測試 SQL 查詢語句,那麼常見的查詢語句一般分為以下幾種情況:
- 直接查詢:即 select * form table;
- 帶 where 子句的查詢:select a,b from table where a=''。
下面我們先來看第一種情況。
JMeter 測試不帶條件的 SQL 語句
具體步驟如下:
(1)選中測試計劃,新增 mysql-connector-java-5.1.13-bin.jar:
(2)新增一個執行緒組:
(3)線上程組下,新增一個 JDBC Connection Configuration(連線資料庫元件),專門用來配置所測試的資料庫連線資訊:
配置資訊如下:
(4)線上程組下,新增一個 JDBC Request,填寫真正的 JDBC 請求:
配置資訊如下:
說明一點:這裡用到的 Query Type 為:Select statement,這是一個查詢語句型別,如果在 Query 中查詢的是一條語句,就可以採用這種查詢型別,但是當查詢語句多於一條的時候,就不能在使用此查詢型別,需要設定 Query Type 為:Callable Statement。
另外:當 JDBC 指令碼執行的時候,總是會優先去執行 Select statement 的第一行。
(5)線上程組下,新增檢視結果樹,執行結果,檢視是否成功:
完成以上操作,我們已經可以完成 JMeter 與 MySQL 的整合,並且可以查詢 MySQL 資料庫;那麼如果我們想要每次執行一次查詢,查詢出一列固定的內容,依次查詢出我們需要的列時,就需要藉助引數化。
將查詢語句引數化
一說到引數化,在 JMeter 裡大家就應該想到 CSV Data Set config,本次依舊不例外。
具體步驟如下所示:
(1)線上程組下新增 CSV Data Set config,新建 txt 型別的檔案,命名為 jdbd.txt,其內容如下:
配置 CSV Data Set config 如下:
(2)將 JDBC Request 裡的 Query 語句設定為:select ${jdbc} from cf_tb_sequence
:
(3)新增一個迴圈控制器,將迴圈次數設定為2:
(4)執行後檢視下結果樹。
第一個 JDBC 請求顯示的響應資訊為:
第二個 JDBC 請求顯示的響應資訊為:
經過引數化後,我們可以迴圈查詢每列的資料。
查詢指定條件的語句
有些時候我們查詢時,需要使用帶 where 子句的查詢 SQL,在 JMeter 的 JDBC Request 中同樣可以實現此功能。
即使用佔位符,來替換 SQL 語句中 where 子句指定的部分。
具體步驟如下:
(1)將 JDBC Request 請求中的 Query Type 修改為 Prepared Select Statement:
(2)在 Query 中將 SQL 語句的 where 子句中的引數數值都使用?號進行代替。
舉例:我們想要使用如下 SQL 查詢語句:
select name,current_value from cf_tb_sequence where name = '0103' or current_value = '44';
複製程式碼
我們此時寫為:
select name,current_value from cf_tb_sequence where name = ? or current_value = ?;
複製程式碼
(3)在下方的 Parameter values 中把值填上,多個值用,分隔,數量與?保持一致(第一個值對應第一個?,以此類推即可):
(4)Parameter types 填為 varchar,多個引數用,分隔,數量與?保持一致(不管什麼資料型別均填寫為 varchar):
(5)禁用掉 CSV Data Set config,將迴圈控制器的迴圈次數變為1,此時執行檢視結果樹:
可以看到我們成功查詢出滿足 select name,current_value from cf_tb_sequence where name = '0103' or current_value = '44'
的資料。
結語:
跟大家推薦一個學習資料分享群:747981058,裡面大牛已經為我們整理好了許多的學習資料,有自動化,介面,效能等等的學習資料!人生是一個逆水行舟的過程,不進則退,我們們一起加油吧!