Pytest가 뭐길래? 왜 Unit Test가 필요할까?
개발하다 보면 한 번쯤은 이런 경험 있지 않나요? 코드가 분명 잘 돌아가던 것 같은데 갑자기 오류가 나면서 멈춰버리는 순간! 이럴 때 정말 답답하죠. 바로 이런 상황을 미리 예방하는 데 Unit Test가 필수예요. Pytest를 활용하면 예상치 못한 버그를 쉽게 찾아낼 수 있고, 코드가 정상적으로 작동하는지도 빠르게 확인할 수 있죠. 그래서 오늘은 이 강력하고도 간편한 Pytest Framework를 활용해 Unit Test를 손쉽게 작성하는 방법을 알아볼 거예요!

이 글을 끝까지 읽으면 이런 내용을 알게 될 거예요:
- Pytest가 뭐고, 기존 unittest보다 왜 더 좋은지
- Pytest 설치하고 기본적인 환경 설정하는 법
- 첫 Test 작성과 assert 문법 활용법
- Unit Test가 소프트웨어 개발에서 왜 중요한지
- Pytest의 다양한 기능: Fixtures, 파라미터화 Test, Mocking 기법
- API와 Database까지 Test하는 실전 방법
이제 Pytest를 자유롭게 활용할 수 있도록 함께 배워볼까요?
Pytest란?
Pytest는 파이썬에서 가장 널리 사용되는 Unit Test Framework 중 하나예요. 코드가 제대로 작동하는지 빠르게 확인할 수 있도록 도와주는 도구죠. 물론 기본적으로 파이썬에 내장된 unittest 모듈도 있지만, Pytest가 훨씬 직관적이고 사용하기 쉬워서 많은 개발자들이 선호해요.
왜 unittest보다 Pytest가 좋을까?
- 코드가 간결함: 불필요한 부분 없이 직관적으로 Test 작성 가능
- 가독성이 뛰어남: assert 문을 사용해 더욱 읽기 쉬운 코드 작성
- 자동 Test 탐색 기능: 설정 없이도 test_로 시작하는 파일과 함수 자동 인식
- 강력한 Plugin 지원: pytest-mock, pytest-cov, pytest-django 같은 확장 기능 활용 가능
이제 직접 설치해볼까요?
Pytest 설치 및 기본 설정
Pytest를 사용하려면 먼저 Python이 설치되어 있어야 해요. 아래 명령어로 확인해보세요:
python --version
그리고 Pytest를 설치합니다:
pip install pytest
Mac/Linux에서는 pip3을 사용할 수도 있어요:
pip3 install pytest
추가로 Mocking 기능을 사용하려면 pytest-mock도 설치하면 좋아요:
pip install pytest-mock
설치가 잘 됐는지 확인하려면:
pytest --version
이제 첫 번째 Test를 작성해볼까요?
첫 번째 Test 작성하기
예제로 간단한 날씨 판별 함수를 만들어볼게요. main.py 파일을 만들고 아래 코드를 입력하세요:
def get_weather(temp):
return "hot" if temp > 20 else "cold"
이제 Test 파일을 만들고 test_main.py에 아래 코드를 작성하세요:
from main import get_weather
def test_get_weather():
assert get_weather(25) == "hot"
assert get_weather(10) == "cold"
Test 실행하기
터미널에서 아래 명령어를 실행하세요:
pytest test_main.py
테스트가 정상적으로 실행되면 이런 메시지가 나올 거예요:
=================================== test session starts ===================================
collected 1 item
test_main.py . [100%]
==================================== 1 passed in 0.01s ====================================
축하합니다! 🎉 Pytest를 이용한 첫 번째 Test를 성공적으로 작성했어요.
Unit Test가 중요한 이유
Unit Test란?
Unit Test는 코드의 개별적인 기능(함수 또는 클래스)을 독립적으로 확인하는 과정이에요.
Unit Test를 꼭 해야 하는 이유
- 버그를 미리 잡을 수 있음: 예상치 못한 오류를 사전에 감지 가능
- 코드 품질 향상: Test 가능한 코드 구조를 만들다 보면 자연스럽게 코드가 정리됨
- 리팩토링이 쉬워짐: 코드 변경 시 기존 기능이 정상 작동하는지 바로 확인 가능
- Test 주도 개발(TDD) 실천 가능: 테스트를 먼저 작성하고 이를 통과하는 방식으로 개발할 수 있음
Unit Test가 있으면 코드 유지보수가 훨씬 쉬워지고, 실수도 줄어들어요!
Pytest의 고급 기능
Fixture: 테스트 환경 초기화하기
Fixture는 Test 실행 전후로 특정한 환경을 자동으로 세팅해주는 기능이에요.
예제: 클래스 인스턴스 초기화
import pytest
from main import UserManager
@pytest.fixture
def user_manager():
return UserManager()
def test_add_user(user_manager):
user_manager.add_user("John")
assert "John" in user_manager.users
def test_duplicate_user(user_manager):
user_manager.add_user("Jane")
with pytest.raises(ValueError):
user_manager.add_user("Jane")
Fixture를 사용하면 각 Test가 독립적으로 실행되며, 불필요한 코드 중복을 줄일 수 있어요.
Mocking: 외부 의존성 제거하기
API 요청이나 Database 연결 같은 외부 요소 때문에 Test가 어렵다면? Mocking을 활용하면 해결할 수 있어요.
API 요청 Mock 예제
import pytest
import requests
from main import get_weather
@pytest.fixture
def mock_request(mocker):
return mocker.patch("main.requests.get", return_value=MockResponse())
class MockResponse:
def __init__(self):
self.status_code = 200
def json(self):
return {"temperature": 25, "condition": "Sunny"}
def test_get_weather(mock_request):
assert get_weather("New York") == {"temperature": 25, "condition": "Sunny"}
Mock을 활용하면 API 서버가 없어도 내부 로직을 Test할 수 있어요.
마무리
Pytest는 간단하지만 강력한 Test Framework예요. Fixture, Mocking, 파라미터화 Test 같은 다양한 기능을 활용하면 더욱 효율적으로 Test를 작성할 수 있죠.
이제 Pytest를 활용해서 코드의 안정성을 높이고 유지보수도 쉽게 해보세요! 🚀
'SW > Python' 카테고리의 다른 글
2025년 파이썬 개발자가 되는 법: 데이터 사이언스, 백엔드, DevOps 로드맵 (0) | 2025.04.11 |
---|---|
Python으로 서버 관리하기: 쉽고 빠른 자동화 가이드 (0) | 2025.04.10 |
파이썬 if __name__ == "__main__" 이해하기: 초보자를 위한 완벽 가이드 (0) | 2025.03.29 |
Python의 숨겨진 보석: Property와 Descriptor 이야기 (0) | 2025.03.26 |
Python : __init__.py 이해하기: 패키지 관리 필수 팁 (0) | 2025.03.25 |