Serverless FastAPI 테스트: Moto와 Just Mock It!
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Serverless FastAPI 테스트: Moto와 Just Mock It!

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

- FastAPI 및 AWS 서버리스 애플리케이션 개발자

- 클라우드 테스트를 로컬에서 수행하고자 하는 개발자

- 난이도: 중간 (pytest, Moto 경험 필요)

핵심 요약

  • Moto를 사용해 AWS 서비스를 모킹하여 실제 API 호출 없이 로컬 테스트 가능
  • pytest와 conftest.py, pyproject.toml 파일을 통해 테스트 환경 구성
  • @pytest.fixture를 활용한 플레이어 데이터, AWS 인증 정보, DynamoDB 테이블 모킹 구현

섹션별 세부 요약

1. 테스트 환경 준비

  • conftest.py 파일 생성: 프로젝트 루트 디렉토리의 절대 경로를 설정하여 모듈 임포트 가능
  • pyproject.toml 파일 생성: pythonpath, testpaths 설정 및 botocore 경고 무시
  • tests 디렉토리 생성: 테스트 파일(test_player.py)을 저장

2. 기본 테스트 구현

  • TestClient 객체 생성: FastAPI 애플리케이션(app)을 테스트
  • test_root() 함수: 루트 엔드포인트("/")의 응답 상태 코드(200)와 JSON 구조 검증
  • 명령어 실행: pytest test_player.py::test_root 명령어로 테스트 실행

3. 테스트 데이터 및 AWS 모킹

  • player_data fixture: 플레이어 정보를 포함한 샘플 데이터 제공
  • all_players fixture: players.json 파일에서 플레이어 데이터 로드
  • aws_credentials fixture: Moto와 호환되는 가상 AWS 인증 정보 설정
  • dynamodb_table fixture: 가상 DynamoDB 테이블 생성 및 AWS 인증 정보 사용

결론

  • Moto는 실제 클라우드 API 호출 없이 로컬 테스트를 가능하게 하여 비용과 연결 의존성 문제를 해결
  • pytest fixture를 통해 테스트 환경의 일관성과 재사용성을 높임
  • conftest.pypyproject.toml 설정은 테스트 환경 구성의 핵심 단계