Область видимости фикстур в pytest

Pytest в Python: область видимости фикстур

Область видимости (или "scope") фикстуры в pytest определяет, как часто данная фикстура будет вызываться и когда её ресурсы будут созданы или уничтожены. Это позволяет оптимизировать процесс тестирования, учитывая разные требования к ресурсам и их жизненным циклам.

В pytest предусмотрены следующие уровни области видимости фикстур.

1. function (по умолчанию)

Фикстура с этой областью видимости будет вызываться для каждой тестовой функции, которая её запрашивает. Это значит, что ресурсы, созданные фикстурой, будут отдельными для каждой тестовой функции и будут уничтожены сразу после завершения каждого теста.

@pytest.fixture(scope="function")
def example_fixture():
    resource = allocate_resource()
    yield resource
    resource.release()

2. class

Если тесты объединены в класс, фикстура с областью видимости class будет вызываться один раз для этого класса и будет доступна для всех методов этого класса.

@pytest.fixture(scope="class")
def class_fixture():
    resource = allocate_resource()
    yield resource
    resource.release()

class TestExample:
    def test_one(self, class_fixture):
        pass

    def test_two(self, class_fixture):
        pass

3. module

Фикстура с областью видимости module будет вызываться один раз на протяжении всего модуля и будет доступна для всех тестов в этом модуле.

@pytest.fixture(scope="module")
def module_fixture():
    resource = allocate_resource()
    yield resource
    resource.release()

def test_three(module_fixture):
    pass

def test_four(module_fixture):
    pass

4. session

Это самая широкая область видимости. Фикстура с областью видимости session вызывается один раз для всей тестовой сессии и доступна для всех тестов во всех модулях за время выполнения этой сессии.

@pytest.fixture(scope="session")
def session_fixture():
    resource = allocate_resource()
    yield resource
    resource.release()

Заключение

Выбор области видимости фикстуры зависит от конкретных требований и особенностей ресурсов, которые вы используете. Например, установка соединения с базой данных может требовать много времени, и вам может понадобиться использовать область видимости session, чтобы соединение устанавливалось только один раз, а не для каждого теста отдельно. Но в то же время это может повлиять на изоляцию тестов, поскольку все тесты будут использовать одно и то же соединение.

Выбор правильной области видимости помогает балансировать между производительностью и изоляцией тестов.

Содержание: