Pytest
pytest는 파이썬을 위한 강력하고 유연한 테스트 프레임워크.
단위 테스트부터 기능 테스트까지 다양한 수준의 테스트를 지원하며, 개발자들 사이에서 높은 인기를 얻고 있다.
주요 특징
- 간결한 문법: pytest는 파이썬의 기본 assert 문을 사용하여 테스트를 수행한다. 이로 인해 테스트 코드가 매우 간결해진다.
- 자동 테스트 발견: ’test_‘로 시작하는 함수나 ‘Test’로 시작하는 클래스를 자동으로 테스트 대상으로 인식한다.
- 풍부한 플러그인 생태계: 다양한 플러그인을 통해 기능을 확장할 수 있다.
주요 플러그인:
- pytest-cov: 코드 커버리지 측정
- pytest-mock: 목킹 기능 제공
- pytest-xdist: 병렬 테스트 실행
- pytest-django: Django 테스트 지원 - 상세한 실패 보고서: 테스트 실패 시 상세한 정보를 제공하여 디버깅을 용이하게 한다.
- 실패한 테스트의 정확한 위치
- 기대값과 실제값의 상세한 비교
- 실행 시간 및 커버리지 정보
- 성공/실패/스킵된 테스트 통계
- 매개변수화된 테스트: 여러 입력값에 대해 동일한 테스트를 반복 실행할 수 있다.
장점
- 간결성: unittest에 비해 더 간결한 문법을 제공한다.
- 유연성: 다양한 테스트 시나리오를 쉽게 구현할 수 있다.
- 확장성: 풍부한 플러그인 생태계를 통해 기능을 확장할 수 있다.
- 상세한 오류 보고: 테스트 실패 시 더 자세한 정보를 제공한다.
단점
- 학습 곡선: pytest만의 고유한 방식을 익혀야 한다.
- 기존 코드와의 호환성: 일부 기존 unittest 코드와 호환되지 않을 수 있다.
예외 테스트
pytest.raises
컨텍스트 매니저를 사용하여 예외 발생을 테스트할 수 있다.
예외의 종류뿐만 아니라 예외 메시지까지 검증할 수 있다.
기본 사용법
pytest를 사용하기 위해서는 먼저 설치해야 한다:
|
|
간단한 테스트 예제:
이 테스트를 실행하려면 터미널에서 다음 명령어를 입력한다:
|
|
사용 예제
|
|
고급 기능
- Fixtures: 테스트 함수에 필요한 데이터나 객체를 제공한다.
- 재사용 가능한 테스트 데이터 제공
- 여러 범위(function, class, module, session) 지원
- 자동 정리(cleanup) 기능
- 의존성 주입 방식의 사용
- 매개변수화된 테스트:
@pytest.mark.parametrize
데코레이터를 사용하여 하나의 테스트 함수로 여러 입력값을 테스트할 수 있다.
이는 코드 중복을 줄이고 테스트 커버리지를 높이는데 매우 유용하다.
- 마커:
테스트에 메타데이터를 추가하여 특정 테스트만 실행하거나 건너뛸 수 있습니다.
모범 사례와 팁
pytest를 효과적으로 사용하기 위한 몇 가지 권장사항:
- 테스트 구조화
- 명확한 이름 규칙 사용
- 관련 테스트를 클래스로 그룹화
- 적절한 픽스처 범위 선택
- 테스트 격리
- 각 테스트는 독립적으로 실행 가능해야 함
- 테스트 간 상태 공유 피하기
- 적절한 setUp과 tearDown 사용
- 테스트 최적화
- 느린 테스트 식별 및 최적화
- 병렬 실행 활용
- 적절한 테스트 건너뛰기 사용