本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自動執行本機整合測試 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 SDK 具有類似的配置):
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 中連線。