Ответ
В 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— фикстура выполняется один раз за всю сессию тестирования.
Выбор области видимости — это компромисс между изоляцией тестов (лучшая надежность) и скоростью их выполнения.