- Published on
13단계: 테스트와 배포 준비
13-1. unittest 기본 구조
import unittest
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(2 + 3, 5)
if __name__ == "__main__":
unittest.main()
13-2. 다양한 단언 메서드
assertEqual(a, b)
assertTrue(x)
assertRaises(Exception, func, *args)
13-3. pytest 사용법
pip install pytest
파일명은 test_*.py
, 함수명은 test_*
형태로 작성
def test_sum():
assert sum([1, 2, 3]) == 6
실행:
pytest
13-4. 예외 테스트
def divide(a, b):
return a / b
def test_divide_by_zero():
import pytest
with pytest.raises(ZeroDivisionError):
divide(1, 0)
13-5. 로깅 기본 사용법
import logging
logging.basicConfig(level=logging.INFO)
logging.info("시작합니다.")
logging.warning("주의 메시지")
13-6. 로깅 수준
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
13-7. 배포 전 점검 사항
- 코드 정리 (불필요한 print 제거)
- 예외 처리 확인
- requirements.txt 업데이트
- 테스트 통과 여부 확인
요약
- unittest, pytest로 테스트 자동화 가능
- 예외 처리는 테스트로도 검증 가능
- logging을 통해 진단 메시지 기록
- 배포 전 테스트/의존성 관리 필수
심화학습
Q1. unittest와 pytest 중 어떤 상황에 어떤 도구를 쓰면 좋을까요?
A1. unittest는 표준 내장으로 가볍게 시작할 수 있고, pytest는 더 유연하고 확장성이 높아 실무에서 많이 사용됩니다.
Q2. 테스트에서 fixture의 역할은 무엇인가요?
A2. 테스트마다 공통적으로 준비해야 하는 초기 상태나 데이터를 재사용 가능하게 설정해주는 기능입니다.
Q3. print보다 logging을 쓰는 이유는 무엇인가요?
A3. logging은 레벨별 메시지 출력, 파일 저장, 포맷 지정, 필터링 등 기능이 풍부하며 운영 환경에서도 유용합니다.