Ⅰ 性能測試分析實踐分享!
對於壓力測試結果的分析沒有一個系統的思路,在壓力測試結果不符合性能指標時無從下手,也無法向開發提出有效的優化性能的方法。在對多個項目分析後,總結出一個通用的分析思路,可以快速定位性能瓶頸。
整體分析思路如下圖所示
其中客戶端問題概率較小。主要分析重點在 網路問題 及 服務端問題 上面。
1、原因解析 :
出現TPS波動較大問題的原因一般有 網路波動 、 其他服務資源競爭 以及 垃圾回收問題 這三種。
2、排查方法:
2.1 壓力測試環境一般都是在內網或區域網內進行,可通過監控網路的出入流量來排查;
2.2 其他服務資源競爭也可能造成這一問題,可以通過top命令或服務梳理方式來排查在壓測時是否有其他服務運行;
2.3 垃圾回收問題相對來說是最常見的導致TPS波動的一種原因,可以通過GC監控命令來排查,命令如下:
1、原因解析:
出現該類問題,常見的原因有 短連接導致的埠被完全佔用 以及 線程池最大線程數配置較小或超時時間較短 導致。
2、解決方案:
1、原因解析:
2、解決方案 :
性能測試結果分析是性能測試過程中的最後一步,也是一個非常重要的部分,以系統的思路進行分析,可以一層一層剝離問題表象,找到真正的性能瓶頸並進行優化,提升整體服務性能。
Ⅱ 性能測試結果分析:CPU佔用率降低表示什麼
cpu佔用率降低,表示有進程結束,釋放了資源。
譬如,某系統啟動數據採集後的cpu 佔用率,比關閉數據採集時高。分析原因:
(1)未開啟數據採集時,可能一直有採集進程進行掃描;啟動數據採集後,採集到數據後可能會觸發關閉某些進程,使cpu降低。
(2)推測導致性能缺陷:關閉數據採集的開關(方法)存在問題,導致關閉不徹底,關閉後仍有進程在運行。
驗證推測結論的正確性:
(1)關閉數據採集時,監控有哪些進程;
(2)開啟數據採集後,監控有哪些進程;
(3)通過對比,找到因自身結束而導致cpu降低的進程。
(4)通知開發進行性能調優
Ⅲ 如何寫軟體測試性能測試用例和結果分析
1. 測試目的.... 4
2. 測試地點.... 4
3. 測試環境.... 4
3.1. 伺服器、客戶端環境.... 4
3.2. 測試工具.... 4
4. 測試規模及限制.... 5
5. 測試過程說明.... 5
5.1. 測試模型.... 5
5.2. 測試案例.... 5
5.3. 測試場景.... 6
6. 測試結果.... 7
6.1. 平均響應時間.... 7
6.2. 差錯率統計.... 8
6.3. 主機系統資源消耗.... 10
7. 性能測試總結.... 10
8. 大數據量業務測試數據.... 10
8.1. 測試參數.... 10
8.2. 測試結果.... 11
這是我的性能測試報告的目錄,你可以參考一下,具體項目還是根據實際情況及需求編寫性能測試用例,主要考慮用戶的接受程度,比如:某一段時間的登陸量,最大同時在線用戶,最大允許數據響應時間等。
Ⅳ 性能測試的步驟
在每種不同的系統架構的實施中,開發人員可能選擇不同的實現方式,造成實際情況紛繁復雜。我們不可能對每種技術都詳細解說,這里只是介紹一種方法提供給你如何選擇測試策略,從而幫助分析軟體不同部分的性能指標,進而分析出整體架構的性能指標和性能瓶頸。
由於工程和項目的不同,所選用的度量,評估方法也有不同之處。不過仍然有一些通用的步驟幫助我們完成一個性能測試項目。步驟如下
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結構我們可能更關心會系統整體配置對用戶操作的影響。
Ⅳ 性能測試包括哪些方面
性能測試包括負載測試和壓力測試。
性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。負載測試和壓力測試都屬於性能測試,兩者可以結合進行。通過負載測試,確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統各項性能指標的變化情況。壓力測試是通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試。
性能測試在軟體的質量保證中起著重要的作用,它包括的測試內容豐富多樣。中國軟體評測中心將性能測試概括為三個方面:應用在客戶端性能的測試、應用在網路上性能的測試和應用在伺服器端性能的測試。通常情況下,三方面有效、合理的結合,可以達到對系統性能全面的分析和瓶頸的預測。
Ⅵ 如何進行性能測試與分析
「為什麼我上線系統的性能和性能測試的結果相差很大呢?」這是一些用戶會經常碰到的問題。當然產生這個問題的原因很多,下面我用一個很典型的例子來說明一下。一個用戶登錄界面,要求用戶輸入用戶名、密碼點擊登錄,登錄系統。程序的處理流程如下:根據輸入的用戶名、密碼生成SQL語句,select roleID from usertable where username='用戶名' and password='密碼',把這條語句發給ORACLE資料庫,從資料庫中查詢數據,如果查詢的roleID不為空則是合法用戶允許登錄,否則不允許登錄系統。 這是一個非常簡單的系統。性能測試人員用LOADRUNNER錄制腳本,然後用逐步加壓的方式來運行腳本,TPS、ORACLE的命中率、資源佔用都很理想。性能測試人員就陷入了一種盲目的樂觀情緒中,就認為系統性能沒有問題,結果在實際運行中系統性能與性能測試中的性能相差很大,為什麼會出現這種情況呢,下面我們來分析一下:首先我們來了解一下ORACLE的運行機制:從客戶端發送一條SQL語句到ORACLE服務端,ORACLE要對SQL語句進行解析、執行、返回結果。 並且ORACLE有一個LRU(最近最常使用的語句)機制,把最近最常使用的SQL語句保存到共享內存SGA中的libary cache中,下一次再有這樣的請求它就不解析了,直接從共享內存中使用。假如我們使用的SQL語句是select roleID from usertable where username='AAA' and password='123',在我們加壓的時候它就解析一次或很少的幾次,其他的請求就會從共享內存中取得,並且返回的結果也會保存到BUFFER CACHE中,這樣系統的測試結果當然就是很好的。但在實際工作中,用戶名和密碼是各種各樣的,而ORACLE解析的條件又要求非常苛刻,SQL語句有一點不同它就認為是不同的SQL語句就要重新進行解析,而解析非常耗費系統資源,所以在實際運行中系統的性能和性能測試的結果相差很大。通過這個例子我們可以看出我們沒有把真正的壓力壓到點上,也就是進行的不是有效性能測試。如何進行有效性能測試呢?一定要仔細地分析你要進行測試系統的架構、技術體系,LOADRUNNER只是一個加壓工具,它對 ORACLE的監控也非常的不好,不要盲目的相信LOADRUNNER.一定要充分重視測試的調研和設計工作,如果能在測試前拿到系統開發的各種文檔是最好的,如果沒有也要充分調研業務人員、開發人員、系統運維人員,了解系統的技術架構、業務組成、業務流程、業務頻度、數據量等要素,這樣才能進行有效性能測試
Ⅶ 軟體性能測試分析的幾種方法
」。這里強調以下內容:
(1) 充分准備以下內容:硬體設備、軟體環境、網路條件、基礎數據
(2) 充分准備測試場景、典型的場景包括操作序列、並發用戶數量條件、用例。
該部分包括使用到上述測試方法:性能測試方法、可靠性測試、壓力測試、失效恢復測試
2. 規劃性能
3. 發現缺陷
這個環節中是交付給用戶的主要工作成果。需要多和開發人員作溝通、多次迭代發現問題、根據用戶的需求定義與缺陷的涉及范圍、制定一個解決缺陷的優先順序。由於軟體永遠有BUG這一真理,所以發現缺陷不是一次就能結束的工作。比較適合作為服務外包。持續進行。
4. 性能調優
一個標準的性能調優過程是:
(1) 確定基準環境、基準負載和基準性能指標。
(2) 調整系統運行環境和實現方法,執行測試。
(3) 記錄測試結果、進行分析
在J2EE性能測試中有很多常見的錯誤,比如:對於某些建立在J2EE/EJB技術上的應用,在服務啟動的時候,沒有注意到測試之前首先進行一段時間的預熱。這是因為JAVA語言的hot-spot技術特性決定的,這種技術允許weblogic第一次運行應用的時候將位元組碼編譯為本地代碼並執行,這樣在後續的執行過程中執行過程會大大加快,但第一次由於存在一個編譯過程會比較慢。如果使用這個時間來作為基準那麼就容易得出錯誤的結論。
Ⅷ 性能測試分析
如下圖系統場景中,可以按照系統性能資源因素分為 CPU,內存,網路,IO 等四塊區域來進行監控分析定位
度量方法:
衡量標准:注意 >=50%,告警 >=70%,嚴重 >=90%
度量方法:
衡量標准:
運行的隊列大於1時,證明已經有一定的負載了,不過這個計數也不絕對,需進一步分析其他的資源情況來斷定是否 CPU 已經滿負荷動作。
度量方法:
(9)通過perf 工具去捕獲處理器的錯誤信息,需處理器支持
衡量標准:需處理器支持
衡量標准:注意>=50%,告警 >= 70%,嚴重 >= 80%
度量方法:
衡量標准:
(1)so 數值大,且 swapd 已經佔比很高,內存肯定已經飽和。
(2)sar 命令次缺頁多意味已經在不停地和 swap 打交通,證明內存已經飽和
(3)當內存不夠用會觸發內核的 OOM 機制
度量方法:
衡量標准:有計數
度量方法:
衡量標准:
度量方法:
衡量標准:統計的丟包有計數證照已經滿了
度量方法:
衡量標准:錯誤有計數
度量方法:
衡量標准:注意 >= 40%, 告警 >= 60%, 嚴重 >=80%
度量方法:
衡量標准:IO 已經有滿載嫌疑
度量方法:
衡量標准:有信息
Ⅸ 性能測試的方法
對於企業應用程序,有許多進行性能測試的方法,其中一些方法實行起來要比其他方法困難。所要進行的性能測試的類型取決於想要達到的結果。例如,對於可再現性,基準測試是最好的方法。而要從當前用戶負載的角度測試系統的上限,則應該使用容量規劃測試。本文將介紹幾種設置和運行性能測試的方法,並討論這些方法的區別。
如果不進行合理的規劃,對J2EE應用程序進行性能測試將會是一項令人望而生畏且有些混亂的任務。因為對於任何的軟體開發流程,都必須收集需求、理解業務需要,並在進行實際測試之前設計出正式的進度表。性能測試的需求由業務需要驅動,並由一組用例闡明。這些用例可以基於歷史數據(例如,伺服器一周的負載模式)或預測的近似值。弄清楚需要測試的內容之後,就需要知道如何進行測試了。
在開發階段前期,應該使用基準測試來確定應用程序中是否出現性能倒退。基準測試可以在一個相對短的時間內收集可重復的結果。進行基準測試的最好方法是,每次測試改變一個且只改變一個參數。例如,如果想知道增加JVM內存是否會影響應用程序的性能,就逐次遞增JVM內存(例如,從1024 MB增至1224 MB,然後是1524 MB,最後是2024 MB),在每個階段收集結果和環境數據,記錄信息,然後轉到下一階段。這樣在分析測試結果時就有跡可循。下一小節我將介紹什麼是基準測試,以及運行基準測試的最佳參數。
開發階段後期,在應用程序中的bug已經被解決,應用程序達到一種穩定狀態之後,可以運行更為復雜的測試,確定系統在不同的負載模式下的表現。這些測試被稱為容量規劃測試、滲入測試(soak test)、峰谷測試(peak-rest test),它們旨在通過測試應用程序的可靠性、健壯性和可伸縮性來測試接近於現實世界的場景。對於下面的描述應該從抽象的意義上理解,因為每個應用程序的使用模式都是不同的。例如,容量規劃測試通常都使用較緩慢的ramp-up(下文有定義),但是如果應用程序在一天之中的某個時段中有快速突發的流量,那麼自然應該修改測試以反映這種情況。但是,要記住,因為更改了測試參數(比如ramp-up周期或用戶的考慮時間(think-time)),測試的結果肯定也會改變。一個不錯的方法是,運行一系列的基準測試,確立一個已知的可控環境,然後再對變化進行比較。 基準測試的關鍵是要獲得一致的、可再現的結果。可再現的結果有兩個好處:減少重新運行測試的次數;對測試的產品和產生的數字更為確信。使用的性能測試工具可能會對測試結果產生很大影響。假定測試的兩個指標是伺服器的響應時間和吞吐量,它們會受到伺服器上的負載的影響。伺服器上的負載受兩個因素影響:同時與伺服器通信的連接(或虛擬用戶)的數目,以及每個虛擬用戶請求之間的考慮時間的長短。很明顯,與伺服器通信的用戶越多,負載就越大。同樣,請求之間的考慮時間越短,負載也越大。這兩個因素的不同組合會產生不同的伺服器負載等級。記住,隨著伺服器上負載的增加,吞吐量會不斷攀升,直到到達一個點。
注意,吞吐量以穩定的速度增長,然後在某一個點上穩定下來。
在某一點上,執行隊列開始增長,因為伺服器上所有的線程都已投入使用,傳入的請求不再被立即處理,而是放入隊列中,當線程空閑時再處理。
注意,最初的一段時間,執行隊列的長度為零,然後就開始以穩定的速度增長。這是因為系統中的負載在穩定增長,雖然最初系統有足夠的空閑線程去處理增加的負載,最終它還是不能承受,而必須將其排入隊列。
當系統達到飽和點,伺服器吞吐量保持穩定後,就達到了給定條件下的系統上限。但是,隨著伺服器負載的繼續增長,系統的響應時間也隨之延長,雖然吞吐量保持穩定。
注意,在執行隊列(圖2)開始增長的同時,響應時間也開始以遞增的速度增長。這是因為請求不能被及時處理。
為了獲得真正可再現的結果,應該將系統置於相同的高負載下。為此,與伺服器通信的虛擬用戶應該將請求之間的考慮時間設為零。這樣伺服器會立即超載,並開始構建執行隊列。如果請求(虛擬用戶)數保持一致,基準測試的結果應該會非常精確,完全可以再現。
您可能要問的一個問題是:「如何度量結果?」對於一次給定的測試,應該取響應時間和吞吐量的平均值。精確地獲得這些值的唯一方法是一次載入所有的用戶,然後在預定的時間段內持續運行。這稱為「flat」測試。
與此相對應的是「ramp-up」測試。
ramp-up測試中的用戶是交錯上升的(每幾秒增加一些新用戶)。ramp-up測試不能產生精確和可重現的平均值,這是因為由於用戶的增加是每次一部分,系統的負載在不斷地變化。因此,flat運行是獲得基準測試數據的理想模式。
這不是在貶低ramp-up測試的價值。實際上,ramp-up測試對找出以後要運行的flat測試的范圍非常有用。ramp-up測試的優點是,可以看出隨著系統負載的改變,測量值是如何改變的。然後可以據此選擇以後要運行的flat測試的范圍。
Flat測試的問題是系統會遇到「波動」效果。
注意波動的出現,吞吐量不再是平滑的。
這在系統的各個方面都有所體現,包括CPU的使用量。
注意,每隔一段時間就會出現一個波形。CPU使用量不再是平滑的,而是有了像吞吐量圖那樣的尖峰。
此外,執行隊列也承受著不穩定的負載,因此可以看到,隨著系統負載的增加和減少,執行隊列也在增長和縮減。
注意,每隔一段時間就會出現一個波形。執行隊列曲線與上面的CPU使用量圖非常相似。
最後,系統中事務的響應時間也遵循著這個波動模式。
注意,每隔一段時間就會出現一個波形。事務的響應時間也與上面的圖類似,只不過其效果隨著時間的推移逐漸減弱。
當測試中所有的用戶都同時執行幾乎相同的操作時,就會發生這種現象。這將會產生非常不可靠和不精確的結果,所以必須採取一些措施防止這種情況的出現。有兩種方法可以從這種類型的結果中獲得精確的測量值。如果測試可以運行相當長的時間(有時是幾個小時,取決於用戶的操作持續的時間),最後由於隨機事件的本性使然,伺服器的吞吐量會被「拉平」。或者,可以只選取波形中兩個平息點之間的測量值。該方法的缺點是可以捕獲數據的時間非常短。 對於性能規劃類型的測試來說,其目標是找出,在特定的環境下,給定應用程序的性能可以達到何種程度。此時可重現性就不如在基準測試中那麼重要了,因為測試中通常都會有隨機因子。引入隨機因子的目的是為了盡量模擬具有真實用戶負載的現實世界應用程序。通常,具體的目標是找出系統在特定的伺服器響應時間下支持的當前用戶的最大數。例如,您可能想知道:如果要以5秒或更少的響應時間支持8,000個當前用戶,需要多少個伺服器?要回答這個問題,需要知道系統的更多信息。
要確定系統的容量,需要考慮幾個因素。通常,伺服器的用戶總數非常大(以十萬計),但是實際上,這個數字並不能說明什麼。真正需要知道的是,這些用戶中有多少是並發與伺服器通信的。其次要知道的是,每個用戶的「考慮時間」即請求間時間是多少。這非常重要,因為考慮時間越短,系統所能支持的並發用戶越少。例如,如果用戶的考慮時間是1秒,那麼系統可能只能支持數百個這樣的並發用戶。但是,如果用戶的考慮時間是30秒,那麼系統則可能支持數萬個這樣的並發用戶(假定硬體和應用程序都是相同的)。在現實世界中,通常難以確定用戶的確切考慮時間。還要注意,在現實世界中,用戶不會精確地按照間隔時間發出請求。
於是就引入了隨機性。如果知道普通用戶的考慮時間是5秒,誤差為20%,那麼在設計負載測試時,就要確保請求間的時間為5×(1 +/- 20%)秒。此外,可以利用「調步」的理念向負載場景中引入更多的隨機性。它是這樣的:在一個虛擬用戶完成一整套的請求後,該用戶暫停一個設定的時間段,或者一個小的隨機時間段(例如,2×(1 +/- 25%)秒),然後再繼續執行下一套請求。將這兩種隨機化方法運用到測試中,可以提供更接近於現實世界的場景。
進行實際的容量規劃測試了。接下來的問題是:如何載入用戶以模擬負載狀態?最好的方法是模擬高峰時間用戶與伺服器通信的狀況。這種用戶負載狀態是在一段時間內逐步達到的嗎?如果是,應該使用ramp-up類型的測試,每隔幾秒增加x個用戶。或者,所有用戶是在一個非常短的時間內同時與系統通信?如果是這樣,就應該使用flat類型的測試,將所有的用戶同時載入到伺服器。兩種不同類型的測試會產生沒有可比性的不同測試。例如,如果進行ramp-up類型的測試,系統可以以4秒或更短的響應時間支持5,000個用戶。而執行flat測試,您會發現,對於5,000個用戶,系統的平均響應時間要大於4秒。這是由於ramp-up測試固有的不準確性使其不能顯示系統可以支持的並發用戶的精確數字。以門戶應用程序為例,隨著門戶規模的擴大和集群規模的擴大,這種不確定性就會隨之顯現。
這不是說不應該使用ramp-up測試。對於系統負載在一段比較長的時間內緩慢增加的情況,ramp-up測試效果還是不錯的。這是因為系統能夠隨著時間不斷調整。如果使用快速ramp-up測試,系統就會滯後,從而報告一個較相同用戶負載的flat測試低的響應時間。那麼,什麼是確定容量的最好方法?結合兩種負載類型的優點,並運行一系列的測試,就會產生最好的結果。例如,首先使用ramp-up測試確定系統可以支持的用戶范圍。確定了范圍之後,以該范圍內不同的並發用戶負載進行一系列的flat測試,更精確地確定系統的容量。 滲入測試是一種比較簡單的性能測試。滲入測試所需時間較長,它使用固定數目的並發用戶測試系統的總體健壯性。這些測試將會通過內存泄漏、增加的垃圾收集(GC)或系統的其他問題,顯示因長時間運行而出現的任何性能降低。測試運行的時間越久,您對系統就越了解。運行兩次測試是一個好主意——一次使用較低的用戶負載(要在系統容量之下,以便不會出現執行隊列),一次使用較高的負載(以便出現積極的執行隊列)。
測試應該運行幾天的時間,以便真正了解應用程序的長期健康狀況。要確保測試的應用程序盡可能接近現實世界的情況,用戶場景也要逼真(虛擬用戶通過應用程序導航的方式要與現實世界一致),從而測試應用程序的全部特性。確保運行了所有必需的監控工具,以便精確地監測並跟蹤問題。 峰谷測試兼有容量規劃ramp-up類型測試和滲入測試的特徵。其目標是確定從高負載(例如系統高峰時間的負載)恢復、轉為幾乎空閑、然後再攀升到高負載、再降低的能力。
實現這種測試的最好方法就是,進行一系列的快速ramp-up測試,繼之以一段時間的平穩狀態(取決於業務需求),然後急劇降低負載,此時可以令系統平息一下,然後再進行快速的ramp-up;反復重復這個過程。這樣可以確定以下事項:第二次高峰是否重現第一次的峰值?其後的每次高峰是等於還是大於第一次的峰值?在測試過程中,系統是否顯示了內存或GC性能降低的有關跡象?測試運行(不停地重復「峰值/空閑」周期)的時間越長,您對系統的長期健康狀況就越了解。
Ⅹ 如何進行性能測試與分析
首先通過日誌分析出用戶行為,得出qps,
場景收集完,著手模擬,驗證產品的性能指標,業務qps,穩定性,最優配置,等等