SW/Python

Pytest 완벽 가이드: 쉽게 배우는 파이썬 Unit Test

얇은생각 2025. 4. 8. 07:30
반응형

Pytest가 뭐길래? 왜 Unit Test가 필요할까?

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

 

Pytest 완벽 가이드: 쉽게 배우는 파이썬 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를 꼭 해야 하는 이유

  1. 버그를 미리 잡을 수 있음: 예상치 못한 오류를 사전에 감지 가능
  2. 코드 품질 향상: Test 가능한 코드 구조를 만들다 보면 자연스럽게 코드가 정리됨
  3. 리팩토링이 쉬워짐: 코드 변경 시 기존 기능이 정상 작동하는지 바로 확인 가능
  4. 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를 활용해서 코드의 안정성을 높이고 유지보수도 쉽게 해보세요! 🚀

반응형