

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 自動化本機整合測試 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 SDK 來使用測試資料叫用 Lambda 函數、等待回應，並確認回應是您所預期的。若要在本機執行整合測試，您應該設定 AWS SDK 傳送 Lambda 調用 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`設定為 來測試已部署的 Lambda 函數`False`。這會將 AWS SDK 設定為在 AWS 雲端中連線至 AWS Lambda 。