在產品研發過程當中,經常會混淆壓力/負載/性能測試這三者之間的區別,這三種測試到底有什麼不一樣呢?javascript
壓力測試(StressTesting),也稱爲強度測試,經過模擬實際應用的軟硬件環境及用戶使用過程的系統負荷,長時間或超大負荷地運行測試軟件,來測試被測系統的性能、可靠性、穩定性等。壓力測試須要肯定一個系統的瓶頸或者不能接收的性能點,來得到系統能提供的最大的服務級別。通俗地講,壓力測試是爲了發如今什麼條件下您的應用程序的性能會變得不可接受。html
負載測試(Load Testing)一般被定義爲給被測系統加上它所能操做的最大任務數的過程,負載測試有時也會被稱爲「容量測試」或者「耐久性測試/持久性測試」,其目標是肯定並確保系統在超出最大預期工做量的狀況下仍能正常運行。對於WEB應用來說,負載則是併發用戶或者HTTP鏈接的數量。負載測試經過測試系統在資源超負荷狀況下的表現,以發現設計上的錯誤或驗證系統的負載能力。在這種測試中,將使測試對象承擔不一樣的工做量,以評測和評估測試對象在不一樣工做量條件下的性能行爲,以及持續正常運行的能力。java
性能測試(PerformanceTesting)的目的不是去找系統Bugs,而是排除系統的性能瓶頸,併爲迴歸測試創建一個基準。而性能測試的操做,實際上就是一個很是當心受控的測量分析過程:「運行負載試驗->測度性能->調試系統」。在理想的狀況下,被測應用在這個時候已是足夠穩定,因此這個過程得以順利進行。性能測試還有另外一個目標就是創建一組被測系統的基準數據。應用在網絡上的性能測試重點是利用成熟先進的自動化技術進行網絡應用性能監控、網絡應用性能分析和網絡預測。python
雖然三種測試的目的大相徑庭,但其測試操做的環節都是基本一致的,所以一次測試過程當中徹底能夠包含性能測試、負載測試、壓力測試三個方面的內容,所使用的測試工具每每大同小異。正則表達式
市面上流行的壓力/負載/性能測試工具可能是來自國外,同時因爲開發的目的和側重點不一樣,其功能也有很大差別,下面就爲您簡單介紹10款目前最多見的測試產品。數據庫
LoadRunner是一種預測系統行爲和性能的負載測試工具,經過模擬實際用戶的操做行爲進行實時性能監測,來幫助測試人員更快的查找和發現問題。LoadRunner適用於各類體系架構,能支持普遍的協議和技術,爲測試提供特殊的解決方案。企業經過LoadRunner能最大限度地縮短測試時間,優化性能並加速應用系統的發佈週期。apache
LoadRunner提供了3大主要功能模塊:VirtualUser Generator(用於錄製性能測試腳本),LoadRunner Controller(用於建立、運行和監控場景),LoadRunner Analysis(用於分析性能測試結果)既能夠做爲獨立的工具完成各自的功能,又能夠做爲LoadRunner的一部分彼此銜接,與其餘模塊共同完成軟件性能的總體測試。編程
詳見:《性能測試入門——LoadRunner使用初探》(http://www.admin5.com/article/20161114/695706.shtml)segmentfault
LoadRunner官網:https://saas.hpe.com/zh-cn/software/loadrunner瀏覽器
JMeter做爲一款廣爲流傳的開源壓測產品,最初被設計用於Web應用測試,現在JMeter能夠用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP服務器等等,還能對服務器、網絡或對象模擬巨大的負載,經過不一樣壓力類別測試它們的強度和分析總體性能。另外,JMeter可以對應用程序作功能測試和迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果。爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言。
JMeter的特色包括對HTTP、FTP服務器、數據庫進行壓力測試和性能測試;徹底的可移植性;徹底 Swing和輕量組件支持包;徹底多線程;緩存和離線分析/回放測試結果;可連接的取樣器;具備提供動態輸入到測試的功能;支持腳本編程的取樣器等。在設計階段,JMeter可以充當HTTP PROXY(代理)來記錄瀏覽器的HTTP請求,也能夠記錄Apache等WebServer的log文件來重現HTTP流量,並在測試運行時以此爲依據設置重複次數和併發度(線程數)來進行壓測。
參考文章:《雲智慧壓測實戰分享之JMeter工具使用初探》(https://segmentfault.com/a/1190000007922515)
官網連接:http://jmeter.apache.org/
NeoLoad是Neotys出品的一種負載和性能測試工具,可真實地模擬用戶活動並監視基礎架構運行狀態,從而消除全部Web和移動應用程序中的瓶頸。NeoLoad經過使用無腳本GUI和一系列自動化功能,可以讓測試設計速度提升5-10倍,並將維護的腳本維持在原始設計時間的10%,同時幫助用戶使用持續集成系統自動進行測試。
NeoLoad支持WebSocket、HTTP1/ 二、GWT、HTML五、AngularJS、Oracle Forms等技術協議,可以監控包括操做系統,應用服務器,Web服務器,數據庫和網絡設備在內的各類IT基礎設施,同時能夠經過Neotys雲平臺發起外部壓力。
官網連接:http://www.neotys.com/product/overview-neoload.html
WebLOAD是來自Radview公司的負載測試工具,它可被用以測試系統性能和彈性,也可被用於正確性驗證(驗證返回結果的正確性)。其測試腳本是用Javascript(和集成的COM/Java對象)編寫的,並支持多種協議,如Web(包括AJAX在內的REST/HTTP)、SOAP/XML及其餘可從腳本調用的協議如FTP、SMTP等,於是可從全部層面對應用程序進行測試。
WebLOAD存在免費和專業兩個版本,免費版本支持50個虛擬用戶,專業版還提供更多的報告和協議供用戶選擇。WebLOAD一般用做QA團隊的獨立運行工具,在開發週期的驗證階段,被測系統(System Under Test,SUT)投入實用以前,在模擬環境中對被測系統進行測試。
官網連接:http://www.radview.com/
Loadster是一款商用負載測試軟件,用於測試高負載下網站、Web應用、Web服務的性能表現,支持Linux,Mac和Windows等運行環境。
Loadster可以對Web應用/服務的Cookies、線程、頭文件、動態表格等元素髮起測試,得到Web在壓力下的性能、彈性、穩定性和可擴展性等方面的表現。
官網連接:http://www.loadsterperformance.com/
Load impact是一款服務於DevOps的性能測試工具,支持各類平臺的網站、Web應用、移動應用和API測試。Loadimpact能夠幫助用戶瞭解應用的最高在線用戶訪問量,經過模擬測試不一樣在線人數下網站的響應時間,估算出服務器的最大負載。
Load impact的使用很是簡單,只須要輸入網址進行測試,即可統計出加載網站的一些詳細數據。包括總體加載和站內圖片,javascript, CSS等代碼載入。能夠在右側列表選擇不一樣文件來同時對比最多三個對象的加載數據,並生成圖表顯示,方便網站設計者來分析。測試完成以後,網站還能夠存儲測試過的統計數據。
官網連接:http://loadimpact.com/
CloudTest 是一個集性能和功能測試於一體的綜合壓力測試雲平臺,專爲現代網絡和移動應用測試而設計開發,CloudTest能夠圖形化實現判斷、循環,總體減輕了測試開發的工做量,縮短了開發時間。CloudTest基於內存的分析引擎,能夠實時收集和展現數據,全部數據在3秒內匯聚顯示。
CloudTest採用虛擬化技術,完美的配合公有/私有云計算技術,無需過多的硬件,帶寬資源的投入,人力維護成本幾乎爲零,測試按需得到,遠程接入,適合多團隊協做。各類規模的模擬成本均遠遠優於傳統工具,同時大大縮短了測試周期。
官網連接:https://soasta.com/cloudtest
Loadstorm是一款針對Web應用的雲端負載測試工具,經過模擬海量點擊來測試Web應用在大負載下的性能表現。因爲採用了雲資源,因此Loadstorm的測試成本很是低,用戶能夠在雲端選擇建立本身的測試計劃,測試標準和測試場景。
Loadstorm最多能夠生成多達50000個併發用戶,經過數以千計的雲服務器發起訪問。使用Loadstorm不須要任何腳本知識,同時提供多樣化的測試圖表和報告模版,用於準確測量Web應用的各項性能指標,如錯誤率,平均響應時間和用戶數量等。Loadstorm能夠申請免費試用,但更多壓力和功能須要開通高級賬戶。
官網連接:http://loadstorm.com/
阿里雲性能測試(Performance Testing)是一個SaaS性能測試平臺,具備強大的分佈式壓測能力,可模擬海量用戶真實的業務場景,讓應用性能問題無所遁形。PTS平臺特點包括提供壓測機,無需安裝軟件;腳本場景監控簡單化,省時、省力;分佈式併發壓測,施壓能力無上限;快速大規模集羣擴容、支持幾十萬用戶及百萬級TPS性能壓測;80%以上用戶基本不須要花費額外的成本。
PTS分爲兩個版本,Lite版免費,企業版提供資源包月和按量付費兩種計費方式,按量付費採用階梯價計算,知足企業客戶多種壓測需求。
官網連接:https://www.aliyun.com/product/pts
壓測寶是雲智慧推出的面向真實用戶行爲與地域分佈的全鏈路雲端壓力測試平臺,經過雲端服務器產生真實分佈式用戶訪問壓力,模擬來自各地域用戶接入後臺所帶來的真實流量,無限接近生產環境所面臨的各類複雜因素,測量真實的用戶體驗。經過集成雲智慧應用性能管理和監控產品,幫助實現基於真實用戶行爲的壓測方案定製、壓測過程當中實時定位各環節應用資源及代碼瓶頸,現場糾錯,分析應用性能肇因。
產品功能特點方面,壓測寶經過獨有的開放架構,支持各類主流網絡協議;同時支持手機APP的腳本錄製方式,能夠大大下降壓測腳本製做的時間和難度。依託壓測寶以及完善的產品線,雲智慧爲用戶提供了一站式壓測服務,面向雲計算時代的複雜應用提供專業性能壓測服務,幫助企業客觀評估應用性能容量,發現全鏈路性能瓶頸,對應用架構的調優及架構容量規劃提供專業諮詢服務,知足企業靈活多變的業務需求。目前壓測寶已提供高達10萬UV併發級別的壓測服務。
官網連接:http://www.yacebao.com/
Gatling做爲新一代服務器性能測試工具,是一款基於Scala 開發的高性能服務器性能測試工具,它主要用於對服務器進行負載等測試,並分析和測量服務器的各類性能指標。Gatling主要用於測量基於HTTP的服務器,好比Web應用程序,RESTful服務等,即主要支持http協議。
Gatling針對JMeter的不足作了大量改進:在併發性能方面,Gatling使用的Actors模型的性能在高併發的狀況下性能大大優於JMeter的Threads,從而使得Gatling在更少的內存和CPU的狀況下能夠提供一樣的測試能力,下降了測試成本;在測試腳本方面,Gatling的Scala代碼也更簡明,易讀性和維護性更高還可使用版本工具進行更有效的管理。
作性能測試時,咱們無時無刻不在想如何模擬,如何貼近更加真實的用戶使用場景。有人想,若是能把真實的生產線上的用戶訪問的真實流量引入到測試環境就行了。
TCPCOPY正是一款這樣的工具,一款分佈式在線壓力測試工具,能夠將線上流量拷貝到測試機器,實時的模擬線上環境,達到在程序不上線的狀況下實時承擔線上流量的效果。
TCPCOPY利用在線數據包信息,模擬TCP客戶端協議棧,欺騙測試服務器的上層應用服務。
TCPCOPY除了佔用一些額外的CPU,內存和帶寬外,對線上系統自己的影響極小。關鍵是,這種複製的線上流量模擬了測試請求的多樣性,網絡延遲與資源佔用,更加真實。
支持經常使用協議的性能測試,動態式執行機智能分配,分佈式併發壓測,可部署在雲端,亦可本地部署腳本在線編輯,支持動態腳本,提高可讀性和易用性。豐富的可視化性能報表,集成主機資源監控,採用時序數據庫存儲數據,支持遠期數據查詢。
平安科技將性能測試進行了整合,經過神兵wizard一站式研發管理工具集成,在其部署流水線後集成自動化測試與性能測試,完成一站式的持續集成與驗證,提升了研發效率。
Locust是一個用於可擴展的,分佈式的,性能測試的,開源的,用Python編寫框架/工具,它很是容易使用,也很是好學。它的主要思想就是模擬一羣用戶將訪問你的網站。每一個用戶的行爲由你編寫的python代碼定義,同時能夠從Web界面中實時觀察到用戶的行爲。
Locust徹底是事件驅動的,所以在單臺機器上可以支持幾千併發用戶訪問。與其它許多基於事件的應用相比,Locust並不使用回調,而是使用gevent,而gevent是基於協程的,能夠用同步的方式來編寫異步執行的代碼。每一個用戶實際上運行在本身的greenlet中。
以上是市面上比較常見的壓力/負載/性能測試工具,其中以Jmeter和Loadrunner爲表明的大部分產品屬於傳統防火牆內的壓測,適用於測試內網系統硬件資源以及服務、數據庫在併發條件下的性能表現。阿里雲PTS和CloudTest爲表明的第二代壓測產品把壓測機遷移到雲端,經過雲資源在防火牆外部生成規模併發,有效下降了壓測的成本與準備週期,提升了效率。只是因爲壓測點限制,國外或阿里的雲壓測產品,很難對國內應用,特別是非阿里環境部署的應用發起有效測試。
爲知足複雜的雲端分佈式應用交付場景的壓力測試需求,第三代以雲智慧壓測寶爲表明的壓測產品應運而生,從終端用戶行爲與體驗的視角來審視應用性能問題,經過與APM整合深度追蹤系統,準確發現影響性能的問題瓶頸。