Back to questions
Junior — Middle
75
Можешь ли ты описать различные виды scope fixtures в Pytest и их особенности?
Answer from AI
sobes.tech AI
В Pytest фикстуры могут иметь разные области видимости (scope), которые определяют, как часто создаётся и уничтожается объект фикстуры:
- function (по умолчанию): фикстура создаётся заново для каждого теста.
- class: фикстура создаётся один раз на каждый класс тестов.
- module: фикстура создаётся один раз на каждый модуль (файл с тестами).
- package: фикстура создаётся один раз на пакет (директорию с init.py).
- session: фикстура создаётся один раз на всю сессию запуска тестов.
Например, фикстура с scope='module' будет инициализирована один раз перед запуском всех тестов в модуле и уничтожена после их завершения. Это удобно для дорогих по времени или ресурсам операций, которые можно переиспользовать.
Пример фикстуры с разными scope:
import pytest
@pytest.fixture(scope='module')
def db_connection():
conn = create_connection()
yield conn
conn.close()
@pytest.fixture(scope='function')
def temp_file():
f = open('temp.txt', 'w')
yield f
f.close()
Таким образом, выбор scope зависит от того, как долго должен жить объект фикстуры и насколько часто его нужно пересоздавать.