在性能測試種最常見的問題
在軟件性能測試期間融求,開發(fā)人員會(huì)尋找性能的癥狀和問題扁藕。速度問題——例如緩慢的響應(yīng)和長時(shí)間的加載時(shí)間——經(jīng)常會(huì)被觀察和處理沮峡。但是還能看到有一些其他的性能問題:
瓶頸效應(yīng)——發(fā)生在當(dāng)數(shù)據(jù)流被中斷或者停止的時(shí)候,因?yàn)闆]有足夠的能力處理工作負(fù)載亿柑。
較差的可擴(kuò)展性——如果軟件無法處理所需數(shù)量的并發(fā)任務(wù)邢疙,結(jié)果可能導(dǎo)致延誤,可能增加錯(cuò)誤望薄,或者發(fā)生其他無法預(yù)料的行為疟游,這影響到:
○ 磁盤使用情況○ CPU使用情況○ 內(nèi)存卸扣○ 操作系統(tǒng)受限○ 糟糕的網(wǎng)絡(luò)配置
軟件配置問題——通常設(shè)置不是設(shè)置在一個(gè)足夠的級別上來處理工作負(fù)載。
硬件資源不足——性能測試可能暴露出物理內(nèi)存限制或低效率的CPU痕支。
性能測試7步
?Image credit Gateway TestLabs
同樣也被曾作測試臺颁虐,測試環(huán)境是設(shè)置軟件、硬件和網(wǎng)絡(luò)來執(zhí)行性能測試的地方采转。為了使用性能測試測試環(huán)境聪廉,開發(fā)人員可以用下面七步:
確定測試環(huán)境
確定硬件、軟件故慈、網(wǎng)絡(luò)配置和可用的工具板熊,讓測試團(tuán)隊(duì)設(shè)計(jì)測試和盡早確定性能測試挑戰(zhàn)。性能測試環(huán)境選擇包括:
○ 有少量低規(guī)格服務(wù)器的生產(chǎn)系統(tǒng)子集察绷。
○ 有少量相同規(guī)范服務(wù)器的生產(chǎn)系統(tǒng)的子集干签。
○ 生產(chǎn)系統(tǒng)的復(fù)制品。
○ 實(shí)際生產(chǎn)系統(tǒng)拆撼。
確定性能標(biāo)準(zhǔn)
除了確定性能參數(shù)容劳,例如響應(yīng)時(shí)間,吞吐量和限制之外闸度,確定性能測試的成功標(biāo)準(zhǔn)是什么竭贩。
計(jì)劃和設(shè)計(jì)性能測試
確定性能測試方案,考慮賬戶用戶的可變性莺禁、測試數(shù)據(jù)和目標(biāo)參數(shù)留量。這將創(chuàng)建一到兩個(gè)模型。
配置測試環(huán)境
準(zhǔn)備測試環(huán)境的元素和監(jiān)控資源所需的設(shè)備。
執(zhí)行測試設(shè)計(jì)
開發(fā)測試楼熄。
執(zhí)行測試
除了運(yùn)行性能測試之外忆绰,監(jiān)控和抓取生產(chǎn)數(shù)據(jù)。
分析可岂,報(bào)告错敢,再測試
分析數(shù)據(jù),分享所發(fā)現(xiàn)的缕粹。使用同樣的參數(shù)和不同的參數(shù)再次運(yùn)行性能測試稚茅。
性能測試參數(shù)測量了什么
參數(shù)需要理解性能測試的質(zhì)量和效果。除非有測量平斩,否則無法提高》逅現(xiàn)在解釋下2種定義:
測量——收集的數(shù)據(jù),例如它響應(yīng)一個(gè)請求所花的秒數(shù)双戳。
參數(shù)——使用數(shù)據(jù)的計(jì)算結(jié)果虹蒋,決定結(jié)果的質(zhì)量,例如平均響應(yīng)時(shí)間(總響應(yīng)時(shí)間/請求)
有許多方法可以測量速度飒货、可擴(kuò)展性和穩(wěn)定性魄衅,但是每輪性能測試無法使用全部方法。在性能測試中所用的參數(shù)塘辅,下面的是經(jīng)常用到的:
響應(yīng)時(shí)間:發(fā)送一個(gè)請求和獲得一個(gè)響應(yīng)的總時(shí)間晃虫。
等待時(shí)間 :這也稱為平均延遲,這告訴開發(fā)人員在發(fā)送請求后接收第一個(gè)字節(jié)需要多長時(shí)間扣墩。
平均加載時(shí)間:從用戶的角度來看哲银,交付每個(gè)請求所需的平均時(shí)間是質(zhì)量的主要指標(biāo)。
峰值響應(yīng)時(shí)間:這是完成請求所需的最長時(shí)間的測量呻惕。峰值響應(yīng)時(shí)間明顯長于平均時(shí)間荆责,這可能表明出現(xiàn)問題的異常情況。
錯(cuò)誤率:這是一個(gè)與所有請求相比亚脆,計(jì)算產(chǎn)生錯(cuò)誤的請求的百分比做院。這些錯(cuò)誤通常發(fā)生在負(fù)載超過容量的時(shí)候。
并發(fā)用戶:這是最常見的負(fù)載測量——在任意時(shí)刻有多少活躍用戶濒持,也稱為負(fù)載大小键耕。
每秒請求:多少請求被處理。
事務(wù)通過/失敻逃:對成功或不成功請求的總數(shù)的測量屈雄。
吞吐量:以千字節(jié)每秒的速度度量,吞吐量顯示測試期間使用的帶寬量官套。
CPU利用率:CPU需要多少時(shí)間來處理請求酒奶。
內(nèi)存利用率:需要多少內(nèi)存來處理請求蓖议。
性能測試最佳實(shí)踐
也許性能測試最重要的小建議就是早測試,常測試讥蟆。一個(gè)單獨(dú)的測試將無法告訴開發(fā)人員他們所需知道的全部。成功的性能測試是許多的反復(fù)測試和小測試組成的纺阔。
在開發(fā)中盡可能的早測試瘸彤。當(dāng)項(xiàng)目結(jié)束時(shí),不要等待并急于進(jìn)行性能測試笛钝。
性能測試不僅僅針對已完成的項(xiàng)目质况。測試單個(gè)單元或模塊也是有價(jià)值的。
進(jìn)行多項(xiàng)性能測試玻靡,以確保一致的發(fā)現(xiàn)和確定參數(shù)的平均值结榄。
應(yīng)用常常涉及多個(gè)系統(tǒng),例如數(shù)據(jù)庫囤捻、服務(wù)器和服務(wù)臼朗。單獨(dú)測試各個(gè)單元,而且一起測試蝎土。
Image credit Varun Kapaganty
除了反復(fù)測試视哑,通過一系列性能測試的最佳實(shí)踐,性能測試將會(huì)更加成功誊涯。
讓開發(fā)人員挡毅、IT人員和測試人員一起參與創(chuàng)建一個(gè)性能測試環(huán)境。
記住真正的用戶將使用正在進(jìn)行性能測試的這個(gè)軟件暴构。確定結(jié)果將如何影響用戶跪呈,而不僅僅是測試環(huán)境服務(wù)器。
超越性能測試參數(shù)取逾。通過計(jì)劃一個(gè)測試環(huán)境來開發(fā)一個(gè)模型耗绿,這個(gè)測試環(huán)境盡可能多地考慮用戶活動(dòng)。
基線測量為確定成功或失敗提供了一個(gè)起點(diǎn)砾隅。
性能測試最好在盡可能接近生產(chǎn)系統(tǒng)的測試環(huán)境中進(jìn)行缭乘。
將性能測試環(huán)境與用于質(zhì)量保證測試的環(huán)境隔離開來。
任何性能測試工具都不需要做任何事情琉用。有限的資源可能會(huì)進(jìn)一步限制選擇堕绩。為了更適合研究性能測試工具。
盡可能保持測試環(huán)境的一致性邑时。
計(jì)算出的平均值將提供可執(zhí)行的參數(shù)骇塘。跟蹤異常值也有價(jià)值。這些極端的測量可能暴露出可能的失敗歌馍。
當(dāng)準(zhǔn)備報(bào)告分享性能測試結(jié)果時(shí)跛十,請考慮聽眾唐含。此外,還包括報(bào)告中的任何系統(tǒng)和軟件更改沫浆。
5個(gè)性能測試常犯的錯(cuò)誤
還有一些錯(cuò)誤會(huì)導(dǎo)致性能測試時(shí)不太可靠的結(jié)果:
測試時(shí)間不足
不包括開發(fā)人員
不使用與生產(chǎn)系統(tǒng)類似的QA系統(tǒng)
優(yōu)化軟件不足
沒有故障排除的計(jì)劃
性能測試錯(cuò)誤理論
性能測試的錯(cuò)誤理論可能導(dǎo)致錯(cuò)誤或遵循性能測試最佳實(shí)踐的失敗捷枯。根據(jù)Sofia
Palamarchuk的說法,這些理念在開發(fā)軟件時(shí)可能會(huì)耗費(fèi)大量金錢和資源:
性能測試是開發(fā)的最后一步
在前面性能測試最佳實(shí)踐部分中提到過专执,預(yù)期和解決性能測試問題應(yīng)該是軟件開發(fā)的早期部分淮捆。盡早執(zhí)行解決方案將比軟件開發(fā)結(jié)束時(shí)的主要修復(fù)成本要低。
硬件越多就能解決性能問題
增加處理器本股、服務(wù)器或內(nèi)存攀痊,簡單的增加成本,不解決任何問題拄显。更多有效的軟件可以在硬件增加或改善時(shí)更好的運(yùn)行和避免潛在的問題苟径。
測試環(huán)境“非常接近”
在一個(gè)類似于生產(chǎn)環(huán)境的測試環(huán)境中進(jìn)行性能測試,是一個(gè)性能測試的最佳實(shí)踐躬审。這些元素之間的差異可以顯著地影響系統(tǒng)性能棘街。在精確的生產(chǎn)環(huán)境中進(jìn)行性能測試可能是不可能的,但是嘗試匹配:
硬件組件
操作系統(tǒng)和設(shè)置
系統(tǒng)上使用的其他應(yīng)用程序
數(shù)據(jù)庫
現(xiàn)在什么有用承边,就全面的起作用
對于推算出的結(jié)果要小心蹬碧。不要采用小的性能測試結(jié)果,并且假設(shè)當(dāng)元素發(fā)生變化時(shí)炒刁,它們將是相同的恩沽。而且,它們是在對立面工作的翔始。不要根據(jù)負(fù)載測試來推斷最小的性能和需求罗心。所有的假設(shè)都應(yīng)該通過性能測試來驗(yàn)證。
一個(gè)性能測試方案就夠了
不是每個(gè)性能問題都可以在一個(gè)性能測試方案中檢測到城瞎。但是資源確實(shí)限制了可能發(fā)生的測試數(shù)量渤闷。在中間的是一系列性能測試,它們針對的是風(fēng)險(xiǎn)最高的情況脖镀,對性能會(huì)產(chǎn)生最大的影響飒箭。此外,問題可能出現(xiàn)在設(shè)計(jì)良好之外和設(shè)計(jì)良好的性能測試蜒灰。監(jiān)視生產(chǎn)環(huán)境也可以檢測性能問題弦蹂。
測試了每個(gè)部分等于測試了全部系統(tǒng)
雖然隔離功能用于性能測試是很重要的,但是單獨(dú)的組件測試結(jié)果并不會(huì)添加到整個(gè)系統(tǒng)范圍的評估中强窖。但是凸椿,測試一個(gè)系統(tǒng)的所有功能可能是不可行的。一個(gè)完全可能的性能測試必須使用可用的資源來設(shè)計(jì)翅溺。但是要注意沒有測試過的東西脑漫。
是什么對他們有用髓抑,對我們有用
如果一組用戶確實(shí)遇到了復(fù)雜的問題或性能問題,那么不要認(rèn)為這是對所有用戶的性能測試优幸。使用性能測試來確保平臺和配置如預(yù)期的那樣工作吨拍。
軟件開發(fā)人員經(jīng)驗(yàn)豐富,不需要性能測試
缺乏經(jīng)驗(yàn)并不是造成性能問題的唯一原因网杆。即使是過去開發(fā)過免費(fèi)軟件的開發(fā)人員也犯了錯(cuò)誤羹饰。特別是當(dāng)多個(gè)并發(fā)用戶在系統(tǒng)中時(shí),更多的變量開始發(fā)揮作用跛璧。
一個(gè)完整的加載測試說明了一切
在總負(fù)載中運(yùn)行一個(gè)測試來發(fā)現(xiàn)所有性能問題是很吸引人的。除了這種測試新啼,它往往會(huì)暴露出許多性能問題追城,以至于很難將注意力集中在單個(gè)解決方案上。從較低的負(fù)載開始燥撞,逐步向上擴(kuò)展可能看起來是一個(gè)不必要的緩慢過程座柱,但是它會(huì)產(chǎn)生更容易的結(jié)果,從而更有效地排除故障物舒。
測試腳本是實(shí)際的用戶
確保測試自動(dòng)化正在以真實(shí)用戶的方式使用該軟件色洞。當(dāng)性能測試參數(shù)被更改時(shí),這一點(diǎn)尤為重要冠胯。