← Назад ко всем вопросам

Что такое conftest.py и как работает область видимости фикстур между папками?

1️⃣ Как кратко ответить

conftest.py — это специальный файл в Pytest, который используется для определения фикстур и плагинов, доступных для всех тестов в данной директории и её поддиректориях. Область видимости фикстур, определённых в conftest.py, распространяется на все тесты в текущей и вложенных папках, что позволяет переиспользовать код и упрощает управление зависимостями тестов.

2️⃣ Подробное объяснение темы

conftest.py — это файл, который используется в Pytest для определения фикстур и плагинов, которые могут быть автоматически доступны для всех тестов в текущей директории и её поддиректориях. Это позволяет избежать дублирования кода и упрощает управление зависимостями тестов.

Зачем нужен conftest.py

  1. Централизованное управление фикстурами: Фикстуры, определённые в conftest.py, автоматически доступны для всех тестов в текущей и вложенных директориях. Это позволяет избежать необходимости импортировать фикстуры в каждом тестовом файле.

  2. Упрощение структуры проекта: Использование conftest.py позволяет организовать тесты и их зависимости более структурированно, что делает проект более читаемым и поддерживаемым.

  3. Переиспользование кода: Фикстуры, определённые в 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 позволяет эффективно управлять фикстурами и их областью видимости, что упрощает организацию и поддержку тестов в проекте.

Тема: PyTest
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки