Тестирование кода на 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, специалисты могут внедрять в код теста следующие функции и механизмы:

Пример кода:

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

Пример кода:

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

Пример кода:

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

Пример кода с использованием метки 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

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

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

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 присутствуют и некоторые недостатки:

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