|
|
||
|---|---|---|
| .. | ||
| api | ||
| INSTALLATION_GUIDE.md | ||
| POSTGRESQL_TEST_GUIDE.md | ||
| README.md | ||
| SQLITE_ARRAY_SOLUTION.md | ||
| UBUNTU_TEST_GUIDE.md | ||
| __init__.py | ||
| conftest.py | ||
| conftest_simple.py | ||
| test_async_services.py | ||
| test_database_integration.py | ||
| test_integration_scenarios.py | ||
| test_mock_examples.py | ||
| test_schema_validation.py | ||
| utils.py | ||
README.md
Backend API Tests
백엔드 API 엔드포인트에 대한 테스트 스위트입니다.
테스트 구조
tests/
├── __init__.py
├── conftest.py # 공통 fixture 및 설정
└── api/
└── v1/
├── __init__.py
├── test_auth.py # 인증 API 테스트
├── test_user.py # 사용자 API 테스트
├── test_moviemakers.py # MovieMaker API 테스트
├── test_social.py # 소셜 로그인 API 테스트
└── test_uservideo.py # 비디오 스트리밍 API 테스트
테스트 실행 방법
모든 테스트 실행
cd backend
pytest tests/
특정 파일의 테스트만 실행
pytest tests/api/v1/test_auth.py
특정 테스트 함수만 실행
pytest tests/api/v1/test_auth.py::TestAuthAPI::test_login_success
테스트 커버리지 확인
pytest tests/ --cov=app --cov-report=html
테스트 케이스 설명
1. Auth API Tests (test_auth.py)
-
회원가입 테스트
- 성공적인 회원가입
- 중복 이메일 처리
- 비밀번호 불일치 처리
-
로그인 테스트
- 성공적인 로그인
- 잘못된 인증정보 처리
- 빈 값 검증
2. User API Tests (test_user.py)
-
아이템 관리
- 아이템 목록 조회
- 아이템 업데이트
- 아이템 삭제
-
비디오 관리
- 비디오 목록 조회
- 비디오 삭제
-
프로필 관리
- 프로필 조회
- 프로필 업데이트
- 존재하지 않는 사용자 처리
3. MovieMaker API Tests (test_moviemakers.py)
-
워크플로우 시작
- 정상적인 워크플로우 시작
- 잘못된 URL 처리
-
진행상황 조회
- 진행 중인 작업 상태 확인
- 완료된 작업 확인
- 존재하지 않는 작업 처리
4. Social API Tests (test_social.py)
-
Google OAuth 로그인
- 로그인 URL 생성
- OAuth 콜백 처리
- 에러 처리
-
토큰 정보 조회
- 임시 토큰으로 정보 조회
- 만료된 토큰 처리
5. User Video API Tests (test_uservideo.py)
- 비디오 스트리밍
- 정상적인 스트리밍
- 파일이 없는 경우 처리
- URL 인코딩된 파일명 처리
- 경로 탐색 공격 방지
Mock 사용
테스트에서는 실제 서비스 대신 Mock 객체를 사용합니다:
mock_auth_service: 인증 서비스 Mockmock_user_service: 사용자 서비스 Mockmock_video_service: 비디오 서비스 Mockmock_google_service: Google OAuth 서비스 Mockmock_redis_manager: Redis 관리자 Mock
테스트 환경 설정
테스트는 SQLite 메모리 데이터베이스를 사용하며, 각 테스트마다 깨끗한 상태에서 시작합니다.
SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"
추가 테스트 작성 가이드
새로운 엔드포인트를 추가할 때:
- 해당 API 파일에 테스트 클래스 추가
- 성공 케이스와 실패 케이스 모두 작성
- Mock 객체를 활용하여 외부 의존성 제거
- 엣지 케이스 고려 (빈 값, 잘못된 형식 등)