孫嘉敏
摘 要:由于軟件行業的迅猛發展,軟件質量的要求也越來越高。在要求軟件功能的同時,軟件或者WEB的性能也越發引起人們的關注。功能測試只關注與某個功能點,而性能測試則關注整個系統,在軟件質量模型中,性能測試屬于效率的一類。本文即從上述思想出發,主要關注了性能測試的關注點、性能測試的不同指標和性能測試過程中的注意點。得出性能測試是軟件開發過程中不可缺少的一部分和團隊協作才是進行性能測試的最好方式的結論。
關鍵字:性能測試;資源消耗;負載測試;測試團隊
一、背景
1.性能測試的相關概念。測試的定義為:帶著發現缺陷的意圖來執行工作產品。而性能測試(Performance Testing)的定義為:在一定的負載情況下,系統的響應時間等特性是否滿足特定的性能需求。從某些角度來講,性能其實是功能的一種。
軟件的性能包括兩個方面的內容:時間特性和資源特性。時間是指系統處理客戶請求的響應時間;資源特性是指在進行性能測試過程中,系統資源消耗的情況。常見的系統資源主要包括處理器(CPU)、內存和磁盤等。所以通常說的軟件性能不僅僅包括響應時間,還包括系統資源消耗。
2.性能測試的關注點。不同的人關注的性能層次有所不同。通常情況下,關注軟件性能的人主要包括三類人:用戶、系統管理員與性能測試與和性能測試工程師和軟件開發工程師,這三類人各自關注的內容如下:
(1)用戶。從用戶的角度來看,軟件測試是軟件系統對用戶提交所響應的時間。通俗的講,如果用戶單擊一個提交或輸入一個URL地址,隨后系統把結果呈現到用戶面前,這個過程所花費的時間即為用戶對軟件性能的直觀印象。用戶體會的響應時間為從執行操作到已經有一部分數據呈現出來的時間,而真正的響應時間應該是系統將全部數據呈現出來的時間。
(2)系統管理員和性能測試工程師。從系統管理員和性能測試工程師的角度來說,在響應時間方面的理解與用戶完全一致。但系統管理員和性能測試工程師不僅僅不住系統的響應時間,還關注服務器系統資源的使用情況。
(3)軟件開發工程師。從軟件開發工程師的角度來說,他們關注用戶和管理員關注的所以問題。另外還關注內存泄漏、數據庫是否出現死鎖、中間件以及應用服務器等問題。
二、性能測試的幾大分類
1.負載測試。負載測試(Load Testing)是指在一定的軟件、硬件環境下,運行一種或者是多種業務,在不同虛擬用戶數量情況下測試服務器的性能指標是否在用戶的峰值范圍內一起確定系統的最大用戶數等。強調的是在一定的環境下系統能夠達到的峰值指標,大多數的性能測試都是負載測試。
2.壓力測試。壓力測試(Stress Testing)是指在一定的軟件、硬件等環境下,模擬大量的虛擬用戶想服務器產生負載,使服務器的資源處在極限狀態下并長時間的連續運行,以此來測試服務器在高負載的情況下是否能夠穩定工作。負載測試和壓力測試相似,但負載測試用于正常峰值的測試,而壓力測試用于測試峰值極限的維持時間。
3.并發測試。并發測試(Concurrency Testing)是指通過模擬多個用戶訪問同一個應用、存儲過程或數據記錄以及其他并發操作,測試是否存在死鎖、數據錯誤等故障。
4.基準測試。基準測試(Benchmar Testing)是指在一定的軟件、硬件等環境下,模擬一定數量的虛擬用戶運行一種或多種業務,將測試結果做為基準數據,在系統調優或系統評測的過程中,通過運行相同的業務場景來比較結果,確定調優的結果是否達到預期效果或者為系統的選擇提供決策數據。基準測試一般用于配置測試。
三、性能測試的相關指標
1.響應時間。響應時間是指應用系統從發出請求開始到客戶端接收到所有數據所消耗的時間。強調所有數據都已經被呈現到客戶端所花費的時間。在性能測試中是通過事物函數來完成對響應時間的統計,事物是指做某件事的操作,事物函數會記錄做這件事情和該事情做完之間的時間差,稱為事務響應時間。
2.并發用戶數。并發用戶數是指同一時刻與服務器進行數據交互的所有用戶數量。其中有兩點需要注,第一:同一時刻,表示并發強調的是用戶同時對服務器進行施壓。第二:強調要與服務器進行數據交互,如果未和服務器進行數據的交互,這樣的用戶是沒給服務器帶來壓力的。
3.吞吐量。在性能測試過程中,吞吐量是指單位時間內服務器處理的字節數,吞吐量的單位為字節每秒。吞吐量的大小直接體現服務器的承載能力。
四、性能測試注意點
1.性能測試應盡早進行。測試的工作越開展損失越少,性能測試也是如此。當系統集成后,想要從眾多的模塊中分析定位模塊瓶頸是十分困難的,但是如果在項目初期就能對每個模塊進行性能測試,問題自然就得到解決。
2.性能測試需要團隊支持。質量是靠開發人員的技術,而不是依靠測試人員的測試。性能也遵循同樣的道理。并不是說一個公司擁有一個完美的性能測試部門,就能保證軟件的完美,性能的優化需要開發部門和相關部門的通力合作。
3.性能測試需要獨立的測試環境。性能呢個測試的環境獨立性相對于功能測試更加嚴格,需要獨立的網絡和硬件環境,來保證被測系統是獨立可控的,甚至需要專門的管理員和流程來對被測環境進行控制。
4.測試前定義明確的測試目標。性能測試的執行成本較高,為了保證性能測試執行的有效性,在每一個性能測試前應明確本次性能測試的目標,并對這個目標進行監控和驗證。
5.不要在服務器上進行性能測試。雖然服務器可以做為負載生產和被負載的對象,但是如果在服務器上進行這樣的操作,系統資源會被負載消耗,導致得出的性能測試數據脫離實際情況。
6.創建的負載應該是模擬用戶最常見、最密集的操作。在進行性能測試時,應該模擬用戶最常使用的功能,來了解在這種操作下系統資源消耗以及用戶體驗。
7.在真正的性能測試前盡可能地進行預測試。在性能測試進行之前應盡可能多的進行預測試,發現負載生成的結果以及負載生成是否存在瓶頸,由于性能測試執行成本較高,所以通過多次的預測試,可以降低最終測試的成本開銷。
8.使用同一用戶進行長時間大量操作是否存在內存泄漏或者類似的錯誤通常這樣做或發現系統某功能設置上的問題。
五、結語
性能測試是系統測試的一種,其目標是判斷系統在正常負載或正常水平的活動的情況下是否滿足性能需求。由于現在軟件和WEB的快速發展,性能測試也得到了更多人的關注,人們越來越關心軟件的負載和容量等特性,而不是一味的追求性能的實現。在性能測試的過程中,雖然個人的知識水平和相關測試經驗十分重要,但是團隊的合作才是更重要的,性能測試是一個要求團隊合作的工作。總之,性能測試無非就是以較低的成本模擬一個真實環境來了解系統上線后的性能情況,至于定位、分析以及調優,這需要一個團隊的支持才能完成。
參考文獻:
[1](美國)M G Limaye.軟件測試原理、技術及工具[M].黃曉磊,曾瓊譯.北京:清華大學出版社,2011.
[2]軟件工程—理論、方法及實踐;劉忠寶主編[M];國防工業出版社.
[3]性能測試進階指南—LoadRunner9.1實戰[M];陳霽、牛霜霞著;電子工業出版社.