AWS SAM에서 로컬 통합 테스트 자동화 - AWS Serverless Application Model

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SAM에서 로컬 통합 테스트 자동화

sam local invoke를 사용한 테스트 소개 섹션에 따라 코드를 수동으로 테스트할 수 있지만 AWS SAM에서는 자동 통합 테스트를 사용하여 코드를 테스트할 수도 있습니다. 통합 테스트를 사용하면 개발 주기 초기에 문제를 감지하고, 코드 품질을 개선하고, 시간을 절약하면서 비용을 절감할 수 있습니다.

AWS SAM에서 자동 통합 테스트를 작성하려면 AWS 클라우드에 배포하기 전에 먼저 로컬 Lambda 함수에 대해 테스트를 실행합니다. sam local start-lambda를 사용한 테스트 소개 명령은 Lambda 간접 호출 엔드포인트를 에뮬레이션하는 로컬 엔드포인트를 시작합니다. 자동화된 테스트에서 이를 간접 호출할 수 있습니다. 이 엔드포인트는 Lambda 간접 호출 엔드포인트를 에뮬레이션하므로 테스트를 한 번 작성한 다음 로컬 Lambda 함수 또는 배포된 Lambda 함수에 대해 수정 없이 테스트를 실행할 수 있습니다. CI/CD 파이프라인에 배포된 AWS SAM 스택에 대해 동일한 테스트를 실행할 수도 있습니다.

프로세스 방법은 다음과 같습니다.

  1. 로컬 Lambda 엔드포인트를 시작합니다.

    귀하의 AWS SAM 템플릿이 포함된 디렉터리에서 다음 명령을 실행하여 로컬 Lambda 엔드포인트를 시작합니다.

    sam local start-lambda

    이 명령은 AWS Lambda를 에뮬레이션하는 http://127.0.0.1:3001에서 로컬 엔드포인트를 시작합니다. 이 로컬 Lambda 엔드포인트에 대해 자동 테스트를 실행할 수 있습니다. 귀하가 AWS CLI 또는 SDK를 사용하여 이 엔드포인트를 간접 호출하면, 그것은 요청에 지정된 Lambda 함수를 로컬에서 실행하고 응답을 반환합니다.

  2. 로컬 Lambda 엔드포인트에 대해 통합 테스트를 실행합니다.

    통합 테스트에서 AWS SDK를 사용하여 테스트 데이터로 Lambda 함수를 간접 호출하고, 응답을 기다린 다음, 응답이 예상과 일치하는지 확인할 수 있습니다. 통합 테스트를 로컬에서 실행하려면 Lambda 간접 호출 API 직접 호출을 전송하여 이전 단계에서 시작한 로컬 Lambda 엔드포인트를 간접 호출하도록 AWS SDK를 구성해야 합니다.

    다음은 Python 예제입니다(다른 언어용 AWS SDK도 비슷한 구성을 가짐).

    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_locallyFalse로 설정함으로써 배포된 Lambda 함수를 테스트하기 위해 이 코드를 사용할 수 있습니다. 이렇게 하면 AWS 클라우드 내 AWS Lambda에 연결할 AWS SDK가 설정됩니다.