Тестирование кода на Python с PyTest: основные возможности и примеры

Исследователи из JetBrains подсчитали, что каждый второй программист, работающий на языке Python, использует фреймворк PyTest для автоматизации тестирования. Почему он так популярен? Подробно разбираемся в возможностях решения и его преимуществах для работы QA-специалистов.
Что такое PyTest
PyTest — фреймворк для быстрого создания автоматических тестов с возможностью масштабирования на языке Python. С помощью этого решения можно не только поддерживать сложное функциональное тестирование приложений и библиотек, но и настраивать параметры запуска тестов, а также разрабатывать окружение для их реализации.
Пример PyTest теста
Напишем тест для проверки работы функции sum2 (x,y). Она возвращает сумму двух входящих аргументов. В тестовом случае test_sum2() мы будем использовать assert для сравнения результата вызова функции sum2 () с ожидаемым значением. Тест будет считаться пройденным, если результаты совпадут, и непройденным, если будут обнаружены расхождения. В этом случае при использовании команды pytest мы увидим сообщение об ошибке.
Также полезно:
Будет ли востребована профессия тестировщика в 2025 году?
Как работает PyTest
В основу работы PyTest заложен несложный алгоритм: решение использует функции описания тестовых случаев, автоматически выявляет эти функции в коде и выполняет их. Используя PyTest, специалисты могут внедрять в код теста следующие функции и механизмы:
- Assertions (утверждения). Механизм для оценки корректности выполнения кода в тестовых случаях. С их помощью решение сравнивает полученные результаты выполнения кода с ожидаемыми. При обнаружении несоответствия тест считается непройденным и Pytest генерирует сообщение об ошибке.
Пример кода:
- Parametrization (настройка параметров). Установка наборов характеристик для проверки разных вариантов использования кода тестов. Еще позволяет исключить дубли.
Пример кода:
- Fixtures (фикстуры). Функции для создания и предварительной настройки тестового окружения. Решение запускает фикстуры перед реализацией каждого тестового случая или их группой, чтобы подготовить данные к тестированию.
Пример кода:
- Marking (маркировки). Механизм сопоставления дополнительных метаданных с тестовыми случаями или их группами для запуска или пропуска тестов согласно заданным условиям либо для настройки дополнительных действий до или после выполнения тестов.
Пример кода с использованием метки smoke для быстрого проведения основных тестов и regression для проверки стабильности и воспроизводимости отдельных функций приложения:
- Test sessions (тестовые сеансы). Запуск тестов в разных режимах. Например:
- test discovery — для обнаружения недостатков кода;
- failing tests replay — для воспроизведения отказов;
- coverage reporting — режим с генерацией отчетов о покрытии.
Этот механизм дает возможность подстроить тестирование под требования любого проекта.
Пример кода для проверки корректности операций сложения и вычитания:
Для запуска тестовых сеансов и реализации всех тестов из этого каталога достаточно указать pytest в командной строке.
Читайте также:
Какие бывают этапы и виды тестирования: подробный разбор
Возможности и недостатки PyTest
Разработчики и QA специалисты выбирают PyTest благодаря следующим преимуществам:
- Возможность получить детальную информацию о проваленных тестах. Решение использует универсальный оператор.
- Отсутствие сложных конструкций в синтаксисе кода — он может состоять всего из двух строк.
- Автоматическое обнаружение тестовых функций и модулей. Стандартно Pytest определяет файлы, в которых используются методы и функции с префиксом test вне классов и внутри классов с префиксом Test.
- Автоматическое генерирование отчетов об ошибках в тестах.
- Использование фикстур для работы с параметризованными и несложными тестами и создания контекста для групп тестов.
- Совместимость с Unittest.
- Возможность с помощью меток настраивать условия, входные данные и другие элементы поведения тестов.
- Более 1500 регулярно обновляемых внешних плагинов и наборов разнообразных дополнительных функций.
- Активно развивающееся сообщество профессионалов.
Но отмечают, что у PyTest присутствуют и некоторые недостатки:
- Необходимость тщательно изучать документацию, чтобы понять логику и алгоритмы работы лаконичного кода решения.
- Необходимость устанавливать фреймворк отдельно, так как он не входит в стандартную библиотеку Python. Для этого у вас должен быть установлен Python 3.8 + или PyPy 3.
- Невозможность запускать тесты PyTest на других фреймворках.
Слушатели курса «Тестирование с PyTest» подробно изучают все элементы фреймворка и последовательность написания в нем тестовых случаев, а также приобретают практические навыки в работе с PyTest с помощью тренажера.