카테고리 없음

PyTest란? 250319

mezzanineX 2025. 3. 19. 07:46

q1: PyTest란?

a1:

PyTest란?

PyTest는 Python에서 가장 많이 사용되는 테스트 프레임워크입니다.
테스트 코드를 간단하게 작성할 수 있으며, 자동으로 실행하여 코드가 정상적으로 동작하는지 확인해 줍니다.

✅ PyTest의 특징
• 설치와 사용이 간단함 → 복잡한 설정 없이 바로 사용 가능
• 자동화 테스트 지원 → 사람이 직접 테스트하지 않아도 됨
• 단위 테스트(Unit Test) & 기능 테스트(Function Test) 가능
• 테스트 데이터를 한 번에 여러 개 적용 가능 (@pytest.mark.parametrize)
• 예외 처리 및 오류 발생 여부도 테스트 가능

✅ PyTest는 쉽게 말하면?
• Python 코드가 제대로 동작하는지 자동으로 확인하는 “자동 검사 도구”
• assert 문을 사용하여 기대값과 실제 결과를 비교함
• 한 번의 실행으로 여러 개의 테스트를 자동으로 수행할 수 있음



1. PyTest 설치 방법

PyTest는 pip를 사용하여 설치할 수 있습니다.

pip install pytest

설치 확인:

pytest --version





2. PyTest 기본 사용법

✅ 기본적인 테스트 코드 작성 (test_로 시작해야 함)

PyTest에서 테스트 함수는 test_로 시작해야 자동으로 인식됩니다.

# test_example.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5  # 테스트 성공
    assert add(5, 7) == 12  # 테스트 성공
    assert add(10, 10) == 21  # 테스트 실패 (PyTest가 오류 표시)

✅ assert 문을 사용하여 기대한 값과 실제 결과가 같은지 비교합니다.
✅ 하나라도 실패하면 PyTest가 어떤 부분에서 실패했는지 상세하게 출력해 줍니다.

테스트 실행 방법

터미널에서 다음 명령어 실행:

pytest test_example.py

✅ test_example.py 파일 내의 모든 테스트 함수가 실행됨.
✅ 테스트가 통과하면 녹색 ✅, 실패하면 빨간색 ❌ 표시됨.



3. 다양한 테스트 시나리오 예시

1️⃣ 여러 개의 테스트 실행

여러 개의 테스트를 한 번에 실행할 수 있습니다.

# test_math.py
def multiply(x, y):
    return x * y

def test_multiply():
    assert multiply(2, 3) == 6
    assert multiply(-1, 5) == -5
    assert multiply(0, 10) == 0

✅ 한 번의 실행으로 여러 개의 테스트가 자동으로 실행됨.
✅ 오류가 발생하면 어디에서 실패했는지 확인 가능.



2️⃣ 예외 발생 여부 테스트 (pytest.raises)

특정 상황에서 오류(예외)가 발생하는지 확인할 수도 있습니다.

# test_divide.py
import pytest

def divide(x, y):
    return x / y

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError):
        divide(10, 0)  # ZeroDivisionError가 발생하면 테스트 성공

✅ pytest.raises(예외 유형)을 사용하면 특정 예외가 발생하는지 확인 가능.
✅ divide(10, 0) 실행 시 ZeroDivisionError가 발생하면 테스트 성공, 그렇지 않으면 테스트 실패.



3️⃣ 여러 개의 입력값을 한 번에 테스트 (@pytest.mark.parametrize)

여러 개의 입력값을 반복적으로 테스트할 때 유용합니다.

# test_subtract.py
import pytest

def subtract(x, y):
    return x - y

@pytest.mark.parametrize("a, b, expected", [(5, 2, 3), (10, 5, 5), (100, 50, 50)])
def test_subtract(a, b, expected):
    assert subtract(a, b) == expected

✅ 3가지 입력값 (5-2, 10-5, 100-50)을 한 번에 테스트 가능.
✅ 코드가 깔끔하고 유지보수하기 쉬움.



4️⃣ 특정 테스트만 실행 (-k 옵션)

파일 내 여러 개의 테스트 중 특정 테스트만 실행하고 싶을 때 사용합니다.

pytest -k "multiply"

✅ "multiply"라는 단어가 포함된 테스트만 실행됨.



5️⃣ 실패한 테스트만 다시 실행 (--lf 옵션)

테스트가 여러 개 실패했을 때, 실패한 테스트만 다시 실행할 수 있습니다.

pytest --lf

✅ 이전 실행에서 실패한 테스트만 실행하여 빠르게 오류 확인 가능.



6️⃣ 테스트 실행 결과를 자세히 보고 싶을 때 (-v 옵션)

테스트 실행 결과를 상세히 출력하려면 -v 옵션을 사용합니다.

pytest -v test_example.py

✅ 어떤 테스트가 실행되었는지, 성공/실패 여부를 상세하게 표시.



4. PyTest가 없으면 어떻게 될까?

✅ 1. 개발자가 직접 실행해서 오류를 찾아야 함.
• print()를 사용해서 출력값을 확인해야 함.
• 실수로 테스트를 빠뜨릴 가능성이 큼.

✅ 2. 테스트를 자동으로 실행할 수 없음.
• 기능을 추가할 때마다 일일이 수동으로 테스트해야 함.

✅ 3. 유지보수가 어려워짐.
• 테스트 코드가 체계적으로 관리되지 않아, 나중에 어떤 기능이 동작하는지 알기 어려움.

✅ 4. 버그 발견이 늦어짐.
• 코드 변경 후 기존 기능이 잘 동작하는지 확인하기 어려움.
• 프로덕션 환경에서 버그가 발생할 가능성이 높아짐.



5. 결론

PyTest는 간단한 코드만으로도 강력한 자동화 테스트를 수행할 수 있는 도구입니다.
• 테스트를 자동화하여 실수를 줄이고 시간을 절약할 수 있음.
• 다양한 기능(@pytest.mark.parametrize, pytest.raises, -k, -v, --lf 옵션 등)을 제공하여 효율적인 테스트 환경 구축 가능.
• Python 프로젝트에서 코드의 안정성을 높이기 위해 필수적인 도구! 🚀

반응형