性能測試/負載測試/壓力測試差異
性能測試
性能測試的目的不是去找bugs,而是排除系統(tǒng)的瓶頸,以及為以后的回歸測試建立一個基準。在理想的情況下,被測軟件在這個時候已經(jīng)是足夠穩(wěn)定了,所以這個過程得以順利的進行。
一組清晰已定義好的預(yù)期值是讓一次有意義的性能測試的基本要素。給一個web應(yīng)用做性能測試,你要知道至少兩樣東西:在不同并發(fā)用戶數(shù)或者Http連接數(shù)情況下的負載預(yù)期值*
性能測試可以通過負載試驗,試驗的結(jié)果顯示出系統(tǒng)的性能。目的是確保讓你的代碼運行得盡可能高效,以及數(shù)據(jù)庫在給定的操作系統(tǒng)和硬件配置的情況下最優(yōu)化,達到預(yù)期值。
“運行負載試驗->測度性能->調(diào)試系統(tǒng)”這個循環(huán)一直要被重復執(zhí)行到被測試系統(tǒng)達到了期望的性能標準了才可以停。在這個時候,測試人員就可以明了在正常條件下的系統(tǒng)運轉(zhuǎn)怎么樣,同時這些就可以做為以后在回歸測試中,評價新版本的軟件性能的一個標準了。性能測試還有另一個目標就是建立一組被測系統(tǒng)的基準數(shù)據(jù)。
下面就是一些在應(yīng)用程序代碼之外仍可以提高WEB應(yīng)用系統(tǒng)性能的例子:
*使用web緩存裝制,如Squid提供的裝置
*將高訪問量的網(wǎng)頁靜態(tài)化,以避免這些高訪問量對數(shù)據(jù)庫進行大量的調(diào)用
*通過負載平衡的方法來水平縮放WEB服務(wù)器的結(jié)構(gòu)*
*在水平縮放數(shù)據(jù)庫群及將它們分為讀寫服務(wù)器和只讀服務(wù)器后,還要對只讀服務(wù)器群負載平衡。*
*通過增加更多的硬件資源(CPU,內(nèi)存,磁盤等)縱向的縮放WEB及數(shù)據(jù)庫服務(wù)器群
*增加網(wǎng)絡(luò)的帶寬
負載測試
負載測試通常都被定義為給被測系統(tǒng)加上它所能操作的最大任務(wù)數(shù)的過程。負載測試有時也會被稱為“容量測試”,或者“耐久性測試/持久性測試”*
容量測試的例子:
*通過編輯一個巨大的文件來測試文字處理軟件
*通過發(fā)送一個巨大的作業(yè)來測試打印機
*通過成千上萬的用戶郵箱來測試郵件服務(wù)器
*有一種比較特別的容量測試是叫作“零容量測試”,它是給系統(tǒng)加上空任務(wù)來測試的。
耐久性測試/持久性測試的的例子:
*在一個循環(huán)中不停的運行客戶端超過一個擴展時間段*。
負載測試的目的:
*找到一些在測試流程中前面的階段所進行的粗略測試中沒有被找出的bugs,例如,內(nèi)存管理bugs,內(nèi)存泄露,緩沖器溢出等等。
*保證應(yīng)用程序達到性能測試中確定的性能基線。這個可以在運行回歸試驗時,通過加載特定的最大限度的負載來實現(xiàn)。
盡管性能測試和負載測試似乎很像,但他們的目的還是有差異的。一方面,性能測試使用負載測試的技術(shù),工具,以及用不同的負載程度來測度和基準化系統(tǒng)。在另一方面來講,負載測試是在一些已經(jīng)定義好的負載程度上進行測試的,通常對系統(tǒng)加上最大負載之后,系統(tǒng)應(yīng)該仍然可以提供全部功能。
壓力測試
壓力測試是指通過對系統(tǒng)加載過度的資源,來使系統(tǒng)崩潰。進行這個瘋狂行為的主要目的是為了保證系統(tǒng)出故障及可以適當?shù)幕謴?,而這個恢復得怎么樣的特性則是叫做可恢復性。
當性能測試需要的是一個可控制的環(huán)境和不斷的測度的時候,壓力測試則是令人歡喜的引起混亂及不可預(yù)測性。還是舉WEB應(yīng)用程序為例,下面是一些對系統(tǒng)可行的壓力測試方法:
*兩倍的已經(jīng)基線的并發(fā)用戶數(shù)或者HTTP連接數(shù)
*隨機的關(guān)閉及重開連接到服務(wù)器上的網(wǎng)絡(luò)上集線器/路由器的端口(例如,可以通過SNMP命令來實現(xiàn))
*把數(shù)據(jù)庫斷線然后再重啟
*當系統(tǒng)還在運行的時候,重建一個RAID陣列
*WEB和數(shù)據(jù)庫服務(wù)器上運行消耗資源(如CPU,內(nèi)存,磁盤,網(wǎng)絡(luò))的進程
壓力測試并不是簡單的為了一種破壞的快感而去破壞系統(tǒng),實際上它是可以讓測試工程師觀察系統(tǒng)對出現(xiàn)故障時系統(tǒng)的反應(yīng)。系統(tǒng)是不是保存了它出故障時的狀態(tài)?是不是它就突然間崩潰掉了?它是否只是掛在那兒啥也不做了?它失效的時候是不是有一些反應(yīng)*?在重啟之后,它是否有能力可以恢復到前一個正常運行的狀態(tài)?它是否會給用戶顯示出一些有用的錯誤信息,還是只是顯示一些很難理解的十六進制代碼?系統(tǒng)的安全性是否為因為一些不可預(yù)料的故障而會有所降低?這些問題可以一直問下去的。 #p#page_title#e#