Sobes.tech
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 зависит от того, как долго должен жить объект фикстуры и насколько часто его нужно пересоздавать.