与自动化测试集成 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

与自动化测试集成

您可以使用 sam local invoke 命令通过在本地运行 Lambda 函数来手动测试代码。借助 Amazon SAM CLI,在部署到 Amazon Cloud 之前,您可以先对本地 Lambda 函数运行测试,从而轻松编写自动集成测试。

sam local start-lambda 命令启动模拟 Amazon Lambda 调用端点的本地端点。您可以从自动测试中调用它。由于此端点模拟 Amazon Lambda 调用端点,因此您可以编写一次测试并针对本地 Lambda 函数或部署的 Lambda 函数运行测试(无需做任何修改)。您还可以针对您的 CI/CD 管道中部署的 Amazon SAM 堆栈运行相同的测试。

以下是此过程的工作原理:

  1. 启动本地 Lambda 端点。

    通过在包含您的 Amazon SAM 模板的目录中运行以下命令启动本地 Lambda 端点:

    sam local start-lambda

    此命令在 http://127.0.0.1:3001 处启动模拟 Amazon Lambda 的本地端点。您可以针对此本地 Lambda 端点运行自动测试。当您使用 Amazon CLI 或软件开发工具包调用此端点时,它将本地执行在请求中指定的 Lambda 函数并返回响应。

  2. 针对本地 Lambda 端点运行集成测试。

    在集成测试中,您可以使用 Amazon 软件开发工具包通过测试数据调用 Lambda 函数,等待响应,并验证响应是否符合您的预期。要本地运行集成测试,您应配置 Amazon 软件开发工具包以发送 Lambda Invoke API 调用,以调用上一步中启动的本地 Lambda 端点。

    以下是 Python 示例(适用于其他语言的 Amazon 软件开发工具包具有相似的配置):

    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=1, 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 函数。这会将 Amazon 软件开发工具包设置为连接到 Amazon Cloud 中的 Amazon Lambda。