什么是性能測試?
性能測試是在上線前對系統進行端到端性能測試的惟一方法。性能測試解決方案是:
1.使用最少的硬件模擬成百上千的用戶與系統進行交互
2.測量最終用戶的響應時間
3.以一致的方式重復負載
4.在負載下監測系統組件
5.提供健壯的的分析和報告機制
自動化測試方案通常使用4個主要的組件來構建和運行測試。這些包括:
1.虛擬用戶發生器可以捕獲最終用戶業務過程,并轉化為自動化腳本
2.控制器將組織、驅動、管理、和監測負載
3.執行期間負載發生器執行虛擬用戶
4.分析引擎觀測、分析和對比結果
為什么使性能測試自動化?
自動化測試是一種方法,發揮人力,過程,技術的作用,以降低應用,升級或補丁部署的風險。其核心,自動化性能測試是在預部署的系統上施加生產環境的負載,同時測量系統性能和最終用戶的體驗。構建良好的性能測試可以回答類似下面的問題:
1.應用響應時間對于計劃的用戶足夠快么?
2.應用是否能夠處理期望的用戶負載或更多?
3.應用是否能處理業務所需的事務數量?
4.應用在期望內或期望外的用戶負載下是否穩定?
5.你確定用戶會在上線時得到積極的體驗么?
通過回答這些問題,自動化性能測試采用業務術語量化改變所帶來的影響。這樣,就明確了部署的風險。一個有效的自動化性能測試過程可以幫助制定考慮周詳的發布決策并防止系統故障和可用性問題。
自動化性能測試過程
一些已經成功實行自動化性能測試的組織,已經將這個過程分解為獨立的階段。雖然具體的實施可能有所不同,但是,寬泛地說,性能測試可以分為四個階段—設計,構建,執行和診斷/調整。每個階段有具體的任務,涉及到不同的角色,這些任務在轉到下一階段前必須完成。在最高級別,四個階段可以被描述如下:
1.設計階段包括定義系統中所要測試的業務過程,在平均或峰值生產時間的綜合業務過程,和用戶和響應時間的全面目標。
2.構建階段包括建立和配置測試系統和基礎設施,并且使用自動化性能測試解決方案來構建測試腳本和負載場景。
3.執行階段由運行負載場景和測量系統性能組成。
4.診斷和調整反復迭代的階段超出了測量系統性能和負載測試,達到另外一個層次,關鍵是要查明問題來快速幫助解決問題,并且調整系統參數來最優化性能。
讓我們詳細分析關系到每個階段成功與否的必要任務。
設計
這是性能測試團隊向業務部門搜集性能需求的主要階段。需求可以被認為分為四個方面—業務,技術,系統和團隊需求。
業務需求一般通過與主題專家(SME,subject matter expert)的會議來搜集。這些人可以是業務分析師和最終用戶。當下面內容準備好后,一套全面的業務需求就形成了:
1.應用概要:系統用法的演示使得性能團隊得到更高層次的理解,應用是如何被使用的。
2.業務過程列表:最終用戶在系統上所執行的關鍵業務過程列表。
3.業務流程:Word文檔,詳盡記錄每個業務過程的精確步驟和屏幕。
4.事務列表:業務過程中關鍵活動的列表—例如登錄或轉移資金—需要在負載下測量。
5.業務過程圖:業務流程圖說明業務流程的分支條件。
技術需求可以通過與系統管理員和數據庫管理員(DBA)的會議來搜集。這些人可以隸屬于開發或運營部門,或者隸屬于兩者。一套全面的技術需求僅當以下內容齊備時完成:
1.環境評審:按照測試體系結構由系統或基礎設施組進行走查評審。
2.系統范圍的會議:召開會議,討論和確認在測試過程中系統需要排出的部分。
3.生產圖:一個生產基礎設施圖,用于說明測試與生產環境的差異,當從QA向生產遷移時可能對性能造成影響。
最后,重要的是,必須收集系統需求。這些是系統的高層次目標,決定著負載測試過程的通過/失敗狀態。這些一般在與LOB的項目經理工作中達成一致。系統需求包括對以下問題的回答:
1.系統在正常和最高峰時期必須支持多少用戶?
2.每秒鐘它必須處理多少個事務?
3.對于可業務關鍵事務最大和最小可接受的響應時間是多少?
4.用戶群體如何聯系?
5.生產中系統承受的工作負載是什么?以及混合的事務?
團隊需求是進展到構建階段前需要解決的最后一個問題。這只不過是決定適合的性能團隊成員來參與到未來的負載測試。最初,這也許被自動的確定(例如,當只有一個團隊)。然而,如果性能測試成為卓越中心(CoE)的一部分,那么資源分配,內部后勤就應該在設計階段考慮和解決。
預先收集一套完整的業務,技術,系統,和團隊需求是使負載測試有效和成功的基礎。
構建
構建階段將在設計階段確定的業務過程和工作負載轉變為自動化組件,這部分可以驅動可重復的,實際的負載。這可以分為兩個方面:自動化設置和環境設置。自動化設置是由性能工程師完成的一系列連續的工作。
1.腳本:將確定的業務過程記錄為自動腳本。
2.事務:插入定時器來產生業務所需的邏輯計時。
3.參數化:用一個池替代所有的輸入數據,例如ID和密碼,這樣每個虛擬用戶用唯一的數據訪問應用。
4.場景:通過給用戶組分配不同的腳本,連通性和用戶行為等方法,創建生產工作負載。
5.監測器:確定負載下所要監控的服務器或機器。
環境設置由執行成功,現實的負載測試所需的硬件,軟件,和數據組成。這些可能涉及到系統,DBA,運營和業務團隊。
構建階段的最終成果就是可以執行在可用的,已配置的環境上的一系列自動化“資產”。
執行
對于剛接觸性能測試的新手來說,經常存在一個誤解,就是執行是一個單一事件。實際上,它是一個由多種類型的性能測試組成的多步驟的過程。每種測試都提供了理解發布應用所帶來風險的必要信息。負載測試的類型包括:
1.基線測試驗證了系統和其周圍環境可在合理的技術參數下運行。性能測試按5到10個用戶執行,作為最終用戶事務性能的基線。這些測試應該在性能測試的開始和結束時執行,來測量響應時間的絕對改進。
2.性能測試在環境中模仿負載,并確定系統可以支撐的最佳和最大用戶數量。這些測試應該仿效平均和峰值時間的生產用法,他們應當最大限度地仿真用戶的真實行為,例如思考時間,調制解調器的仿真,和各種類型的瀏覽器。同時,采用其它專用的監控和診斷工具,有效地查看系統內部行為,診斷系統衰變和瓶頸。
3.基準測試被設計來測量和對比理想情況下的各種機器類型,環境,或應用的版本。當系統經過擴展性測試后,執行這些測試可以幫助了解不同體系結構的影響。
4.滲透測試被設計用于在長時間的負載下檢測系統的執行情況。
5.峰值測試被設計用于模擬系統在峰值負載下運行一段時間來保證應用和其硬件可以在合理的時間段內支持高負載
如何確定性能測試的ROI
良好的性能測試的ROI有雙重意義:
1.緩解風險保證項目達到正確的擴展性和性能。緩解風險是標準的性能測試好處。大多數自動化性能測試的用戶可以向開發部門或項目團隊反饋清晰的,可量化的信息,預測系統在生產環境的擴展和性能情況。
2.性能最優化以量化方式改善系統的性能,通過測量改進的最終用戶響應時間,或者通過減少所需的全面硬件基礎設施
如何優化性能
在性能測試后的階段中,提供了很多有利于改善系統性能的有價值信息。
1.監測性能測試期間的監測顯示出基礎設施中每一層發生的情況,在性能測試期間提供了數據庫服務器,Web服務器,應用服務器,或單獨的應用和過程的更加清晰的記錄。例如,這些信息可以快速表明應用服務器的CPU使用率在200用戶的時候達到100%,而不能達到300用戶的目標。這意味著要么需要更多的應用服務器容量要么需要優化應用自身。
2.分析:在負載測試完成之后,用戶可以關聯分析—例如創建虛擬用戶對抗CPU或應用服務器CPU到Web服務器—來測定應用行為更深一層次的信息。
3.調整:許多公司在應用部署的前中后期使用壓力測試工具來實施自動化性能測試。同時可以采用其它工具允許用戶通過修改系統配置設置系統地識別,隔離,和解決基礎設施的性能瓶頸。通過反復實施解決基礎設施的瓶頸的過程,用戶可以建立當前最優的黃金配置。
4.診斷:當前的技術可以允許,性能工程師在負載條件下對各個層,組件和SQL語句如何影響整個業務過程性能有一個統一的認識。診斷時,性能工程師使用診斷工具可以看到最終用戶事務當前涉及到的所有組件。此外,用戶也可以看到每一個組件花費的時間和被調用的次數。依靠這些信息,項目和QA經理可以定位到最重要的Web,應用,和數據庫服務器瓶頸,集中資源來改善用戶體驗。它為開發者提供了如此有效的實際數據以至于用戶把它稱為“性能測試的圣杯?!?
良好的性能測試涉及到哪些人?
1.項目經理
協調多個性能項目,管理測試進度,獲得必要的硬件或軟件,處理資源和資金問題。
2.業務分析師
負責從業務的角度對系統性能作出評價和結論。幫助開發性能測試中的混合事務和期望時間。
3.性能經理
負責協調性能支持團隊的工作,作為小組的聯系人。負責管理日常性能工作。
4.性能測試人員
負責創建和執行自動測試和收集測試結果。
5.應用構造師
接受負載測試的診斷和分析的信息,來最優化應用性能和解決性能問題。
6.基礎設施專家:DBA,網絡管理員,系統架構師
接受負載測試調整和分析的信息,來最優化應用性能和解決性能問題
原文轉自:http://www.anti-gravitydesign.com