Задачи pytest: тесты, фикстуры, параметризация и mock
Подборка для разработчиков и начинающих автоматизаторов тестирования. В этих упражнениях нужно писать тесты для конкретного поведения: проверки входных данных, очереди, сохранения файла, расчёта цены и генератора токенов. Решения проверяются в браузере.
Чему посвящены задания
Начните с обычных случаев, границ и ожидаемых исключений. Затем объедините похожие примеры через параметризацию, вынесите подготовку в фикстуру и проверьте, подходит ли её scope. Следующие задания используют временную директорию, заглушку репозитория и подмену времени или случайности. Последняя тема — регрессионный тест на найденную ошибку.
Как выбрать хороший случай для теста
Тест проверяет контракт, а не повторяет вычисления функции. Например, если функция принимает положительное количество, полезны обычное значение, минимально допустимое значение и недопустимые ноль или отрицательное число — когда именно такие границы заданы условием. Самостоятельно придумывать другие требования к функции не нужно.
Для ожидаемой ошибки проверяйте конкретный тип исключения через pytest.raises. Слишком широкая проверка Exception может принять совершенно другой сбой за правильный результат. Если нужно проверить текст, сравнивайте только ту часть сообщения, которую обещает контракт.
Фикстуры и внешние зависимости
Изменяемые данные в общей фикстуре могут связывать независимые тесты. Проверяйте, создаётся ли состояние заново и не зависит ли тест от порядка запуска. Для файлов используйте выданную временную директорию; для внешней зависимости — интерфейс и заглушку, указанные в задаче.
При patching подменяйте имя там, где его читает проверяемый модуль. Управляемые время и случайность делают сценарий воспроизводимым, но не должны подменять само поведение, которое проверяет тест.
Выполняйте задания по порядку или выберите нужную технику ниже. Объяснения ООП, типов и тестирования есть в бесплатном курсе Python для продвинутых. Тесты HTTP-приложения разбираются в курсе FastAPI.
- Первые тесты на pytest: нормальные сценарии, граничные случаи и исключения — задача по Python
Какой аргумент наиболее точно описывает практическую проблему одной большой тест-функции? Проверьте ответ в задаче из бесплатного курса Python.
Python для продвинутых: ООП, типизация и тестирование - Python: Параметризованные тесты для валидатора имени пользователя
Напишите параметризованные pytest-тесты для функции проверки имени пользователя. Практика @pytest.mark.parametrize.
Python для продвинутых: ООП, типизация и тестирование - Фикстуры pytest и scope: напишите тесты для очереди
Напишите pytest-тесты для очереди, используя фикстуры с разными областями видимости. Задача на fixture scope.
Python для продвинутых: ООП, типизация и тестирование - Python: Напиши тесты для функции сохранения отчёта с tmppath
Протестируйте функцию сохранения отчёта в файл через pytest tmppath, не затрагивая реальные файлы проекта.
Python для продвинутых: ООП, типизация и тестирование - Python: Напиши тесты для PricingService с stub-репозиторием
Проверьте PricingService с помощью stub-репозитория и pytest. Практическая задача на тестируемый дизайн Python.
Python для продвинутых: ООП, типизация и тестирование - Python: Напиши тесты для генератора токенов с патчингом времени и случайности
Напишите детерминированные тесты генератора токенов, подменяя время и случайность через monkeypatch или unittest.mock.
Python для продвинутых: ООП, типизация и тестирование - Регрессионный тест Python: воспроизведите ошибку в calculatetax
Воспроизведите ошибку в calculatetax при нулевой ставке, исправьте функцию и подтвердите результат регрессионным тестом.
Python для продвинутых: ООП, типизация и тестирование
