Python에서 AWS Lambda 함수 테스트

Python에서 AWS Lambda 함수 테스트 (AWS Lambda function testing in Python)

서버리스 함수를 테스트할 때는 전통적인 테스트 유형과 기법을 사용하지만 동시에 서버리스 애플리케이션 전체에 대한 테스트도 고려해야 합니다. 클라우드 기반 테스트는 함수와 서버리스 애플리케이션 양쪽의 품질을 가장 정확하게 측정해 줍니다.

출처: AWS Lambda 개발자 안내서

본문

참고

서버리스 솔루션 테스트 기법과 모범 사례에 대한 완전한 소개는 테스트 함수 장을 참조하세요.

서버리스 애플리케이션 아키텍처에는 API 호출을 통해 중요한 애플리케이션 기능을 제공하는 관리형 서비스가 포함됩니다. 따라서 개발 주기에는 함수와 서비스가 상호작용할 때 기능을 검증하는 자동화된 테스트가 포함되어야 합니다.

클라우드 기반 테스트를 만들지 않으면 로컬 환경과 배포 환경 간의 차이로 인해 문제가 발생할 수 있습니다. 지속적 통합 프로세스는 코드를 QA, 스테이징, 프로덕션 같은 다음 배포 환경으로 승격하기 전에 클라우드에 프로비저닝된 리소스 모음에 대해 테스트를 실행해야 합니다.

이 짧은 가이드를 계속 읽고 서버리스 애플리케이션 테스트 전략에 대해 알아보거나, Serverless Test Samples 리포지토리를 방문해 선택한 언어와 런타임에 특화된 실제 예제를 살펴보세요.

서버리스 테스트를 위해 여전히 단위 테스트, 통합 테스트, 엔드투엔드 테스트를 작성합니다.

  • 단위 테스트(Unit tests) — 격리된 코드 블록에 대해 실행되는 테스트입니다. 예를 들어 특정 항목과 목적지가 주어졌을 때 배송비를 계산하는 비즈니스 로직을 검증합니다.
  • 통합 테스트(Integration tests) — 일반적으로 클라우드 환경에서 상호작용하는 둘 이상의 구성 요소나 서비스가 관련된 테스트입니다. 예를 들어 함수가 큐에서 이벤트를 처리하는지 검증합니다.
  • 엔드투엔드 테스트(End-to-end tests) — 전체 애플리케이션에 걸친 동작을 검증하는 테스트입니다. 예를 들어 인프라가 올바르게 설정되었는지, 고객 주문을 기록하도록 이벤트가 서비스 간에 예상대로 흐르는지 확인합니다.

서버리스 애플리케이션 테스트

일반적으로 클라우드에서 테스트, 모의(mock)로 테스트, 때로는 에뮬레이터로 테스트하는 등 여러 접근 방식을 혼합해 서버리스 애플리케이션 코드를 테스트합니다.

클라우드에서 테스트

클라우드에서 테스트는 단위 테스트, 통합 테스트, 엔드투엔드 테스트를 포함한 모든 테스트 단계에 유용합니다. 클라우드에 배포되어 클라우드 기반 서비스와 상호작용하는 코드에 대해 테스트를 실행합니다. 이 접근 방식은 코드 품질을 가장 정확하게 측정합니다.

클라우드에서 Lambda 함수를 디버깅하는 편리한 방법은 콘솔에서 테스트 이벤트(test event)를 사용하는 것입니다. 테스트 이벤트는 함수에 대한 JSON 입력입니다. 함수에 입력이 필요하지 않으면 이벤트는 빈 JSON 문서({})일 수 있습니다. 콘솔은 다양한 서비스 통합을 위한 샘플 이벤트를 제공합니다. 콘솔에서 이벤트를 만든 후 팀과 공유해 테스트를 더 쉽고 일관되게 만들 수 있습니다.

참고

콘솔에서 함수를 테스트하는 것은 빠르게 시작하는 방법이지만, 테스트 주기를 자동화하면 애플리케이션 품질과 개발 속도를 보장합니다.

테스트 도구

개발 피드백 루프를 가속화하는 도구와 기법이 존재합니다. 예를 들어 AWS SAM Accelerate와 AWS CDK watch 모드는 모두 클라우드 환경을 업데이트하는 데 필요한 시간을 줄여줍니다.

  • Moto는 AWS 서비스와 리소스를 모의(mock)하는 Python 라이브러리로, 데코레이터를 사용해 응답을 가로채고 시뮬레이션함으로써 함수를 거의 또는 전혀 수정하지 않고 테스트할 수 있습니다.
  • Powertools for AWS Lambda (Python) 의 검증 기능은 Python 함수의 입력 이벤트와 출력 응답을 검증할 수 있는 데코레이터를 제공합니다.

자세한 내용은 블로그 게시물 "Unit Testing Lambda with Python and Mock AWS Services"를 읽어보세요.

클라우드 배포 반복과 관련된 대기 시간을 줄이려면 AWS Serverless Application Model(AWS SAM) Accelerate와 AWS Cloud Development Kit(AWS CDK) watch 모드를 참조하세요. 이 도구들은 인프라와 코드의 변경 사항을 모니터링합니다. 변경 사항에 반응해 증분 업데이트를 자동으로 만들어 클라우드 환경에 배포합니다.

이 도구를 사용하는 예제는 Python Test Samples 코드 리포지토리에서 확인할 수 있습니다.

더 알아보기 (Learn more)

  • 서버리스 솔루션 테스트 모범 사례
  • AWS Lambda 콘솔 테스트 이벤트
  • AWS SAM Accelerate 및 AWS CDK watch 모드