性能測試、壓力測試、負載測試的區別
負載測試(Load testing)、壓力測試(Stress Test,應稱為強度測試)和性能測試,這三個概念常常引起混淆、難以區分,從而造成不正確的理解和錯誤的使用。雖然負載測試、壓力測試和性能測試的測試目的不同,但其手段和方法在一定程度上比較相似,通常會使用相同的測試環境和測試工具,而且都會監控系統所占用資源的情況以及其它相應的性能指標,這也是造成人們容易產生概念混淆的主要原因。
l影響軟件運行的因素
軟件通常是運行在特定環境中,這種環境包括支撐軟件運行的軟硬件配置和影響軟件運行的外部因素。為了讓客戶使用軟件系統有更好的體驗感,必須確保系統運行良好,達到高安全、高可靠和高性能。其中,系統是否具有高性能的運行特征,不僅取決于系統本身的設計和程序算法,而且取決于系統的運行環境。系統的運行環境會依賴于一些關鍵因素,例如:
1、系統架構:如分布式服務器集群還是集中式主機系統等;
2、硬件配置:如服務器的配置,CPU、內存等配置越高,系統的性能會越好;
3、網絡帶寬:隨著帶寬的提高,客戶端訪問服務器的速度會有較大的改善;
4、支撐軟件的選定:如選定不同的數據庫管理系統(Oracle、MySQL等)和web應用服務器(Tomcat、GlassFish、Jboss、WebLogic等),對應用系統的性能都有影響;
5、外部負載:同時有多少個用戶訪問、用戶上傳文件大小、數據庫中的記錄數等都會對系統的性能有影響,一般來說,系統負載越大,系統的性能會降低。
l性能、壓力、負載測試概念
性能測試是通過自動化的測試工具模擬多種正常峰值以及異常負載條件來對系統的各項性能指標進行測試。壓力測試和負載測試都屬于性能測試,兩者一般結合進行。
負載測試是模擬軟件系統所承受的負載條件的系統負荷,通過不斷加壓(如逐漸增加模擬用戶數量)或其它加載方式來觀察不同負載下系統的響應時間和數據吞吐量、系統占用的資源(如CPU/內存/磁盤讀寫)等,以檢驗系統的行為和特性,以發現系統可能存在的性能瓶頸、內存泄漏、不能實時同步等問題,負載更多地體現了一種方法或技術。
壓力測試是在強負載(大數據量、大量并發用戶等)下的測試,查看應用系統在峰值使用情況下的操作行為,從而有效地發現系統的某項功能隱患、系統是否具有良好的容錯能力和可恢復能力。壓力測試分為高負載下的長時間(如持續運行24小時及以上)的穩定性壓力測試和極限負載情況下導致系統崩潰的破壞性壓力測試。
l負載測試與壓力測試特點:
u兩者都是通過模擬軟件生產運行的業務壓力值和使用場景組合測試軟件的性能是否能夠滿足需要,主要具備一下三個特點:
1、目的是驗證系統是否具有系統宣稱具有的健壯能力;
2、需要事先了解被測系統使用的典型場景(如淘寶的雙十一凌晨下單支付),并確定性能目標;
3、模擬測試的進行必須要求在已確定的環境中。
u負載測試用來驗證系統飽和狀態、確定閾值,其特點:
1、目的是摘到系統處理能力的極限,通過檢測、加壓、閾值手段找到如“響應時間補超過10s”、“服務器平均CPU利用率低于65%”等指標;
2、需要再給定的測試環境下進行,通常也需要考慮被測系統的業務場景和壓力量;
3、這種方法一般用來了解系統的性能容量,或者配合性能調優的時候來使用。
u壓力測試是測試系統在一定飽和狀態下(CPU/內存等飽和),系統能夠處理session的能力,以及系統是否會出現崩潰等,其特點:
1、該方法是檢查系統處于壓力情況下應用的表現。如增加VU數量、節點數量、并發用戶數量等使系統的資源使用保持一定的水平,目的在于檢測此時應用的表現,重點在于觀察有無錯誤信息產生,系統的響應時間等;
2、該方法通過模擬負載實現壓力。首先需要考慮模擬是否有效,其次需要結合業務和軟件架構來定制模擬指標,需要選取合適的測試工具使測試數據更有參考性;
3、該方法也能測試系統的穩定性,需要根據平臺使用場景定義多長的壓測時間才能有效得體現出穩定性。