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

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

与自动化测试集成

您可以使用 sam local invoke 命令通过在本地运行 Lambda 函数来手动测试代码。借助 Amazon SAMCLI,您可以轻松地编写自动集成测试,方法是先对本地 Lambda 函数运行测试,然后再部署到云端。 Amazon

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 或 SDK 调用此终端节点时,它会在本地执行请求中指定的 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=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 函数。这将设置要在 Amazon 云端连接的 Amazon SDK。 Amazon Lambda