本文將圍繞性能測試常見分類、業務場景建模、測試數據準備、監控指標確認介紹性能測試場景的設計。
我們知道,軟體總是運行在一定的環境下 ,這種環境包括支撐軟體運行的軟硬體環境和影響軟體運行的外部條件。為了讓客戶使用軟體系統感到滿意,必須確保系統運行良好,達到高安全、高可靠和高性能。
其中,系統是否具有高性能的運行特徵,不僅取決於系統本身的設計和程序算法,而且取決於系統的運行環境(硬體環境)。一般系統的運行環境會受以下因素影響:
從上面可以看出,使系統的性能達到一個最好的狀態,不僅通過對處在特定環境下的系統進行測試以完成相關的驗證,而且往往要根據測試的結果,對系統的設計、代碼和配置等進行調整,提高系統的性能。 許多時候,系統性能的改善是測試調整、再測試再調整、一個持續改進的過程,這就是我們經常說的性能調優。
在了解了這樣一個背景之後 ,就比較容易理解性能測試中常見的分類。從測試的目的出發、從用戶的需求出發,就比較容易區分性能測試、負載測試、穩定性測試、壓力測試。
性能測試、負載測試、穩定性測試、壓力測試的測試目的不同,但其手段和方法在一定程度上比較相似,通常會使用相同的測試環境和測試工具,而且都會監控系統所占用資源的情況以及其它相應的性能指標,這也是造成我們容易產生概念混淆的主要原因。
性能測試類型
廣義上,性能測試指的是以下幾種性能測試類型:
一般系統的性能指標
我們取其中某幾個性能指標,舉一個例子。我們先假設一個場景:XX查詢系統,其中一項產品規格(性能指標)為300用戶並發查詢,頁面首屏結果請求響應時間不超過3秒。
圖中 A、B、C、D四點表示:
性能測試(狹義)
測試A點的系統性能。
性能測試是為了獲得系統在某種特定的條件下(包括特定的負載條件下)的性能指標數據,實現對系統某項性能指標進行定量、對比測試,主要目的是檢驗系統性能與相關性能標準的符合程度。
負載測試
測試 A點以上到C點系統性能。
負載測試的目標是測試在一定負載情況下系統性能(不關注穩定性,也就是說不關注長時間運行),實際中我們常從比較小的負載開始,逐漸增加模擬用戶的數量(增加負載), 觀察不同負載下應用程式響應時間、數據吞吐量、系統資源使用率(如CPU、內存)等,直到到系統的某項或多項性能指標達到安全臨界值(如,系統內存已飽和),以發現系統可能存在的性能瓶預、內存泄漏、FGC、不能實時同步等問題(不關注穩定性,也就是說不關注長時間運行。它是測試系統的不同負載情況下的性能指標。)
穩定性測試
測試 A點以上 到 B 點之間
穩定性測試是一般在低於性能值的前提下進行測試的,一般穩定性測試時間持續為 n*24 小時。測試時,我們需要結合用戶實際情況控制測試中的負載量 ,使測試結果更具準確性和可靠性。
壓力測試
測試B 點到D 點之間系統性能。
一種破壞性測試,嘗試探測應用或者基礎設施的極限能力。壓力測試是在高於性能指標負載的前提下(超負載)對系統持續施加壓力進行測試的,查看應用系統在峰值使用情況下操作行為,從而有效地發現系統的某項功能隱惠、系統是否具有良好的容錯能力和可恢復能力。壓力測試能發現僅在高負載條件下出現的同步問題、競爭條件、內存泄漏等。通過壓力測試我們還可以確定應用服務在什麼條件下會變得不可用。
壓力測試分為高負載下的長時間(如24小時以上)的穩定性壓力測試 和 極限負載情況下導致系統崩潰的破壞性壓力測試。
壓力測試的幾點注意:
另外,性能測試的需要注意以下幾點:
在了解了相關背景之後,我們來了解一下性能測試場景的設計。性能場景的設計主要包括以下三個步驟:
業務場景建模
首先明確壓測場景範圍。一般情況下我們需要關注的以下性能場景:
通常通過需求優先級來確認核心的業務場景,通過對用戶使用日誌分析獲取高頻的業務場景,通過歷史問題明確高耗或者出現過問題的業務場景,這些業務場景是我們需要重點關注的。
然後,分析業務場景的操作軌跡。業務場景的操作軌跡可以用戶日誌分析和埋點,分析用戶使用習慣和用戶操作軌跡,進而得出業務場景的操作軌跡,同時獲取不用場景的用戶負載。對於新上線的應用,一般通過用戶需求和虛擬用戶(測試人員模擬)使用情況來確認業務場景的操作軌跡。
關於業務場景的操作軌跡還需要考慮思考時間、集合點、施壓模式。
關於思考時間的設置,思考時間模擬的是用戶在等待響應、瀏覽頁面、提交表單等延遲操作的場景。正是因為不用用戶的閱讀速度、輸入速度都存在較大的差異,也就決定了每個用戶的思考時間不一樣。性能思考時間常見的的設置思路如下:
一般,我們可以通過以下方式兩個途徑獲取思考時間設置依據:
關於集合點,集合點模擬的是指定用戶在同一時刻一起做同樣的操作(如,雙十一零點支付訂單),一般集合點通過達到指定 時間或 數量的形式觸發。
關於性能測試的 施壓模式,常見的施壓模式有以下兩種, 併發模式與 RPS 模式:
測試數據準備
高質量的測試數據應當能真實的反映用戶的使用場景。我們一般會引流線上真實數據,經過採用、過濾、脫敏作為性能測試的測試數據。低質量的測試數據也許能夠測試出一些問題,但是更大的可能性是無效的測試結果。
同時需要注意,測試數據不僅數據的分布、數據的質量要模擬真實數據,數據量級也需要儘可能的真實情況,至少不能像功能測試那樣,僅使用少量的數據進行測試。
確認監控指標
在性能測試執行過程中,往往需要實時觀察各項指標是否正常,包括客戶端指標、應用伺服器、資料庫、中間件、網絡入口等各方面的指標。我們通常需要關注的監控指標包括: