在面試測試人員的時(shí)候,這是一個(gè)很好的問(wèn)題:你如何定義性能/負載/壓力測試?在很多時(shí)候,人們都是將它們作為可互相替換的相同術(shù)語(yǔ)來(lái)使用,然而實(shí)際上他們之間的差異是比較大的。這個(gè)貼子是根據我自己的一些經(jīng)驗,針對這三個(gè)概念寫(xiě)的一個(gè)比較簡(jiǎn)單的評論,當然也同時(shí)參考了一些測試文獻資料里的定義,比如說(shuō):
"Testing computer software" by Kaner et al
"Software testing techniques" by Loveland et al
"Testing applications on the Web" by Nguyen et al
Update July 7th, 2005
從網(wǎng)站的訪(fǎng)問(wèn)日志中我可以看到這篇貼子經(jīng)常會(huì )被人們在GOOGLE中搜索到,所以我在這里加上一個(gè)我寫(xiě)的一個(gè)后續貼子的地址連接'More on performance vs. load testing'.
性能測試
性能測試的目的不是去找bugs,而是排除系統的瓶頸,以及為以后的回歸測試建立一個(gè)基準。而性能測試的操作,實(shí)際上就是一個(gè)非常小心受控的測量分析過(guò)程。在理想的情況下,被測軟件在這個(gè)時(shí)候已經(jīng)是足夠穩定了,所以這個(gè)過(guò)程得以順利的進(jìn)行。
一組清晰已定義好的預期值是讓一次有意義的性能測試的基本要素。如果連你自己都不知道系統性能有些什么是要測的,那么它對于你要測試的方法手段是沒(méi)有指導意義的*。例如,給一個(gè)web應用做性能測試,你要知道至少兩樣東西:
在不同并發(fā)用戶(hù)數或者HTTP連接數情況下的負載預期值*
可接受的響應時(shí)間
當你知道你的目標后,你就可以開(kāi)始使用對系統持續增加負載的方法來(lái)觀(guān)察系統的瓶頸所在。重新拿web應用系統來(lái)做例子,這些瓶頸可存在于多個(gè)層次,你可以使用多種工具來(lái)查明它們的所在:
在應用層,開(kāi)發(fā)人員可以通過(guò)profilers來(lái)發(fā)現低效率的代碼,比如說(shuō)較差的查找算法
在數據庫層,開(kāi)發(fā)人員和數據庫管理員(DBA)可以通過(guò)特定的數據庫profilers及事件探查器(query optimizers)
在操作系統層,系統工程師可以使用一些工具如在Unix類(lèi)的操作系統中的top,vmstat,iostat,在Windows系統中的PerfMon來(lái)監控CPU,內在,swap,磁盤(pán)I/O等硬件資源;專(zhuān)門(mén)的內核監控軟件也可以在這一層面上被使用。
在網(wǎng)絡(luò )層上,網(wǎng)絡(luò )工程師可以使用報文探測器(如tcpdump),網(wǎng)絡(luò )協(xié)議分析器(如ethereal),還有其它的工具(如netstat,MRTG,ntop,mii-tool)
從測試的觀(guān)點(diǎn)來(lái)看,上面所有描述的活動(dòng)都是一種白盒的方法,它對系統從內到外及多角度進(jìn)行審查及監控。測度數據*被取得及分析后,對系統的調整則成為理所當然的下一個(gè)步驟。
然而,(除了上面的方法外)測試人員在給被測系統運行負載試驗*(這里為了不與我們所理解的負載測試-load testing的概念搞混,特譯做負載試驗)的時(shí)候,也采取了黑盒的方法。像對于WEB應用來(lái)講,測試人員可以使用工具來(lái)模擬并發(fā)用戶(hù)或者HTTP連接及測量響應時(shí)間。在我以前使用過(guò)的輕量級的負載測試開(kāi)源工具有ab,siege,httperf。一個(gè)更重量級的工具是OpenSTA,但我沒(méi)用過(guò)。我也還沒(méi)有用過(guò)The Grinder這個(gè)工具,但它在我將要做的事情中排名靠前。
當負載試驗*的結果顯示出系統的性能來(lái)沒(méi)有達到它的預期目標時(shí),這就是要對應用和數據庫的調整的時(shí)候了。同時(shí)你要確保讓你的代碼運行得盡可能高效,以及數據庫在給定的操作系統和硬件配置的情況下最優(yōu)化。測試驅動(dòng)開(kāi)發(fā)(TDD)的實(shí)踐者會(huì )發(fā)現這種上下文結構框架是非常有用的*,如可以通過(guò)負載試驗*及時(shí)間試驗的函數性*來(lái)增強現存單元測試代碼的Mike Clark的jUnitPerf*。當一個(gè)特定的函數或者方法被剖析過(guò)*和調試過(guò)后,開(kāi)發(fā)人員就可以在jUnitPerf中,放入它的單元試驗*來(lái)確保它可以達到負載及時(shí)間上的性能需求。Mike Clark稱(chēng)這為“持續性能測試”。我順便也提一下我已經(jīng)做了一個(gè)基于Python的jUnitPerf的初步研究,我稱(chēng)之為pyUnitPerf.
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/