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