從這一篇開始,蟲師向性能方面發(fā)力。翻看自己的博客,早的時(shí)候熱衷于jmeter,于是寫了幾篇圖文并茂的文章(其實(shí),主要是操作截圖加文字描述),之后,由于看到好多朋友關(guān)于性能的知識(shí)什么都不知道,下載個(gè)loadrunner 說要做性能測試,結(jié)果可想而知,遇到各種概念與使用問題。于是寫了《在做性能測試之前需要知道什么》《在做性能測試之后需要知道什么》,關(guān)于loadrunner的我沒有寫一篇博客,因?yàn)榻榻Bloadrunner的網(wǎng)站、資料、書籍和視頻太多了。我想這個(gè)系列我也會(huì)把關(guān)注點(diǎn)放在思想上。

性能測試常見分類   

     常會(huì)別人說到性能測試、負(fù)載測試、壓力測試、并發(fā)測試,很多人都是混合使用,或者一會(huì)叫壓力測試,一會(huì)叫并發(fā)測試。這些概念除了非測試人員分不清楚,甚至許多專業(yè)測試人員也對(duì)這些名詞也很模糊。關(guān)于這個(gè)分類我翻閱了幾個(gè)本比較好的書籍,他們講的也比較模糊,沒有給出本質(zhì)上的區(qū)別。只是從不同角度和關(guān) 注點(diǎn)來解釋。好吧我們先來看他們之間比較普遍的解釋。

性能測試(狹義)

    性能測試方法是通過模擬生產(chǎn)運(yùn)行的業(yè)務(wù)壓力量和使用場景組合,測試系統(tǒng)的性能是否滿足生產(chǎn)性能要求。通俗地說,這種方法是要在特定的運(yùn)行條件下驗(yàn)證系統(tǒng)的能力狀態(tài)。

特點(diǎn):

1、這種方法的主要目的是驗(yàn)證系統(tǒng)是否有系統(tǒng)宣稱具有的能力。

2、這種方法要事先了解被測試系統(tǒng)經(jīng)典場景,并具有確定的性能目標(biāo)。

3、這種方法要求在已經(jīng)確定的環(huán)境下運(yùn)行。

也是說,這種方法是對(duì)系統(tǒng)性能已經(jīng)有了解的前提,并對(duì)需求有明確的目標(biāo),并在已經(jīng)確定的環(huán)境下進(jìn)行的。

負(fù)載測試

通過在被測系統(tǒng)上不斷加壓,直到性能指標(biāo)達(dá)到極限,例如“響應(yīng)時(shí)間”超過預(yù)定指標(biāo)或都某種資源已經(jīng)達(dá)到飽和狀態(tài)。

特點(diǎn):

1、這種性能測試方法的主要目的是找到系統(tǒng)處理能力的極限。

2、這種性能測試方法需要在給定的測試環(huán)境下進(jìn)行,通常也需要考慮被測試系統(tǒng)的業(yè)務(wù)壓力量和典型場景、使得測試結(jié)果具有業(yè)務(wù)上的意義。

3、這種性能測試方法一般用來了解系統(tǒng)的性能容量,或是配合性能調(diào)優(yōu)來使用。

也是說,這種方法是對(duì)一個(gè)系統(tǒng)持續(xù)不段的加壓,看你在什么時(shí)候已經(jīng)超出“我的要求”或系統(tǒng)崩潰。

壓力測試(強(qiáng)度測試)

    壓力測試方法測試系統(tǒng)在一定飽和狀態(tài)下,例如cpu、內(nèi)存在飽和使用情況下,系統(tǒng)能夠處理的會(huì)話能力,以及系統(tǒng)是否會(huì)出現(xiàn)錯(cuò)誤

特點(diǎn):

1、這種性能測試方法的主要目的是檢查系統(tǒng)處于壓力性能下時(shí),應(yīng)用的表現(xiàn)。

2、這種性能測試一般通過模擬負(fù)載等方法,使得系統(tǒng)的資源使用達(dá)到較高的水平。

3、這種性能測試方法一般用于測試系統(tǒng)的穩(wěn)定性。

也是說,這種測試是讓系統(tǒng)處在很大強(qiáng)度的壓力之下,看系統(tǒng)是否穩(wěn)定,哪里會(huì)出問題。

并發(fā)測試

     并發(fā)測試方法通過模擬用戶并發(fā)訪問,測試多用戶并發(fā)訪問同一個(gè)應(yīng)用、同一個(gè)模塊或者數(shù)據(jù)記錄時(shí)是否存在死鎖或其者他性能問題。

特點(diǎn):

1、這種性能測試方法的主要目的是發(fā)現(xiàn)系統(tǒng)中可能隱藏的并發(fā)訪問時(shí)的問題。

2、這種性能測試方法主要關(guān)注系統(tǒng)可能存在的并發(fā)問題,例如系統(tǒng)中的內(nèi)存泄漏、線程鎖和資源爭用方面的問題。

3、這種性能測試方法可以在開發(fā)的各個(gè)階段使用需要相關(guān)的測試工具的配合和支持。

也是說,這種測試關(guān)注點(diǎn)是多個(gè)用戶同時(shí)(并發(fā))對(duì)一個(gè)模塊或操作進(jìn)行加壓。

配置測試

配置測試方法通過對(duì)被測系統(tǒng)的軟硬件環(huán)境的調(diào)整,了解各種不同對(duì)系統(tǒng)的性能影響的程度,從而找到系統(tǒng)各項(xiàng)資源的優(yōu)分配原則。

特點(diǎn):

1、這種性能測試方法的主要目的是了解各種不同因素對(duì)系統(tǒng)性能影響的程度,從而判斷出值得進(jìn)行的調(diào)優(yōu)操作。

2、這種性能測試方法一般在對(duì)系統(tǒng)性能狀況有初步了解后進(jìn)行。

3、這種性能測試方法一般用于性能調(diào)優(yōu)和規(guī)劃能力。

也是說,這種測試關(guān)注點(diǎn)是“微調(diào)”,通過對(duì)軟硬件的不段調(diào)整,找出這他們的佳狀態(tài),使系統(tǒng)達(dá)到一個(gè)強(qiáng)的狀態(tài)。

可靠性測試

在給系統(tǒng)加載一定業(yè)務(wù)壓力的情況下,使系統(tǒng)運(yùn)行一段時(shí)間,以此檢測系統(tǒng)是否穩(wěn)定。

特點(diǎn):

1、這種性能測試方法的主要目的是驗(yàn)證是否支持長期穩(wěn)定的運(yùn)行。

2、這種性能測試方法需要在壓力下持續(xù)一段時(shí)間的運(yùn)行。(2~3天)

3、測試過程中需要關(guān)注系統(tǒng)的運(yùn)行狀況。

也是說,這種測試的關(guān)注點(diǎn)是“穩(wěn)定”,不需要給系統(tǒng)太大的壓力,只要系統(tǒng)能夠長期處于一個(gè)穩(wěn)定的狀態(tài)。

上面的分類絕非全面,還有失效性測試,是系統(tǒng)局部發(fā)生問題時(shí),其它模塊是否可以正常的運(yùn)行。這個(gè)在極少數(shù)情況下進(jìn)行,這里不介紹了。

性能測試分類之我見

上面的類分完了,似乎得到不少專家的認(rèn)同,并無不妥。但我們?cè)谛阅軠y試過程中真的能把它們區(qū)別分的很清楚么?你能嚴(yán)格區(qū)分出你這次的測試到底并發(fā)測試還是壓力測試。

筆者第一點(diǎn)不太贊同的是對(duì)“性能測試”的定義。筆者認(rèn)為性能測式測試包含了上面的所有分類。而這種性能測試的定義只是一種狹義上的“性能測試”,屬于性能測試的一種。

性能測試是相對(duì)功能測試來說的。他們之間本質(zhì)的區(qū)別是對(duì)系統(tǒng)有處理能力是否夠成壓力。如果一個(gè)用戶的一個(gè)操作(比如超大數(shù)據(jù)量的查詢)對(duì)系統(tǒng)夠成了壓力,我也可以視其為性能測試。

其實(shí),可以這樣來劃分性能測試

上面定交了那么多分類,是不是有點(diǎn)暈了。其實(shí),以筆者認(rèn)為我們進(jìn)行性能測試時(shí)關(guān)注的兩點(diǎn)。耐力和爆發(fā)力。

初高中時(shí)練過幾年體育,好時(shí)代表學(xué)校參加縣體育比賽,不過是去墊底的。哈哈!哈一個(gè)體育運(yùn)動(dòng)員來說,那么多的體育項(xiàng)目,其實(shí),考核他的兩方面。一是爆發(fā)力。二是耐力。

爆發(fā)力:拿一個(gè)舉重選手來說,他的重點(diǎn)在重量上,因?yàn)槟阒灰芘e起三秒算你成功了。關(guān)鍵是看你能舉起一個(gè)什么樣的重量。

耐力:拿一個(gè)馬拉松運(yùn)動(dòng)員來說,你百米速度跑得再快沒用。關(guān)鍵是這40公里路程中,先跑到終點(diǎn)的人才是贏家。

整體協(xié)調(diào)性:當(dāng)然,身為一個(gè)教練員,我在選拔選手的時(shí)候,除了看這個(gè)運(yùn)動(dòng)員的耐力和爆發(fā)力,身體的整體協(xié)調(diào)性也是我考核的一個(gè)很重要的指標(biāo)。比如一個(gè)運(yùn)行員身體各位部位練得非常強(qiáng)壯,但右臂先天性萎縮。他的跑步成績雖然不錯(cuò)。但他在跑的過程中,身體有各個(gè)部分都在分擔(dān)右臂的不足。右臂影響了整個(gè)體能的發(fā)揮。

再到系統(tǒng)的性能上說,爆發(fā)力是這個(gè)系統(tǒng)能承受的大壓力,沒準(zhǔn)這個(gè)系統(tǒng)承受的壓力很大。但過半個(gè)小時(shí)之間掛掉了。耐力是這個(gè)每系統(tǒng)長時(shí)間處于壓力下的穩(wěn)定性,這系統(tǒng)超級(jí)穩(wěn)定,跑個(gè)幾十年都不用重啟服務(wù)器。那么整體協(xié)調(diào)性是看系統(tǒng)有沒系統(tǒng)瓶頸,需不需要進(jìn)行系統(tǒng)調(diào)優(yōu)。

在做性能測試時(shí)請(qǐng)忘掉分類

這里只是告訴在做性能測試時(shí)不要想這個(gè)測試是屬于性能測試的哪一類呢?是并發(fā)性測呢?還是壓力測試?

我們還拿上面的教練員選拔選手做例子。

記得我進(jìn)校體隊(duì)的時(shí)候,教練說讓我跑兩圈。然后,我開始圍繞著操場跑起來。你說教練讓我跑兩圈是想看我的什么能力?

1、雙腿的考核,一個(gè)是步幅,是步與步之間的距離。一個(gè)是頻率,兩腿交替的頻率。如果你一步拉得很大的話,那么頻率一定會(huì)下降。如果想提高頻率的話,那么一定會(huì)影響到步幅的大小。

2、雙臂的考核,肩膀是否放松,擺臂是否有力,雙臂的擺動(dòng)與雙腿的擺動(dòng)是否協(xié)調(diào)。

3、呼吸是否勻稱,目前的速度可以跑幾圈。

我只做了一項(xiàng)體育運(yùn)行,考核了我這么多內(nèi)容。我們?cè)谧鲆粋(gè)性能測試時(shí)也不局限在某一分類上,也可能我們的一個(gè)測試包含多個(gè)分類。