View a markdown version of this page

常見問答集 - AWS 方案指引

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

常見問答集

我有一個 Lambda 函數,它可以執行計算並傳回結果,無需呼叫任何其他服務。我真的需要在雲端進行測試嗎?

是。 AWS Lambda 函數具有可能變更測試結果的組態參數。所有 Lambda 函數程式碼都依賴逾時和記憶體設定,如果未正確設定,可能會導致函數失敗。Lambda 政策也會向 Amazon CloudWatch 啟用標準輸出記錄。即使您的程式碼未直接呼叫 CloudWatch,也需要許可才能啟用記錄,而且無法準確模擬或模擬該許可。

雲端中的測試如何協助進行單元測試? 如果它位於雲端並連接到其他資源, 不是整合測試嗎?

我們將單元測試定義為獨立在架構元件上運行的測試。此定義不一定會排除使用服務呼叫或其他網路通訊。

許多無伺服器應用程式確實都具有可獨立進行測試的架構元件 (即使在雲端也是如此)。基本範例是 Lambda 函數,會接受一些輸入、解譯它,並將訊息傳送至 Amazon Simple Queue Service (Amazon SQS) 佇列。此類函數的單元測試可能會測試輸入值是否會導致某些值出現在佇列訊息之中。考慮使用安排、動作、宣告模式撰寫的測試:

  • 排列 – 配置資源 (接收訊息的佇列,以及測試中的函數)。

  • 動作 – 呼叫測試中的 函數。

  • Assert – 擷取函數傳送的訊息,並驗證輸出。

模擬物件測試方法包括使用正在進行的模擬物件來模擬佇列,以及建立含有 Lambda 函數程式碼的類別或模組的進行中執行個體。在宣告階段,佇列的訊息會從模擬物件擷取。

在雲端方法中,測試會針對測試目的建立 Amazon SQS 佇列,並透過設定為將隔離的 Amazon SQS佇列作為輸出目的地使用的環境變數來部署 Lambda 函數。執行 Lambda 函數後,測試會從 Amazon SQS 佇列擷取訊息。

雲端測試會執行相同的程式碼、宣告相同的行為,並驗證應用程式的功能正確性。不過,它還可以驗證 Lambda 函數 AWS Identity and Access Management 的下列設定:(IAM) 角色、IAM 政策,以及函數的逾時和記憶體設定。