🔥Jmeter(六) - 從入門到精通 - 建立資料庫測試計劃(詳解教程)

北京-宏哥發表於2025-02-25

1.簡介

  在實際工作中,我們經常會聽到資料庫的效能和穩定性等等,這些有時候也需要測試工程師去評估和測試,因此這篇文章宏哥主要介紹了 jmeter 連線和建立資料庫測試計劃的過程,宏哥在文中透過示例和程式碼非常詳細地介紹給大家,希望對各位小夥伴和童鞋們的學習或者工作具有一定的指導和參考學習價值,遇到類似的問題腦子一片空白的童鞋們可以參考一下。

2.建立資料庫測試計劃

  在本節中,您將學習如何建立基本的測試計劃以測試資料庫伺服器和運算元據庫(增、刪、改、查)。本示例使用 MySQL 資料庫驅動程式。要使用該驅動程式,必須將其包含的.jar 檔案(例如mysql-connector-java-XXX-bin.jar)複製到 JMeter ./lib 目錄。

2.1 新建測試計劃

首先啟動 JMeter 我們新建一個測試計劃,如下圖所示:

2.2 新增使用者

新建完測試計劃以後,我們前邊也講過了,這時候就要新增使用者了。你要對每個 JMeter 測試計劃進行的第一步是新增一個執行緒組(使用者)。執行緒組告訴 JMeter 您要模擬的使用者數量,使用者應多久傳送一次請求以及應傳送多少次請求。

新增使用者的步驟: 首先選擇 “ 測試計劃 ” 來新增ThreadGroup元件,單擊滑鼠右鍵以獲得 “ 新增” 選單,然後選擇 “ 新增” →“ ThreadGroup ”。

新增完使用者以後,你應該在 “測試計劃” 下可以看到 “執行緒組” 元素。如果沒有看到該元素,則透過單擊 “測試計劃” 元素前邊的 “ *+ * ” 來展開 “測試計劃” 樹,就可以看到你新增的使用者了。

最後,你需要修改預設屬性(如果需要修改,不需要修改預設即可)。如果尚未選擇執行緒組元素,則在樹中選擇它。那麼你就可以在 “ JMeter” 視窗的右側部分中看到 “執行緒組控制皮膚”,如下圖所示:

2.3 新增 JDBC 連線配置

透過上邊的操作,我們已經定義了使用者,然後我們必須定義這些使用者所要去的目的地,和目的地建立聯絡。不要這些使用者累死累活的幹了半天的活,知不道是為誰幹得活。在本部分中,你需要和目的地建立聯絡。

具體步驟: 首先選擇ThreadGroup元件。單擊滑鼠右鍵獲得 “ 新增” 選單,然後選擇 “ *新增” →“ *配置元素” →“ **JDBC 連線配置”。然後,選擇此新元件以檢視其控制皮膚。我們需要設定一些欄位,這些欄位相當於諜戰片中的接頭暗號,例如:《智取威虎山》楊子榮與坐山雕的接頭暗號:臉紅什麼?精神煥發。怎麼又黃拉?度 ** 防冷塗的蠟;長江長江我是黃河,等等。暗號對上了,才可以建立聯絡。否則認為有危險,不是建立聯絡,具體在測試中的表現就是報錯了!!!

設定以下欄位(這些假設我們將使用名為 “hongge ” 的 MySQL 資料庫):

  • Variable Name(繫結到池的變數名稱):該名稱自定義,在 JDBC Request 會用到;這需要唯一地標識配置。JDBC Sampler 使用它來標識要使用的配置。
  • Database URL(資料庫 URL):jdbc:mysql:// 資料庫 IP 地址:資料庫埠/資料庫名稱(例如宏哥本地搭建 MySQL:jdbc:mysql://localhost:3306 / hongge)
  • JDBC Driver Class(JDBC 驅動程式類):com.mysql.jdbc.Driver
  • Username(使用者名稱) 資料庫連線的使用者名稱
  • Password(密碼):資料庫連線的密碼

注意:敲腦殼,敲黑板啦!!!

JMeter 使用 “控制皮膚” 中指定的配置設定建立資料庫連線池。在 “ 變數名 ” 欄位的 JDBC 請求中引用該池。可以使用幾種不同的 JDBC Configuration 元素,但是它們必須具有唯一的名稱。每個 JDBC 請求必須引用一個 JDBC 配置池。一個以上的 JDBC 請求可以引用同一個池。

連線配置的控制皮膚的其他欄位可以保留為預設值。如下圖所示:

2.4 新增 JDBC 請求

透過上邊的操作,我們已經定義了使用者並且已經知道目的地和接頭人建立了聯絡之後,然後我們就需要給這些使用者分配具體的任務了(誰負責監視,誰負責刺殺,誰負責放哨)。在本部分中,你將指定要執行的 JDBC 請求(刺殺任務)。

具體步驟: 選擇ThreadGroup元件。單擊滑鼠右鍵獲得 “ 新增” 選單,然後選擇 “ 新增” →“ ** 取樣器” →“ **JDBC 請求”。然後,選擇此新元素以檢視其控制皮膚。

JMeter 按照將請求新增到樹中的順序傳送請求。

首先編輯以下屬性

  • Variable name: 這裡寫入資料庫連線池的名字(和 JDBC Connection Configuration 名字保持一致 )
  • Query: 裡面填入查詢資料庫資料的 SQL 語句(填寫的 SQL 語句末尾不要加 “;”)
  • parameter valus: 資料的引數值
  • parameter types: 資料的引數型別
  • cariable names: 儲存 SQL 語句返回結果的變數名
  • result cariable name: 建立一個物件變數,儲存所有返回結果
  • query timeout: 查詢超時時間
  • handle result set: 定義如何處理由 callable statements 語句返回的結果

如下圖所示:

其中 Query Type(SQL 語句型別)包含十個型別,每個型別作用都不同,下面分別介紹。

1、Select statement

這是一個查詢語句型別;如果 JDBC Request 中的 Query 內容為一條查詢語句,則選擇這種型別。

PS: 多個查詢語句 (不使用引數的情況下) 可以放在一起順序執行,需要設定 Query Type 為:Callable Statement;

如果Query Type為:select Statement,則只執行第一條select語句。

2、Update statement

這是一個更新語句型別(包含 insert 和 update);如果 JDBC Request 中的 Query 內容為一條更新語句,則選擇這種型別。

PS: 如果該型別下寫入多條 update 語句,依然只執行第一條(原因同上,具體下面介紹)。

3、Callable statement

這是一個可呼叫語句型別,CallableStatement 為所有的 DBMS 提供了一種以標準形式呼叫已儲存過程的方法。

已儲存過程儲存在資料庫中,對已儲存過程的呼叫是 CallableStatement 物件所含的內容。

這種呼叫是用一種換碼語法來寫的,有兩種形式:一種形式帶結果引數,另一種形式不帶結果引數;結果引數是一種輸出 (OUT) 引數,是已儲存過程的返回值。

兩種形式都可帶有數量可變的輸入(IN 引數)、輸出(OUT 引數)或輸入和輸出(INOUT 引數)的引數,問號將用作引數的佔位符。

在 JDBC 中呼叫已儲存過程的語法如下所示。注意,方括號表示其間的內容是可選項;方括號本身並不是語法的組成部份。

{call 過程名 [(?, ?, ...)]},返回結果引數的過程的語法為: {? = call 過程名 [(?, ?, ...)]};

不帶引數的已儲存過程的語法類似:{call 過程名}。

更詳細的使用方法可參考這篇文章:http://blog.csdn.net/imust_can/article/details/6989954

4、Prepared select statement

statement 用於為一條 SQL 語句生成執行計劃(這也是為什麼 select statement 只會執行第一條 select 語句的原因),如果只執行一次 SQL 語句,statement 是最好的型別;

Prepared statement 用於繫結變數重用執行計劃,對於多次執行的 SQL 語句,Prepared statement 無疑是最好的型別(生成執行計劃極為消耗資源,兩種實現速度差距可能成百上千倍);

PS: PreparedStatement 的第一次執行消耗是很高的. 它的效能體現在後面的重複執行。

更詳細的解釋請參考這一篇文章:http://blog.csdn.net/jiangwei0910410003/article/details/26143977

5、Prepared update statement

Prepared update statement 和 Prepared select statement 的用法是極為相似的,具體可以參照第四種型別。

6、Commit

commit 的意思是:將未儲存的 SQL 語句結果寫入資料庫表;而在 jmeter 的 JDBC 請求中,同樣可以根據具體使用情況,選擇這種 Query 型別。

7、Rollback

rollback 指的是:撤銷指定 SQL 語句的過程;在 jmeter 的 JDBC 請求中,同樣可以根據需要使用這種型別。

8、AutoCommit(false)

MySQL 預設操作模式就是 autocommit 自動提交模式。表示除非顯式地開始一個事務,否則每條 SQL 語句都被當做一個單獨的事務自動執行;

我們可以透過設定 autocommit 的值改變是否是自動提交 autocommit 模式;

而 AutoCommit(false) 的意思是 AutoCommit(假),即將使用者操作一直處於某個事務中,直到執行一條 commit 提交或 rollback 語句才會結束當前事務重新開始一個新的事務。

9、AutoCommit(true)

這個選項的作用和上面一項作用相反,即:無論何種情況,都自動提交將結果寫入,結束當前事務開始下一個事務。

10、編輯(${})

jmeter 中的 JDBC 請求中的 SQL 語句是無法使用引數的,比如: SELECT * FROM ${table_name} 是無效的。

如果需實現同時多個不同使用者使用不同的 SQL,可以透過把整條 SQL 語句引數化來實現;(把 SQL 語句放在 csv 檔案中,然後在 JDBC Request 的 Query 中使用引數代替 ${SQL_Statement})。

備註: 後面的七項項涉及到資料庫的事務控制等知識點,如果有不明白的地方請自行查詢相關知識。

2.5 新增偵聽器以檢視/儲存測試結果

您需要新增到測試計劃中的最後一個元件是 Listener 。該元素負責將 JDBC 請求的所有結果儲存在檔案中並顯示結果。

具體步驟: 選擇ThreadGroup元件並新增一個結果樹的偵聽器(新增 → 偵聽器 → 結果樹)。

偵聽器顯示結果及控制皮膚。如下圖所示:

2.6 儲存測試

在選單點選 “儲存” 按鈕圖示,選擇儲存位置,點選 “Save” 儲存測試計劃,如下圖所示:

2.7 執行測試

儲存測試計劃以後,在選單執行 → 開始或 **Ctrl + **R 執行測試,如下圖所示:

3.小結

好了今天的建立資料庫測試計劃就分享到這裡,下一篇宏哥帶著小夥伴和童鞋們實戰一下,小試一下牛刀。

相關文章