Обзор мощной библиотеки для тестирования кода Pytest.
Введение
Вы знали, что тестирование кода приносит множество преимуществ, включая повышение уверенности в его функционировании и уменьшение регрессий? Если нет, то читайте дальше!
Написание и ведение тестов требует некоторой дополнительной работы, и именно поэтому я хочу максимально использовать все инструменты.
Python действительно предоставляет встроенные инструменты, такие как unittest, для поддержки тестирования, но он включает в себя написание большого количества шаблонного кода. Он также имеет ограниченную возможность повторного использования компонентов (или приспособлений в PyTest). Поэтому я буду тестировать приложения Python с помощью Pytest вместо других инструментов. Pytest также является самым популярным инструментом среди других альтернатив.
Примечание: В этой статье я буду использовать Python 3.
Почему Pytest?
Pytest — одна из самых популярных библиотек, посвященных модульному и функциональному тестированию. Но что делает её такой популярной? Вот ответ:
- Меньше шаблонности.
- Установочный код можно использовать повторно с помощью приспособлений.
- Фильтрация тестов во время выполнения (для одновременного выполнения только определенного набора тестов).
- Параметризация тестов (предоставление различных входных значений одному и тому же тесту, позволяющее тестировать различные сценарии с использованием одного теста).
- Архитектура на основе плагинов, обеспечивающая гибкость и более широкое внедрение.
- Возможность параллельно выполнять тесты.
Установка Pytest
Pytest — это библиотека, которую нам нужно будет добавить в наш проект. Как известно, я всегда выбираю для программирования виртуальную среду и работаю исключительно в ней:
$ mkdir pytest-demo $ cd pytest-demo $ python3 -m venv .venv $ source .venv/bin/activate
А потом я устанавливаю Pytest:
$ python -m pip install pytest
Это позволит включить команду pytest в нашей установочной среде. Установка завершает наш первый шаг в тестировании приложений Python с помощью Pytest. Давайте перейдем к следующему шагу.
Соглашения об именовании
Как и в любом тестовом фреймворке, в Pytest есть несколько мест, где он автоматически ищет тестовые файлы.
Имя файла должно начинаться с «test» или заканчиваться «test.py».
Определенные тестовые функции должны начинаться с «test_». Методы, которые не следуют этому соглашению, не выполняются. Чтобы увидеть, какие тесты будут выполняться без их запуска, мы можем использовать:
pytest --collect-only
А чтобы выполнить все тесты в нашем каталоге pytest-demo, я запускаю:
pytest pytest-demo
Если я не укажу каталог, Pytest будет работать в текущем каталоге по умолчанию. Или я могу указать отдельные файлы, если я захочу это сделать.
Или, если я хочу игнорировать каталог (например, виртуальную среду), то я могу использовать:
pytest --ignore .venv
Настройка кода
Теперь, когда вы знаете основы, давайте настроим код, который мы будем тестировать. Мы можем использовать сложный блок кода и написать несколько тестовых случаев вокруг него, но этот пост больше связан с Pytest, чем с написанием тестовых случаев. Поэтому мы будем придерживаться простой задачи сложения и вычитания:
# calculator.py def add(firstNumber, secondNumber): return firstNumber + secondNumber def subtract(firstNumber, secondNumber): return firstNumber - secondNumber
Тестирование приложений
Теперь, когда у нас есть наш минимальный фрагмент кода, мы можем начать с нашего основного теста. Мы будем делать расчет 2 + 1 = 3. Для этого я определю наш тест как:
# calculator_test.py from calculator import add def test_add(): firstNumber = 2 secondNumber = 1 assert add(firstNumber, secondNumber) == 3
Ключевое слово assert сравнивает два значения, которые оно получает, и возвращает True или False на основе их равенства. Мы также можем иметь подробные утверждения, которые могут быть полезны при отладке. Они могут быть записаны как:
assert True == False, "This is a demo with a failed assertion and a detailed message."
Подробные утверждения могут быть полезны для целей отладки.
Наконец, мы можем запустить наш тест с помощью команды:
pytest
И вот, у нас есть наш первый успешный тест!
Точно так же мы можем написать тест и для нашего метода вычитания:
# calculator_test.py from calculator import add def test_add(): firstNumber = 2 secondNumber = 1 assert subtract(firstNumber, secondNumber) == 1
Уровень отладки Pytest
Я могу передать параметр во время выполнения тестов, чтобы увеличить/уменьшить многословность выходных данных, генерируемых Pytest. Доступны следующие варианты:
- v: увеличивает многословность.
- q: более тихий вывод.
- r: сводка тестов.
- rp: сводка пройденных тестов.
- rp: сводка неудачных тестов.
Заключение
Это было краткое введение в тестирование приложений Python с помощью Pytest. Если вам понравилась статья напиши об этом в комментариях или почитайте другие похожие статьи на тему Python.
Желаю удачи!
Благодаря простому синтаксису, pytest очень прост для запуска. Это важная часть рабочего процесса и является чрезвычайно полезным вводным руководством к среде тестирования pytest
рад что принес вам пользу!