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.py
와pyproject.toml
설정은 테스트 환경 구성의 핵심 단계