

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

# 使用自动执行本地集成测试 AWS SAM
<a name="serverless-sam-cli-using-automated-tests"></a>

虽然您可以使用[使用 sam local invoke 进行测试简介](using-sam-cli-local-invoke.md)手动测试代码，但 AWS SAM 也可以使用自动集成测试来测试代码。集成测试可帮助您在开发周期的早期发现问题，提高代码质量，节省时间，同时降低成本。

要在中创作自动集成测试 AWS SAM，您需要先对本地 Lambda 函数运行测试，然后再部署到云端。 AWS [使用 sam local start-lambda 进行测试简介](using-sam-cli-local-start-lambda.md) 命令启动模拟 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 函数并返回响应。

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

   在集成测试中，您可以使用 AWS 软件开发工具包调用带有测试数据的 Lambda 函数，等待响应，然后验证响应是否符合您的预期。要本地运行集成测试，您应配置 AWS 软件开发工具包以发送 Lambda Invoke 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` 设置为 `False`，使用此代码来测试已部署的 Lambda 函数。这将设置要在 AWS 云端连接的 AWS SDK。 AWS Lambda 