Короткий ответ
Тесты обычно располагают в отдельном каталоге tests/, зеркалирующем структуру пакета приложения, с именами файлов test_<модуль>.py, что упрощает поиск тестов для конкретного модуля и их автоматический запуск.
Как это работает подробнее
Структура tests/unit, tests/integration, tests/e2e (или похожая) явно разделяет тесты по скорости и типу зависимостей, что позволяет запускать их выборочно: например, только быстрые unit-тесты при каждом коммите, а интеграционные — реже, в CI перед мержем, не блокируя разработчика долгим ожиданием.
Пример кода
testing_example_305.txt
project/
app/
users/
service.py
tests/
unit/
users/
test_service.py
integration/
users/
test_service_with_db.py
conftest.pyЧто использовать на практике
- Практика. conftest.py на уровне каждого подкаталога позволяет объявлять фикстуры, специфичные именно для этого набора тестов (например, фикстуры с реальной БД только в tests/integration), не засоряя ими unit-тесты и не создавая случайных скрытых зависимостей между слоями.
Подводные камни
- Риск. Класть все тесты в один файл без структуры — со временем это усложняет навигацию и совместную работу над тестами нескольких разработчиков. Смешивать в одном каталоге быстрые unit-тесты и медленные интеграционные без явного разделения, из-за чего разработчики начинают игнорировать запуск всего набора тестов локально перед коммитом.