До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

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

Тестирование кода на 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 с помощью тренажера.

Аватар пользователя Анастасия Уминская
Анастасия Уминская около 4 часов назад
0
Похожие статьи
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября