Область видимости (или "scope") фикстуры в pytest определяет, как часто данная фикстура будет вызываться и когда её ресурсы будут созданы или уничтожены. Это позволяет оптимизировать процесс тестирования, учитывая разные требования к ресурсам и их жизненным циклам.
В pytest предусмотрены следующие уровни области видимости фикстур.
Фикстура с этой областью видимости будет вызываться для каждой тестовой функции, которая её запрашивает. Это значит, что ресурсы, созданные фикстурой, будут отдельными для каждой тестовой функции и будут уничтожены сразу после завершения каждого теста.
@pytest.fixture(scope="function")
def example_fixture():
resource = allocate_resource()
yield resource
resource.release()
Если тесты объединены в класс, фикстура с областью видимости 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
Фикстура с областью видимости 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
Это самая широкая область видимости. Фикстура с областью видимости session вызывается один раз для всей тестовой сессии и доступна для всех тестов во всех модулях за время выполнения этой сессии.
@pytest.fixture(scope="session")
def session_fixture():
resource = allocate_resource()
yield resource
resource.release()
Выбор области видимости фикстуры зависит от конкретных требований и особенностей ресурсов, которые вы используете. Например, установка соединения с базой данных может требовать много времени, и вам может понадобиться использовать область видимости session, чтобы соединение устанавливалось только один раз, а не для каждого теста отдельно. Но в то же время это может повлиять на изоляцию тестов, поскольку все тесты будут использовать одно и то же соединение.
Выбор правильной области видимости помогает балансировать между производительностью и изоляцией тестов.
Содержание: