Баннер мобильный (3) Пройти тест

Pytest

Глоссарий

20 октября 2023

Поделиться

Скопировано

Содержание

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

    pytest
    Логотип 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 в установочной среде. На этом установка завершена.

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

    Есть требования к наименованию тестовых файлов и директорий, чтобы 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 есть в официальной документации.

    Поделиться

    Скопировано

    0 комментариев

    Комментарии