各種軟件在系統實施過程中,需要滿足客戶的一些特殊要求。如果軟件系統沒有經過測試和優化,軟件系統將無法滿足用戶的需求,還會給軟件在實際應用中帶來很大的風險。一些公司缺乏必要的測試手段和工具知識導致測試不徹底,其中性能測試是整個軟件測試中一個重要方面,如何做好性能測試,怎麼做性能測試是在測試人員之間和論壇上經常討論的一個話題。
目的:
爲什麼進行性能測試呢?
目的是驗證軟件系統是否能夠達到用戶提出的性能指標,同時發現軟件系統中存在的性能瓶頸,優化軟件,最後起到優化系統的目的。
包括以下幾個方面
一. 評估系統的能力,測試中得到的負荷和響應時間數據可以被用於驗證所計劃的模型的能力,並幫助作出決策。
二. 識別體系中的弱點:受控的負荷可以被增加到一個極端的水平,並突破它,從而修復體系的瓶頸或薄弱的地方。
三. 系統調優:重複運行測試,驗證調整系統的活動得到了預期的結果,從而改進性能。
檢測軟件中的問題:長時間的測試執行可導致程序發生由於內存泄露引起的失敗,揭示程序中的隱含的問題或衝突。
四. 驗證穩定性(resilience)可靠性(reliability):在一個生產負荷下執行測試一定的時間是評估系統穩定性和可靠性是否滿足要求的唯一方法。
定義:
性能測試類型包括負載測試,強度測試,容量測試等
負載測試:負載測試是一種性能測試指數據在超負荷環境中運行,程序是否能夠承擔。
強度測試: 強度測試是一種性能測試,他在系統資源特別低的情況下軟件系統運行情況。
容量測試:確定系統可處理同時在線的最大用戶數
觀察指標:
性能測試主要是通過自動化的測試工具模擬多種正常、峯值以及異常負載條件來對系統的各項性能指標進行測試。負載測試和壓力測試都屬於性能測試,兩者可以結合進行。通過負載測試,確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統各項性能指標的變化情況。壓力測試是通過確定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大服務級別的測試。
在實際中作中我們經常會對兩種類型軟件進行測試:bs和cs,這兩方面的性能指標一般需要哪些內容呢?
Bs結構程序一般會關注的通用指標如下(簡):
Web服務器指標指標:
* Avg Rps: 平均每秒鐘響應次數=總請求時間 / 秒數;
* Avg time to last byte per terstion (mstes):平均每秒業務角本的迭代次數 ,有人會把這兩者混淆;
* Successful Rounds:成功的請求;
* Failed Rounds :失敗的請求;
* Successful Hits :成功的點擊次數;
* Failed Hits :失敗的點擊次數;
* Hits Per Second :每秒點擊次數;
* Successful Hits Per Second :每秒成功的點擊次數;
* Failed Hits Per Second :每秒失敗的點擊次數;
* Attempted Connections :嘗試鏈接數;
CS結構程序,由於一般軟件後臺通常爲數據庫,所以我們更注重數據庫的測試指標:
* User 0 Connections :用戶連接數,也就是數據庫的連接數量;
* Number of deadlocks:數據庫死鎖;
* Butter Cache hit :數據庫Cache的命中情況
當然,在實際中我們還會察看多用戶測試情況下的內存,CPU,系統資源調用情況。這些指標其實是引申出來性能測試中的一種:競爭測試。什麼是競爭測試,軟件競爭使用各種資源(數據紀錄,內存等),看他與其他相關係統對資源的爭奪能力。
我們知道軟件架構在實際測試中制約着測試策略和工具的選擇。如何選擇性能測試策略是我們在實際工作中需要了解的。一般軟件可以按照系統架構分成幾種類型:
c/s
client/Server 客戶端/服務器架構
基於客戶端/服務器的三層架構
基於客戶端/服務器的分佈式架構
b/s
基於瀏覽器/Web服務器的三層架構
基於中間件應用服務器的三層架構l
基於Web服務器和中間件的多層架構l
在每種不同的系統架構的實施中,開發人員可能選擇不同的實現方式,造成實際情況紛繁複雜。我們不可能對每種技術都詳細解說,這裏只是介紹一種方法提供給你如何選擇測試策略,從而幫助分析軟件不同部分的性能指標,進而分析出整體架構的性能指標和性能瓶頸。
由於工程和項目的不同,所選用的度量,評估方法也有不同之處。,不過仍然有一些通用的步驟幫助我們完成一個性能測試項目。步驟如下
1. 制定目標和分析系統
2. 選擇測試度量的方法
3. 學習的相關技術和工具
4. 制定評估標準
5. 設計測試用例
6. 運行測試用例
7. 分析測試結果
制定目標和分析系統
每一個性能測試計劃中第一步都會制定目標和分析系統構成。只有明確目標和了解系統構成纔會澄清測試範圍,知道在測試中要掌握什麼樣的技術。
目標:
1. 確定客戶需求和期望
2. 實際業務需求
3. 系統需求
系統組成
系統組成這裏包含幾方面含義:系統類別,系統構成,系統功能等。瞭解這些內容的本質其實是幫助我們明確測試的範圍,選者適當的測試方法來進行測試。
系統類別:分清系統類別是我們掌握什麼樣的技術的前提,掌握相應技術做性能測試纔可能成功。例如:系統類別是bs結構,需要掌握 http協議,java,html等技術 。或者是cs結構,可能要了解操作系統,winsock,com等。所以甄別系統類別對於我們來說很重要。
系統構成:硬件設置,操作系統設置是性能測試的制約條件,一般性能測試都是利用測試工具模仿大量的實際用戶操作,系統在超負荷情形下運作。不同的系統構成性能測試就會得到不同的結果。
系統功能:系統功能指系統提供的不同子系統,辦公管理系統中的公文子系統,會議子系統等,系統工能是性能測試中要模擬的環節,瞭解這些是必要的。
選擇測試度量的方法
經過第一步,將會對系統有清醒的認識。接下來我們將把精力放在軟件度量上,收集系統相關的數據。
度量的相關方面:
* 制定規範
* 制定相關流程, 角色,職責
* 制定改進策略
* 制定結果對比標準
學習的相關技術和工具
性能測試是通過工具,模擬大量用戶操作,對系統增加負載。所以需要掌握一定的工具知識才能進行性能測試。大家都知道性能測試工具一般通過winsock,http等協議紀錄用戶操作。而協議選擇是基於軟件的系統架構實現(web一般選擇http協議,cs選擇winsock協議),不同的性能測試工具,腳本語言也不同,比如rational robot中vu腳本用類c語言實現。
開展性能測試需要對各種性能測試工具進行評估,因爲每一種性能測試工具都有自身的特點,只有經過工具評估,才能選擇符合現有軟件架構的性能測試工具。確定測試工具後,需要組織測試人員進行工具的學習,培訓相關技術。
制定評估標準
任何測試的目的都是確保軟件符合預先規定的目標和要求。性能測試也不例外。所以必須制定一套標準。
通常性能測試有四種模型技術可用於評估:
*線性投射:用大量的過去的,擴展的或者將來可能發生的數據組成散佈圖,利用這個圖表不斷和系統的當前狀況對比。
*分析模型:用排隊論公式和算法預測響應時間,利用描述工作量的數據和系統本質關聯起來
*模仿:模仿實際用戶的使用方法測試你的系統
*基準:定義測試和你最初的測試作爲標準,利用它和所有後來進行的測試結果進行對比
設計測試用例
設計測試用例是在瞭解軟件業務流程的基礎上。設計測試用例的原則是受最小的影響提供最多的測試信息,設計測試用例的目標是一次儘可能的包含多個測試要素。這些測試用例必須是測試工具可以實現的,不同的測試場景將測試不同的功能。因爲性能測試不同於平時的測試用例,儘可能把性能測試用例設計的複雜,纔有可能發現軟件的性能瓶頸。
運行測試用例
通過性能測試工具運行測試用例。同一環境下作的性能測試得到的測試結果是不準確的,所以在運行這些測試用例的時候,需要用不同的測試環境,不同的機器配置上運行。
分析測試結果
運行測試用例後,收集相關信息,進行數據統計分析,找到性能瓶頸。通過排除誤差和其他因素,讓測試結果體現接近真實情況。不同的體系結構分析測試結果的方法也不同,bs結構我們會分析網絡帶寬,流量對用戶操作響應的影響,而cs結構我們可能更關心會系統整體配置對用戶操作的影響。
注:因不記得從哪裏轉載的,所以未註明轉載地址,報歉。