摘要:本文簡單介紹軟件的性能測試過程,將性能測試過程分為性能測試設計、性能測試執行、測試結果分析三個階段,并介紹了每個階段的主要工作內容和方法,配有簡單的例子進行解釋。
關鍵字:性能測試 性能測試設計 測試場景 結果分析
隨著企業需求的日益增長以及計算技術的不斷進步,企業級系統的應用已經從早期的單機時代轉換到了服務成千上萬個用戶的因特網時代。隨著企業業務量的增 加,企業的應用系統承載的負荷越來越重,對應用系統的要求越來越高。系統性能的好壞直接影響企業對外提供服務的質量,而性能測試在軟件的質量保證中起著重 要的作用。
本人結合自己的經驗,從技術角度簡單討論一下軟件性能測試的測試過程。軟件性能測試過程分為三個階段:
● 性能測試設計
● 性能測試執行
● 測試結果分析
1.性能測試設計
性能測試設計是性能測試過程中一個非常重要的環節,性能測試設計的好壞直接關系到測試的充分性和測試結果的有效性。
性能測試設計階段主要包括性能需求分析、測試場景制定等。
1.1 性能需求分析
性能需求分析主要包括測試目的和性能指標確定。
進行性能需求分析,需要明確性能需求。性能需求可以從被測軟件的相關文檔中獲得,也可以通過與用戶溝通來獲得。仔細閱讀被測軟件附帶的相關文檔,包括需求文檔、使用文檔、數據庫設計文檔等,提取有關軟件性能相關的描述,例如“要求操作響應時間在……以內”、“要求……能夠快速……”、“要求……能夠支持……用戶訪問”、“要求……能快速穩定運行”、“要求系統連續……無故障運行”等,然后對提取的測試需求進行分析。
(1)確定測試目的
進行需求分析,首先要明確性能測試目的,測試目的不同直接影響后序的性能測試場景的制定。測試目的可以總結為三類:符合性驗證、性能考察、性能調優。
● 符合性驗證―主要驗證軟件是否滿足規定的性能指標要求。如測試軟件在某一條件下的平均響應時間,或者吞吐率,或者并發用戶數等是否滿足規定的要求。
● 性能考察―主要測試軟件在某種條件下運行的性能狀況。如測試軟件所能支持的最大并發用戶數或者最大數據量,軟件在不同環境下的性能狀況,隨用戶數量的變化或者數據量的變化情況下軟件的性能變化狀況等。
● 性能調優―主要是通過性能測試找出軟件的性能瓶頸,分析出引起軟件性能缺陷的原因,并進行針對性的性能優化,以改進軟件性能。如對軟件進行性能測試,確定是軟件否存在性能方面的問題,并定位性能瓶頸,對其進行性能優化。
將測試需求與上述目的進行比較,確定出本次測試的測試目的。
(2)確定性能指標
此處確定的性能指標指的是性能需求中要求的,且通過性能測試直接得到的性能指標,主要包括響應時間、吞吐率、資源利用率、交易成功率等,是測試結果分析 和判斷的依據。性能測試需要有明確的性能指標,某些軟件系統具有明確的性能指標,而有的軟件系統則需要和用戶一起,通過對軟件系統的業務特點、技術特點、 應用情況等進行綜合分析來獲得。
如,一軟件系統,要求1個小時內必須完成7 200筆業務。可以得出每秒需要完成的業務為7 200/3 600=2筆,則可以得出該系統需要關注的性能指標為服務器處理請求的能力,即吞吐率,值為2筆/秒。
1.2 測試場景制定
測試場景是指導測試執行的依據。測試場景主要是模擬軟件系統一些實際的應用情況,包括測試時執行的業務、每種業務執行的用戶數量、模擬的總用戶 數、數據庫數據量、用戶增長方式、測試循環方式、用戶退出方式、執行過程中的相關參數設定等,還包括測試中需要監視的性能計數器,主要是服務器端操作系統 相關的計數器、應用服務器相關的計數器、數據庫相關的計數器等。不同的測試目的,其測試場景是不同的。
● 符合性驗證主要是驗證軟件性能是否符合用戶使用的要求,則測試中應模擬軟件系統的實際使用情況。如,在各功能操作中加入適當的思考時間和迭代間隔時間,用 戶增長方式采用逐漸加壓方式等。軟件實際使用時,主要是多用戶執行多項功能操作,所以測試場景主要是多用戶、多任務的并發測試。當軟件系統有長時間連續運 行的情況時,還需要有疲勞測試的測試場景。
● 性能考察中對于測試軟件性能極限的情況,如支持的最大用戶數、最大的數據量等,測試場景應該盡可能的模擬極限情況。為了保證測試中對軟件施加足夠的壓力, 用戶增長方式采用同時加載,思考時間、迭代間隔時間都忽略等。測試軟件性能極限,需要不斷調整影響軟件性能的要素,并分別進行并發測試。如,測試軟件支持 的最大并發用戶數,應不斷調整并發用戶數,在每組用戶數下對系統進行并發測試。對于有長時間運行要求的軟件系統,則需要進行疲勞測試。
性能考察中檢測軟件在不同條件下的性能狀況時(非性能極限),測試場景應該盡可能與實際使用情況相接近,與符合性驗證類似。
● 性能調優主要是為了軟件實際應用中的性能優化,則測試中應模擬軟件系統實際應用中的多用戶、多任務的并發測試場景,與符合性驗證類似。為了驗證軟件系統是否存在內存泄漏等問題,還需要對其進行疲勞測試。
2.性能測試執行
根據制定的測試場景,開始執行測試。測試執行不僅包括測試場景的執行,還包括測試場景執行前的一些準備工作,如,測試環境搭建、測試腳本準備、測試場景布置、測試場景執行等。
2.1 測試環境搭建
測試環境主要包括軟件運行的軟硬件環境和數據環境。
首先,需要根據測試執行方案搭建測試環境。確保測試結果的有效性,要求搭建一個獨立、無毒、逼真的軟、硬件環境及網絡環境,安裝調試被測軟件,安裝測試工具等。
其次,需要準備測試數據。以有利于測試為原則,可以自己準備,也可以從用戶處獲得滿足要求的測試數據,或通過以上兩種方式相結合獲得。自己準備的數據要符合業務規范,同時避免增加垃圾數據。準備好測試數據后,應及時備份數據庫。
2.2 測試腳本準備
根據測試執行方案中制定的測試功能,準備測試腳本。測試腳本可以通過測試工具來準備,也可以通過自己編寫來完成。
準備測試腳本前,首先確定測試功能運行無誤,防止影響測試結果。測試腳本錄制或編寫完畢后,需要進行相應的編輯,如參數化、調試等,并需要驗證測試腳本的有效性:
(1)首先,進行單腳本單用戶驗證,驗證每個測試腳本運行與實際功能操作是否相符。如增加功能的腳本,既要保證腳本可以成功運行,還要保證數據庫中有相應的增加數據。
(2)其次,進行單腳本多用戶驗證,驗證每個測試腳本的數據池是否有效。
(3)最后,進行多腳本多用戶驗證,驗證測試腳本是否可以并發運行。
2.3 測試場景布置
根據制定的測試場景布置各測試場景,包括測試腳本及其對應的虛擬用戶數、對應的運行參數、用戶增長方式、測試循環方式、用戶退出方式、需要監視的性能計數器等。
2.4 測試場景執行
測試場景布置完畢后,開始執行測試場景。測試中,測試人員要監視測試運行情況,如有過多錯誤,應及時停止方案的運行,查找錯誤原因。若是因為外 界原因(如網絡不穩定等)或者運行參數設置問題,則需要進行相應的調整再運行方案。如果不是外界原因和運行參數設置問題,則保存測試結果,以便進行結果分 析,找出問題原因。執行所有的測試場景,及時匯總測試結果,為下一步結果分析做準備。
為了保證方案運行的有效性,在執行測試前,要將數據庫恢復到腳本準備前的原始狀態。在運行中,所有相關設備不要進行與測試無關的操作,以避免影響測試結果。
3.測試結果分析
測試結果分析是性能測試中的一個重要部分,同時也是一個難點。不同的軟件系統,不同的性能指標,結果分析方法都是不一樣的。下面給出一個簡單的結果分析方法。
首先,查看運行結果中是否有錯誤出現,可以結合運行日志信息來查找。若有錯誤信息,則需要進一步分析,根據錯誤信息查找原因。如,測試結果中出現超時錯誤,可能的原因有:
a. 硬件有瓶頸,如CPU、內存等;
b. 程序算法有問題;
c. 應用服務的相關參數設置有問題;
d. 程序中處理有關表的時候檢查字段太多。
接下來,對這幾個可能的原因進一步分析,以確定出具體的原因。
若運行結果沒有出現錯誤,則根據關注的性能指標進行分析。首先對網絡進行分析,排除網絡問題,對服務器硬件(CPU、內存、磁盤I/O)進行相 關分析,確定是否是硬件瓶頸引起的性能問題,然后對應用服務器配置進行分析,確認是否是由于應用服務器本身的配置引起的性能問題,然后對數據庫進行性能分 析,重點是索引、數據庫Cache、死鎖等問題的分析,排除上述因素后,再對程序代碼進行分析,找出導致性能問題的因素。
測試結果分析是一項復雜而又重要的部分,涉及的內容比較多,需要根據實際測試情況來進行分析。