Что такое conftest.py и как работает область видимости фикстур между папками?
1️⃣ Как кратко ответить
conftest.py — это специальный файл в Pytest, который используется для определения фикстур и плагинов, доступных для всех тестов в данной директории и её поддиректориях. Область видимости фикстур, определённых в conftest.py, распространяется на все тесты в текущей и вложенных папках, что позволяет переиспользовать код и упрощает управление зависимостями тестов.
2️⃣ Подробное объяснение темы
conftest.py — это файл, который используется в Pytest для определения фикстур и плагинов, которые могут быть автоматически доступны для всех тестов в текущей директории и её поддиректориях. Это позволяет избежать дублирования кода и упрощает управление зависимостями тестов.
Зачем нужен conftest.py
-
Централизованное управление фикстурами: Фикстуры, определённые в
conftest.py, автоматически доступны для всех тестов в текущей и вложенных директориях. Это позволяет избежать необходимости импортировать фикстуры в каждом тестовом файле. -
Упрощение структуры проекта: Использование
conftest.pyпозволяет организовать тесты и их зависимости более структурированно, что делает проект более читаемым и поддерживаемым. -
Переиспользование кода: Фикстуры, определённые в
conftest.py, могут быть использованы в нескольких тестах, что уменьшает количество дублирующегося кода.
Как работает область видимости фикстур
Фикстуры, определённые в conftest.py, имеют область видимости, которая распространяется на все тесты в текущей директории и её поддиректориях. Это означает, что если у вас есть следующая структура проекта:
project/
│
├── tests/
│ ├── conftest.py
│ ├── test_module1.py
│ └── subfolder/
│ ├── conftest.py
│ └── test_module2.py
Фикстуры, определённые в tests/conftest.py, будут доступны для test_module1.py и subfolder/test_module2.py. Однако, если в subfolder/conftest.py определена фикстура с тем же именем, она переопределит фикстуру из родительской директории для тестов в subfolder.
Пример использования conftest.py
# tests/conftest.py
import pytest
@pytest.fixture
def sample_fixture():
return "Hello from conftest!"
# tests/test_module1.py
def test_example(sample_fixture):
assert sample_fixture == "Hello from conftest!"
В этом примере sample_fixture определена в conftest.py и автоматически доступна в test_module1.py. Когда тест test_example выполняется, он использует sample_fixture, которая возвращает строку "Hello from conftest!".
Переопределение фикстур
Если в поддиректории subfolder есть свой conftest.py с фикстурой с тем же именем, она будет использоваться вместо родительской:
# tests/subfolder/conftest.py
import pytest
@pytest.fixture
def sample_fixture():
return "Hello from subfolder conftest!"
# tests/subfolder/test_module2.py
def test_example(sample_fixture):
assert sample_fixture == "Hello from subfolder conftest!"
В этом случае, test_example в test_module2.py будет использовать sample_fixture из subfolder/conftest.py, которая возвращает "Hello from subfolder conftest!".
Таким образом, conftest.py позволяет эффективно управлять фикстурами и их областью видимости, что упрощает организацию и поддержку тестов в проекте.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться