Какое значение у фикстуры по умолчанию в pytest?

«Какое значение у фикстуры по умолчанию в pytest?» — вопрос из категории Фреймворки тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В pytest фикстуры по умолчанию имеют область видимости (scope) function. Это означает, что фикстура выполняется заново для каждого тестового метода.

Пример фикстуры с областью видимости по умолчанию:

import pytest

@pytest.fixture  # Эквивалентно @pytest.fixture(scope='function')
def setup_database():
    # Действия перед тестом (setup)
    print("nПодключение к тестовой БД...")
    db = create_test_connection()
    yield db  # Передача ресурса тесту
    # Действия после теста (teardown)
    print("nЗакрытие соединения с БД...")
    db.close()

def test_user_count(setup_database):
    db = setup_database
    count = db.query("SELECT COUNT(*) FROM users")
    assert count == 10

def test_product_list(setup_database):
    # Для этого теста фикстура setup_database будет вызвана снова
    db = setup_database
    products = db.get_all_products()
    assert len(products) > 0

Другие доступные области видимости:

  • class — фикстура выполняется один раз для тестового класса.
  • module — фикстура выполняется один раз для модуля (файла).
  • session — фикстура выполняется один раз за всю сессию тестирования.

Выбор области видимости — это компромисс между изоляцией тестов (лучшая надежность) и скоростью их выполнения.