Pytest

Pytest это среда тестирования, основанная на Python. Ее используют для написания и выполнения тестового кода.

Логотип Pytest

Тестировать код важно, потому что:

  • даже если баги не нашли, это помогает разработчику быть уверенным в качестве кода;
  • с помощью автотестов уменьшается количество регрессионных ошибок — багов, которые обнаруживаются в уже протестированном коде. Бывает, что после внесения изменений в программу перестает работать кусок кода, который не меняли.

Чтобы написать и поддерживать тесты, нужно время. Поэтому разработчики используют дополнительные инструменты, в том числе Pytest.

Преимущества Pytest

Pytest подходит и для модульного (тестирование отдельных компонентов ПО), и для функционального тестирования (тестирование способности кода удовлетворять бизнес-требованиям).

У Python есть встроенные инструменты для тестирования, например unittest, но в нем придется писать много шаблонного кода и у него ограниченная возможность повторного использования компонентов (в Pytest это называется приспособлениями). Поэтому многие программисты выбирают Pytest для тестирования приложений.

Вот основные преимущества Pytest перед встроенными инструментами:

  1. Меньше повторяющегося кода за счет независимости от API.
  2. Выполнение определенного набора тестов с помощью фильтрации.
  3. Параметризация тестов — запуск одного и того же теста с разными наборами параметров.
  4. Гибкость — архитектура библиотеки основана на плагинах, которые можно установить отдельно.
  5. Полная обратная совместимость с unittest — возможность запуска тестов, написанных на нем.
  6. Выполнение нескольких тестов параллельно.
  7. Установочный код можно использовать повторно.

Установка и настройка Pytest

Установить и настроить Pytest можно из командной строки. Для программирования создайте виртуальную среду и работайте в ней. Для Python 3.6+ это делается так:

$ mkdir pytest-skillfactory
$ cd pytest-skillfactory
$ python3 -m venv .venv
$ source .venv/bin/activate # в Windows: $ venv\Scripts\activate.bat

Затем установите Pytest с помощью команды:

$ pip install pytest

Это включит команду pytest в установочной среде. На этом установка завершена.

Курс

Тестировщик ПО

Пройдите курс-симулятор и получите профессию QA-инженера с навыками автоматизации на Python. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

Требования к названиям

Есть требования к наименованию тестовых файлов и директорий, чтобы Pytest автоматически мог их найти.

  1. Имя файла должно начинаться с ”test” или заканчиваться “test.py”.
  2. Имена функций и переменных должны быть написаны в нижнем регистре, а слова должны быть разделены подчеркиванием. При этом имя тестовой функции должно начинаться с “test_”, например “test_skillfactory”.

Пример использования Pytest для тестирования приложения

Протестируем простую функцию приветствия. В файле welcome.py содержится функция, которая возвращает строку с приветствием.

# welcome.py
def hello(name):
return “Hello, “ + name

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

В файл welcome_test.py импортируем тестируемую функцию и напишем тест:

# welcome_test.py
from welcome import hello
def test_hello():
name = “SkillFactory”
assert hello(name) == “Hello, SkillFactory”

Ключевое слово assert сравнивает два значения и возвращает True, если они равны, и False — если нет.

Еще можно прописывать сообщение для отладки так:

assert hello(name) == “Hello, noname”, “Сообщение, если тест не прошёл”

Отладочные сообщения нужны, чтобы отследить, какой именно тест не проходит.

В одном файле с тестами может быть не одна тестовая функция, а несколько. Помимо этого, объединить несколько функций можно, поместив их в один класс. Пример:

# содержимое файла test_class_sf.py
class TestClassSF:
def test_one(self):
x = 1
assert x != 1 // False
def test_two(self):
x = 1
assert x != 2 // True

После создания тестов необходимо их запустить.

Запуск тестов

Чтобы просмотреть, какие тесты будут выполняться, не запуская их, и проверить правильность выбора опций, можно использовать:

$ pytest —collect-only

Чтобы выполнить все тесты в каталоге pytest-skillfactory (пример из начала статьи):

$ pytest pytest-skillfactory

Если для команды выше не указать каталог, по умолчанию Pytest будет работать в текущем каталоге. Например:

$ pytest

В качестве аргументов можно указать отдельные файлы и даже функции:

$ pytest test_mod.py #запустит все тесты из файла test_mod.py
$ pytest test_mod.py::test_func #запустит функцию test_func из файла test_mod.py

Детализированный сводный отчет

Флаг -r используется для отображения краткой сводной информации о тесте. Так можно получить общую картину обо всех неудачных тестах в одном отчете.

По умолчанию для отображения списка сбоев и ошибок используется fE.

Пример использования флага -r с параметром a:

$ pytest -ra

Опция -r может принимать несколько параметров. В примере выше будут отображены все тесты, кроме пропущенных.

Вот список основных доступных параметров:

  • f — тесты, которые не прошли (результат отличается от ожидаемого);
  • E — ошибки;
  • s — пропущенные тесты;
  • p — тесты, которые прошли (результат совпадает с ожидаемым);
  • P — тесты, которые прошли и вернули какое-то значение.

Описание всех возможностей Pytest есть в официальной документации.

Курс-симулятор

Тестировщик на Python

Вам необязательно иметь техническое образование и навыки программирования, чтобы начать.

  • игровой формат обучения;
  • Python для автоматизаци;
  • настоящие заказы и проекты.

Узнать больше

Промокод BLOG +5% скидки

Другие термины на букву «P»

Pandas
PHP
PostgreSQL
Postman
PSR

Все термины

Курсы по теме

(рейтинг: 4.2, голосов: 5)
Добавить комментарий