使用 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 或软件开发工具包调用此端点时,它将本地执行在请求中指定的 Lambda 函数并返回响应。

  2. 针对本地 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。