[파이썬] pytest 사용자 정의 환경

소개

pytest는 파이썬 테스트 프레임워크로서 강력한 기능과 쉽게 사용할 수 있는 API를 제공합니다. 이를 통해 개발자는 테스트를 작성하고 실행하면서 코드의 품질을 보장할 수 있습니다. pytest는 다양한 기능을 지원하며, 그 중 하나는 사용자 정의 환경을 설정하는 것입니다. 사용자 정의 환경은 테스트 실행 시 필요한 설정이나 세팅을 직접 지정할 수 있는 기능으로, 테스트 컨텍스트를 더욱 유연하게 조작할 수 있도록 해줍니다.

pytest의 환경변수

pytest는 실행되는 환경에 따라 다양한 환경변수를 사용할 수 있습니다. 환경변수를 사용하면 테스트 실행 시 사용되는 값을 동적으로 조정할 수 있으며, 이는 테스트의 유연성과 재사용성을 높여줍니다. pytest에서의 환경변수는 os.environ을 사용하여 설정하고 가져올 수 있습니다. 다음은 pytest에서 환경변수를 사용하는 예제입니다.

import os

def test_custom_environment():
    value = os.environ.get("CUSTOM_SETTING", "default_value")
    assert value == "custom_value"

위의 코드에서는 os.environ을 통해 “CUSTOM_SETTING”이라는 환경변수를 가져옵니다. 이 변수가 설정되어 있다면 가져오고, 설정되어 있지 않다면 기본값인 “default_value”를 사용합니다. 테스트를 실행하기 전에 “CUSTOM_SETTING” 환경변수를 “custom_value”로 설정하여 원하는 값을 전달하면 이를 테스트에서 사용할 수 있습니다. 이를 통해 테스트에 필요한 다양한 설정을 쉽게 변경하거나 조작할 수 있습니다.

사용자 정의 환경 함수

pytest는 사용자 정의 환경을 설정하기 위해 pytest_configure라는 특별한 함수를 제공합니다. 이 함수는 pytest가 시작될 때 호출되며, 테스트 환경에 대한 초기 설정을 수행하는 역할을 합니다. 다음은 pytest_configure 함수를 사용하여 테스트 DB 연결을 설정하는 예제입니다.

import pytest
import db

def pytest_configure(config):
    db.connect()

위의 코드에서는 db.connect() 함수를 pytest_configure 함수에서 호출하여 테스트 실행 전에 DB 연결을 설정합니다. 이렇게 하면 모든 테스트에서 DB 연결을 사용할 수 있으며, 테스트 Airbnb Cloning에서 init_db 픽스처에서 이를 호출하여 테스트 환경을 세팅할 수 있습니다.

사용자 정의 환경 클래스

때로는 테스트 환경을 더욱 복잡하게 조작해야 할 때가 있습니다. 이 경우, 사용자 정의 환경 클래스를 사용하여 더 많은 제어를 할 수 있습니다. pytest에서는 pytest_sessionstart라는 특별한 훅을 사용하여 사용자 정의 환경 클래스를 적용합니다. 다음은 MyCustomEnvironment라는 사용자 정의 환경 클래스의 예제입니다.

import pytest

class MyCustomEnvironment:
    def __init__(self, config):
        self.config = config

    def setup(self):
        # Setup code

    def teardown(self):
        # Teardown code

@pytest.hookimpl(tryfirst=True)
def pytest_sessionstart(session):
    config = session.config
    my_env = MyCustomEnvironment(config)
    my_env.setup()
    session.my_env = my_env

def pytest_sessionfinish(session, exitstatus):
    session.my_env.teardown()

위의 코드에서는 MyCustomEnvironment 클래스를 정의하고, setupteardown 메서드를 통해 테스트 환경의 설정과 해제를 처리합니다. 이 클래스는 pytest_sessionstart 훅을 통해 pytest 세션 시작 시에 적용됩니다. 이렇게 하면 더욱 복잡한 테스트 환경을 구성하고 제어할 수 있습니다.

결론

pytest를 사용하여 테스트를 작성하고 실행할 때 사용자 정의 환경을 설정하는 방법에 대해 살펴보았습니다. pytest의 환경변수와 사용자 정의 함수, 클래스를 활용하면 테스트 실행 시 필요한 설정을 유연하게 조작할 수 있으며, 이를 통해 테스트의 재사용성과 유지보수성을 향상시킬 수 있습니다. pytest의 다양한 기능을 적절하게 활용하여 효율적인 테스트 환경을 구축해보세요.