View a markdown version of this page

建立測試案例 - AWS 上的分散式負載測試

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立測試案例

建立測試案例包含四個主要步驟:設定一般設定、定義案例、塑造流量模式,以及檢閱您的組態。

步驟 1:一般設定

為您的負載測試設定基本參數,包括測試名稱、描述和一般組態選項。

測試識別

  • 測試名稱 (必要) - 測試案例的描述性名稱

  • 測試描述 (必要) - 測試用途和組態的其他詳細資訊

  • 標籤 (選用) - 新增最多 5 個標籤來分類和組織您的測試案例

排程選項

設定測試應執行的時間:

  • 立即執行 - 建立後立即執行測試。

  • 執行一次 - 排定在特定日期和時間執行測試。

  • 在排程上執行 - 使用以 Cron 為基礎的排程,定期自動執行測試。您可以從常見模式 (每小時、每日、每週) 中選取,或定義自訂 Cron 表達式。如需接受 Cron 格式、支援模式和限制條件的詳細資訊,請參閱《 開發人員指南》中的 Cron 表達式參考。

排程工作流程

當您排程測試時,會發生下列工作流程:

  • 排程參數會透過 Amazon API Gateway 傳送至解決方案的 API。

  • API 會將參數傳遞至 Lambda 函數,該函數會建立設定為在指定日期執行的 Amazon EventBridge 排程器排程。

  • 對於一次性測試 (執行一次),EventBridge 排程器排程會在指定的日期和時間叫用 api-services Lambda 函數,以執行測試。

  • 對於週期性測試 (在排程上執行),EventBridge 排程器排程會立即根據 Cron 或 Rate 表達式定義的節奏叫用 api-services Lambda 函數,直到過期日期為止。

即時資料

選取包含即時資料核取方塊,以在測試執行時檢視即時指標。啟用時,您可以監控:

  • 平均回應時間。

  • 虛擬使用者計數。

  • 成功的請求計數。

  • 失敗的請求計數。

即時資料功能提供即時圖表,並以一秒的間隔彙總資料。如需詳細資訊,請參閱使用即時資料進行監控。

步驟 2:案例組態

定義特定測試案例,然後選取您偏好的測試架構。

測試類型選擇

選擇您要執行的負載測試類型:

  • 簡易 HTTP 端點 - 使用簡易組態測試單一 API 端點或網頁。

  • JMeter - 上傳 JMeter 測試指令碼 (.jmx 檔案或 .zip 封存檔)。

  • k6 - 上傳 k6 測試指令碼 (.js 檔案或 .zip 封存檔)。

  • Locust - 上傳 Locust 測試指令碼 (.py 檔案或 .zip 封存檔)。

注意

這四種測試類型都依賴第三方元件。解決方案會透過 Taurus 測試自動化架構執行測試,該架構會根據測試類型執行 JMeter、k6 或 Locust;Simple HTTP 端點測試會轉換為 JMeter 測試計劃,並由綁定的 Apache JMeter 執行。建立測試之前,請檢閱第三方測試架構,了解安全性考量、授權資訊和修補選項。

流量形狀模式

選擇測試產生的負載控制端。您選取的模式會變更主控台在步驟 3:流量形狀中顯示的欄位。

  • 標準 - 解決方案控制負載。您可以設定虛擬使用者、漸進測試期間和保留持續時間。標準是預設值,是唯一支援 Simple HTTP 端點測試的模式。

  • 原生 - 您的指令碼控制負載。解決方案會在測試架構自己的命令列下執行指令碼,並只設定每個區域的任務計數和安全性持續時間。

原生 需要上傳的指令碼,因此您無法在選擇 Simple HTTP 端點測試類型時選取它。如需選擇何種模式的完整定義和指引,請參閱流量形狀模式。

HTTP 端點組態

選取「簡單 HTTP 端點」時,解決方案會從組態產生 JMeter 測試計畫,並使用綁定的 Apache JMeter 二進位檔執行。設定下列設定:

HTTP 端點 (必要)

輸入您要測試的端點的完整 URL。例如 https://api.example.com/users。確保可從 AWS 基礎設施存取端點。

HTTP 方法 (必要)

選取請求的 HTTP 方法。預設值為 GET。其他選項包括 POST、PUT、DELETE、HEAD、 PATCH和 OPTIONS。

請求標頭 (選用)

將自訂 HTTP 標頭新增至您的請求。常見的範例包括:

  • Content-Type: application/json

  • Authorization: Bearer <token>

  • User-Agent: LoadTest/1.0

    選擇新增標頭以包含多個標頭。

內文承載 (選用)

新增 POST 或 PUT 請求的請求內文內容。支援 JSON、XML 或純文字格式。例如:{"userId": 123, "action": "test"}。

測試架構指令碼

使用 JMeter、k6 或 Locust 時,請上傳您的測試指令碼檔案或包含測試指令碼和支援檔案的 .zip 封存檔。

對於 JMeter,您可以在 .zip 封存檔的/plugins資料夾中包含自訂外掛程式。

對於 Locust,.zip 封存中的測試指令碼必須命名為 locustfile.py。若要在執行時間將第三方 Python 套件安裝到容器中,請在封存中包含 requirements.txt 檔案,以及選擇性的 wheel 檔案packages子目錄,以在沒有網際網路存取的情況下安裝它們。如需詳細資訊,請參閱 Locust 測試。

重要

在標準模式中, 解決方案會控制載入並覆寫指令碼宣告的內容。您的測試指令碼 (JMeter、k6 或 Locust) 可以定義並行 (虛擬使用者)、交易速率 (TPS)、漸進測試時間和其他負載參數。解決方案會改為套用您在流量形狀畫面中指定的值。該組態控制測試執行的任務計數、並行 (每個任務的虛擬使用者)、漸進測試持續時間和保留持續時間。

在原生模式中,您的指令碼會控制負載,且解決方案不會將負載參數傳遞至架構。如需這兩種模式之間的差異,請參閱流量形狀模式。

安全持續時間 (原生模式)

當您選取原生模式時,主控台會在指令碼上傳的同時顯示安全持續時間欄位。預設值為 4 小時,上限為 24 小時。

在原生模式中,安全持續時間會結束執行時間超過您預期的測試,因為您的指令碼會決定執行完成的時間。它是護衛,而不是排程。如果測試在持續時間過後仍在執行,解決方案會停止測試架構。它會保留執行部分的結果,並將執行記錄為完成而非失敗。將其設定為您預期指令碼需要的最長執行。

步驟 3:流量形狀

設定測試期間流量的分佈方式,包括多區域支援。

流量形狀模式

解決方案提供兩種流量形狀模式:標準和原生。它們在哪個端控制負載不同:解決方案或您上傳的指令碼。您可以在步驟 2:案例組態中選取 模式,並決定下列哪些欄位適用。

注意

原生模式是 4.3.0 版的預覽功能。標準模式是預設值,也是解決方案一直使用的行為。

標準

標準模式可讓解決方案控制負載。您可以設定每個區域的 Fargate 任務數量、每個任務的並行虛擬使用者、漸進測試期間和保留持續時間。解決方案會透過 Taurus 自動化架構執行您的測試,這些架構會將這些值轉譯為基礎架構本身的負載控制。Taurus 優先於指令碼宣告的任何載入,因此會重寫或忽略 k6 選項區塊LoadTestShape、Locust 或 JMeter 執行緒群組。區域的虛擬使用者是任務計數乘以每個任務的並行,形狀與您選擇的任何架構相同。這是每個測試在 4.3.0 版之前執行的方式,因此先前建立的案例會保持完全的行為,而且不需要變更。

當載入形狀屬於指令碼之外、從主控台、CLI 或代理程式設定時,選擇標準。標準是唯一一種模式,可讓您設定確切的虛擬使用者計數,並在不接觸指令碼的情況下變更漸進和保持形狀。只有標準支援 Simple HTTP 端點類型,其中解決方案會為您產生測試計劃。典型用途:容量檢查步進 500 到 5,000 個虛擬使用者、夜間迴歸保留 1,000 個使用者 10 分鐘,或任何需要相同漸進測試的比較。其限制為表達性。任何 Taurus 不能代表的項目都在此處不可用,包括多個加權案例、每個階段閾值和到達率執行器。

原生

原生模式可讓您的指令碼控制載入。解決方案會在架構自己的命令列下執行您上傳的檔案:k6 run、 jmeter -n -t或 locust --headless。它不會傳遞載入旗標,因此您的指令碼是它產生的流量的唯一授權,而且解決方案永遠不會將其重寫。剩下兩個控制項:每個區域要啟動的 Fargate 任務數量,以及長達 24 小時的必要安全持續時間。安全持續時間是防範從未結束的指令碼,而不是排程。如果測試在持續時間過後仍在執行中,解決方案會停止架構、收集執行部分的結果,並將執行記錄為完成而非失敗。每個任務會以獨立架構程序執行,任務之間沒有協調,因此區域會為每個任務產生指令碼宣告負載的完整副本。例如,擁有 200 個虛擬使用者的 k6 指令碼,在 5 個任務上執行,將 1,000 個虛擬使用者放在目標上。因此,任務計數是 Native 為您提供的唯一負載控制,而且它會以指令碼宣告的所有倍數移動。變更漸進測試、保留時間或虛擬使用者計數本身意味著編輯指令碼。

當您想要完全依照撰寫的方式執行指令碼時,請選擇原生。已在本機或 CI 中執行的指令碼在解決方案上執行不變,這是原生連線的主要原因。原生會保留架構可表達的所有內容:k6 案例、階段和閾值;Locust LoadTestShape類別和加權任務集;JMeter 計時器和執行緒群組。當負載形狀是測試意義的一部分時,請挑選它,而重製它比從外部轉向它更重要。典型用途:從管道重複使用 k6 指令碼而不重寫、spike-then-recover 設定檔,或單一並行號碼無法表達的加權案例。遵循兩個限制條件,以撰寫的方式執行架構。原生 需要上傳的指令碼,因此無法使用 Simple HTTP 端點。Locust 指令碼不得設定 processes,因為只有在 Locust 作為單一程序執行時,解決方案才會計算請求。

選擇模式

如果您需要 選擇

確切的虛擬使用者計數,從指令碼外部設定

標準

若要變更漸進測試或保留時間而不編輯指令碼

標準

完全沒有指令碼的單一 URL

標準

無論架構為何,相同的負載形狀

標準

重複使用 CI 或本機指令碼不變

原生

指令碼自己的階段、閾值或遵守的形狀

原生

k6 案例、閾值或到達率執行器

原生

Locust LoadTestShape或加權任務集

原生

JMeter 計時器和執行緒群組的執行完全相同

原生

僅在指令碼自身負載的整個倍數中擴展負載

原生

多區域流量組態

選取一或多個 AWS 區域,以依地理分佈負載測試。針對每個選取的區域,設定:

任務計數

針對測試案例,將在 Fargate 叢集中啟動的容器 (任務) 數量。一旦帳戶達到「遠的資源」限制,就不會建立其他任務。任務計數適用於這兩種流量形狀模式。在原生模式下,它是主控台提供的唯一負載控制,因為每個任務都會執行指令碼的完整副本。

並行數量

每個任務產生的並行虛擬使用者數量。建議的限制是根據每個任務 2 個 vCPUs的預設設定。並行受限於 CPU 和記憶體資源。此欄位僅適用於標準模式。在原生模式中,主控台會為每個區域顯示「由指令碼定義」的唯讀值,因為您的指令碼會設定自己的虛擬使用者計數。

判斷使用者數量

透過逐漸增加使用者數量並在 Amazon CloudWatch 中監控效能,可以判斷容器可支援用於測試的使用者數量。一旦發現 CPU 和記憶體效能接近其限制,您已達到容器在其預設組態 (2 個 vCPU 和 4 GB 記憶體) 中可支援該測試的最大使用者數量。

此校正會設定並行值,因此會套用至標準模式。其建立的容器限制也適用於原生模式。您可以在此提高或降低指令碼宣告的負載,而不是設定並行欄位。

校正程序

您可以使用下列範例,開始判斷測試的並行使用者限制:

  1. 建立不超過 200 個使用者的測試。

  2. 測試執行時,請使用 CloudWatch 主控台監控 CPU 和記憶體:

    1. 在導覽窗格中的容器洞見下,選取效能監控。

    2. 在效能監控頁面的左側下拉式選單中,選取 ECS 叢集。

    3. 從右側下拉式選單中,選取您的 Amazon Elastic Container Service (Amazon ECS) 叢集。

  3. 監控時,請監看 CPU 和記憶體。如果 CPU 未超過 75% 或記憶體未超過 85% (忽略一次性峰值),您可以對更多使用者執行另一個測試。

如果測試未超過資源限制,請重複步驟 1-3。或者,您可以增加容器資源,以允許更多並行使用者。不過,這會產生較高的成本。如需詳細資訊,請參閱 開發人員指南。

注意

為了獲得準確的結果,在確定並行使用者限制時,一次只執行一個測試。所有測試都使用相同的叢集,CloudWatch 容器洞察會根據叢集彙總效能資料。這會導致這兩個測試同時向 CloudWatch Container Insights 報告,這會導致單一測試的資源使用率指標不準確。

如需校正每個引擎使用者的詳細資訊,請參閱 BlazeMeter 文件中的校正 Taurus 測試。

注意

解決方案會顯示每個區域的可用容量資訊,協助您在可用限制內規劃測試組態。

可用任務的資料表

可用任務表會顯示每個所選區域的資源可用性:

  • 區域 - AWS 區域名稱。

  • 每個任務vCPUs - 分配給每個任務CPUs 數量 (預設值:2)。

  • DLT 任務限制 - 根據帳戶的 Fargate 隨需 vCPU 配額可建立的任務數量上限。新帳戶的配額通常較低;請在 Service Quotas 主控台中驗證您目前的限制,並視需要請求提高配額。

  • 可用的 DLT 任務 - 區域中目前可用的任務數量,計算方式為您的 DLT 任務限制減去執行 Fargate 任務已在使用的 vCPUs。

若要增加每個任務的可用任務或 vCPUs 數量,請參閱 開發人員指南。

測試持續時間

定義您的負載測試將執行多久。主控台只會以標準模式顯示本節。在原生模式中,您的指令碼會決定測試執行的時間長度,以您在步驟 2:案例組態中設定的安全持續時間為限。

漸進測試

達到目標並行的時間。在此期間,負載會從 0 逐漸增加到設定的並行層級。

保留

維持目標負載的持續時間。測試會在此期間以完整並行狀態繼續。

步驟 4:檢閱和建立

在建立測試案例之前,請先檢閱您的所有組態。驗證:

  • 一般設定 (名稱、描述、排程)。

  • 案例組態 (測試類型、端點或指令碼)。

  • 流量形狀 (模式、任務、使用者、持續時間、區域)。

檢閱後,選擇建立以儲存您的測試案例。

管理測試案例

建立測試案例後,您可以:

  • 編輯 - 修改測試組態。常用案例包括:

    • 精簡流量形狀以達到所需的交易速率。

  • 複製 - 複製現有的測試案例以建立變化。常用案例包括:

    • 更新端點或新增標頭/內文參數。

    • 新增或修改測試指令碼。

  • 刪除 - 移除您不再需要的測試案例。