使用雲端負載測試進行私人/內部網路應用程式的測試

雲端負載測試服務 可以用來進行應用程式的效能與規模測試,透過從 Azure 產生負載。這種負載的產生方式只可以點擊/產生負載在有網路/公開存取的應用程式。但我們常常遇到客戶需要負載測試他們的應用程式,但它並不是可公開存取的。原因可能有很多,我們列出一些在下面:

  1. 測試僅內部使用的應用程式 – 很多大型的機構會有一些應用程式/網頁是必須要滿足整個機構的需求。
  2. 發佈到網際網路前在內部測試應用程式 – 在實際要發佈之前,機構會想要確定,並沒有性能故障或是網站因為龐大流量而承受不住的問題。

為了要提供上述情況的支援,我們正努力開發一個功能,讓使用者可以進行負載測試在他們的內部/ABF(application behind firewall)應用程式。在說解法之前,讓我們引導您走完下面的流程圖,以找到最佳量身訂製的解決方法根據您的需求。您就可以閱讀特定的解決方法(1-6)並嘗試看看。

loadtest-1

  1. 使用預設路徑,CLT 將會自動佈建代理程式。 這是對有公開端點的應用程式使用 CLT 進行負載測試的預設情節。負載測試服務將會自動佈建負載代理程式(在 Azure)來模擬使用者負載。參考這裡來取得更詳細的 CLT 使用方式。
  2. 使用 ARM 範本來部署您自己的負載代理程式。 #1 解決方法佈建代理程式在 CLT 服務界限裡而使用者並不能擁有控制權。如果您希望可以控制(存取)負載生成的代理程式為了任何自訂的需求,您可以自己使用 ARM 範本來部署它們在您的 Azure 訂閱帳戶。這些機器將會取得 CLT 註冊可以產生負載。更多相關資訊可以在文章後面的部分看到。
  3. 使用 ARM 範本來部署負載代理程式在 VNet 如果被測應用程式(AuT)是在 Azure VNet 中或有一個 ExpressRoute 介於應用程式私有網路與 Azure,您可以使用一個預設的 ARM 範本部署 IaaS 虛擬機在 Azure 在特定的 VNet 來充當負載代理程式。機器將會佈建在您的 Azure 訂閱帳戶並針對您的 VSTS 帳戶註冊。您建立這些機器的 VNet 必須能看的到應用程式,使得負載生成器有辦法觸及這個程式。更多相關資訊可以在文章後面的部分看到。
  4. 使用 ARM 範本以靜態 IP 部署負載代理程式。 如果您沒有使用 ExpressRoute 連結而想要在本地測試應用程式,您可以使用 ARM 範本來部署 IaaS 虛擬機在 Azure 充當負載代理程式。選擇您在防火牆中允許通行的靜態 IP 來建立這些虛擬機,這樣必要的負載就可以生成。機器將會部署在您的 Azure 訂閱帳戶並針對您的 VSTS 帳戶註冊。更多相關資訊可以在文章後面的部分看到。
  5. 使用雲端負載代理程式在您的設備上。 我們也想出了一個簡單的 PowerShell 腳本,可以幫助您配置實體或虛擬機器來作為負載代理程式。這些機器將會針對您的 VSTS 帳號註冊來生成負載。您可以了解更多在另一則使用雲端負載代理程式在您的基礎建設上
  6. 使用 Test Controller/Test Agents 來進行本地測試在您的設備。 如果您想要在本地測試應用程式,但遇到一些限制,像是因為一些原因沒辦法儲存結果在雲端(又或者說,遵守法規)您可以使用 Test Controller / Test Agents 來進行負載測試。這需要您使用您自己的設備來產生負載,而結果將會儲存在 SQL 伺服器。您可以在這裡取得更多資訊。

那現在我們就針對 #2、#3、#4 來進行更深入的討論。

這部分將會詳細告訴您如何使用 Azure IaaS 虛擬機佈建負載代理程式。使用者必須有 Azure 訂閱帳戶,IaaS 虛擬機與相關的資源將會佈建在此。而這在下面這兩個例子中很有用:

  1. 您想要測試私人的應用程式,是無法透過 CLT/internet 存取的。
  2. 自備您的訂閱帳戶(BYOS - 您有自己的 Azure 訂閱帳戶,而想要利用它進行負載測試。您也可以使用 Azure 免費額度,如果您有的話。

Azure 提供了一個優勢因為使用者可以分佈他們的負載測試到不同的地理位置,而這些日子裡我們已經看到有很多顧客對於此非常有興趣。

 

使用 ARM 範本來部署負載代理程式在 VNet

下面是一個簡單的拓樸,負載代理程式出現在使用者的 VNet 下,因此將會看的到應用程式。我們已經發佈一個 ARM 範本到 GitHub 上,來幫助使用者更簡單快速地佈建機器。

loadtest-2

而這方法要可行,使用者必須有一個現存的 VNet 如同上面所述。VNet 識別需要它的資源群組名稱。如果您希望使用一個現存的子網路,您也應該要有這些資訊。

要部署這樣的 rig,我們要發佈一個 ARM 範本。您可以點擊下列的連結來自動地載入 ARM 範本到 Azure 管理入口網站。

佈建負載代理程式在現存的配備

一旦您點擊它,它將會載入範本在 Azure 入口網站,而您將會看到下面的畫面。使用者可以填入參數並可以根據需求選擇訂閱帳戶/資源群組/位置。

loadtest-3

如果您希望更深入鑽研這個範本,並根據您的需求來修改它,您可以到下面的 github repo 來查看它:

https://github.com/Azure/azure-quickstart-templates/tree/master/201-vsts-cloudloadtest-rig-existing-vnet

 

使用 ARM 範本以靜態 IP 佈建負載代理程式

我們有發行了另一個 ARM 的範本,而使用者不需要有一個現存的 VNet。這可以用於以下兩個目的:

  1. 如果您在 Azure 沒有 ExpressRoute,但想要使用他自己的訂閱帳戶進行負載測試,您可以使用這個 ARM 範本,它用它自己的 VNet 部署了一個 rig。如果您需要測試私人應用程式,您可以以靜態 IP 部署配備(提供作為一個選項),在防火牆中開一個洞,只給這些 IP(s) 一條路徑是留給負載代理程式。
  2. 如果您想要取得負載生成代理程式的控制(因為 CLT 自動佈建代理程式不能被使用者存取)。您可以選擇讓這些虛擬機有靜態/動態 IP。

要充分利用這一點,只需要點擊下面的連結來載入 ARM 範本在 Azure 管理入口網站。

佈建負載代理程式在一個新的 VNet

以下是這個 ARM 範本的 Github repo 連結:

https://github.com/Azure/azure-quickstart-templates/tree/master/101-vsts-cloudloadtest-rig

一旦您部署虛擬機,可能需要 10-15 分鐘來讓機器配置 CLT 並準備好進行負載測試。負載測試在這些代理程式執行完畢前,CLT 將不會消耗 VUM (虛擬使用者分鐘數),但使用者要承擔他訂閱帳戶消耗 Azure 資源的費用。

在 ARM 範本我們設定機器大小為「Standard_D4_V2」。這個大小的機器有 8 個 CPU 核心與 28GB 的記憶體。使用者可以修改範本來更改這些值。參考這裡來了解更多有關 Azure 機器大小與功能。

 

如何使用負載代理程式佇列一個執行

我們正努力讓我們的產品有一流的體驗。到時候使用者可以佇列一個執行在這些機器,透過一個特定的內容參數在 Visual Studio 負載測試檔。

內容參數名稱UseStaticLoadAgents

內容參數值true

在 Visual Studio 中,它看起來會像下面這樣:

loadtest-4

使用者可以設定要用來進行負載測試的機器數量,透過 Agent core count 屬性在 Run Settings 中。在使用者自己的負載代理程式情境,每一個 core 都被當作是一台單一的機器。如同下圖,5 個機器將會用來執行。

loadtest-5

執行完畢在使用者自己的負載代理程式機器並不會收費。使用者應該從狀態訊息中來確認這個。

loadtest-6

在您做之前,我們會建議您先看看下面的 FAQ。

 

如何知道已配置的 CLT 機器

要檢查配置在 VSTS 帳號下的機器狀態,使用者可以從下面的連結下載一個基本的腳本 GetStaticMachines.ps1。

下載 powershell 腳本來列出註冊的機器

下載之後,請確定您解鎖這個檔案。

loadtest-7

以下是強制參數:

  1. TeamServicesAccountName:這是您想要用來配置機器的 VSTS 帳號名稱。使用只需要在這裡填上帳號名稱,例如,請在這裡填上 "xyz",如果您的 VSTS 帳號網址是 https://xyz.visualstudio.com
  2. PATToken:這需要用來認證。一個人必須先取得 VSTS 帳號的 PAT token。您可以依照這篇文來取得它。範圍應選擇為「Load Test(read and write)」。

範例

.\GetStaticMachines.ps1 -TeamServicesAccountName xyz -PATToken zzdw6bnzk2q73qsqxukmfonzycscdgmsl2quhqo24so7hrplctcq

範例輸出

Account Uri – https://xyz.vsclt.visualstudio.com

 

machineName status lastHeartBeat

 

———– —— ————-

 

DDDSINGHAL016 Free 2016-04-26T12:41:00.6548647Z

 

DDDSINGHAL017 Free 2016-04-26T12:40:59.5005437Z

 

有了這個使用者就可以了解他配置來執行負載測試的機器狀態。

 

常見問題

  1. 負載代理程式如何與 CLT 溝通呢? 負載代理程式將會透過 HTTP 協定來與 CLT 溝通。因為這些機器/虛擬機是在使用者私人網路(Azure/on-prem)內,所以它們可以很容易接觸到被測應用程式(AuT)。結果會發佈回 CLT 服務,分析發生的行為會和其他在 CLT 中執行的負載測試的方式行為相同。
  2. 我將如何被收取費用? 目前這個功能是在預覽模式,您將不會因為您部署負載代理程式在您的內部機器或在您的 Azure 訂閱帳戶,而被收取負載測試 VUM 的費用。然而您將會被收取 Azure 虛擬機的費用。
  3. 我可以用這些機器來做其他事嗎? 這些機器可以用來做其他事,但是建議在執行負載測試時不要做其他任何事。
  4. 我可以關掉我佈建負載測試代理程式的機器嗎? 可以,只要機器沒有在使用就可以關掉。一旦機器開啟,負載代理程式服務將會自動地開始來接收 CLT 的指令。如果您用 Azure ARM 模板來佈建這些代理程式,您可以隨意開啟/關閉這些虛擬機。您也可以做到這個透過 powershell 腳本,參考下面的連結來了解更多https://gallery.technet.microsoft.com/scriptcenter/Stop-All-VMs-in-Specified-40c8531e。也建議您刪除 Azure 資源群組一旦您做完了負載測試。您應該可以隨時重新建立它們如果您需要的話。https://azure.microsoft.com/en-in/documentation/articles/resource-group-portal/
  5. 我有 proxy 設定在我的機器上,這樣可以嗎? 我們只支援預設 proxy 情境,即當 proxy 設定是透過 IE 控制,它使用目前用戶的認證來連結 proxy 伺服器。在其他情況下,請與我們聯絡。

有了這些您應該有辦法可以試試負載測試了。如果您有任何疑問,歡迎聯繫我們 vsoloadtest@microsoft.com

負載測試愉快! :)

 

本文翻譯自 Testing private/intranet applications using Cloud-based load testing


若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922