테스트 코드를 작성하다보면, pytest의 기본 기능으로는 해결할 수 없는 상황이 발생하기도 합니다. 이럴 때는 pytest의 확장성을 사용하여 커스텀 플러그인을 작성할 수 있습니다. 커스텀 플러그인을 작성하면 pytest를 필요에 맞게 확장하여 테스트를 보다 효율적으로 작성할 수 있습니다.
커스텀 플러그인 작성하기
pytest 커스텀 플러그인을 작성하기 위해 다음과 같은 단계를 따르세요.
-
필요한 패키지를 설치합니다. (
pytest
와pytest-hook
패키지가 필요합니다.)pip install pytest pip install pytest-hook
-
pytest 플러그인을 작성할 파일을 생성합니다. 일반적으로 파일 이름은 “test_*.py” 형식을 따릅니다.
-
작성한 파일에 pytest의 플러그인 인터페이스를 구현합니다.
import pytest @pytest.hookimpl(tryfirst=True) def pytest_collection_modifyitems(config, items): # Test collection 전에 실행될 로직을 작성합니다. pass @pytest.hookimpl(tryfirst=True) def pytest_runtest_protocol(item, nextitem): # 테스트 실행 전후에 실행될 로직을 작성합니다. pass
이외에도 다양한 플러그인 훅이 존재하며, 필요에 따라 추가로 구현할 수도 있습니다.
-
작성한 커스텀 플러그인을 실행해봅니다.
pytest
위의 단계를 따라 진행하면 pytest 커스텀 플러그인을 작성할 수 있습니다. 작성한 플러그인을 사용하는 경우, pytest 명령어를 실행할 때 자동으로 플러그인이 동작하게 됩니다.
커스텀 플러그인 예시
아래는 pytest 커스텀 플러그인의 간단한 예시입니다.
import pytest
def pytest_collection_modifyitems(config, items):
# 모든 테스트를 상위 그룹으로 묶어 실행되게 설정
top_group = pytest.Module("tests", parent=None)
top_group.addchildren(items)
items[:] = [top_group]
def pytest_runtest_protocol(item, nextitem):
# 테스트 실행 전에 메세지를 출력하도록 설정
print(f"Running test: {item.name}")
위의 예시는 테스트를 모두 상위 그룹으로 묶어서 실행되도록 설정하고, 테스트 실행 전에 해당 테스트의 이름을 출력하는 기능을 추가한 커스텀 플러그인입니다.
마무리
pytest 커스텀 플러그인을 작성하면 테스트 코드의 확장성과 유지보수성을 향상시킬 수 있습니다. 이 문서에서는 pytest 커스텀 플러그인을 작성하는 단계와 예시를 살펴보았습니다. 본인의 테스트 환경에 맞게 플러그인을 작성해보세요.
Happy coding!