JMeter 如何與 MySQL 進行整合測試

TestingGDR發表於2018-11-29

做效能測試定位瓶頸的時候,定位到是因為某些 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,裡面大牛已經為我們整理好了許多的學習資料,有自動化,介面,效能等等的學習資料!人生是一個逆水行舟的過程,不進則退,我們們一起加油吧!


相關文章