python 테스트!

단위테스트 - pytest

pytest 패키지를 통해 단위 테스트 진행이 가능

$ pip install pytest

아래 코드와 같이 여러가지 데커레이터로 테스트의 상세한 설정이 가능하다.

# test_py.py
import pytest

try:
    import mylib
except ImportError:
    mylib = None

# skip 지정
@pytest.mark.skip("Do not run this")
def test_false():
    assert False

# skip 조건
@pytest.mark.skipif(conditions=mylib is None, reason='mylib is None, Do not run this')
def test_mylib():
    assert mylib.foobar() == 42

# 마킹을 통한 테스트 특정
@pytest.mark.kouzie
def test_true():
    assert True

def test_false_only():
    assert False
# -v 상세 출력
pytest -v test_py.py
# -n 병렬처리
pytest -v -n 4 test_py.py

# -k 특정 테스트 이름 지정
pytest -v test-py.py -k test_true

# -m 마킹 으로 테스트 특정
pytest -v test-py.py -m kouzie
# not, and, or 키워드로 지정 가능  
pytest -v test-py.py -m "not kouzie"

fixture

테스트 전후로 실행하는 공통 명령어 집합을 관리하기 위한 패키지

def test_user():
    print(os.getenv("USER"))
    assert os.getenv("USER") == "foobar"
# scope 지정으로 한 모듈안에서 db conn 이 살아있도록 설정
@pytest.fixture(scope="module", autouse=True)
def change_user_env():
    curuser = os.environ.get("USER")
    print(curuser)
    os.environ["USER"] = "foobar"
    yield
    os.environ["USER"] = curuser