Этап 10 из 11 · ≈ 6 ч

Окружение, инструменты и тесты

Основа с Junior

Виртуальные окружения, зависимости, uv и poetry, ruff, pytest.

Что важно знать

  • venv, pip, lock-файлы; современные менеджеры — uv, poetry.
  • ruff — линтер и форматтер.
  • pytest: фикстуры, параметризация, monkeypatch, pytest-asyncio.

Критерии освоения

Junior ≈ 6 ч

  • Создаёт виртуальное окружение и фиксирует зависимости
  • Пишет тесты на pytest с фикстурами и параметризацией

Практика. Покрыть учебный проект тестами pytest с фикстурами и отчётом покрытия.

Middle ≈ 4 ч

  • Настраивает проект на uv или poetry с ruff и проверкой типов в CI
  • Подменяет внешние зависимости в тестах и тестирует асинхронный код

Практика. Настроить проект на uv с ruff, mypy и pytest в CI.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Зачем нужна конструкция if __name__ == "__main__"?Junior

Код под if __name__ == "__main__": выполняется, только когда файл запущен как скрипт, а не импортирован.

Полный разбор
Как работает импорт модулей и что делать с циклическими импортами?Middle

При первом import модуль ищется по sys.path, выполняется сверху вниз один раз и кладётся в sys.modules; повторные импорты берут его оттуда. Циклический импорт ломается, когда модуль A ещё не дошёл до нужного имени, а B уже пытается его взять — ImportError…

Полный разбор
Что такое аннотации типов и проверяются ли они при выполнении?Junior

Аннотации — подсказки о типах для людей и инструментов; интерпретатор их не проверяет.

Полный разбор
Как работает unittest.mock.patch и почему патчить нужно там, где объект используется?Middle

patch временно заменяет атрибут по имени на Mock. Подменять нужно в модуле, где имя ищется, а не там, где оно определено: если orders.py сделал from payments import charge, патчить orders.charge, а не payments.charge.

Полный разбор
Зачем нужно виртуальное окружение и как управлять зависимостями?Junior

Виртуальное окружение — отдельная копия Python со своими пакетами для каждого проекта.

Полный разбор
Как работают фикстуры pytest и что такое их scope?Middle

Фикстура — функция с @pytest.fixture, результат которой pytest передаёт в тест по имени параметра. Код после yield — очистка. scope (function, class, module, package, session) задаёт, как часто фикстура создаётся заново. Общие фикстуры живут в conftest.py и…

Полный разбор
Как писать тесты на pytest — assert, запуск, параметризация?Junior

Тест — функция с именем test_… в файле test_.py, проверки — обычный assert: pytest показывает, какие значения не совпали. Запуск — команда pytest (или pytest путь::имя_теста). Один тест на много входов — @pytest.mark.parametrize. Ожидаемое исключение — with…

Полный разбор
Как подключить проверку типов mypy или pyright к проекту?Junior

mypy и pyright — статические анализаторы: читают код и аннотации без запуска и находят несоответствия типов (передали str вместо int, забыли проверить None, вызвали несуществующий метод). Ставят как зависимость разработки, настраивают в pyproject.toml и…

Полный разбор

Разборы темы

Документация

← Вся карта «Python»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования