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

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

Подпишись на мой канал в Telegram

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

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

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

Желаю удачи!

close

Бесплатная подписка

Введи свой адрес электронной почты и получай моментальный доступ к новым публикациям на сайте

Вступи в мою группу ВКонтакте

Егор Егоров

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

Если не сложно, напиши комментарий, как тебе статья.

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

  1. Miranda

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

    Ответить