Как вы тестируете Python-сервис
Вопрос
Как вы организуете тестирование бэкенд-сервиса на Python?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Пирамида: много юнит-тестов, меньше интеграционных, немного e2e
pytest, фикстуры, parametrize, conftest
Интеграционные с настоящей БД в контейнере, транзакция на тест
Моки только на внешних границах: HTTP, почта, платежи, время
Тесты в CI на каждый PR, покрытие как сигнал
Тест на каждый исправленный баг
Что могут спросить следом
- Как тестировать асинхронный код?
- Как ускорить медленный набор тестов?
Разбор
Образцовый ответ: «Основа pytest. Чистую логику, расчёт цен, валидацию, правила доступа, покрываю быстрыми юнит-тестами с parametrize, где краевые случаи видны таблицей. Эндпоинты и работу с базой проверяю интеграционными тестами с настоящей PostgreSQL в контейнере: схема поднимается один раз на сессию, а каждый тест работает в транзакции с откатом, поэтому тесты независимы и быстрые. Внешние зависимости, платёжный шлюз, почту, HTTP-API, подменяю на границе: фейковый клиент или respx для httpx, а время передаю параметром или фиксирую библиотекой. Внутреннюю логику не мокаю, проверяю результат. Немного e2e на ключевые сценарии. Всё запускается в CI на каждый PR, покрытие смотрю как сигнал о непокрытых местах, а не как цель. Каждый исправленный баг закрепляю тестом. Асинхронный код тестирую через pytest-asyncio или anyio, а медленный набор ускоряю через pytest-xdist и укрупнение scope тяжёлых фикстур».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как протестировать код с внешним API
Следующий вопрос
Тестирование кода, зависящего от времени