性能基準測試是一項系統性能測量工作,根據目前的項目實際,在這裡做了一些新的定義。基準測試在項目中與一般性能測試工作的主要差別在于其更短的回歸周期與直覺的趨勢分析,并同時為混合業務性能場景的腳本線程配比計算提供依據。一般的性能測試往往隻在版本計劃中或遭遇系統性能問題時進行,而基準測試在日常中進行,特别是在發生重大變更事件(例如:系統配置、環境發生變更)之前與之後的測試,讓測試結果資料與一般的性能測試結果資料更有實質上的參考意義。因為,當為系統建立性能基準後,基準資料作為性能名額的參照物,可用于判斷任意一項變更為系統帶來的具體影響。例如:某項配置優化後能夠為系統帶來的性能提升是多少、系統某項操作曆史資料的增長與性能響應的關系、系統環境的變更對系統性能産生的影響。而且實施該項工作并不複雜。
基準測試資料的實際用途
1) 了解系統性能基準作為參照物(性能問題發生後的測試很難了解系統性能基準)
2) 識别系統或環境的配置變更對性能響應帶來的影響
3) 為系統優化前後的性能提升/下降提供參考名額
4) 觀察系統的整體性能趨勢與拐點發生,及早識别系統性能風險
性能基準自動化測試與一般性能測試的主要差別
1) 測試周期:基準測試每天定時自動化執行,性能測試需要事件驅動執行。
2) 測試腳本:基準測試的性能測試腳本僅僅包含所關注業務的必須的HTTP請求,不進行使用者行為模拟;性能測試的測試腳本包含關鍵業務的所有上下文請求,并進行使用者行為的模拟。
3) 測試政策:基準測試政策固定,幾乎不允許修改(否則将與過去所有曆史資料發生斷層);性能測試需要根據不斷變化的性能需求進行修改。
4) 腳本維護:基準測試的測試腳本僅在通路連結發生變更時維護,或者POST請求參數發生變更時維護,GET請求幾乎不需要維護;性能測試腳本在每輪測試中一般都需要重新開發。
5) 結果用途:基準測試結果資料僅用于作為系統性能下降/提升的衡量名額,性能測試結果腳本可用于預測使用者性能體驗、系統性能風險。
性能基準測試自動化測試的實施
1) 性能基準資料的擷取
利用Apache的開源項目Jmeter測試工具,使用Jmeter針對關注的系統性能點進行腳本開發,如下圖,線程在事務控制器“使用者登入”内進行系統登入,循環控制器内裝載了各個性能關注點的HTTP請求:
在測試計劃中維護性能基準測試環境資訊與測試政策,包括:主機、端口、線程數、加載速度、疊代次數等。并采用50線程執行性能測試腳本,每條線程執行10次疊代,每個性能關注點取得500個響應樣本,進而性能響應資料,包括:平均值、标準差、事務通過情況、錯誤内容。
2) 計劃任務的定時執行
利用Apache開源項目Ant每日中午定時執行基準測試,自動儲存性能測試結果,生成當日的性能基準測試結果資料,每日基準測試報告如下圖:
假定性能關注點為5個,采用以上測試政策,在系統性能響應理想的情況下,整個測試過程時間可在3分鐘内完成,最後生成一定數量的結果檔案,最好有30天以上
3) 資料的整合與趨勢分析
當取得足夠量的基準測試結果以後(例如:30天、60天、90天),即可對第二節中所提到的每天的測試結果資料進行整合,生成報表的形式,直覺的了解過去時間内,系統的性能拐點發生日期,對拐點發生當日的變更事件進行跟蹤。報表所展現的内容在使用summary中的平均響應時間、事務通過率作為系統整體性能響應考量名額。不把每個事務都展現到報表中,除非:
a) 系統整體事務通過率無法達到95%;
b) 系統整體響應時間平均值大于2秒,最高值大于10秒;
下面是用perl寫了個程式對html檔案進行分析的輸出,每個基準測試時間後對應了系統整體性能狀況(事務的通過率,以及響應時間的平均、最快、最大值),最後根據預定義的門檻值給出結果,為了更好的說明問題,這裡把“平均響應時間大于5秒”判斷為性能下降,最後一列的“↘”表示了3月31日出現了性能拐點。