@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
半桶水談性能測試 《轉(zhuǎn)載》
首先在我的職業(yè)生涯中,做性能測試的機(jī)會不多,發(fā)現(xiàn)性能瓶頸的次數(shù)更少,確切的說只有2次。隨著大型分布式系統(tǒng),特別是Web App和云計(jì)算的推廣,性能測試的需求會更加迫切。今天我這個(gè)半桶水就來談?wù)勑阅軠y試的話題,歡迎大家一起來討論。
什么是性能測試?
性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測試。
負(fù)載測試和壓力測試都屬于性能測試,兩者可以結(jié)合進(jìn)行。
通過負(fù)載測試,確定在各種工作負(fù)載下系統(tǒng)的性能,目標(biāo)是測試當(dāng)負(fù)載逐漸增加時(shí),系統(tǒng)各項(xiàng)性能指標(biāo)的變化情況。
壓力測試是通過確定一個(gè)系統(tǒng)的瓶頸或者不能接收的性能點(diǎn),來獲得系統(tǒng)能提供的最大服務(wù)級別的測試。
中國軟件評測中心將性能測試概括為三個(gè)方面:應(yīng)用在客戶端性能的測試、應(yīng)用在網(wǎng)絡(luò)上性能的測試和應(yīng)用在服務(wù)器端性能的測試。
通常情況下,三方面有效、合理的結(jié)合,可以達(dá)到對系統(tǒng)性能全面的分析和瓶頸的預(yù)測。
注意這里提到了三個(gè)方面,但平常我們往往注意力集中在服務(wù)端的性能而忽略了客戶端和網(wǎng)絡(luò)的性能。
下面是我這個(gè)半桶水來談?wù)勔恍w會:
一、目的/需求
為什么需要做性能測試或此次做性能測試的目的是什么?
1、新項(xiàng)目/產(chǎn)品,首次發(fā)布,需要做基準(zhǔn)測試
2、使用中的產(chǎn)品,重構(gòu)了某個(gè)模塊/某個(gè)模塊使用了新的技術(shù),需要一個(gè)評估
3、使用中的產(chǎn)品,用戶量爆發(fā)了,用戶量從百萬級增加到千萬級
4、增加了一個(gè)或多個(gè)頁面,需要對頁面的Latency進(jìn)行一次測試
在測試開始前,需要有準(zhǔn)備工作,對此次性能測試的目的做詳細(xì)了解,確定需要收集哪些數(shù)據(jù),關(guān)注哪些性能指標(biāo)。
二、環(huán)境部署
性能測試需要一個(gè)干凈的環(huán)境,這個(gè)環(huán)境包括硬件、網(wǎng)絡(luò)、操作系統(tǒng)、被測試的系統(tǒng),數(shù)據(jù)庫。
那在開始前,需要把這個(gè)環(huán)境部署準(zhǔn)備好,最好是能模擬線上的系統(tǒng),同時(shí)這也是一個(gè)排除干擾的過程,畫出一張架構(gòu)圖。
1、硬件,使用怎樣的服務(wù)器,理想情況是和生產(chǎn)環(huán)境一樣的服務(wù)器,需要配置負(fù)載均衡么
2、網(wǎng)絡(luò), 是否需要模擬各種網(wǎng)絡(luò),是否需要雙網(wǎng)卡,內(nèi)部網(wǎng)絡(luò)是否會影響到其他員工正常使用
3、操作系統(tǒng),windows/linux,是采用默認(rèn)設(shè)置還是已經(jīng)有參考的設(shè)置,哪些操作系統(tǒng)的服務(wù)需要關(guān)閉,linux中的ulimit如何設(shè)置
4、被測試系統(tǒng),邀請架構(gòu)師的參與,系統(tǒng)使用怎么樣的架構(gòu),是否使用了Web Server——IIS/Apache/Tomat,他們的最優(yōu)配置是怎么樣的
5、數(shù)據(jù)庫,站內(nèi)搜索數(shù)據(jù)庫是否和訂單數(shù)據(jù)庫分開,數(shù)據(jù)庫是否有緩存,數(shù)據(jù)庫是否使用主從式
三、場景和負(fù)載模式
此次性能測試需要模擬怎樣的場景:
1、購物網(wǎng)站秒殺活動,使用恒負(fù)載模式,設(shè)定集合點(diǎn),用戶并發(fā)
2、系統(tǒng)正常的使用,從每天的監(jiān)控系統(tǒng)中分析,例如看到購物高峰是中午,使用單步負(fù)載模式(Ram-up/down),每間隔時(shí)間內(nèi)用戶增加多少,到購物高峰時(shí)間是恒負(fù)載,過了高峰后用戶開始減少
3、系統(tǒng)改版,使用基于目標(biāo)的負(fù)載模式,根據(jù)歷史數(shù)據(jù)設(shè)定目標(biāo),或例如設(shè)定CPU/Memory最大到85%
確定好了場景和負(fù)載模式,才能正確的生成用例/腳本。
四、性能指標(biāo)
此次性能測試需要收集哪些性能指標(biāo)和數(shù)據(jù):
1、CPU使用率
2、Memory使用率
3、QPS
4、響應(yīng)時(shí)間
5、網(wǎng)絡(luò)IO
6、文件IO
7、數(shù)據(jù)庫IO
8、最大支持用戶數(shù)
以上指標(biāo)并不是都要收集,要根據(jù)具體的場景來決定。
五、性能測試工具
提到性能測試,很多測試人的第一概念就是工具,比如商業(yè)流行的Loadrunner,開源流行的Jmeter,但是很少人注重上面提到的四點(diǎn), 所謂“磨刀不誤砍材工”,沒有上面的設(shè)計(jì)分析,僅僅使用工具跑出結(jié)果是無法分析出性能的瓶頸,不可靠的數(shù)據(jù)結(jié)果會大大增加排查工作,這些數(shù)據(jù)往往會受到很 多質(zhì)疑。
工具的使用:

參數(shù)化
Loadrunner選擇哪個(gè)協(xié)議
Loadrunner的關(guān)聯(lián)
Loadrunner的Controller/Agent
Jmeter的Remote testing
工具的使用技能僅僅是性能測試?yán)锏囊恍〔糠郑胁豢芍魂P(guān)注工具使用。
是否每次的性能測試都需要用上大型的工具呢,某個(gè)頁面的響應(yīng)時(shí)間是否可以使用其他輕量的工具,例如一些瀏覽器插件Httpwatch,Yahoo YSlow,Google speed tracer;
是否可以自己寫些有針對性的小工具,根據(jù)實(shí)際情況定義出真實(shí)的Page load time,而不僅僅是服務(wù)器的響應(yīng)時(shí)間。

六、數(shù)據(jù)收集與分析
性能測試的最終目的是通過數(shù)據(jù)收集分析出系統(tǒng)是否存在瓶頸,所以數(shù)據(jù)收集和分析是一個(gè)很重要的過程。
分析的過程需要團(tuán)隊(duì)成員的參與,例如架構(gòu)師、DBA、開發(fā)人員,是一個(gè)長期的過程,通過調(diào)整測試腳本,生成不同的數(shù)據(jù)對比。
七、我所發(fā)現(xiàn)的2次問題
1、雙網(wǎng)卡問題,一個(gè)新改版的項(xiàng)目,上線后在峰值的時(shí)候總有機(jī)器崩潰或性能大幅下降,最后發(fā)現(xiàn)是服務(wù)器只使用了單網(wǎng)卡,這個(gè)明顯就是上面提到的排除干擾沒做好(配置沒有檢查),這次性能測試是失敗的。
2、子進(jìn)程崩潰,64位系統(tǒng)基準(zhǔn)測試,通過與團(tuán)隊(duì)成員的不斷溝通,排除各種設(shè)置干擾、確定硬件和軟件配置、加入profile工具,與32位系統(tǒng)的對比。
八、后續(xù)優(yōu)化
性能測試僅僅是個(gè)開始,性能測試最終目的是發(fā)現(xiàn)和解決系統(tǒng)的瓶頸,這就涉及到優(yōu)化,而優(yōu)化的過程往往在系統(tǒng)設(shè)計(jì)階段就需要考慮。
1、異步獲取數(shù)據(jù)
2、建立緩存
3、分布式
4、文件分解
九、推薦
1、基于用戶體驗(yàn)的性能測試,User Experience, Not Metrics
更貼近用戶使用場景的性能測試,里面使用的工具主要是IBM的Rational TestStudio
http://www.cnblogs.com/mayingbao/archive/2008/04/11/1148510.html
2、軟件性能測試過程詳解與案例剖析(第二版)
3、要做好性能測試,該掌握些什么?
http://www.51testing.com/html/23/n-92923.html
http://www.51testing.com/html/93/category-catid-93.html