AWS 上的分散式負載測試的運作方式 - AWS 上的分散式負載測試

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

AWS 上的分散式負載測試的運作方式

下列詳細明細顯示執行測試案例所涉及的步驟。

測試工作流程

image3

  1. 您可以使用 Web 主控台,將包含組態詳細資訊的測試案例提交至解決方案的 API。

  2. 測試案例組態會以 JSON 檔案 () 的形式上傳至 Amazon Simple Storage Service (Amazon S3)s3://<bucket-name>/test-scenarios/<$TEST_ID>/<$TEST_ID>.json

  3. AWS Step Functions 狀態機器會使用測試 ID、任務計數、測試類型和檔案類型做為 AWS Step Functions 狀態機器輸入來執行。如果已排程測試,它會先建立 CloudWatch Events 規則,該規則會在指定的日期觸發 AWS Step Functions。如需排程工作流程的詳細資訊,請參閱本指南的測試排程工作流程一節。

  4. 組態詳細資訊會存放在案例 Amazon DynamoDB 資料表中。

  5. 在 AWS Step Functions 任務執行器工作流程中, task-status-checker AWS Lambda 函數會檢查 Amazon Elastic Container Service (Amazon ECS) 任務是否已針對相同的測試 ID 執行。如果發現具有相同測試 ID 的任務正在執行,則會導致錯誤。如果 AWS Fargate 叢集中沒有執行中的 Amazon ECS 任務,則函數會傳回測試 ID、任務計數和測試類型。

  6. 任務執行器 AWS Lambda 函數會從上一個步驟取得任務詳細資訊,並在 AWS Fargate 叢集中執行 Amazon ECS 工作者任務。Amazon ECS API 使用 RunTask 動作來執行工作者任務。這些工作者任務會啟動,然後等待領導者任務的開始訊息,以開始測試。RunTask 動作限制為每個定義 10 個任務。如果您的任務計數超過 10,任務定義會執行多次,直到所有工作者任務都啟動為止。函數也會產生字首,以區分結果剖析 AWS Lambda 函數中的目前測試。

  7. task-status-checker AWS Lambda 函數會檢查所有 Amazon ECS 工作者任務是否以相同的測試 ID 執行。如果任務仍在佈建,它會等待一分鐘並再次檢查。執行所有 Amazon ECS 任務後,它會傳回測試 ID、任務計數、測試類型、所有任務 IDs和字首,並將其傳遞給任務執行器函數。

  8. 任務執行器 AWS Lambda 函數會再次執行,這次啟動單一 Amazon ECS 任務以做為領導節點。此 ECS 任務會將啟動測試訊息傳送至每個工作者任務,以同時啟動測試。

  9. task-status-checker AWS Lambda 函數會再次檢查 Amazon ECS 任務是否以相同的測試 ID 執行。如果任務仍在執行中,它會等待一分鐘並再次檢查。一旦沒有執行中的 Amazon ECS 任務,它會傳回測試 ID、任務計數、測試類型和字首。

  10. 當任務執行器 AWS Lambda 函數在 AWS Fargate 叢集中執行 Amazon ECS 任務時,每個任務會從 Amazon S3 下載測試組態並開始測試。

  11. 測試執行後,Amazon CloudWatch 會記錄每個任務的平均回應時間、並行使用者數量、成功請求數量,以及失敗的請求數量,並且可以在 CloudWatch 儀表板中檢視。

  12. 如果您在測試中包含即時資料,解決方案會使用訂閱篩選條件在 CloudWatch 中篩選即時測試結果。然後,解決方案會將資料傳遞至 Lambda 函數。

  13. Lambda 函數接著會建構收到的資料,並將其發佈至 AWS IoT Core 主題。

  14. Web 主控台會訂閱測試的 AWS IoT Core 主題,並接收發佈至主題的資料,以在測試執行時繪製即時資料的圖表。

  15. 測試完成後,容器映像會將詳細報告匯出為 XML 檔案至 Amazon S3。每個檔案都會獲得檔案名稱的 UUID。例如,s3://dlte-bucket/test-scenarios/<$TEST_ID>/results/<$UUID>.json。

  16. 當 XML 檔案上傳至 Amazon S3 時,結果剖析器 AWS Lambda 函數會從字首開始讀取 XML 檔案中的結果,並剖析和彙總所有結果為一個摘要結果。

  17. 結果剖析器 AWS Lambda 函數會將彙總結果寫入 Amazon DynamoDB 資料表。