使用 自動化本機整合測試 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 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 。