Какой был процесс запуска тестов и тестирования
Что проверяют
Работали ли вы с тестами руками или только слышали, что они «где-то в CI». Интервьюеру важно, кто запускал тесты, когда и что происходило при падении. Следом обычно спрашивают, как вы боролись с медленными или нестабильными тестами.
Как отвечать
Опишите конвейер своего проекта по шагам, от ноутбука до прода. Нужны ваши реальные инструменты и цифры: сколько тестов, сколько минут идёт прогон, какое покрытие. Каркас:
- локально:
pytestс фикстурами иconftest.py, маркеры вроде@pytest.mark.slow, чтобы быстрые тесты гонять постоянно, а медленные по запросу; - перед коммитом:
pre-commitсruffиmypy, чтобы в CI не уезжали очевидные ошибки; - в CI: прогон на каждый merge request в GitHub Actions или GitLab CI, матрица версий Python через
toxилиnox, параллельный запуск черезpytest-xdist(-n auto); - зависимости: база и брокер поднимаются в Docker через
docker composeилиtestcontainers, внешние HTTP-сервисы подменяются черезunittest.mock,responsesилиrespx; - покрытие:
pytest-covс порогом--cov-fail-under, который валит сборку при просадке; - гейт: без зелёного прогона ветку нельзя слить, деплой идёт только после этого.
Отдельно скажите, кто писал тесты: разработчики вместе с кодом или отдельные QA-автоматизаторы, и где проходила граница между юнит- и интеграционными тестами. Если процесс был слабым, так и скажите и добавьте, что вы бы поменяли. Честное «тесты запускали вручную перед релизом, я перенёс их в CI» звучит лучше приукрашенной картины.
Где спотыкаются
Делят инструменты странно: «юнит-тесты на unittest, интеграционные на pytest». pytest запускает и тесты, написанные на unittest, а разделение по типу теста делается маркерами и каталогами, а не фреймворками.
Называют процент снижения багов, который не могут объяснить. На вопрос «как вы это посчитали» ответа нет, и доверие к остальному рассказу пропадает.
Молчат про нестабильные тесты. Лучше сказать, как их находили и чинили, чем делать вид, что их не было: перезапуск через pytest-rerunfailures это временная мера, а не решение.