JMeter 測試 MySQL 資料庫
做性能測試定位瓶頸的時候,定位到是因為某些 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"的數據。
※做程序員累的時候怎麼辦?
※使用systemtap調試工具分析MySQL的性能
TAG:程序員小新人學習 |