性能測試常見分類 web
常會別人說到性能測試、負載測試、壓力測試、併發測試,不少人都是混合使用,或者一會叫壓力測試,一會叫併發測試。這些概念除了非測試人員分不清楚,甚至許多專業測試人員也對這些名詞也很模糊。關於這個分類我翻閱了幾個本比較好的書籍,他們講的也比較模糊,沒有給出本質上的區別。只是從不一樣角度和關 注點來解釋。好吧咱們先來看他們之間比較廣泛的解釋。服務器
性能測試(狹義)併發
性能測試方法是經過模擬生產運行的業務壓力量和使用場景組合,測試系統的性能是否知足生產性能要求。通俗地說,這種方法就是要在特定的運行條件下驗證系統的能力狀態。工具
特色:性能
一、這種方法的主要目的是驗證系統是否有系統宣稱具備的能力。
二、這種方法要事先了解被測試系統經典場景,並具備肯定的性能目標。
三、這種方法要求在已經肯定的環境下運行。測試
也就是說,這種方法是對系統性能已經有了解的前提,並對需求有明確的目標,並在已經肯定的環境下進行的。大數據
負載測試線程
經過在被測系統上不斷加壓,直到性能指標達到極限,例如「響應時間」超過預約指標或都某種資源已經達到飽和狀態。設計
特色:內存
一、這種性能測試方法的主要目的是找到系統處理能力的極限。
二、這種性能測試方法須要在給定的測試環境下進行,一般也須要考慮被測試系統的業務壓力量和典型場景、使得測試結果具備業務上的意義。
三、這種性能測試方法通常用來了解系統的性能容量,或是配合性能調優來使用。
也就是說,這種方法是對一個系統持續不段的加壓,看你在何時已經超出「個人要求」或系統崩潰。
壓力測試(強度測試)
壓力測試方法測試系統在必定飽和狀態下,例如cpu、內存在飽和使用狀況下,系統可以處理的會話能力,以及系統是否會出現錯誤
特色:
一、這種性能測試方法的主要目的是檢查系統處於壓力性能下時,應用的表現。
二、這種性能測試通常經過模擬負載等方法,使得系統的資源使用達到較高的水平。
三、這種性能測試方法通常用於測試系統的穩定性。
也就是說,這種測試是讓系統處在很大強度的壓力之下,看系統是否穩定,哪裏會出問題。
併發測試
併發測試方法經過模擬用戶併發訪問,測試多用戶併發訪問同一個應用、同一個模塊或者數據記錄時是否存在死鎖或其者他性能問題。
特色:
一、這種性能測試方法的主要目的是發現系統中可能隱藏的併發訪問時的問題。
二、這種性能測試方法主要關注系統可能存在的併發問題,例如系統中的內存泄漏、線程鎖和資源爭用方面的問題。
三、這種性能測試方法能夠在開發的各個階段使用須要相關的測試工具的配合和支持。
也就是說,這種測試關注點是多個用戶同時(併發)對一個模塊或操做進行加壓。
配置測試
配置測試方法經過對被測系統的軟\硬件環境的調整,瞭解各類不一樣對系統的性能影響的程度,從而找到系統各項資源的最優分配原則。
特色:
一、這種性能測試方法的主要目的是瞭解各類不一樣因素對系統性能影響的程度,從而判斷出最值得進行的調優操做。
二、這種性能測試方法通常在對系統性能情況有初步瞭解後進行。
三、這種性能測試方法通常用於性能調優和規劃能力。
也就是說,這種測試關注點是「微調」,經過對軟硬件的不段調整,找出這他們的最佳狀態,使系統達到一個最強的狀態。
可靠性測試
在給系統加載必定業務壓力的狀況下,使系統運行一段時間,以此檢測系統是否穩定。
特色:
一、這種性能測試方法的主要目的是驗證是否支持長期穩定的運行。
二、這種性能測試方法須要在壓力下持續一段時間的運行。(2~3天)
三、測試過程當中須要關注系統的運行情況。
也就是說,這種測試的關注點是「穩定」,不須要給系統太大的壓力,只要系統可以長期處於一個穩定的狀態。
上面的分類絕非全面,還有失效性測試,就是系統局部發生問題時,其它模塊是否能夠正常的運行。這個在極少數狀況下進行,這裏就不介紹了。
性能測試分類之我見
上面的類分完了,彷佛獲得很多專家的認同,並沒有不妥。但咱們在性能測試過程當中真的能把它們區別分的很清楚麼?你能嚴格區分出你此次的測試到底併發測試仍是壓力測試。
筆者第一點不太贊同的是對「性能測試」的定義。筆者認爲性能測式測試包含了上面的全部分類。而這種性能測試的定義只是一種狹義上的「性能測試」,屬於性能測試的一種。
性能測試是相對功能測試來講的。他們之間最本質的區別就是對系統有處理能力是否夠成壓力。若是一個用戶的一個操做(好比超大數據量的查詢)對系統夠成了壓力,我也能夠視其爲性能測試。
其實,能夠這樣來劃分性能測試
上面定義了那麼多分類,是否是有點暈了。其實,以筆者認爲咱們進行性能測試時關注的就兩點。耐力和爆發力。
初高中時練過幾年體育,最好時表明學校參加縣體育比賽,不過是去墊底的。哈哈!哈一個體育運動員來講,那麼多的體育項目,其實,考覈他的就兩方面。一是爆發力。二是耐力。
爆發力:拿一個舉重選手來講,他的重點在重量上,由於你只要能舉起三秒就算你成功了。關鍵是看你能舉起一個什麼樣的重量。
耐力:拿一個馬拉松運動員來講,你百米速度跑得再快沒用。關鍵是這40千米路程中,最早跑到終點的人才是贏家。
總體協調性:固然,身爲一個教練員,我在選拔選手的時候,除了看這個運動員的耐力和爆發力,身體的總體協調性也是我考覈的一個很重要的指標。好比一個運行員身體各位部位練得很是強壯,但右臂先天性萎縮。他的跑步成績雖然不錯。但他在跑的過程當中,身體有各個部分都在分擔右臂的不足。右臂影響了整個體能的發揮。
再到系統的性能上說,爆發力就是這個系統能承受的最大壓力,沒準這個系統承受的壓力很大。但過半個小時之間就掛掉了。耐力就是這個每系統長時間處於壓力下的穩定性,這系統超級穩定,跑個幾十年都不用重啓服務器。那麼總體協調性就是看系統有沒系統瓶頸,需不須要進行系統調優。
在作性能測試時請忘掉分類
這裏只是告訴在作性能測試時不要想這個測試是屬於性能測試的哪一類呢?是併發性測呢?仍是壓力測試?
咱們還拿上面的教練員選拔選手作例子。
記得我進校體隊的時候,教練說讓我跑兩圈。而後,我就開始圍繞着操場跑起來。你說教練讓我跑兩圈是想看個人什麼能力?
一、雙腿的考覈,一個是步幅,就是步與步之間的距離。一個是頻率,兩腿交替的頻率。若是你一步拉得很大的話,那麼頻率必定會降低。若是想提升頻率的話,那麼必定會影響到步幅的大小。
二、雙臂的考覈,肩膀是否放鬆,擺臂是否有力,雙臂的擺動與雙腿的擺動是否協調。
三、呼吸是否勻稱,目前的速度能夠跑幾圈。
我只作了一項體育運行,就考覈了我這麼多內容。咱們在作一個性能測試時也不侷限在某一分類上,也可能咱們的一個測試包含多個分類。
《web性能測試實戰》: 麼多類型的性能測試看起來很嚇人,實際上它他們大可能是密切相關的。例如,運行8個小時來測試系統是否可靠,而這個測試極有可能包含了可靠性能測、強度測試、併發測試、負載測試,等等。所以,在實施性能測試時決不能割裂它們的內部聯繫去進行,而應該分析它們之間的關係,以一種高效率的方式來設計性能測試。