Задачи pytest: тесты, фикстуры, параметризация и mock

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

Чему посвящены задания

Начните с обычных случаев, границ и ожидаемых исключений. Затем объедините похожие примеры через параметризацию, вынесите подготовку в фикстуру и проверьте, подходит ли её scope. Следующие задания используют временную директорию, заглушку репозитория и подмену времени или случайности. Последняя тема — регрессионный тест на найденную ошибку.

Как выбрать хороший случай для теста

Тест проверяет контракт, а не повторяет вычисления функции. Например, если функция принимает положительное количество, полезны обычное значение, минимально допустимое значение и недопустимые ноль или отрицательное число — когда именно такие границы заданы условием. Самостоятельно придумывать другие требования к функции не нужно.

Для ожидаемой ошибки проверяйте конкретный тип исключения через pytest.raises. Слишком широкая проверка Exception может принять совершенно другой сбой за правильный результат. Если нужно проверить текст, сравнивайте только ту часть сообщения, которую обещает контракт.

Фикстуры и внешние зависимости

Изменяемые данные в общей фикстуре могут связывать независимые тесты. Проверяйте, создаётся ли состояние заново и не зависит ли тест от порядка запуска. Для файлов используйте выданную временную директорию; для внешней зависимости — интерфейс и заглушку, указанные в задаче.

При patching подменяйте имя там, где его читает проверяемый модуль. Управляемые время и случайность делают сценарий воспроизводимым, но не должны подменять само поведение, которое проверяет тест.

Выполняйте задания по порядку или выберите нужную технику ниже. Объяснения ООП, типов и тестирования есть в бесплатном курсе Python для продвинутых. Тесты HTTP-приложения разбираются в курсе FastAPI.

Задачи pytest: тесты, фикстуры, параметризация и mock