Начало работы с Pytest

Pytest называют одним из лучших тестовых фреймворков для Python. Это не удивительно, ведь Pytest прост, масштабируем, и, как порой утверждают, «пайтоничен». С его помощью тест-кейсы пишут как функции, а не классы, плюс существуют всевозможные плагины, позволяющие добавлять параллельный запуск, красивые отчеты и т. п. Что ж, давайте создадим первый тестовый проект на Python и напишем первый тест.

Для начала скачиваем и устанавливаем Python 3. Далее создаем для нашего проекта новую директорию:

При создании нового Python-проекта неплохим решением является создание виртуального окружения для его зависимостей. Что это даст? Ну, к примеру, у ваших проектов, размещенных на одной машине, будут отсутствовать конфликтующие версии пакетов.

Для решения поставленной задачи воспользуемся pipenv:

Теперь можно установить pytest для нашего нового проекта:

Pipenv добавит в проект 2 новых файла: — Pipfile; — Pipfile.lock.

Первый служит для определения требования проекта, второй «блокирует» явные версии, которыми этот проект будет пользоваться. Что касается опции «–dev» в команде выше, то она означает, что пакет pytest станет применяться не для деплоя, а для разработки.

Пишем первый тест

Традиционно тесты размещают в директории tests/. Не будем нарушать эту традицию:

Теперь создадим для первого теста «Пайтон»-модуль с именем test_math.py и сразу добавим следующий код:

Тестам, которые пишутся посредством pytest, как правило, много кода не требуется. Можно сказать, что 2 строчки выше — это уже полноценный тест-кейс, причем он написан как функция, а не как класс. Импорты для этого базового теста не нужны. Вместо кастомных контрольных вызовов применяют нативный оператор контроля Python.

Запускаем тест

Что же, давайте выполним запуск. Для этого поменяем директорию на корневую директорию проекта, а потом вызовем модуль pytest:

Ура, первый тест пройден успешно!

Как же pytest обнаружил наш первый тест? Сделал он это по имени, то есть pytest ищет тест-функции с названием test_* в модулях с названием test_*.py. Причем интересный момент заключается в том, что pytest не требует в тестовых директориях файла __init__.py.

По материалам: https://blog.testproject.io/2019/07/16/python-test-automation-project-using-pytest/.