Jmeter(六) – 從入門到精通 – 建立數據庫測試計劃(詳解教程)

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 過程名}。

更詳細的使用方法可參考這篇文章://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的第一次執行消耗是很高的. 它的性能體現在後面的重複執行。

更詳細的解釋請參考這一篇文章://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.小結

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

 

您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波  推薦  不要忘記哦!!!

別忘了點 推薦 留下您來過的痕迹

 

Tags: