性能測試的重要性隨著網絡發展更凸顯重要性,由于網絡環境、數據庫環境、應用服務器環境、系統平臺和技術等的復雜性和多樣性,難以預知的用戶負載和愈來愈復雜的應用程序使軟件性能非常難于控制。雖然,改善系統性能不是單單依靠性能測試就能完成的,但性能測試至今仍是控制性能有效的手段。
什么是性能測試
性能測試主要是通過自動化的測試工具模擬多種正常、峰值及異常負載來對系統的各項性能指標進行測試。一般來說,性能測試可概括為三個方面:在客戶端性能的測試、在網絡上性能的測試和在服務器端性能的測試。通常情況下,三方面有效的結合可以達到對系統性能全面的分析和瓶頸的預測。
性能測試的基本策略是自動負載和壓力測試。通過在一臺或幾臺PC機上模擬成百上千的虛擬用戶同時執行業務的情景,對應用程序進行測試,同時記錄下每一事務處理的時間、服務器峰值數據、數據庫狀態等。它主要包括并發性能測試、疲勞強度測試、大數據量測試和速度測試等,其中并發性能測試是重點。
。1)并發性能測試
并發性能測試是一個負載測試和壓力測試的過程,即逐漸增加負載,直到系統出現瓶頸或者不能接收更多負載,通過綜合分析執行指標和資源監控指標來確定系統并發性能的過程。例如當負載壓力逐漸增加時,通過檢測系統的相應輸出如通過量、響應時間、CPU負載、內存使用等來決定系統的性能。
并發性能測試一般不采用手工方式,而是利用工具采用自動化方式進行。在測試時常常需要模擬真實環境測試,以考察在真實環境中的表現,這樣測試出來的數據才有實際意義。目前,成熟的并發性能測試工具有很多,選擇的依據主要是測試需求和性能價格比。
。2)疲勞強度測試
疲勞測試是采用系統穩定運行情況下能夠支持的最大并發用戶數,持續執行業務一段時間,通過綜合分析執行指標和資源監控指標來確定系統處理最大工作量強度性能的過程。
疲勞強度測試可以采用工具自動化的方式進行測試,也可以手工編寫程序測試,其中后者占的比例較大。一般情況是以服務器能夠正常穩定響應請求的最大并發用戶數進行一定時間的疲勞測試,獲取執行指標數據和系統資源監控數據。如出現錯誤導致測試不能成功執行,則及時調整測試指標,例如降低用戶數、縮短測試周期等。還有一種情況的疲勞測試是對當前系統性能的評估,用系統正常業務情況下并發用戶數為基礎,進行一定時間的疲勞測試。
。3)大數據量測試
大數據量測試可以分為兩種類型:一是針對某些系統存儲、傳輸、統計、查詢等業務進行大數據量的獨立數據量測試;二是與壓力性能測試、負載性能測試、疲勞性能測試相結合的綜合數據量測試方案。大數據量測試的關鍵是測試數據的準備,可以依靠工具準備測試數據。
進行性能測試的前提條件
在任何性能測試活動開始前,軟件應用程序必須達到性能測試接受標準。如果應用程序沒有達到這些標準,則不應該進行性能測試,否則就是浪費時間和成本。進行性能測試的前提條件包括:
。1)已通過單元測試能力
在性能測試前所有應用程序必須先通過全面的單元測試策略,同時所附帶的可被執行的單元測試代碼應是完整和有效的。如果單元測試因為應用程序中的錯誤或缺少單元測試代碼,那么應用程序則不應該進行性能測試。
。2)已通過低負載級別能力
在單用戶和10個用戶的低負載級別上,應用程序應該能在正常的計算時間達到合理的性能。如果應用程序無法在低負載級別正常運行,那么它肯定無法在更高負載級別正常運行。這時,開始性能測試將會浪費時間。
。3)已準備好測試數據
在性能測試期間執行應用程序所需的數據必須先準備好或已詳細描述,以使性能測試小組能夠建立與生產環境盡可能接近的模擬數據,要確保測試數據必須是真實、一致和完整的,任何與真實環境相差太遠的測試數據都是無用的性能測試行為。
常見的性能測試誤區
。1)沒有設置好性能測試期望
在性能測試開始前沒有從幾個不同的角度設置期望,以確保測試結果是有價值的,這是最常見的性能測試誤區。這些期望包括測試小組需要定義合理的輸入和輸出性能期望,如果沒有提前設置,那么很難判斷被測試的應用程序的性能是否合格。
。2)性能測試環境失真
顯然,測試環境應盡可能地與生產環境相似,因為任何差異都將引入不確定性。因此,性能測試環境應在每個細節(從服務器防火墻和后端資源的數量到網絡電纜的規格)上完全模仿生產環境。
理想的性能測試環境應該由專用的服務器機器與連接它們的專用網絡組成,非專用服務器環境可能會產生許多的問題。例如共享的網絡資源和內部網共享性能環境,這些都可能造成性能測試結果的失真,這與測試時網絡的利用率直接有關。因此,如果基于應用程序的服務器也作為其他無關的應用程序或配置的服務器在運行,那么進行性能測試將是失真的。
另一方面,性能測試環境的客戶機端對性能測試結果也有重大影響。負載測試客戶機機器應被完全專用于負載測試任務,客戶機機器也應保持在網絡配置上并盡可能地接近專用的環境,例如類似競爭本地CPU、內存和磁盤資源的其他應用程序不應共享這些機器,這些對本地資源的競爭也會影響被測量的響應可靠性。
。3)性能測試沒有與功能測試相結合
眾所周知,功能測試可以發現性能問題,性能測試也能發現功能問題。因此,性能測試和功能測試應是緊密聯系在一起的,原因之一是很多性能問題是由軟件自身功能缺陷引起的。如果應用系統功能不完善或者代碼運行效率低下,通常會帶來一些性能問題。所以,功能測試要先于性能測試執行或者同步相結合進行,軟件功能完善可以保證性能測試進行得更加順利。
性能測試的步驟
每種不同的應用系統的開發,開發人員可能選擇不同的實現方式。因此,根據測試項目的不同,所選用的度量和評估方法也有不同。不過仍然有一些通用的步驟幫助我們完成一個性能測試項目,步驟如下:
。1)明確性能測試的目標和需求
一般來說,一個性能測試計劃的第一步是確定客戶需求和期望,并根據實際業務需求確定系統需求。只有清楚了解各方面的需求,才能明確測試的范圍,才能選擇適當的測試方法。
性能測試需求的來源一般是軟件需求、設計文檔或用戶備忘錄等設計和需求相關的文檔。當然,并非所有的性能測試需求都在這些文檔中以明確的方式標識出來,此時就需要根據不十分明確的文檔描述進行進一步的細化。在條件允許的情況下,還可以包括開發工程師和客戶代表,輔助對性能測試需求進行分析和確認。
。2)確定測試計劃和測試基準
如果不進行合理的規劃,性能測試將會是一項令人望而生畏且有些混亂的任務。性能測試計劃是用來指導性能測試過程的主要文檔,在測試計劃中除了要寫明本次測試的測試目標、測試需求外,還需要在測試計劃中給出明確的測試通過條件,測試時間和資源計劃。
在制定測試計劃時,應該使用測試基準來確定應用程序中是否出現性能倒退;鶞蕼y試可以在一個相對短的時間內收集可重復的結果。性能測試基準的來源主要是用戶對各項指標提出的明確需求;如果用戶沒有提出性能指標則根據用戶需求、測試設計人員的經驗來設計各項測試指標。任何測試的目的都是確保軟件符合預先規定的目標和要求,性能測試也不例外,所以必須制定一套標準的測試基準。
。3)設計測試場景和設計測試用例
這是性能測試的主要內容。性能測試的測試設計一般基于測試場景(Test Scenario),一個測試場景就是一個用戶的實際使用系統的剖面。在性能測試過程中,明確每個場景的參與者人數、比例和具體行為是非常重要的,這些都是構成性能測試腳本的基礎。
因此,測試場景的提取需要測試設計人員對用戶的行為和業務有較為深入的了解。明確了性能測試場景之后,可根據不同的應用領域設計各種測試用例來達到性能測試目標。最后需要注意的是,性能測試設計還應該包括測試環境、測試數據等的設計,因為影響系統性能的因素很多,保持測試過程中環境和數據的可控性是非常重要的。
。4)測試工具的選擇和使用
性能測試是一項復雜的工作,一個性能測試項目的質量如何,測試人員的素質、能力和經驗是最關鍵的因素。要保證性能測試項目的高質量,必須依賴兩個重要的因素:人和工具!肮び破涫,必先利其器”,擁有一套熟悉,功能全面、質量可靠的性能測試工具對于從事性能測試的人員非常有幫助。
性能測試是通過工具模擬大量用戶操作,對系統增加負載和壓力。例如通過產生模擬真實業務的負載對被測系統進行加壓,研究被測系統在不同負載壓力情況下的表現,找出其潛在的瓶頸。因此,一個良好的性能測試工具必需能做到以下幾點:提供產生壓力的手段,能夠對后臺系統進行監控,對壓力數據能夠進行分析,快速找出被測系統的瓶頸。
例如,一組性能測試運行完畢后,我們會得到詳盡的數據。這些數據的量非常大,靠人工去分析這些數據幾乎是不可能的,性能測試工具能提供數據分析,幫助性能測試人員去閱讀、解讀和分析數據,輔助測試人員定位系統的瓶頸。因此,選擇一款合適的性能測試工具并培訓一支高素質的工具使用隊伍無疑是至關重要的。
。5)性能測試結果分析
這是性能測試過程中最困難,也是最重要的步驟。它需要分析人員在運行性能測試后,收集相關信息,進行數據統計分析,通過排除誤差和其他因素,讓測試結果體現接近真實情況,以找到性能瓶頸。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/