Pytest — тестирование приложений в Python 3

Pytest - тестирование приложений в Python 3

Обзор мощной библиотеки для тестирования кода 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

И вот, у нас есть наш первый успешный тест!

Pytest - тестирование приложений в Python 3

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

# 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.

Желаю удачи!

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Miranda

    Благодаря простому синтаксису, pytest очень прост для запуска. Это важная часть рабочего процесса и является чрезвычайно полезным вводным руководством к среде тестирования pytest

    Ответить
    1. Егор Егоров автор

      рад что принес вам пользу!

      Ответить