天天看點

一個完整的性能測試綜述

 一、了解性能測試

  性能測試是不斷的通過不同場景的系統表現去探究系統設計與資源消耗之間的平衡。

  我們可以認為性能測試是:通過在測試環境下對系統或構件的性能進行探測,用以驗證在生産環境下系統性能是否達到預估的性能需求,發現系統可能存在的性能瓶頸,進而改善優化并系統的性能,提高系統的可擴充性、穩定性。

  從上面的描述可以看出,性能測試的主要工作包括:獲得預估的性能需求、搭建測試環境、執行測試、分析測試結果。其中,最為重要兩個工作是确定測試的目的、方案,并對結果進行分析。

  二、确認測試目的

  性能測試的需求包含但不限于使用者的需求。在性能測試前我們同樣需要充分了解開發、運維對系統的關注點。此外,要對被測子產品的設計有深入了解,基本判斷該子產品是cpu密集型或是io密集型。以上這些是為更确立測試的目的,并有針對性的梳理測試方案和分析做好準備。

  性能測試的目的包括:

  (1)驗證系統是否滿足預期需求;

  (2)驗證系統在高壓下的表現;

  (3)驗證系統是否能持續穩定的運作;

  (4)探測系統的瓶頸和産生瓶頸的原因;

  (5)探測系統設計與資源之間的最佳平衡,改善并優化系統的性能。

  三、确認測試方案

  根據性能測試目的的不同,所實施的測試方案也不同。

  一般,性能測試主要包括如下幾種:

  1)驗證系統在預估負載下的表現:負載測試

  2)驗證系統在極端負載下的表現:壓力測試

  3)驗證系統是否能持續穩定的運作:穩定性測試

一個完整的性能測試綜述

  以下是對上述三種測試的圖示。一般,常态負載低于瓶頸負載,從常态負載到瓶頸負載區間系統的承受能力可以看作是可擴充能力。當瓶頸負載小于等于常态負載時,說明該系統的性能沒有滿足預計要求,是存在問題的。探測常态負載與瓶頸負載的關系,正是負載測試所要完成的工作。壓力測試則驗證從系統到達瓶頸之後,繼續持續加壓時系統的表現。

一個完整的性能測試綜述

  根據性能測試的目的,選擇是進行負載、壓力、穩定性測試還是幾種測試。每種測試中一般會安排幾個場景,場景的變換主要根據壓力值、系統配置等參數而改變。首次測試一把根據預估的性能需求和經驗值開決定,後續的測試場景依賴于首次測試的各項名額的特征。例如,首次測試後,發現系統的性能很好,完全滿足預期且機器各項負載指數很低,後續可以考慮n倍壓力值探測系統瓶頸。如果首次測試的結果表現出不能滿足預期,則需要調整各參數值進行測試,通過比較個參數值下的性能表現來分析系統瓶頸。

  四、準備環境資料

  1 搭建測試環境

  什麼是測試環境?測試環境=軟體+硬體+網絡+資料+測試工具。

  原則1 以假亂真

  軟、硬體配置要與生産環境的配置一緻,如果條件有限,則要盡量逼近于生産環境的真實條件。同時,要保證測試工具的穩定性。如果性能測試環境不夠真實、穩定,則測試的結果的可靠性無法滿足。

  原則2 以靜制動

  一般,我們将壓力程式、被測子產品部署在不同的機器上。(即便是生産環境中壓力來自于被測子產品所在的機器,我們一般也是分開部署;這是保證被測子產品的幹淨,避免對測試結果的幹擾)。是以資訊互動是通過網絡來完成的。保證環境幹淨的另一個原因是,一般線上部署是多子產品統計部署,線上下沒有必要搭建通線上一樣的子產品,是以使用一套幹淨的環境進行測試,可以在後期分析中引入多子產品統計部署的因素進來,推算上線後的效果。

一個完整的性能測試綜述

  2 準備測試資料

  原則3 以小見大

  測試資料是測試環境的一部分,但與環境不同,測試資料很難達到與生産環境一模一樣。一方面,生産環境的資料是動态、持續變化的,而測試中我們需要的資料是靜态的,我們無法保證資料的實時性;另一方面,生産環境的資料是龐大的,而測試環境中資料量是有限的。

  在資料準備中既要關注資料的質、又要關注量。

  1)質——指資料的頻率、分布要盡可能和線上一緻。

  2)量——指資料的規模要達到、接近或者超過線上現有水準。

  通常,可以采用同比例縮放或擴放的方式,即使用過去一段時間的生産環境資料來進行測試。一般可以保證資料的頻率、分布和真實環境中是一緻的。

  五、性能名額分析

  1 性能名額的關注

  性能測試的名額可分為産品名額和資源名額兩類。對測試人員而言,性能測試的需求來自于使用者、開發、運維的三方面。使用者和開發關注的是與業務需求相關的産品名額,運維關注的是與硬體消耗相關的資源名額。

一個完整的性能測試綜述

  1)從使用者角度關注的名額:使用者關注的是單次業務相關的體驗效果,譬如一次操作的響應快慢、一次請求是否成功、一次連接配接是否失敗等,反映單次業務相關的名額包括:

  (1)成功率=成功響應次數/統計時間

  (2)失敗率=失敗響應次數/統計時間

  (3)響應時間

  2)從開發角度關注的名額: 開發人員更關注的是系統層面的名額。

  (1)容量:系統能夠承載的最大使用者通路量是多少?系統最大的業務處理量是多少?

  (2)穩定性: 系統是否支援7*24小時(一周)的業務通路?

  3)從運維角度關注的名額:運維人員更關注的是硬體資源的消耗情況。

  需要注意的是,在預估性能壓力和名額時,需要給線上運維操作留有必要的性能空間。

一個完整的性能測試綜述

其中,資源消耗往往是制約産品名額的重要因素,是我們在性能測試中需要特别關注的名額。資源消耗包括CPU、記憶體、硬碟、網絡帶寬等。

  2 性能名額的統計

  1) 單次業務相關的名額可以通過統計日志資訊來計算。

  2) 連續業務相關名額需要從長時間、高壓力的性能中統計和分析。

  3) 資源消耗名額可以通過監控程序占用的資源、機器系統的資源變化來觀測。

  其中,常見的性能分析工具有vmstat、top、free、iostat等。

一個完整的性能測試綜述

  3 性能名額的分析

  名額分析的原則是“具體問題具體分析”,但是總的方法是盯住單場景,觀察各項名額變化趨勢;針對多場景,分析不同參數下的變化。需要注意到是,作業系統總是盡可能的去使用CPU和記憶體等資源,是以CPU滿負荷或者記憶體free較小并不能說明該資源出現不足。

  在判斷資源短缺和瓶頸時需要綜合分析資源間的制約關系,并觀察各個資源值的變化。下面主要對資源消耗的各個名額進行分析。

一個完整的性能測試綜述

  其中,資源間的制約關系:

  1)實體記憶體不夠時會使用交換記憶體,使用swap會帶來磁盤I0和cpu的開銷。

       2)Linux可以利用空閑記憶體作檔案系統通路的cache,是以系統記憶體越大存儲系統的性能也越好。

  六、總結

  希望這份總結對大家有所幫助,總結是必要的,但僅僅是總結而已。個人了解,性能測試是一門意會大于言傳的測試。屢試不爽、受益匪淺。

下一篇: 坐标離散化