以下是對自己效能測試過程的一個簡單小節, 對於效能需求分析的方法沒有過多描述.
1)待測系統採取什麼通訊協定 ?web還是C/S ?,如果是web方式,那麼伺服器使用的是apache還是別的?web伺服器當前的配置.
2)期望達到的效能指標?這個在項目組提交的效能測試需求文檔裡有說明,擔通常描述不是很清晰,需要進一步確認(可參見步驟4).
3)網路環境,待測的server端部署在什麼網路環境 ?負載機所在的網路環境? 他們之間的介面頻寬有多少?(曾碰到過待測server放在IDC的情況,這時壓力測試發送的量就需要小心,不能影響其它業務的正常運行. 缺少獨立的網路環境, 真的是效能測試之殤)
4)估算開發提出的效能指標能否達到:
4.1)計算網路頻寬是否會成為瓶頸,需要考慮伺服器的網卡,頻寬以及測試機所在環境的網路頻寬: 如返回的是頁面,可以通過httpwatch來查看返回的頁面大小,假設為aK, 希望達到的並發數為b人,則佔用頻寬為:a*b*8 byte(乘以8是由於網路頻寬是以bit為單位的)。 我們的OA網路頻寬是100MkB,但是由全公司同事來分享,所以如果上面的值超過或太接近100M的話,在測試環境中該指標實際是無法達到的.
4.2)磁碟I/0是否會成為瓶頸,該情況多出現在需要向磁碟寫入大數量的情況,如下載檔案。通常我們的PC機磁碟I/0讀寫是2M,如果要求支援1000個並發,而從伺服器端返回的速率是每秒100kB(伺服器端對單個串連的下載速度不限速, 且下載檔案已儲存到cache),那麼一台pc機最多支援的Vuser=2000/100,為20個虛擬使用者(實際達不到20)。由此可知這麼多的負載機幾乎是不可能達到的. 需要重新考慮測試策略.
5)瞭解被測程式 通常我們測試的都是server,那麼需要瞭解如下幾個問題:
5.1)server端的cache機制,資料是不是在server啟動時即被載入到記憶體? 記憶體有多大? 記憶體中的資料如何淘汰?
5.2)server端是以進程還是線程來處理用戶端請求的,這個進程/線程數是否可配置?
5.3)諮詢開發人員server程式對CPU,mem,I/0那個佔用比較大 ?
5.4)server端是否用到了公司的其它萬用群組件,如XXX等,需要瞭解這些萬用群組件的效能指標是否成為制約條件.
5.5)在生產環境,server是叢集還是單機環境?
6)編寫測試計劃,確定負載機的數量,確定測試載入器.
7)開發測試指令碼,調試成功後開始效能測試,每個測試情境重複執行2到3輪,壓力過程中需監控伺服器資源的使用方式.由於公司的限制,我們只能使用vmstat,top等linux內建命令來監控, 無法使用spolight等工具.
每輪測試後,都重新啟動server程式以盡量確保測試環境的一致(釋放資源,清空cache).由於公司規定,重啟server所在主機不被允許. 當三輪測試都執行完畢後, 統計監控到的server端資源使用資料, 相關指標取平均值。
8)如達不到效能測試指標,可在開發的配合下,通過調整web伺服器,server的配置(如:接入進程,處理進程數等)後,查看效能是否有變化. 注意,在調整配置時,最好是一次只調整一項.這樣更有利於定位瓶頸.