1. 程式人生 > 其它 >效能測試基本知識理論和概念

效能測試基本知識理論和概念

1.效能測試介紹和相關概念

  效能測試是一種評估在指定工作負荷下系統或應用的響應能力、可靠性、吞吐量、互操作性以及可擴充套件性的測試。效能測試可以定義為一種評估計算機、網路軟體應用或裝置的速率或效率的過程。可以對軟體應用、系統資源、目標應用元件、資料庫等進行效能測試。通常測試會包含一個自動化的測試套件,該測試套件了能夠很容易地反覆模擬各種正常值、峰值和異常值。測試過程可以比較應用在速度、資料傳輸率、吞吐量、貸款、效率或可靠性等方面變化。效能測試也作為評估瓶頸和單點故障的診斷工具。

1.1效能測試的一些概念:

  負載測試壓力測試都屬於效能測試,兩者可以結合進行;通過負載測試,確定在各種工作負載下系統的效能,目標是測試當負載逐漸增加時,系統各項效能指標的變化情況。

壓力測試是通過確定一個系統的瓶頸或者不能接受的效能點,來獲得系統能提供的最大服務級別的測試。

  效能測試概括為三個方面:(1)應用在客戶端效能的測試(2)應用在網路上效能的測試(3)應用在伺服器端效能的測試。通常情況下,三方面有效、合理的結合,可以達到對系統性能全面的分析和瓶頸的預測。

  應用在客戶端效能測試的目的是考察客戶端應用的效能,測試的入口是客戶端。它主要包括併發效能測試、疲勞強度測試、大資料量測試和速度測試等,其中併發效能測試是重點。

  併發效能測試的過程是一個負載測試壓力測試的過程,即逐漸增加負載,直到系統的瓶頸或者不能接收的效能點,通過綜合分析交易執行指標和資源監控指標來確定系統併發效能的過程。
負載測試
(Load Testing)是確定在各種工作負載下系統的效能,目標是測試當負載逐漸增加時,系統組成部分的相應輸出項,例如通過量、響應時間、CPU負載、記憶體使用等來決定系統的效能。負載測試是一個分析軟體應用程式和支撐架構、模擬真實環境的使用,從而來確定能夠接收的效能過程。壓力測試(Stress Testing)是通過確定一個系統的瓶頸或者不能接收的效能點,來獲得系統能提供的最大服務級別的測試。   併發效能測試的目的主要體現在三個方面:以真實的業務為依據,選擇有代表性的、關鍵的業務操作設計測試案例,以評價系統的當前效能;當擴充套件應用程式的功能或者新的應用程式將要被部署時,負載測試會幫助確定系統是否還能夠處理期望的使用者負載,以預測系統的未來效能;通過模擬成百上千個使用者,重複執行和執行測試,可以確認效能瓶頸並優化和調整應用,目的在於尋找到瓶頸問題。      1.2 效能測試的基本策略:
  測試的基本策略是自動負載測試,通過在一臺或幾臺PC機上模擬成百或上千的虛擬使用者同時執行業務的情景,對應用程式進行測試,同時記錄下每一事務處理的時間、中介軟體伺服器峰值資料、資料庫狀態等。通過可重複的、真實的測試能夠徹底地度量應用的可擴充套件性和效能,確定問題所在以及優化系統性能。預先知道了系統的承受力,就為終端使用者規劃整個執行環境的配置提供了有力的依據。   (1)負載測試:是通過逐步增加系統負載,測試系統性能的變化,並最終確定在滿足系統性能指標的前提下,系統所能承受的最大負載量的測試。     也就是說,這種方法是對一個系統持續不段的加壓,看你在什麼時候已經超出“我的要求”或系統崩潰。     通過在被測系統上不斷加壓,直到效能指標達到極限,來確定系統的處理能力和能夠承受的各項閾值。例如“響應時間不超過5秒 ”。       特點:       1、這種效能測試方法的主要目的是找到系統處理能力的極限。       2、這種效能測試方法需要在給定的測試環境下進行,通常也需要考慮被測試系統的業務壓力量和典型場景、使得測試結果具有業務上的意義。       3、這種效能測試方法一般用來了解系統的效能容量,或是配合效能調優來使用。   (2)壓力測試(強度測試):壓力測試是通過逐步增加系統負載,測試系統性能的變化,並最終確定在什麼負載條件下系統性能處於失效狀態來獲得系統能提供的最大服務級別的        測試。也就是說,這種測試是讓系統處在很大強度的壓力之下,看系統是否穩定,哪裡會出問題。壓力測試方法測試系統在一定飽和狀態下,例如cpu、記憶體在飽和使用情況下,系統  能夠處理的會話能力,以及系統是否會出現錯誤     特點:     1、這種效能測試方法的主要目的是檢查系統處於壓力效能下時,應用的表現。     2、這種效能測試一般通過模擬負載等方法,使得系統的資源使用達到較高的水平。     3、這種效能測試方法一般用於測試系統的穩定性。   (3)併發測試:是測試多個使用者同時訪問同一個應用、同一個模組或者資料記錄時是否存在死鎖或者其他問題,所以幾乎所有的效能測試都會涉及一些併發測試。     因為併發測試對時間的間隔要求比較嚴格,通常併發測試都要藉助於工具(比如jmeter和loadrunner),採用多執行緒或者多程序的方式來模擬多個虛擬使用者的併發性操      作。也就是說,這種測試關注點是多個使用者同時(併發)對一個模組或操作進行加壓。     特點:     1、這種效能測試方法的主要目的是發現系統中可能隱藏的併發訪問時的問題。     2、這種效能測試方法主要關注系統可能存在的併發問題,例如系統中的記憶體洩漏、執行緒鎖和資源爭用方面的問題。     3、這種效能測試方法可以在開發的各個階段使用需要相關的測試工具的配合和支援。   (4)配置測試:主要是通過被測試軟體的軟硬體配置的測試,找到系統各項資源的最優分配原則。配置測試能充分利用有限的軟硬體資源,發揮系統的最佳處理能力,同時可以將其與其他效能測試型別聯合應用,從而為系統調優提供重要依據。 也就是說,這種測試關注點是“微調”,通過對軟硬體的不段調整,找出這他們的最佳狀態,使系統達到一個最強的狀態。     特點:     1、這種效能測試方法的主要目的是瞭解各種不同因素對系統性能影響的程度,從而判斷出最值得進行的調優操作。     2、這種效能測試方法一般在對系統性能狀況有初步瞭解後進行。     3、這種效能測試方法一般用於效能調優和規劃能力。  (5)可靠性測試:在給系統載入一定業務壓力的情況下,使系統執行一段時間,以此檢測系統是否穩定。 也就是說,這種測試的關注點是“穩定”,不需要給系統太大的壓力,只要系統能夠長期處於一個穩定的狀態。    特點:     1、這種效能測試方法的主要目的是驗證是否支援長期穩定的執行。     2、這種效能測試方法需要在壓力下持續一段時間的執行,通常可以測出記憶體洩漏的問題。(2~3天)     3、測試過程中需要關注系統的執行狀況。     4、平均故障間隔時間是衡量可靠性的一項重要指標。  (6)容量測試:容量測試是在一定的軟硬體條件下,在資料庫中構造不同數量級的記錄數量 ,通過執行一種或者多種業務場景,在一定虛擬使用者數量的情況下,獲取不同數量級別的效能指標,從而得到資料庫能夠處理的最大會話能力、最大容量等。  (7)失敗測試:對於有冗餘備份和負載均衡的系統,通過失敗測試來檢驗如果系統局部發生故障,使用者能否繼續使用系統,使用者受到多大的影響。1 2.效能指標概念:   (1)記憶體洩漏:記憶體洩漏(Memory Leak)是指程式中已動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。2   (2)記憶體溢位:記憶體溢位(Out Of Memory,簡稱OOM)是指應用系統中存在無法回收的記憶體或使用的記憶體過多,最終使得程式執行要用到的記憶體大於能提供的最大記憶體。此時程式就執行不了,系統會提示記憶體溢位,有時候會自動關閉軟體,重啟電腦或者軟體後釋放掉一部分記憶體又可以正常執行該軟體,而由系統配置資料流、使用者程式碼等原因而導致的記憶體溢位錯誤,即使使用者重新執行任務依然無法避免。3   (3)併發
狹義的併發:使用者在同一時間內做同一事情
廣義的併發:使用者同時操作不同的功能(混合場景:登入、下訂單、、支付訂單)

在效能測試中,一般先進行狹義的併發(單場景單介面做效能測試,可更好地定位問題),再進行廣義的併發(混合場景(驗證系統的穩定性,在多個關聯介面時,會不會出現新的問題))

  (4)併發使用者數

系統使用者數:系統的註冊使用者數(包含殭屍使用者)

線上使用者數:登入系統的使用者(不一定對伺服器產生壓力)

併發使用者數:對伺服器產生壓力的使用者

併發使用者數的確定:老系統-找運維;新系統:競品、做過的專案、經驗

  (5)事務

事務是效能指令碼中的一個重要特性。要度量伺服器的效能,需要定義事務,每個事務都包含事務開始和事務結束標記。事務用來衡量指令碼中一行程式碼或多行大媽的執行所消耗的時間。

  (6)響應時間

響應時間=網路時間(N1+N2+N3+N4)+伺服器處理時間(A1+A3)+資料庫處理時間(A2)

web的HTTP請求中響應時間包括了前段渲染時間,但是loadrunner中是不統計前段渲染時間的。

tps(Transaction Pre Second)

伺服器每秒能處理的事務數,用來衡量伺服器處理能力。基於事務統計。

  (7)吞吐量

指系統在單位時間內處理請求的數量,不嚴格意義上來說就是tps。

  (8)點選率(Hit Per Second)

從客戶端發起請求伺服器的數量(衡量客戶端效能,需排除網路、本機產生的影響)。

  (9)資源利用率

指系統資源的使用程度,比如伺服器(網路及資料庫)的CPU利用率,記憶體利用率,硬碟利用率,網路頻寬利用率等。

  (10)CPU

大腦,主要進行判斷和處理,能反應出系統的繁忙程度,一般分為系統CPU(%sys)與使用者態CPU(%user),其中系統CPU是處理系統本身所佔用的資源,使用者CPU則是處理程式所佔用的資源。物件不同。

使用者態CPU高:程式碼、sql語句處理有問題;

系統態CPU高:核心、伺服器資源瓶頸。

  (11)Load Average

指一段時間內CPU正在處理和等待CPU處理的事務,也就是CPU使用佇列的長度的統計資訊。eg:地鐵進站,等待乘客越多,load average越大。

  (12)Memory

記憶區域,將各種資訊收集起來存放。資料從記憶體讀取要比從磁碟讀取速度快,而記憶體經常發生記憶體洩漏或記憶體溢位的現象。

  (13)佇列

可以理解成進站排隊的現象,佇列長,說明處理可能達到了極限或者遇到了阻塞。

  (14)網路

重點關注網路的流量,看是否存在網路頻寬的瓶頸。4

3.效能測試的目的:   識別系統的弱點,評估系統能力,發現系統性能瓶頸,提高系統可靠效能和穩定性。 4.效能測試實施過程:   4.1 定義驗收標準:負載下應用的各個模組可接受的效能指標是什麼?具體來說,就是定義好響應時間、吞吐量,以及資源利用率目標和約束條件。標準由專案干係人負責,測試過程中通常需要持續關注,,標準也可能根據實際情況進行調整。   4.2 定義測試環境:熟悉物理測試環境和產品環境對一次成功的測試執行來說非常關鍵。需要明確的東西包括硬體、軟體,以及測試下的網路環境設定,這將有助於制定有效的測試計劃並已開始就是別處測試風險。   4.3 規劃並設計測試用例:先了解應用的使用方法,再確定各個場景下真實的使用場景(包括變化),比如註冊模組,通常一天會有多少使用者註冊?註冊是不是在同時發生?還是分散的?通常一小時內有多少人註冊?等等。   4.4 準備測試環境:配置測試環境、工具和資源。包括測試的軟體硬體、網路資源環境,監控環境、測試工具的準備、資料的準備等等。   4.5 準備測試計劃:使用測試工具錄製好(配置好)測試場景(比如指令碼、API等等)。   4.6 執行測試:首先在輕量負載下執行測試計劃,驗證測試指令碼和輸出結果的正確性,驗證資料的正確性,關注伺服器的效能,伺服器日誌的警告⚠和錯誤❌。例如出現頻度高的錯誤可能代表測試指令碼、被測應用或系統資源有問題,或者三者都有。   4.7 分析結果、報告和重測試:檢查每一次成功只想的結果,識別需要解決的瓶頸。瓶頸可能和系統、資料庫或者應用有關。可以通過調整基礎設施(如增加執行能存等)、優化資料查詢等。對應的結果可以和基線資料對比。    基線資料收集的一些參考點:     A.基線資料應該是應用程式特定的。     B.可以為系統、應用或者模組建立基線。     C.基線資料是指標資料/結果。     D.基線資料不應該過於概括。     E.隨時間變化可能需要重新定義基線資料。     F.基線資料可以當作共享的參考框架。     G.基線資料應該是可以重用的。     H.基線資料可以幫助識別效能的變化。5 【1】https://www.cnblogs.com/dream-future/p/7603020.html 【2】https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F/6181425?fr=aladdin 【3】https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA/1430777?fr=aladdin 【4】https://www.cnblogs.com/wq-zhou/p/10631189.html 【5】Performance Testing with Jmeter sencond Edition ,Bayo Erinle There is no smoke without fire. An ounce of prevention is worth a pound of cure.