負載測試(load testing)、壓力測試(stress test,應稱為強度測試)和效能測試,這三個概念常常引起混淆,難以區分,從而造成不正確的理解和錯誤的使用。
目前對效能測試沒有明確的定義,一般地,它主要是針對系統的效能指標制定效能測試方案,執行測試用例,得出測試結果來驗證系統的效能指標是否滿足既定值。效能指標裡可能包括系統各個方面的能力,如系統併發處理能力,批量業務處理能力等。
負載測試、壓力測試和效能測試的測試目的不同,但其手段和方法在一定程度上比較相似,通常會使用相同的測試環境和測試工具,而且都會監控系統所占用資源的情況以及其它相應的效能指標,這也是造**們容易產生概念混淆的主要原因。
我們知道,軟體總是執行在一定的環境下,這種環境包括支撐軟體執行的軟硬體環境和影響軟體執行的外部條件。為了讓客戶使用軟體系統感到滿意,必須確保系統執行良好,達到高安全、高可靠和高效能。其中,系統是否具有高效能的執行特徵,不僅取決於系統本身的設計和程式演算法,而且取決於系統的執行環境。系統的執行環境會依賴於一些關鍵因素,例如:
· 系統架構,如分布式伺服器集群還是集中式主機系統等。
· 硬體配置,如伺服器的配置,cpu、記憶體等配置越高,系統的效能會越好。
· 網路頻寬,隨著頻寬的提高,客戶端訪問伺服器的速度會有較大的改善。
· 支撐軟體的選定,如選定不同的資料庫管理系統(oracle、mysql等)和web應用伺服器(tomcat、glassfish、jboss、weblogic等),對應用系統的效能都有影響。
· 外部負載,同時有多少個使用者連線、使用者上載檔案大小、資料庫中的記錄數等都會對系統的效能有影響。一般來說,系統負載越大,系統的效能會降低。
從上面可以看出,使系統的效能達到乙個最好的狀態,不僅通過對處在特定環境下的系統進行測試以完成相關的驗證,而且往往要根據測試的結果,對系統的設計、**和配置等進行調整,提高系統的效能。許多時候,系統效能的改善是測試、調整、再測試、再調整、……乙個持續改進的過程,這就是我們經常說的效能調優(perormance tuning)。
在了解了這樣乙個背景之後,就比較容易理解為什麼在效能測試中常常要談負載測試。從測試的目的出發、從使用者的需求出發,就比較容易區分效能測試、負載測試和壓力測試。效能測試是為了獲得系統在某種特定的條件下(包括特定的負載條件下)的效能指標資料,而負載測試、壓力測試是為了發現軟體系統中所存在的問題,包括效能瓶頸、記憶體洩漏等。通過負載測試,也是為了獲得系統正常工作時所能承受的最大負載,這時負載測試就成為容量測試。通過壓力測試,可以知道在什麼極限情況下系統會崩潰、系統是否具有自我恢復性等,但更多的是為了確定系統的穩定性。
那麼,如何給負載測試、壓力測試下個定義呢?根據上述討論,我們可以給出如下的定義:
· 負載測試是模擬實際軟體系統所承受的負載條件的系統負荷,通過不斷載入(如逐漸增加模擬使用者的數量)或其它載入方式來觀察不同負載下系統的響應時間和資料吞吐量、系統占用的資源(如cpu、記憶體)等,以檢驗系統的行為和特性,以發現系統可能存在的效能瓶頸、記憶體洩漏、不能實時同步等問題。負載測試更多地體現了一種方法或一種技術。
· 壓力測試是在強負載(大資料量、大量併發使用者等)下的測試,檢視應用系統在峰值使用情況下操作行為,從而有效地發現系統的某項功能隱患、系統是否具有良好的容錯能力和可恢復能力。壓力測試分為高負載下的長時間(如24小時以上)的穩定性壓力測試和極限負載情況下導致系統崩潰的破壞性壓力測試。
壓力測試可以被看作是負載測試的一種,即高負載下的負載測試,或者說壓力測試採用負載測試技術。通過壓力測試,可以更快地發現記憶體洩漏問題,還可以更快地發現影響系統穩定性的問題。例如,在正常負載情況下,某些功能不能正常使用或系統出錯的概率比較低,可能乙個月只出現一次,但在高負載(壓力測試)下,可能一天就出現,從而發現有缺陷的功能或其它系統問題。通過負載測試,可以證明這一點,某個電子商務**的訂單提交功能,在10個併發使用者時錯誤率是零,在 50個併發使用者時錯誤率是1%,而在200個併發使用者時錯誤率是20%。
通過負載測試和壓力測試都可以獲得系統正常工作時的極限負載或最大容量。容量測試,自然也是採用負載測試技術來實現,而在破壞性的壓力測試中,容量的確定可以看作是一種副產品——間接結果。
綜合所述,負載測試、壓力測試和效能測試的概念可以概括如下:
· 負載測試是通過改變系統負載方式、增加負載等來發現系統中所存在的效能問題。負載測試是一種測試方法,可以為效能測試、壓力測試所採用。負載測試的載入方式也有很多種,可以根據測試需要來選擇。
· 效能測試是為獲取或驗證系統效能指標而進行測試。多數情況下,效能測試會在不同負載情況下進行。
· 壓力測試通常是在高負載情況下來對系統的穩定性進行測試,更有效地發現系統穩定性的隱患和系統在負載峰值的條件下功能隱患等。
負載測試及壓力測試特點:
效能測試方法通過模擬生產執行的業務壓力量和使用場景組合測試效能是否能夠滿足需要。具備三個特點:
(1)這種方法的目的是驗證系統是否具有系統宣稱具有的能力。
(2)這種方法需要事先了解被測試系統典型場景、並確定效能目標。
(3)這種方法要求在已確定的環境下執行
●負載測試用來測定系統飽和狀態、確定閥值。其特點有:
(1)這種方法的目的是找到系統處理能力的極限;通過「檢測、加壓、閥值」手段找到如「響應時間不超過10秒」,「伺服器平均cpu利用率低於65%」等指標。
(2)這種效能測試方法需要在給定的測試環境下進行,通常也需要考慮被測系統的業務壓力量和典型場景、另外hp mercury loadruner在使用該方法進行「加壓」的時候必須選擇典型場景。
(3)這種效能測試方法一般用來了解系統的效能容量,或者是配合效能調優的時候來使用。
●壓力測試方法測試目標系統在一定飽和狀態下,例如cpu、記憶體等在飽和狀態下、系統能夠處理的session的能力,以及系統是否會出現錯誤。該方法需要在系統cache調優與pool優化方面著手。該方法具備以下特點:
(1)該方法的目的是檢查系統處於壓力情況下的,應用的表現。如增加vu數量、節點數量、併發使用者數量等使應用系統的資源使用保持一定的水平,這種方法的主要目的是檢驗此時的應用表現,重點在於有無錯誤資訊產生,系統對應用的響應時間等。
(2)該方法通過模擬負載在實現壓力。這種模擬需要考慮的層面很多、首先、模擬必須是有效的,我的經驗是需要結合業務系統和軟體架構來定製模擬指標、我測試過一些國內生產的壓力測試工具、他們使用通用的指標來考量、造成很多資訊反饋有很大的水分。需要考慮的層面如:oracle i/o、jvm gc、conn pool等。
(3)該方法還可以測試系統的穩定性。這裡的技巧在於「什麼樣的平台定義乙個多長的壓力測試時間讓其穩定執行才是科學的?
效能測試 壓力測試 負載測試
負載測試 load testing 壓力測試 stress test,應稱為強度測試 和效能測試,這三個概念常常引起混淆,難以區分,從而造成不正確的理解和錯誤的使用。負載測試 壓力測試和效能測試的測試目的不同,但其手段和方法在一定程度上比較相似,通常會使用相同的測試環境和測試工具,而且都會監控系統所...
負載測試 壓力測試和效能測試的異同
負載測試 load testing 壓力測試 stress test,應稱為強度測試 和效能測試,這三個概念常常引起混淆,難以區分,從而造成不正確的理解和錯誤的使用。之前,也有不少討論,比較有名的,應歸為grig gheorghiu s的兩篇部落格 負載測試 壓力測試和效能測試的測試目的不同,但其手...
負載測試 壓力測試和效能測試的異同
負載測試 load testing 壓力測試 stress test,應稱為強度測試 和效能測試,這三個概念常常引起混淆,難以區分,從而造成不正確的理解和錯誤的使用。之前,也有不少討論,比較有名的,應歸為grig gheorghiu s的兩篇部落格 負載測試 壓力測試和效能測試的測試目的不同,但其手...