更新時間:2021-11-04 09:50:22 來源:動力節(jié)點 瀏覽1187次
讓我們考慮以下場景:顯示學(xué)生考試結(jié)果的系統(tǒng)經(jīng)過多個自動化功能測試。性能測試結(jié)果也很有希望。該系統(tǒng)已準(zhǔn)備好部署到實時服務(wù)器。但是,當(dāng)考試結(jié)果發(fā)布在系統(tǒng)上時,服務(wù)器速度變慢并停止工作。
發(fā)生了什么?考試成績公布后,所有的學(xué)生都想盡早查看成績。它們同時產(chǎn)生了非常高的服務(wù)器負(fù)載,服務(wù)器無法處理請求。首先,它被數(shù)據(jù)庫機器拖慢了。然后,它沒有為中間層提供數(shù)據(jù),軟件也沒有為這種情況做好準(zhǔn)備并停止運行。
性能測試人員錯過了什么?壓力測試。除了測試預(yù)期的用戶數(shù)量外,壓力測試還測試系統(tǒng)在高負(fù)載下的行為,以及檢查恢復(fù)正常使用時系統(tǒng)如何恢復(fù)。使用JMeter等開源測試工具可以輕松完成壓力測試。
我們將在本文中用于測試的示例應(yīng)用程序是一個正在開發(fā)的項目管理工具。目前它有一些基本功能:
- 登錄
- 創(chuàng)建一個項目并將 Github 存儲庫鏈接到它
- 在創(chuàng)建的項目中創(chuàng)建問題
壓力測試的第一步是確定關(guān)鍵場景。根據(jù)業(yè)務(wù)價值(它們對您的成功的重要性)和用戶偏好(用戶花費大部分時間)選擇場景。
在此測試中,我們將檢查網(wǎng)站登錄頁面和項目詳細信息頁面的響應(yīng)時間。
響應(yīng)時間很重要,因為加載時間是頁面放棄的主要因素。隨著互聯(lián)網(wǎng)連接速度的提高,用戶的平均耐心正在下降。如果網(wǎng)站的加載時間超過 4 秒,大約 25% 的用戶將離開。
我們選擇了登錄功能,它提供對數(shù)據(jù)庫的訪問,因為它是每個系統(tǒng)的關(guān)鍵部分。
我們選擇項目詳細信息頁面是因為在測試系統(tǒng)中,它從許多表中讀取數(shù)據(jù),我們希望用戶將大部分時間花在該頁面上。因此,我們希望確保即使在過度使用的情況下,該頁面是否也能在合理的時間內(nèi)加載。


現(xiàn)在我們已經(jīng)確定了我們的測試目標(biāo),讓我們描述他們的測試用例:
測試用例 1 - 登錄測試步驟:
- 進入登錄頁面
- 輸入用戶憑據(jù)
- 點擊登錄按鈕
- 等待登錄響應(yīng)
測試用例 2 - 項目詳情頁面測試步驟:
- 進入登錄頁面
- 輸入用戶憑據(jù)
- 點擊登錄按鈕
- 加載儀表板頁面
- 單擊現(xiàn)有項目
在決定測試用例之后,我們可以繼續(xù)創(chuàng)建測試腳本。創(chuàng)建JMeter測試腳本的最快方法是錄制。您可以使用 JMeter 記錄器或BlazeMeter Chrome 擴展程序,它在 Chrome 商店是免費的并且更加用戶友好,因為您不必設(shè)置代理來使用它,就像使用 JMeter 記錄器一樣。
通過您的 Chrome,開始記錄并模擬您決定測試的用戶場景。完成后,停止錄制。

將文件導(dǎo)出到 jmx 并在 JMeter 中打開它,您可以在其中編輯和配置其參數(shù)。
每個測試都有自己獨特的配置,如csrf 令牌、響應(yīng)斷言和計時器,但所有壓力測試之間的相似之處在于為大量用戶檢查系統(tǒng)的性能。您的業(yè)??務(wù)目標(biāo)應(yīng)確定您正在測試的用戶數(shù)量。
在這種情況下,我們要對 1,000 個用戶進行壓力測試。
為此,您需要配置線程組。線程組最重要的配置是線程數(shù)、加速時間和循環(huán)計數(shù)。線程數(shù)設(shè)置模擬用戶的數(shù)量,加速時間設(shè)置 JMeter 開始執(zhí)行所有線程所需的時間,循環(huán)計數(shù)是測試場景應(yīng)該執(zhí)行的次數(shù)。

結(jié)果顯示,登錄頁面的請求處理時間為 68 毫秒,項目詳細信息頁面的請求處理時間為 1539 毫秒。因此,我們可以得出結(jié)論,在項目頁面加載期間使用了大量資源。

現(xiàn)在,我們可以開始增加我們正在測試的線程數(shù)。我們繼續(xù)使用 10 個線程,0 個加速和 1 個循環(huán)。由于我們?nèi)栽跍y試少量線程,因此我們可以在 GUI 模式下使用 JMeter 并通過偵聽器查看測試。

我們可以看到系統(tǒng)能夠正確處理所有請求:

所以現(xiàn)在我們將用戶數(shù)量增加到 100(目標(biāo)的 10%)。腳本中唯一需要更改的參數(shù)是線程數(shù),我們可以再次運行腳本。如果您正在使用,請不要忘記在測試運行之間清理偵聽器。
之后,將負(fù)載增加到目標(biāo)的 50%,在我們的例子中是 500 個用戶。根據(jù)結(jié)果??,我們可以繼續(xù)增加負(fù)載(如果測試成功)或減少(如果有錯誤)。如果我們需要停機,我們應(yīng)該找出有多少用戶破壞了我們的系統(tǒng),以便我們決定如何修復(fù)瓶頸。
如果 500 線程測試的結(jié)果都是綠色的,則將線程數(shù)增加到 1000 個用戶的目標(biāo)。為了獲得更準(zhǔn)確的結(jié)果,我們建議您將測試切換到Stepping Thread Group,您可以從 JMeter 插件管理器添加它。
Stepping Thread Group 允許您配置開始的線程數(shù)、隨著時間的推移應(yīng)添加多少線程以達到最大值、線程應(yīng)保持多長時間以及緩降周期有多長。由于其緩降能力,步進線程組非常適合檢查系統(tǒng)恢復(fù)。

這個測試從我們知道服務(wù)器可以處理的 500 個線程開始。然后,我們將 JMeter 配置為每 30 秒增加 100 個線程。這樣,如果在達到我們的目標(biāo)之前出現(xiàn)問題,我們可以找出問題所在。我們將 1,000 個線程配置為運行 2 分鐘(120 秒)。要查看系統(tǒng)恢復(fù)情況,有一個減速期 - 每 10 秒將停止 50 個線程。
在壓力測試期間,一臺機器上可以運行的線程數(shù)是有限制的。但是有幾種簡單的方法可以增加這個數(shù)字。嘗試在非 gui 模式下運行 JMeter ,這在大量線程的情況下是必須的。我們還應(yīng)該避免在測試計劃中使用偵聽器,以進一步優(yōu)化測試運行。如果這些簡單的調(diào)整還不夠,請在多臺機器之間分配線程數(shù)。測試完成后可以生成結(jié)果。當(dāng)然,您也可以使用CA BlazeMeter,它類似于云中的 JMeter。
JMeter 將為我們提供 KPI,如響應(yīng)時間、吞吐量和錯誤率。此外,我們建議您也監(jiān)控服務(wù)器性能。CPU 使用率、內(nèi)存使用率、輸入/輸出和數(shù)據(jù)庫日志是確定系統(tǒng)瓶頸的有用參數(shù)。
壓力測試是確保您的系統(tǒng)在部署前沒有錯誤的重要方法。要了解有關(guān)負(fù)載測試的更多信息,請觀看有關(guān)在 60 分鐘內(nèi)開始使用 JMeter的免費網(wǎng)絡(luò)研討會,或觀看CA BlazeMeter 演示。