本文分上下兩個(gè)部分,上半部分主要介紹:
一、什么是性能測試
二、術(shù)語
三、性能測試類型
下半部分主要介紹:
四、性能測試流程
五、性能測試執(zhí)行(三分鐘教會(huì)你用Jmeter進(jìn)行性能壓測)
六、結(jié)果查看及分析
????通篇的風(fēng)格以寓教于樂為主,介紹知識(shí)為輔。希望大家能在快樂中學(xué)習(xí),在開心中成長。時(shí)間倉促,錯(cuò)誤紕漏在所難免,還請“大神”不惜指正!
一、什么是性能測試
? ??性能測試是通過對系統(tǒng)進(jìn)行性能需求分析,在合理評估的性能測試環(huán)境上,通過測試工具模擬正常、峰值、以及異常負(fù)載條件對系統(tǒng)各項(xiàng)性能指標(biāo)進(jìn)行測試,旨在發(fā)現(xiàn)性能缺陷、進(jìn)行能力驗(yàn)證、驗(yàn)證規(guī)劃能力和性能調(diào)優(yōu),并針對測試結(jié)果進(jìn)行分析總結(jié)定位的測試過程。(* 引自專家測試團(tuán)隊(duì)《性能測試白皮書》)
************解釋************
? ?通俗點(diǎn)說,就是使用用各種“酒具”(jmeter、LoadRunner、Power平臺(tái))配合著各種“紅、白、啤酒”(入?yún)?shù)據(jù)+并發(fā)數(shù))來讓你達(dá)到“正常嗨(正常)、非常嗨(峰值)、嗨過頭(異常負(fù)載)”的狀態(tài),并在這期間通過“心電圖”(JMC-- Java Mission Control)或者把你放到“提前定制化的座椅”(RSMS、Dolphin)來持續(xù)對你進(jìn)行觀察、監(jiān)控,從而記錄下你在不同劑量下的反應(yīng)。并根據(jù)觀察結(jié)果來分析“紅酒您能喝幾瓶”、“白酒能喝幾瓶”、“啤酒能喝幾瓶”(能力驗(yàn)證);強(qiáng)化了身體素質(zhì)(系統(tǒng)性能優(yōu)化)之后又能喝幾瓶;甚至是規(guī)劃一下“有蒙古大漢自遠(yuǎn)方來不亦喝乎”時(shí),你能不能喝翻他(容量規(guī)劃)等等……,這些過程,就是“性能測試”!
二、術(shù)語
????在繼續(xù)介紹性能測試之前,我們有必要先解釋一下經(jīng)常用的一些術(shù)語。否則我瞎逼逼半天,您一臉懵逼,大家就真的在尬聊了……
1.并發(fā)用戶數(shù)
????同一時(shí)刻操作某個(gè)頁面或某個(gè)功能的用戶數(shù),描述系統(tǒng)能夠承受的并發(fā)性能。它是一個(gè)時(shí)間段內(nèi)發(fā)生的事情,它意在表達(dá)“并發(fā)”的可能性,是壓力的一種度量。計(jì)算公式:C=nl/t
?n :? 業(yè)務(wù)在線的總用戶數(shù)量
?l :??業(yè)務(wù)產(chǎn)生的平均時(shí)間長度
?t :??考察的時(shí)間段總長度
************解釋************
??我們假想出一個(gè)很長很長的水泥管道,管道入口處站了1000個(gè)高矮胖瘦一致的人,其中有400人想要通過這個(gè)管道。每個(gè)人走過這個(gè)管道平均需要1個(gè)小時(shí),前面的人沒走完時(shí)入口不放行下一組進(jìn)入,且入口處每天只有8小時(shí)可以放行讓人進(jìn)入。那么,這時(shí)“預(yù)期”的并發(fā)用戶數(shù)就是400*1/8=50,也就是說,只有管道寬的可以裝下50人并排走,才能在一天之內(nèi)讓400人都通過。
? ? 為什么說是“預(yù)期”呢?那是因?yàn)榭赡苣懽有。傧氲臅r(shí)候沒敢想太大,就只想出了一個(gè)允許2人通行的小水管。那8小時(shí)肯定走不完所有人啊,所以你需要繼續(xù)想、使勁努力YY出一個(gè)巨大的管子(性能優(yōu)化)!當(dāng)然,不排除您跟我一樣天賦異稟,一開始就構(gòu)想出能同時(shí)并排200人的巨管。這意味著,就并發(fā)用戶數(shù)這一項(xiàng),您的系統(tǒng)性能指標(biāo)完爆當(dāng)前既定業(yè)務(wù)量。
??
2.響應(yīng)時(shí)間
? ?用戶發(fā)起請求到響應(yīng)返回的時(shí)間,描述交易執(zhí)行快慢程度。(計(jì)算規(guī)則:響應(yīng)時(shí)間=網(wǎng)絡(luò)傳輸時(shí)間+系統(tǒng)響應(yīng)時(shí)間)
90%Percent:每個(gè)事務(wù)90%用戶的響應(yīng)時(shí)間在該值以下
Minimum:每個(gè)事務(wù)所有用戶中最小的響應(yīng)時(shí)間
Average:每個(gè)事務(wù)所有用戶的響應(yīng)時(shí)間算數(shù)平均值
Maximum:每個(gè)事務(wù)所有用戶中最大的響應(yīng)時(shí)間
************解釋************
? ? 還是繼續(xù)走管道……我們給每個(gè)人發(fā)一個(gè)秒表,人們并排進(jìn)入管道的同時(shí)每個(gè)人按下秒表。每個(gè)人行走的速度不同,雖然是并排進(jìn)入,但并不是一同出來。每一個(gè)人走出管道的同時(shí),再次按下秒表……這時(shí),秒表記錄的時(shí)間就是這個(gè)人(請求)開始到結(jié)束的響應(yīng)時(shí)間。
90%Percent:我們把同時(shí)走管道的一波人看做一個(gè)隊(duì)伍,隊(duì)伍中90%的人是在這個(gè)時(shí)間以內(nèi)就走出了管道;
Minimum:走的最快的那個(gè)人所用的時(shí)間;
Average:所有人花費(fèi)時(shí)間的平均值(在這個(gè)例子中為1小時(shí));
Maximum:走的最慢的那個(gè)人所用的時(shí)間。
??
?3.TPS
?指每秒處理的事務(wù)數(shù),TPS=總事務(wù)數(shù)/總的時(shí)間,描述了服務(wù)器的處理能力。
?************解釋************
? ? 一句話,就是每秒鐘通過管道的人。這里肯定有人覺得這個(gè)概念看著眼熟,很像最開始的并發(fā)用戶數(shù),對么?仔細(xì)看一下他們的區(qū)別:并發(fā)用戶數(shù)是指同時(shí)進(jìn)入管道的“肩并肩”的人,吞吐量是指每秒鐘那些肩并肩進(jìn)入管道的人中,平均多少人走了出來。所以,在這里“TPS =?并發(fā)數(shù)/平均響應(yīng)時(shí)間”
? ??
4.二八法則
? ?【80%的業(yè)務(wù)請求在20%的業(yè)務(wù)時(shí)間里面產(chǎn)生?!?/b>
? ?如:信用卡客服系統(tǒng)中"客戶信息查詢功能”年使用量為4800萬次,系統(tǒng)服務(wù)時(shí)間為7*24小時(shí)。每秒請求數(shù):
? ?48000000*80%/365*24*3600*20%=38400000/6307200=6次/秒
?************解釋************
?這個(gè)有毛用呢?試想一下,如果我們要壓這個(gè)信用卡客服系統(tǒng),是不是真的需要7*24小時(shí)不停壓一年湊夠4800萬個(gè)請求呢?用腳趾頭也能想明白,肯定不用啊!那如何在減少工作量的情況下盡可能的模擬真實(shí)場景呢?這個(gè)時(shí)候二八法則就出場了?。▌e問我為什么不是三七、四六、五五法則,你當(dāng)是在分贓嗎?)
5. 2-5-8原則
? ? WEB系統(tǒng)性能測試中的2-5-8原則描述如下:
用戶在2秒以內(nèi)得到響應(yīng)時(shí),系統(tǒng)的響應(yīng)很快,用戶對系統(tǒng)的體驗(yàn)較優(yōu);
用戶在2-5秒之間得到響應(yīng)時(shí),系統(tǒng)的響應(yīng)速度還可以,用戶對系統(tǒng)的體驗(yàn)一般;
用戶在5-8秒以內(nèi)得到響應(yīng)時(shí),系統(tǒng)的響應(yīng)速度較慢但還在接受范圍,用戶對系統(tǒng)的體驗(yàn)較慢;
用戶在超過8秒后仍然無法得到響應(yīng)時(shí),通常會(huì)認(rèn)為系統(tǒng)已經(jīng)失去響應(yīng),選擇離開或者發(fā)起第二次請求,用戶對系統(tǒng)的體驗(yàn)很糟糕。
************翻譯************
這個(gè)沒啥好解釋的,就是個(gè)“業(yè)界”非標(biāo)準(zhǔn)化的一個(gè)標(biāo)準(zhǔn)……所以,以后在項(xiàng)目中沒有明確要求某功能or頁面的響應(yīng)時(shí)間時(shí),就拿這個(gè)當(dāng)標(biāo)準(zhǔn)來考量吧!另外需要補(bǔ)充的一點(diǎn)是,我們用jmeter一般是壓接口,我們得出的響應(yīng)時(shí)間一般會(huì)小于直接壓頁面,為什么呢?這里影響響應(yīng)時(shí)間的除了網(wǎng)絡(luò)傳輸時(shí)間+系統(tǒng)響應(yīng)時(shí)間,還有個(gè)前端頁面渲染的時(shí)間。所以如果我們想web用戶體驗(yàn)較好(3秒內(nèi)),壓接口的響應(yīng)時(shí)間最好就要低于3秒,這給頁面渲染留出一定的冗余時(shí)間。
三、性能測試類型
????終于要開始介紹性能測試的干貨(Fuck foods)了。
1、基準(zhǔn)測試
測試系統(tǒng)是否存在線程安全性問題,并得到一定測試條件下的系統(tǒng)的性能基線數(shù)據(jù)。目的是得到系統(tǒng)的性能基線數(shù)據(jù),并對響應(yīng)時(shí)間、TPS和其他與時(shí)間相關(guān)的需求進(jìn)行評估。
************翻譯************
俗話說的好,“凡事都有個(gè)第一次,再丑的媳婦也要見公婆”。這個(gè)類型就是針對之前沒有做過性能測試,或者是根據(jù)新需求而剛剛開發(fā)完成的新系統(tǒng)來說的。這時(shí),您就需要來一份“基準(zhǔn)測試”啦!先給自己留個(gè)底兒,有了性能基線,我們才能繼續(xù)后面的“調(diào)優(yōu)”不是?
對比測試
對比不同測試條件下的性能差距,常用于系統(tǒng)優(yōu)化,技術(shù)選型,通過相同的用例對比性能數(shù)據(jù)。測試方式和負(fù)載測試類似。
************翻譯************
多說無益,我們“舉幾個(gè)比方,打幾個(gè)栗子”:
我們對系統(tǒng)的某功能進(jìn)行了優(yōu)化,需要驗(yàn)證該功能在優(yōu)化前后的性能對比數(shù)據(jù)時(shí),可以進(jìn)行對比測試;
老板讓我說出兩種系統(tǒng)架構(gòu)或者實(shí)現(xiàn)方法下,哪一種更好,可以進(jìn)行對比測試;
老板讓我說出這兩款設(shè)備,哪一款更優(yōu)秀,可以進(jìn)行對比測試。
說白了,就是各種比較,沒有對比就沒有傷害;不對比你怎么能知道你有多胖呢,對不對?!(觀眾:扔磚頭?。。。?/p>
2、容量規(guī)劃
測試系統(tǒng)在軟硬件上的擴(kuò)展能力,常用于測試軟件擴(kuò)容,硬件擴(kuò)容。容量規(guī)劃也是對比測試的一種。
************翻譯************
就如定義中所說,容量規(guī)劃也是對比測試的一種。這個(gè)類型主要使用場景有:
軟件擴(kuò)容:我們用多線程來代替原有的單線程處理請求;
硬件擴(kuò)容:我們增加了兩臺(tái)redis,加大了weblogic server的內(nèi)存或者直接增加了4臺(tái)服務(wù)器。
在這里也要額外說一點(diǎn):我們擴(kuò)容,特別是硬件擴(kuò)容,是不能按照倍數(shù)來放大擴(kuò)容效果的。例如,我們2臺(tái)server時(shí)TPS為100,我們增加到4臺(tái)同樣配置的server時(shí),TPS并不是增加到200了。有可能是160、170、180……這其中并沒有一個(gè)線性的關(guān)系,這點(diǎn)很重要需要知悉。所以,很多時(shí)候項(xiàng)目組找到我們做性能測試,說我們生產(chǎn)環(huán)境與測試環(huán)境配置相同,只是數(shù)量不同,是否能直接換算性能指標(biāo)呢?答案是否定的!我們只能說,你在測試環(huán)境中如果滿足了預(yù)期性能指標(biāo),那生產(chǎn)環(huán)境理論上是沒有問題的,no more!
3、穩(wěn)定性測試
采用系統(tǒng)穩(wěn)定運(yùn)行情況下能夠支持的最大并發(fā)用戶數(shù),或者日常運(yùn)行用戶數(shù),持續(xù)運(yùn)行一段時(shí)間。目標(biāo)是檢測系統(tǒng)能否持續(xù)穩(wěn)定工作。
************解釋************
其實(shí),我們在用Jmeter壓測的時(shí)候,至少都要持續(xù)10~15min以上,為什么呢?我們要讓TPS穩(wěn)定下來,這時(shí)采集的數(shù)據(jù)才有效;當(dāng)然,并不是說15分鐘就一定夠了,某些情況下需要更長時(shí)間的壓測才能發(fā)現(xiàn)性能問題。
穩(wěn)定性測試多用于對“系統(tǒng)穩(wěn)定性”有“強(qiáng)需求”的系統(tǒng),比如金融類的銀行、證券等等。如系統(tǒng)要求3*24小時(shí)運(yùn)行,測試當(dāng)系統(tǒng)在一定的壓力情況下(如CPU資源使用率維持在50%左右),選取復(fù)合場景的案例,持續(xù)運(yùn)行3x24小時(shí),觀測系統(tǒng)的穩(wěn)定性狀態(tài)數(shù)據(jù)。
還有一種是:測試人員發(fā)現(xiàn),系統(tǒng)在短時(shí)間(1個(gè)小時(shí)、8個(gè)小時(shí)甚至1天)內(nèi)都是正常的,但一超過一定時(shí)間后就會(huì)CPU利用率徒增,或者內(nèi)存持續(xù)增高(疑似內(nèi)存泄露),這也需要來一場轟轟烈烈的穩(wěn)定性測試……
4、負(fù)載測試
負(fù)載測試是通過逐漸增加用戶量來觀察在不同的負(fù)載下系統(tǒng)的指標(biāo),以檢驗(yàn)系統(tǒng)的行為和特性,以發(fā)現(xiàn)系統(tǒng)可能存在的性能問題,并可以檢測系統(tǒng)的伸縮性。
也可以確定在什么負(fù)載條件下系統(tǒng)性能處于失效狀態(tài),目標(biāo)是獲得系統(tǒng)能提供的最大服務(wù)級(jí)別。
************解釋************
負(fù)載測試是大家平時(shí)做性能測試使用最多的一種類型,甚至有些時(shí)候大家嘴里所說的性能測試,就是指的負(fù)載測試。說的直白點(diǎn),就是你寫好腳本跑個(gè)100并發(fā),發(fā)現(xiàn)對于系統(tǒng)來說“灑灑水啦”,監(jiān)控顯示內(nèi)存和CPU指標(biāo)都懶得波動(dòng)一下。那我們加到400試試,加到500呢,1000……?所以,這就是一個(gè)“試”的過程,直到系統(tǒng)“失效”!這里的“失效”不一定是指系統(tǒng)宕機(jī),監(jiān)控顯示CPU、Memory利用率超過80%了也叫失效,系統(tǒng)響應(yīng)時(shí)間超過預(yù)期的3秒了也叫失效,就看哪個(gè)條件先被打破了……