常見問答集 - AWS 方案指引

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

常見問答集

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

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

雲端中的測試如何協助進行單元測試? 如果測試在雲中進行且連接到其他資源,那這樣不就是整合測試嗎?

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

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

  • 準備:分配資源 (用於接收訊息的佇列和待測函數)。

  • 執行:呼叫待測函數。

  • 驗證:擷取函數發送的訊息,並驗證輸出。

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

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

雲端測試會執行相同的程式碼、驗證相同的行為,並驗證應用程式功能是否正確。不過,它具有能夠驗證 Lambda 函數設定的額外優勢:IAM 角色、IAM 政策以及函數的逾時和記憶體設定。