
Pytest — это фреймворк для написания автотестов на Python, который стал де-факто стандартом в индустрии. Согласно опросу Python Developers Survey, его предпочитают 53% разработчиков, тогда как встроенный unittest используют лишь 23%.
Показано 19 программ



















| Программа | Школа | Срок | Стоимость |
|---|---|---|---|
| Профессия «Python-разработчик» | Skillbox | 10 месяцев | 157 335 ₽ вместо 286 064 ₽ |
| Автоматизированное тестирование на Python | Skillbox | 9 месяцев | 118 666 ₽ вместо 215 757 ₽ |
| ДО Профессия Python-разработчик | GeekBrains | 10 месяцев | 149 001 ₽ вместо 298 001 ₽ |
| Python-разработчик | Эдюсон | 9 месяцев | 116 400 ₽ вместо 291 000 ₽ |
| Python с нуля | Merion | 4 месяца | 19 890 ₽ вместо 30 600 ₽ |
Специализированных курсов, посвящённых только pytest, на рынке немного: обычно он включён в более крупные программы по автоматизации тестирования или backend-разработке.
В каталоге представлено 19 программ, в которых pytest рассматривается на практике: от фикстур и параметризации до моков, Allure-отчётов и интеграции с CI. Стоимость обучения варьируется от 10 000 до 205 500 рублей, медианная цена — 88 800 рублей.
Чтобы не переплачивать за лишние модули, стоит отфильтровать курсы по цене и длительности, ориентируясь на текущие задачи.
Pytest — это внешний инструмент для тестирования Python-приложений. Такой разрыв сохраняется с 2018 года и превышает двукратный.
Причина такого выбора очевидна. В unittest тест оформляется как метод класса, наследующего от TestCase, с обязательными вызовами self.assertEqual и другими церемониями. В pytest же тест — это обычная функция с простым assert. Фреймворк сам анализирует выражение и сообщает, какие значения не совпали. Для новичка разница ощущается как «сначала выучи протокол» против «просто напиши проверку».
Второе важное преимущество pytest для команд — фикстуры. Этот механизм управляет подготовкой данных и окружения, позволяя контролировать жизненный цикл объектов: например, поднять базу один раз на всю сессию, а тестового пользователя создавать заново для каждого теста. В unittest аналогичная задача решается через setUp и tearDown, что на крупных проектах часто выливается в запутанное наследование.
Стоит учитывать, что тот же опрос показал: 36% Python-разработчиков вообще не используют юнит-тесты. Поэтому умение писать автотесты само по себе выделяет кандидата на собеседовании, даже если в резюме нет громких упоминаний.
Хотя программы отличаются по глубине, базовая структура у них похожа. Ниже перечислено то, что должно присутствовать в курсе, чтобы после его прохождения можно было уверенно работать с чужим тестовым проектом.
Запуск и организация тестов. Изучается команда pytest, её флаги -v, -k, -x, а также запуск отдельных файлов или конкретных тестов. Рассматриваются правила поиска тестов (именование test_*.py и test_*), назначение rootdir и настройка через pytest.ini или секцию в pyproject.toml. Отдельно разбирается файл conftest.py, где хранятся общие настройки и фикстуры для директории.
Фикстуры. Изучается декоратор @pytest.fixture, передача фикстуры в тест через аргумент, а также области видимости: function, class, module, session. Особое внимание уделяется фикстурам с yield, которые выполняют очистку после теста: закрывают соединения, чистят таблицы, удаляют временные файлы. В качественных курсах также объясняют autouse-фикстуры и предостерегают от их чрезмерного использования.
Параметризация. С помощью @pytest.mark.parametrize один тест превращается в десяток проверок с разными входными данными. Это первый инструмент, который действительно экономит время: вместо пяти похожих функций получается одна с таблицей значений. Также рассматривается параметризация самих фикстур.
Маркеры. @pytest.mark.smoke, @pytest.mark.slow и пользовательские метки позволяют запускать нужные наборы тестов через pytest -m smoke. Встроенные маркеры skip, skipif и xfail используются для честного обозначения временно нерабочих проверок, а не для их удаления.
Работа с ошибками. Чтение трейсбеков pytest, использование флага --pdb, вывод print и логов в отчёт, проверка исключений через pytest.raises. Этот навык редко подробно освещается на курсах, но именно он отличает человека, способного чинить чужие тесты, от того, кто умеет только писать свои.
Когда в программе нет таких тем, обучение даёт лишь общее представление об инструменте, а не применимый на практике навык. Стоит обратить внимание на версии: pytest уже давно выпускается за пределами восьмой мажорной ветки, поэтому материалы, где всё ещё демонстрируются устаревшие подходы к объявлению маркеров или используется nose, были созданы очень давно. Актуальность программы легко определить по одному признаку: упоминается ли pyproject.toml как место для конфигурации. Более глубокую теоретическую базу по проверке отдельных функций изучают на курсах по юнит-тестированию.
Базовый pytest — это компактное ядро. Основная мощь достигается за счёт плагинов, и в учебных программах обычно рассматривают около пяти таких расширений.
pytest-cov измеряет, насколько тесты покрывают код, и указывает на строки, которые не выполнялись ни разу. Хотя показатель покрытия не является гарантией качества — даже 90% не защищают от ошибок, — отчёт помогает обнаружить целые модули, оставшиеся без внимания тестов.
pytest-mock заменяет части системы заглушками: внешние API, отправку писем, обращения к платёжным шлюзам. Без таких подмен тест начинает зависеть от сети и сторонних серверов, что приводит к ложным сбоям.
pytest-xdist организует параллельное выполнение тестов в нескольких процессах. Для набора из тысячи проверок разница ощутима: вместо получаса ожидания — всего пять минут. Если разработчику приходится ждать результат полчаса, он, скорее всего, просто перестанет запускать тесты.
pytest-asyncio предназначен для проверки асинхронного кода: корутин и всего, что работает на async/await. Для проектов, основанных на FastAPI и aiohttp, этот плагин становится обязательным.
Allure формирует удобный веб-отчёт с результатами тестов, включая скриншоты, шаги выполнения и историю прогонов. Именно такой отчёт показывают менеджеру или заказчику, поэтому в вакансиях QA automation Allure упоминается не реже, чем сам pytest. Если в компании нет инфраструктуры для Allure, можно использовать плагин pytest-html, который тоже создаёт простой HTML-отчёт.
Сам по себе Python вместе с pytest лишь организует и запускает тесты; то, что именно проверяется, определяют соседние библиотеки. В учебных программах обычно выделяют четыре типовых сценария.
Тестирование API. Связка pytest и requests: отправляется запрос, затем проверяются код ответа, схема и тело. Это самый быстрый способ получить практическую пользу от автотестов, так как API стабильнее пользовательского интерфейса, и тесты реже ломаются без видимых причин. Более детально эта тема раскрывается на курсах по тестированию API.
UI-тесты. Selenium или более современный Playwright открывают браузер и воспроизводят действия пользователя, а pytest управляет запуском, фикстурами и формированием отчёта. Это капризное направление: интерфейс постоянно меняется, вызывая падения тестов. В хорошем курсе обязательно разбирается паттерн Page Object — без него поддержка таких тестов становится невыносимой.
Тесты веб-приложений. У Django, Flask и FastAPI существуют собственные тестовые клиенты, и pytest взаимодействует с ними через плагины типа pytest-django. В таких тестах используются тестовые базы данных, а транзакции откатываются после каждой проверки. О самой разработке на этом стеке мы рассказывали в материале, посвящённом Django-разработчику.
Запуск в CI/CD. Финальный этап любой серьёзной программы: тесты выполняются не на локальной машине, а автоматически после каждого пуша в GitLab CI, GitHub Actions или Jenkins. Если ветку с неудачными тестами нельзя слить в основную, автотесты превращаются в механизм защиты, а не просто в отчётность.
Здесь же проявляется главная боль автоматизации — нестабильные тесты, которые падают время от времени без изменений в коде. Их называют флейками, и команды тратят на борьбу с ними больше времени, чем на написание новых проверок. В курсе стоит искать блок, посвящённый явным ожиданиям вместо sleep, изоляции тестовых данных и перезапуску упавших тестов с помощью pytest-rerunfailures. Если о флейках не упоминается вообще, программу, скорее всего, составил человек без опыта поддержки боевого тестового проекта.
Отдельных программ, посвящённых исключительно pytest, на русскоязычном рынке почти нет. Чаще всего он представлен крупным разделом в курсах по автоматизации тестирования или backend-разработке на Python. Такой подход объясним: сам по себе инструмент не работает, его применяют вместе с языком, git и пониманием того, что именно следует проверять.
Для старта достаточно уверенного владения базовым Python. Нужно разбираться в функциях, декораторах хотя бы на уровне применения готовых решений, уметь работать с модулями и виртуальным окружением. Без этого фикстуры и параметризация останутся непонятными, поскольку обе опираются на синтаксис языка.
Кому стоит рассмотреть обучение:
Если направление ещё не выбрано, а инструмент вторичен, лучше начать с общего каталога программ по автоматизированному тестированию: там предложений больше и есть варианты со стеком на Java и JavaScript. Чем занимается такой специалист и какой стек ему требуется, объясняется в статье о том, кто такой тестировщик-автоматизатор.
В каталоге цены начинаются с 10 000 ₽ и достигают 205 500 ₽, медианная стоимость — 88 800 ₽. Разница обусловлена форматом программ, а не их качеством.
Бюджетный сегмент — это короткие модули и подписки на 1–3 месяца: теория, тренажёр, самостоятельные упражнения. Такой вариант подходит тем, кто уже владеет Python и нуждается только в освоении инструмента.
Дорогие программы рассчитаны на 6–12 месяцев и ведут от нуля до трудоустройства: язык, git, SQL, API, UI, CI/CD, дипломный проект и поддержка ментора. В этом случае оплачивается не столько фреймворк, сколько сопровождение и рецензирование кода.
Базовые возможности pytest реально освоить за пару недель практики. Чтобы дойти до уровня «могу сопровождать тестовый проект в команде», потребуется несколько месяцев регулярной работы с настоящим кодом. На собеседованиях обычно спрашивают про области видимости фикстур, разницу между skip и xfail, устройство conftest.py и способы подмены внешнего сервиса. Если кандидат уверенно отвечает на эти четыре вопроса и показывает собственный репозиторий с тестами, формальный сертификат, скорее всего, не потребуют. Зарплатные ориентиры по направлению собраны отдельно в обзоре о доходах тестировщика.
Проверить синтаксис и возможности фреймворка можно бесплатно в официальной документации pytest, а сведения об актуальной версии и истории релизов — на странице пакета в PyPI.
В каталог включаются курсы, где pytest рассматривается предметно, а не упоминается вскользь в плане. Мы изучаем программы целиком и оцениваем их по четырём критериям.
Первый — наличие практики с кодом, который проверяет преподаватель или ментор, а не только автоматизированные тесты тренажёра. Второй — глубина: разбираются ли фикстуры, параметризация, моки и отчёты, или материал заканчивается на первом assert. Третий — актуальность стека: Playwright и современные версии Python вместо устаревших материалов. Четвёртый — отзывы выпускников и поведение школы при возвратах.
Порядок карточек учитывает эти оценки, цену и полноту информации о программе. Данные о стоимости и сроках поступают из фидов школ и обновляются автоматически, поэтому цифры на странице соответствуют тем, что указаны на сайте школы.
