使用 Azure Load Testing 和 Apache JMeter 腳本來進行負載測試

  • 627
  • 0

前言

在微軟公告停止 Azure DevOps 上的負載測試服務之後,在 Azure 上要進行負載測試就得透過第三方服務或是自行架設 VM 來進行測試,終於微軟推出專用的服務 Azure Load Testing,可以讓我們透過定義好的 JMeter 腳本來進行負載測試,本文就來介紹要如何進行設定和測試,以及服務的費用說明。

說明

測試前準備

首先先來準備測試網站和 JMeter 腳本。

簡單的建立一個 .NET 6 MVC 站台,提供了 4 個不同情境的頁面,建立好之後就部署到 App Service 上,之後就可以配合 Load Testing 服務檢視更多報告。

  • 正常頁面:Index
  • 404 頁面:PageNotFound
  • 500 頁面:StatusInternalServerError
  • 回應緩慢頁面:SlowPage
public IActionResult Index()
{
    return View();
}

[Route("404")]
public IActionResult PageNotFound()
{
    return NotFound();
}

[Route("500")]
public IActionResult StatusInternalServerError()
{
    return StatusCode(500);
}

[Route("SlowPage")]
public IActionResult SlowPage()
{
    Thread.Sleep(5000);
    return Content("Slow Page!");
}

再來是建立 JMeter 腳本,首先先定義參數,這邊僅定義網址當作參數,值則是設定成 ${__BeanShell( System.getenv("webapp") )} 之後就會去讀取環境變數。

接下來設定 Thread Group 模擬 5 個使用者來執行負載測試。

再來分別新增四個 HTTP Request 對應到前面建立的站台頁面網址,網址部分則是使用我們設定的參數值:${webappurl},下圖僅示意一組設定,其餘依此類推。

四組都設定好之後就可以存檔,站台原始碼和完整腳本可以到 GitHub 下載。

建立和執行負載測試

搜尋 Azure Load Testing 可以找到服務來建立。

一樣輸入基本資料就可以把服務建立來了。

建立好之後需要先設定使用者 IAM 角色指派,需要設定成負載測試擁有者 (Load Test Owner) 或負載測試參與者 (Load Test Contributor) 才可以在後面進行測試案例的建立。

接下來點到 Tests 頁籤來建立 Test 案例。

輸入基本資料,這邊預設會建立之後就執行,因為後面還有要設定的項目,所以先取消勾選。

選擇前面建立的 JMEter 測試案例並上傳。

再來輸入環境變數,因為前面有特別把網址部分抽成環境變數,所以這邊就可以輸入網址參數,輸入的是前面站台部署的 App Service 網址。

再來設定執行個體,每一個代表一個虛擬使用者,然後再乘上我們腳本設定的執行緒個數,假設要同時間模擬 10 個使用者,就是設定成 2,乘上我們設定的執行緒 5,就可以模擬出同時間 10 個使用者了,而 JMX 執行緒個數最大值則是 250。

再來是測試的標準,目前共有兩個指標可以設定,分別是 Response timeError

Monitoring 則是可以設定相關連的 Azure 服務來進行監控,之後再進行測試的時候就可以在報告上面看到測試時間內相關服務的監視狀態,這邊我把測試的 App Service 加入。

都設定好就可以建立了,建立好之後點開測試案例進行最後的設定,假設還有要修改的部分可以點開 Configure 來進行設定,這邊點選 Metrics 來設定等等要看到的監視狀態。

因為前面有設定 App Service,所以預設就會帶出一些指標可以察看。

最後就是執行測試了。

檢視測試報告

執行完成之後就可以點進測試報告來察看,也可以在執行的時候就點選進去,可以看到即時的執行狀態和服務的監控狀態。這邊就可以看到測試結果,因為有故意模擬 404 和 500 錯誤,所以 Error 指標就很自然的超過標準值 5%,Response time 則是因為其它頁面回應較快,所以模擬的 SlowPage 就被平均稀釋了,指標就有通過測試。

另外特別提的一點是 Additional insights,如果監視的服務有對應的資訊就可以點選進去察看更多服務相關的狀態指標。以我的範例來說就可以察看 App Service 的更多效能相關資訊。

再來就分做兩個區塊的監控值,一個是 Client-side,就會分別呈現每一個測試案例的狀態。

另一個則是 Azure 服務的監控狀態,就是前面設定的項目。

如果有多份報告,還可以進行結果比對。就可以在遞一次報告之後進行系統調整之後,再進行一次測試,看結果是否有改善了。

費用

再來是費用部分,基本月費是每個月 10 美金 (約 277.990 台幣),其中包含 50 個虛擬使用者時數,超過的部分另外計費。

至於什麼是虛擬使用者時數,根據官方說明,計算方式如下:

如果以我們測試報告的範例來看,就是 4 (虛擬使用者數) * 1.98 (模擬的持續時間) / 60 = 0.132 (虛擬使用者時數)。

結論

微軟終於又重新推出雲端版的負載測試,並且提供了更多 Azure 的整合,在測試的時候也可以順便監視 Azure 服務的狀態,更方便我們找出系統的瓶頸點,再配合比對測試報告的功能就可以在改善之後比對是否有改善效能了,目前服務還在預覽階段,但是基本功能已經算很完整了,配合蠻多人使用的 JMeter 腳本,就可以很快速的把原本的測試案例,改用 Azure Load Testing 進行測試了,就不用另外準備 VM 來執行。

參考資料