Фикстуры в
pytest — это мощный инструмент для организации тестовой архитектуры. Они позволяют:
✔️ Не дублировать код: создаёте данные один раз и используете их в нескольких тестах.
✔️ Переиспользовать данные между модулями: через
conftest.py фикстуры становятся доступны во всех тестах.✔️ Параметризовать тесты:
params запускает один тест с разными входными данными.✔️ Автоматически подключать фикстуры:
autouse=True делает их доступными без явного указания в тестах.Пример простой фикстуры для пользователя:
import pytest
from dataclasses import dataclass
@dataclass
class User:
name: str
email: str
@pytest.fixture()
def user_fixture():
return User(name="Patrick", email="myemail@gmail.com")
def test_valid_user(user_fixture):
assert validate_user(user_fixture).is_valid
def test_valid_email(user_fixture):
assert validate_email(user_fixture).is_valid
Советы по организации фикстур:
✔️ Для маленьких проектов фикстуры можно держать в
conftest.py.✔️ Для больших проектов удобно создавать отдельную папку
fixtures/ и импортировать их в conftest.py.✔️ Используйте
scope (function, module, session) для контроля времени жизни фикстуры.✔️ Параметр
name помогает давать понятные имена фикстурам.Как используют фикстуры известные проекты:
🔥 Pydantic — держат фикстуры в тестовых модулях, высокая когезия.
🔥 Streamlit — комбинируют unit-тесты и e2e-тесты с фикстурами в
conftest.py.🔥 Hypothesis — генерирует случайные данные для property-based testing.
➡️ Чуть подробнее в полезной статье
🐸 Библиотека питониста
#буст