本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 自動化本機整合測試 AWS SAM
雖然您可以使用 使用 進行測試的簡介 sam local invoke 手動測試程式碼,但 AWS SAM 也可讓您使用自動化整合測試來測試程式碼。整合測試可協助您在開發週期早期偵測問題、改善程式碼品質,並節省時間,同時降低成本。
若要在 中編寫自動化整合測試 AWS SAM,您必須先針對本機 Lambda 函數執行測試,再部署至 AWS 雲端。使用 進行測試的簡介 sam local start-lambda 命令會啟動模擬 Lambda 調用端點的本機端點。您可以從自動化測試叫用它。由於此端點模擬 Lambda 調用端點,因此您可以撰寫測試一次,然後針對本機 Lambda 函數或部署的 Lambda 函數執行測試 (無需任何修改)。您也可以針對 CI/CD 管道中部署的 AWS SAM 堆疊執行相同的測試。
此程序的運作方式如下:
-
啟動本機 Lambda 端點。
在包含 AWS SAM 範本的目錄中執行下列命令,啟動本機 Lambda 端點:
sam local start-lambda
此命令會在
http://127.0.0.1:3001
模擬中啟動本機端點 AWS Lambda。您可以針對此本機 Lambda 端點執行自動化測試。當您使用 AWS CLI 或 SDK 叫用此端點時,它會在本機執行請求中指定的 Lambda 函數,並傳回回應。 -
針對本機 Lambda 端點執行整合測試。
在整合測試中,您可以使用 AWS SDK 來使用測試資料叫用 Lambda 函數、等待回應,並確認回應符合您的期望。若要在本機執行整合測試,您應該設定 AWS SDK 以傳送 Lambda 調用 API 呼叫,以調用您在上一個步驟中啟動的本機 Lambda 端點。
以下是 Python 範例 (其他語言的 AWS SDKs具有類似的組態):
import boto3 import botocore # Set "running_locally" flag if you are running the integration test locally running_locally = True if running_locally: # Create Lambda SDK client to connect to appropriate Lambda endpoint lambda_client = boto3.client('lambda', region_name="us-west-2", endpoint_url="http://127.0.0.1:3001", use_ssl=False, verify=False, config=botocore.client.Config( signature_version=botocore.UNSIGNED, read_timeout=15, retries={'max_attempts': 0}, ) ) else: lambda_client = boto3.client('lambda') # Invoke your Lambda function as you normally usually do. The function will run # locally if it is configured to do so response = lambda_client.invoke(FunctionName="HelloWorldFunction") # Verify the response assert response == "Hello World"
您可以使用此程式碼,透過將
running_locally
設定為 來測試部署的 Lambda 函數False
。這會將 AWS SDK 設定為在 AWS 雲端中連線至 AWS Lambda 。