本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 或软件开发工具包调用此端点时,它将本地执行在请求中指定的 Lambda 函数并返回响应。 -
针对本地 Lambda 端点运行集成测试。
在集成测试中,您可以使用 AWS 软件开发工具包通过测试数据调用 Lambda 函数,等待响应,并验证响应是否符合您的预期。要本地运行集成测试,您应配置 AWS 软件开发工具包以发送 Lambda Invoke API 调用,以调用上一步中启动的本地 Lambda 端点。
以下是 Python 示例(适用于其他语言的 AWS 软件开发工具包具有相似的配置):
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
设置为False
,使用此代码来测试已部署的 Lambda 函数。这会将 AWS 软件开发工具包设置为连接到 AWS Cloud 中的 AWS Lambda。