Что такое scope у фикстур в pytest (function, module, session)?
1️⃣ Как кратко ответить
В pytest, scope у фикстур определяет, как долго фикстура будет существовать и когда она будет создаваться и уничтожаться. Существует четыре уровня scope: function, class, module и session. Function — фикстура создается для каждой тестовой функции. Class — для каждого класса тестов. Module — для каждого модуля. Session — для всей сессии тестирования.
2️⃣ Подробное объяснение темы
Фикстура в pytest — это функция, которая выполняет настройку перед тестом и/или очистку после теста. Например, фикстура может создать временную базу данных, заполнить её тестовыми данными и удалить после завершения теста.
Что такое scope?
Scope (область действия) определяет, как долго фикстура будет существовать и когда она будет создаваться и уничтожаться. Это позволяет оптимизировать выполнение тестов, избегая ненужного повторного создания ресурсов.
Виды scope
-
Function Scope
- Описание: Фикстура создается и уничтожается для каждой тестовой функции.
- Когда использовать: Когда каждый тест должен иметь свою собственную изолированную среду.
- Пример:
import pytest @pytest.fixture(scope="function") def resource(): print("Setup resource") yield print("Teardown resource") def test_example(resource): assert True - Как работает: В этом примере
resourceбудет создаваться и уничтожаться для каждой тестовой функции, которая его использует.
-
Class Scope
- Описание: Фикстура создается и уничтожается для каждого класса тестов.
- Когда использовать: Когда все тесты в классе могут использовать одну и ту же настройку.
- Пример:
import pytest @pytest.fixture(scope="class") def resource(): print("Setup resource") yield print("Teardown resource") class TestExample: def test_one(self, resource): assert True def test_two(self, resource): assert True - Как работает: Здесь
resourceбудет создаваться один раз для всех тестов внутриTestExampleи уничтожаться после выполнения всех тестов в классе.
-
Module Scope
- Описание: Фикстура создается и уничтожается для каждого модуля.
- Когда использовать: Когда все тесты в модуле могут использовать одну и ту же настройку.
- Пример:
import pytest @pytest.fixture(scope="module") def resource(): print("Setup resource") yield print("Teardown resource") def test_one(resource): assert True def test_two(resource): assert True - Как работает:
resourceбудет создаваться один раз для всех тестов в модуле и уничтожаться после выполнения всех тестов.
-
Session Scope
- Описание: Фикстура создается и уничтожается один раз за всю сессию тестирования.
- Когда использовать: Когда настройка может быть использована всеми тестами в проекте.
- Пример:
import pytest @pytest.fixture(scope="session") def resource(): print("Setup resource") yield print("Teardown resource") def test_one(resource): assert True def test_two(resource): assert True - Как работает:
resourceбудет создаваться один раз перед началом всех тестов и уничтожаться после завершения всех тестов.
Зачем это нужно?
Использование scope позволяет оптимизировать тестирование, избегая избыточного создания и уничтожения ресурсов. Это особенно важно, когда ресурсы требуют значительных затрат времени или системных ресурсов для создания, таких как базы данных или сетевые соединения.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться