?1.簡介
在實際工作中,我們經(jīng)常會聽到數(shù)據(jù)庫的性能和穩(wěn)定性等等,這些有時候也需要測試工程師去評估和測試,因此這篇文章宏哥主要介紹了jmeter連接和創(chuàng)建數(shù)據(jù)庫測試計劃的過程,宏哥在文中通過示例和代碼非常詳細地介紹給大家,希望對各位小伙伴和童鞋們的學(xué)習(xí)或者工作具有一定的指導(dǎo)和參考學(xué)習(xí)價值,遇到類似的問題腦子一片空白的童鞋們可以參考一下。
2.建立數(shù)據(jù)庫測試計劃
在本節(jié)中,您將學(xué)習(xí)如何創(chuàng)建基本的測試計劃以測試數(shù)據(jù)庫服務(wù)器和操作數(shù)據(jù)庫(增、刪、改、查)。本示例使用MySQL數(shù)據(jù)庫驅(qū)動程序。要使用該驅(qū)動程序,必須將其包含的.jar文件(例如mysql-connector-java-XXX-bin.jar)復(fù)制到JMeter ./lib目錄。
2.1新建測試計劃
首先啟動JMeter我們新建一個測試計劃,如下圖所示:
2.2添加用戶
新建完測試計劃以后,我們前邊也講過了,這時候就要添加用戶了。你要對每個JMeter測試計劃進行的第一步是添加一個線程組(用戶)。線程組告訴JMeter您要模擬的用戶數(shù)量,用戶應(yīng)多久發(fā)送一次請求以及應(yīng)發(fā)送多少次請求。
添加用戶的步驟: 首先選擇“測試計劃”來添加ThreadGroup元件,單擊鼠標右鍵以獲得“ 添加”菜單,然后選擇“ 添加” →“ ThreadGroup”。
添加完用戶以后,你應(yīng)該在“測試計劃”下可以看到“線程組”元素。如果沒有看到該元素,則通過單擊“測試計劃”元素前邊的“ + ”來展開 “測試計劃”樹,就可以看到你添加的用戶了。
最后,你需要修改默認屬性(如果需要修改,不需要修改默認即可)。如果尚未選擇線程組元素,則在樹中選擇它。那么你就可以在“ JMeter”窗口的右側(cè)部分中看到“線程組控制面板”,如下圖所示:
2.3添加JDBC連接配置
通過上邊的操作,我們已經(jīng)定義了用戶,然后我們必須定義這些用戶所要去的目的地,和目的地建立聯(lián)系。不要這些用戶累死累活的干了半天的活,知不道是為誰干得活。在本部分中,你需要和目的地建立聯(lián)系。
具體步驟: 首先選擇ThreadGroup元件。單擊鼠標右鍵獲得“ 添加” 菜單,然后選擇“ 添加” →“ 配置元素” →“ JDBC連接配置”。然后,選擇此新元件以查看其控制面板。我們需要設(shè)置一些字段,這些字段相當于諜戰(zhàn)片中的接頭暗號,例如:《智取威虎山》楊子榮與坐山雕的接頭暗號:臉紅什么?精神煥發(fā)。怎么又黃拉?度防冷涂的蠟;長江長江我是黃河,等等。暗號對上了,才可以建立聯(lián)系。否則認為有危險,不是建立聯(lián)系,具體在測試中的表現(xiàn)就是報錯了?。?!
設(shè)置以下字段(這些假設(shè)我們將使用名為“hongge ” 的MySQL數(shù)據(jù)庫):
- Variable Name(綁定到池的變量名稱):該名稱自定義,在JDBC Request會用到;這需要唯一地標識配置。JDBC Sampler使用它來標識要使用的配置。
- Database URL(數(shù)據(jù)庫URL):jdbc:mysql:// 數(shù)據(jù)庫IP地址:數(shù)據(jù)庫端口/數(shù)據(jù)庫名稱(例如宏哥本地搭建MySQL:jdbc:mysql://localhost:3306 / hongge)
- JDBC Driver Class(JDBC驅(qū)動程序類):com.mysql.jdbc.Driver
- Username(用戶名) : 數(shù)據(jù)庫連接的用戶名
- Password(密碼):數(shù)據(jù)庫連接的密碼
注意:敲腦殼,敲黑板啦?。?!
JMeter使用“控制面板”中指定的配置設(shè)置創(chuàng)建數(shù)據(jù)庫連接池。在“ 變量名 ”字段的JDBC請求中引用該池??梢允褂脦追N不同的JDBC Configuration元素,但是它們必須具有唯一的名稱。每個JDBC請求必須引用一個JDBC配置池。一個以上的JDBC請求可以引用同一個池。
連接配置的控制面板的其他字段可以保留為默認值。如下圖所示:
2.4添加JDBC請求
通過上邊的操作,我們已經(jīng)定義了用戶并且已經(jīng)知道目的地和接頭人建立了聯(lián)系之后,然后我們就需要給這些用戶分配具體的任務(wù)了(誰負責監(jiān)視,誰負責刺殺,誰負責放哨)。在本部分中,你將指定要執(zhí)行的JDBC請求(刺殺任務(wù))。
具體步驟: 選擇ThreadGroup元件。單擊鼠標右鍵獲得“ 添加” 菜單,然后選擇“ 添加” →“ 采樣器” →“ JDBC請求”。然后,選擇此新元素以查看其控制面板。
JMeter按照將請求添加到樹中的順序發(fā)送請求。
首先編輯以下屬性
- Variable name: 這里寫入數(shù)據(jù)庫連接池的名字(和JDBC Connection Configuration名字保持一致 )
- Query: 里面填入查詢數(shù)據(jù)庫數(shù)據(jù)的SQL語句(填寫的SQL語句末尾不要加“;”)
- parameter valus: 數(shù)據(jù)的參數(shù)值
- parameter types: 數(shù)據(jù)的參數(shù)類型
- cariable names: 保存SQL語句返回結(jié)果的變量名
- result cariable name: 創(chuàng)建一個對象變量,保存所有返回結(jié)果
- query timeout: 查詢超時時間
- handle result set: 定義如何處理由callable statements語句返回的結(jié)果
如下圖所示:
其中Query Type(SQL語句類型)包含十個類型,每個類型作用都不同,下面分別介紹。
1、Select statement
這是一個查詢語句類型;如果JDBC Request中的Query內(nèi)容為一條查詢語句,則選擇這種類型。
PS: 多個查詢語句(不使用參數(shù)的情況下)可以放在一起順序執(zhí)行,需要設(shè)置Query Type為:Callable Statement;
如果Query Type為:select Statement,則只執(zhí)行第一條select語句。
2、Update statement
這是一個更新語句類型(包含insert和update);如果JDBC Request中的Query內(nèi)容為一條更新語句,則選擇這種類型。
PS: 如果該類型下寫入多條update語句,依然只執(zhí)行第一條(原因同上,具體下面介紹)。
3、Callable statement
這是一個可調(diào)用語句類型,CallableStatement 為所有的 DBMS 提供了一種以標準形式調(diào)用已儲存過程的方法。
已儲存過程儲存在數(shù)據(jù)庫中,對已儲存過程的調(diào)用是 CallableStatement 對象所含的內(nèi)容。
這種調(diào)用是用一種換碼語法來寫的,有兩種形式:一種形式帶結(jié)果參數(shù),另一種形式不帶結(jié)果參數(shù);結(jié)果參數(shù)是一種輸出 (OUT) 參數(shù),是已儲存過程的返回值。
兩種形式都可帶有數(shù)量可變的輸入(IN 參數(shù))、輸出(OUT 參數(shù))或輸入和輸出(INOUT 參數(shù))的參數(shù),問號將用作參數(shù)的占位符。
在 JDBC 中調(diào)用已儲存過程的語法如下所示。注意,方括號表示其間的內(nèi)容是可選項;方括號本身并不是語法的組成部份。
{call 過程名[(?, ?, ...)]},返回結(jié)果參數(shù)的過程的語法為: {? = call 過程名[(?, ?, ...)]};
不帶參數(shù)的已儲存過程的語法類似:{call 過程名}。
更詳細的使用方法可參考這篇文章:blog.csdn.net/imust_can/a…
4、Prepared select statement
statement用于為一條SQL語句生成執(zhí)行計劃(這也是為什么select statement只會執(zhí)行第一條select語句的原因),如果只執(zhí)行一次SQL語句,statement是最好的類型;
Prepared statement用于綁定變量重用執(zhí)行計劃,對于多次執(zhí)行的SQL語句,Prepared statement無疑是最好的類型(生成執(zhí)行計劃極為消耗資源,兩種實現(xiàn)速度差距可能成百上千倍);
PS: PreparedStatement的第一次執(zhí)行消耗是很高的. 它的性能體現(xiàn)在后面的重復(fù)執(zhí)行。
更詳細的解釋請參考這一篇文章:blog.csdn.net/jiangwei091…
5、Prepared update statement
Prepared update statement和Prepared select statement的用法是極為相似的,具體可以參照第四種類型。
6、Commit
commit的意思是:將未存儲的SQL語句結(jié)果寫入數(shù)據(jù)庫表;而在jmeter的JDBC請求中,同樣可以根據(jù)具體使用情況,選擇這種Query類型。
7、Rollback
rollback指的是:撤銷指定SQL語句的過程;在jmeter的JDBC請求中,同樣可以根據(jù)需要使用這種類型。
8、AutoCommit(false)
MySQL默認操作模式就是autocommit自動提交模式。表示除非顯式地開始一個事務(wù),否則每條SQL語句都被當做一個單獨的事務(wù)自動執(zhí)行;
我們可以通過設(shè)置autocommit的值改變是否是自動提交autocommit模式;
而AutoCommit(false)的意思是AutoCommit(假),即將用戶操作一直處于某個事務(wù)中,直到執(zhí)行一條commit提交或rollback語句才會結(jié)束當前事務(wù)重新開始一個新的事務(wù)。
9、AutoCommit(true)
這個選項的作用和上面一項作用相反,即:無論何種情況,都自動提交將結(jié)果寫入,結(jié)束當前事務(wù)開始下一個事務(wù)。
10、編輯(${})
jmeter中的JDBC請求中的SQL語句是無法使用參數(shù)的,比如: SELECT * FROM ${table_name} 是無效的。
如果需實現(xiàn)同時多個不同用戶使用不同的SQL,可以通過把整條SQL語句參數(shù)化來實現(xiàn);(把SQL語句放在csv文件中,然后在JDBC Request的Query 中使用參數(shù)代替 ${SQL_Statement})。
備注: 后面的七項項涉及到數(shù)據(jù)庫的事務(wù)控制等知識點,如果有不明白的地方請自行查詢相關(guān)知識。
2.5添加偵聽器以查看/存儲測試結(jié)果
您需要添加到測試計劃中的最后一個元件是 ****Listener。該元素負責將JDBC請求的所有結(jié)果存儲在文件中并顯示結(jié)果。
具體步驟: 選擇ThreadGroup元件并添加一個結(jié)果樹的偵聽器(添加 → 偵聽器 → 結(jié)果樹)。
偵聽器顯示結(jié)果及控制面板。如下圖所示:
2.6保存測試
在菜單點擊“保存”按鈕圖標,選擇保存位置,點擊“Save”保存測試計劃,如下圖所示:
2.7運行測試
保存測試計劃以后,在菜單運行 → 開始或 Ctrl + R運行測試,如下圖所示:
3.小結(jié)
好了今天的創(chuàng)建數(shù)據(jù)庫測試計劃就分享到這里,下一篇宏哥帶著小伙伴和童鞋們實戰(zhàn)一下,小試一下牛刀。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 ** 推薦** 不要忘記哦?。?!