摘要:本文從實際應用出發,提出一種輕量級.NET應用程序性能測試框架設計方案。該方案是對已有結果的進一步擴充,具有更強的實用性和擴展性。
1引言
文[1]提出一種.NET應用程序“性能測試框架”,其基本思路是通過多個線程執行通過委托傳遞過來的待測試的程序塊,各線程所運行的程序塊的主邏輯是相同的,不同的是執行條件(如初始參數、執行次數等)。這樣就可以得到不同“環境”下算法的執行時間,進而得到整體的時間消耗分布情況。應該說,這種方法的思路是很清晰的,使用也很方便。文[1]還比較詳細地分析了為何采用委托而放棄“反射”、“接口”等手段,主要是為了獲取更為準確的測試結果。
但從實際應用來看這種測試還是顯得不夠全面,它只是通過編寫類似測試腳本的測試程序來對某段核心程序或算法進行測試。如果一個應用程序的核心算法很復雜,中間步驟也很復雜,則相應的測試程序編寫就變得比較煩瑣。比如B/S程序就存在大量的交互過程,這時如果想獲取一個重要業務操作的執行時間,上述測試框架實現起來就比較麻煩,甚至有些就不能實現。另外,在表述上我們認為文[1]所提性能測試方法應當稱為輕量級性能測試,因為真正的性能測試包括的參考指標是很多的,不僅僅是執行時間。
針對這些問題,本文對文[1]進行了擴展,給出一種更為合理的輕量級.NET應用程序性能測試框架(Light-weight Performance Testing Framework of .NET application,簡稱LPTF)設計方法。
2概念與結構設計
首先,我們引入“正向測試”和“反向測試”兩個概念。
所謂正向測試是指順序運行應用程序或功能模塊,通過嵌入測試點,最終得到各個階段的運行時間、CPU利用率、內存使用等性能指標的結果。反向測試則是通過編寫測試程序對某個功能點或某段應用邏輯進行深度測試,進而得出一組性能指標得測試結果。這里的深度測試是指給定不同的測試條件,如執行次數、初始參數等。
不難看出,正向測試和反向測試是相互補充的,文[1]中的測試框架即是我們這里所說的反向測試。
下面來看一下結構設計:
解釋:LPTF整體上包括測試邏輯、結果輸出兩部分。測試邏輯由正向測試(StraightTest)和反向測試(ReverseTest)組成。在StraightTest中我們看到有一個叫作GlobalStraightTest的類,這是因為B/S程序在進行StraightTest時可能會有多個頁面間跳轉的情況,這時如果我們要做全局的正向測試就要保存一個StraightTest的執行器(TestRunner)的狀態。
測試結果輸出模塊(ResultOutput)會根據傳遞過來的測試結果和指定的輸出模式進行結果輸出,它和測試邏輯是相對獨立的。輸出模式有兩種DisplayOption、WebDisplayOption,前者適用于C/S程序,后者適用于B/S程序。
解釋:正向測試的實現并不復雜,在對B/S程序進行全局測試時要傳入一個System.Web.UI.Page對象(一般是當前頁),用來