Главная | Все статьи | Код

Тестирование кода на Python с PyTest: основные возможности и примеры

Тестирование Python Время чтения статьи ~5 минут
Тестирование кода на Python с PyTest: основные возможности и примеры главное изображение

Исследователи из JetBrains подсчитали, что каждый второй программист, работающий на языке Python, использует фреймворк PyTest для автоматизации тестирования. Почему он так популярен? Подробно разбираемся в возможностях решения и его преимуществах для работы QA-специалистов.

Изучите основы тестирования

Рекомендуем начать с бесплатных уроков

Что такое PyTest

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

Пример PyTest теста

Напишем тест для проверки работы функции sum2 (x,y). Она возвращает сумму двух входящих аргументов. В тестовом случае test_sum2() мы будем использовать assert для сравнения результата вызова функции sum2 () с ожидаемым значением. Тест будет считаться пройденным, если результаты совпадут, и непройденным, если будут обнаружены расхождения. В этом случае при использовании команды pytest мы увидим сообщение об ошибке.

def sum2(x, y):
    return x + y


def test_sum2():
    assert sum2(10, 7) == 17

Также полезно: Будет ли востребована профессия тестировщика в 2025 году?

Как работает PyTest

В основу работы PyTest заложен несложный алгоритм: решение использует функции описания тестовых случаев, автоматически выявляет эти функции в коде и выполняет их. Используя PyTest, специалисты могут внедрять в код теста следующие функции и механизмы:

  • Assertions (утверждения). Механизм для оценки корректности выполнения кода в тестовых случаях. С их помощью решение сравнивает полученные результаты выполнения кода с ожидаемыми. При обнаружении несоответствия тест считается непройденным и Pytest генерирует сообщение об ошибке.

Пример кода:

def multiply(a, b): 
    return a * b


def test_multiply(): 
    assert multiply(3, 4) == 12 
    assert multiply(0, 3) == 0 
    assert multiply(-2, 3) == -6
  • Parametrization (настройка параметров). Установка наборов характеристик для проверки разных вариантов использования кода тестов. Еще позволяет исключить дубли.

Пример кода:

def multiply(a, b): 
    return a * b 


@pytest.mark.parametrize("a, b, expected_result", [ (3, 4, 12), (0, 3, 0), (-2, 3, -6), ]) 
def test_multiply(a, b, expected_result): 
    assert multiply(a, b) == expected_result
  • Fixtures (фикстуры). Функции для создания и предварительной настройки тестового окружения. Решение запускает фикстуры перед реализацией каждого тестового случая или их группой, чтобы подготовить данные к тестированию.

Пример кода:

import pytest 

@pytest.fixture
def setup_data(): 
    data = [5, 6, 7, 8, 9] 
    return data 


def calculate_sum(data): 
    return sum(data) 


def test_calculate_sum(setup_data): 
    result = calculate_sum(setup_data) 
    assert result == 35
  • Marking (маркировки). Механизм сопоставления дополнительных метаданных с тестовыми случаями или их группами для запуска или пропуска тестов согласно заданным условиям либо для настройки дополнительных действий до или после выполнения тестов.

Пример кода с использованием метки smoke для быстрого проведения основных тестов и regression для проверки стабильности и воспроизводимости отдельных функций приложения:

import pytest 

@pytest.mark.smoke
def test_addition(): 
    result = 3 + 3 
    assert result == 6 


@pytest.mark.regression
def test_subtraction(): 
    result = 7 - 3
    assert result == 4 


@pytest.mark.regression
def test_multiplication(): 
    result = 4 * 5 
    assert result == 20 


@pytest.mark.smoke 
@pytest.mark.regression
def test_division(): 
    result = 20 / 2 
    assert result == 10
  • Test sessions (тестовые сеансы). Запуск тестов в разных режимах. Например:
    • test discovery — для обнаружения недостатков кода;
    • failing tests replay — для воспроизведения отказов;
    • coverage reporting — режим с генерацией отчетов о покрытии.

Этот механизм дает возможность подстроить тестирование под требования любого проекта.

Пример кода для проверки корректности операций сложения и вычитания:

import pytest

def add(a, b): 
    return a + b


def subtract(a, b): 
    return a - b 


def test_addition(): 
    result = add(2, 2) 
    assert result == 4 


def test_subtraction(): 
    result = subtract(5, 3) 
    assert result == 2

Для запуска тестовых сеансов и реализации всех тестов из этого каталога достаточно указать pytest в командной строке.

Читайте также: Какие бывают этапы и виды тестирования: подробный разбор

Возможности и недостатки PyTest

Разработчики и QA специалисты выбирают PyTest благодаря следующим преимуществам:

  • Возможность получить детальную информацию о проваленных тестах. Решение использует универсальный оператор.
  • Отсутствие сложных конструкций в синтаксисе кода — он может состоять всего из двух строк.
  • Автоматическое обнаружение тестовых функций и модулей. Стандартно Pytest определяет файлы, в которых используются методы и функции с префиксом test вне классов и внутри классов с префиксом Test.
  • Автоматическое генерирование отчетов об ошибках в тестах.
  • Использование фикстур для работы с параметризованными и несложными тестами и создания контекста для групп тестов.
  • Совместимость с Unittest.
  • Возможность с помощью меток настраивать условия, входные данные и другие элементы поведения тестов.
  • Более 1500 регулярно обновляемых внешних плагинов и наборов разнообразных дополнительных функций.
  • Активно развивающееся сообщество профессионалов.

Но отмечают, что у PyTest присутствуют и некоторые недостатки:

  • Необходимость тщательно изучать документацию, чтобы понять логику и алгоритмы работы лаконичного кода решения.
  • Необходимость устанавливать фреймворк отдельно, так как он не входит в стандартную библиотеку Python. Для этого у вас должен быть установлен Python 3.8 + или PyPy 3.
  • Невозможность запускать тесты PyTest на других фреймворках.

Слушатели курса «Тестирование с PyTest» подробно изучают все элементы фреймворка и последовательность написания в нем тестовых случаев, а также приобретают практические навыки в работе с PyTest с помощью тренажера.

Аватар пользователя Анастасия Уминская
Анастасия Уминская около 1 часа назад
0
Похожие статьи
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 28 ноября
профессия
от 14 960 ₸ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 28 ноября
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 28 ноября
профессия
от 24 542 ₸ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 28 ноября
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 28 ноября
профессия
от 28 908 ₸ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 28 ноября
профессия
от 25 000 ₸ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
Старт 28 ноября