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

參數化
Loadrunner選擇哪個協議
Loadrunner的關聯
Loadrunner的Controller/Agent
Jmeter的Remote testing
工具的使用技能僅僅是性能測試里的一小部分,切不可只關注工具使用。
是否每次的性能測試都需要用上大型的工具呢,某個頁面的響應時間是否可以使用其他輕量的工具,例如一些瀏覽器插件Httpwatch,Yahoo YSlow,Google speed tracer;
是否可以自己寫些有針對性的小工具,根據實際情況定義出真實的Page load time,而不僅僅是服務器的響應時間。

六、數據收集與分析
性能測試的最終目的是通過數據收集分析出系統是否存在瓶頸,所以數據收集和分析是一個很重要的過程。
分析的過程需要團隊成員的參與,例如架構師、DBA、開發人員,是一個長期的過程,通過調整測試腳本,生成不同的數據對比。
七、我所發現的2次問題
1、雙網卡問題,一個新改版的項目,上線后在峰值的時候總有機器崩潰或性能大幅下降,最后發現是服務器只使用了單網卡,這個明顯就是上面提到的排除干擾沒做好(配置沒有檢查),這次性能測試是失敗的。
2、子進程崩潰,64位系統基準測試,通過與團隊成員的不斷溝通,排除各種設置干擾、確定硬件和軟件配置、加入profile工具,與32位系統的對比。
八、后續優化
性能測試僅僅是個開始,性能測試最終目的是發現和解決系統的瓶頸,這就涉及到優化,而優化的過程往往在系統設計階段就需要考慮。
1、異步獲取數據
2、建立緩存
3、分布式
4、文件分解
九、推薦
1、基于用戶體驗的性能測試,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