Ответ вслух Middle Тестирование и pytest спрашивают часто обновлено

Как вы тестируете Python-сервис

Вопрос

Как вы организуете тестирование бэкенд-сервиса на Python?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Основа pytest. Чистую логику, расчёт цен, валидацию, правила доступа, покрываю быстрыми юнит-тестами с parametrize, где краевые случаи видны таблицей.

Что должно прозвучать в ответе

  • Пирамида: много юнит-тестов, меньше интеграционных, немного 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 ошибок.

Термины по теме