← Назад ко всем вопросам

Как параметризовать несколько аргументов и управлять id у кейсов?

1️⃣ Как кратко ответить

Для параметризации нескольких аргументов в тестах используйте декоратор @pytest.mark.parametrize в Pytest, указывая список имен аргументов и соответствующие значения. Для управления id тестовых кейсов используйте параметр ids, передавая список строк или функцию, которая генерирует уникальные идентификаторы для каждого набора параметров.

2️⃣ Подробное объяснение темы

Параметризация тестов позволяет запускать один и тот же тестовый метод с разными наборами данных. Это особенно полезно, когда нужно протестировать одну и ту же функциональность с различными входными данными. В Pytest для этого используется декоратор @pytest.mark.parametrize.

Параметризация нескольких аргументов

Когда необходимо параметризовать несколько аргументов, вы указываете их в виде строки, разделенной запятыми, и передаете список кортежей, где каждый кортеж соответствует набору значений для этих аргументов.

Пример:

import pytest
​
# Параметризация двух аргументов: x и y
@pytest.mark.parametrize("x, y", [
    (1, 2),  # Первый набор значений
    (3, 4),  # Второй набор значений
    (5, 6)   # Третий набор значений
])
def test_addition(x, y):
    # Проверка, что сумма x и y больше 0
    assert x + y > 0
  • @pytest.mark.parametrize("x, y", [...]): Декоратор, который указывает, что тестовый метод будет запускаться с разными значениями x и y.
  • [(1, 2), (3, 4), (5, 6)]: Список кортежей, где каждый кортеж содержит значения для x и y.

Управление id у кейсов

Иногда полезно иметь уникальные идентификаторы для каждого набора параметров, чтобы легче идентифицировать тесты в отчетах. Это можно сделать с помощью параметра ids в декораторе @pytest.mark.parametrize.

Пример:

import pytest
​
# Параметризация с использованием ids
@pytest.mark.parametrize("x, y", [
    (1, 2),
    (3, 4),
    (5, 6)
], ids=["case1", "case2", "case3"])
def test_addition(x, y):
    assert x + y > 0
  • ids=["case1", "case2", "case3"]: Список строк, которые будут использоваться как идентификаторы для каждого набора параметров.

Также можно использовать функцию для генерации id:

import pytest
​
# Функция для генерации id
def idfn(val):
    return f"val_{val}"
​
# Параметризация с использованием функции для ids
@pytest.mark.parametrize("x, y", [
    (1, 2),
    (3, 4),
    (5, 6)
], ids=idfn)
def test_addition(x, y):
    assert x + y > 0
  • idfn(val): Функция, которая принимает значение и возвращает строку, которая будет использоваться как id.
  • ids=idfn: Указание функции для генерации id.

Параметризация и управление id тестов делают тесты более читаемыми и управляемыми, особенно в больших тестовых наборах. Это позволяет легко отслеживать, какие именно наборы данных привели к сбоям, и упрощает анализ результатов тестирования.

Тема: PyTest
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки