自動執行本機整合測試 AWS SAM - AWS Serverless Application Model

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

自動執行本機整合測試 AWS SAM

雖然您可以用使用 進行測試的簡介 sam local invoke來手動測試程式碼,但 AWS SAM 也可讓您使用自動化整合測試來測試程式碼。整合測試可協助您在開發週期的早期偵測問題、改善程式碼品質,並節省時間,同時降低成本。

若要在中編寫自動化整合測試 AWS SAM,您必須先對本機 Lambda 函數執行測試,然後再部署到 AWS 雲端。命使用 進行測試的簡介 sam local start-lambda令會啟動模擬 Lambda 叫用端點的本機端點。您可以從自動化測試中調用它。由於此端點會模擬 Lambda 叫用端點,因此您可以撰寫一次測試,然後針對本機 Lambda 函數或已部署的 Lambda 函數執行測試 (不進行任何修改)。您也可以針對 CI/CD 管道中已部署的 AWS SAM 堆疊執行相同的測試。

這是該過程的工作原理:

  1. 啟動本機 Lambda 端點。

    在包含 AWS SAM 範本的目錄中執行下列命令,以啟動本機 Lambda 端點:

    sam local start-lambda

    此命令會在該端點處啟動模擬http://127.0.0.1:3001 AWS Lambda的本機端點。您可以對這個本機 Lambda 端點執行自動化測試。當您使用 AWS CLI 或 SDK 叫用此端點時,它會在本機執行要求中指定的 Lambda 函數,並傳回回應。

  2. 針對本機 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 中連線。