Как в pytest запускать тест с разными параметрами? Тесты параметризуют с помощью декоратора @pytest.mark.parametrize Функции теста передают имена переменных и соответствующие списки значений Для каждого набора параметров pytest выполняет тест отдельно Один тест позволяет проверить несколько сценариев без копирования кода Так удобно тестировать разные комбинации входных данных Подход подходит для unit- и интеграционных тестов с различными входами Параметризация ускоряет проверку граничных и единичных случаев
Как в pytest запустить один тест с разными параметрами?
Как в pytest запускать тест с разными параметрами? Тесты параметризуют с помощью декоратора @pytest.mark.parametrize Функции теста передают имена переменных и соответствующие списки значений Для каждого набора…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как в pytest запускать тест с разными параметрами?
- Тесты параметризуют с помощью декоратора
@pytest.mark.parametrize - Функции теста передают имена переменных и соответствующие списки значений
- Для каждого набора параметров pytest выполняет тест отдельно
- Один тест позволяет проверить несколько сценариев без копирования кода
- Так удобно тестировать разные комбинации входных данных
- Подход подходит для unit- и интеграционных тестов с различными входами
- Параметризация ускоряет проверку граничных и единичных случаев
Пример:
@pytest.mark.parametrize("input,expected", [(1,2), (3,4)])
def test_inc(input, expected):
assert input + 1 == expected
В этом примере тест выполняется два раза, каждый раз с собственной парой параметров.
Подробный ответ
Основной ответ
В pytest для многократного запуска тестовой функции с разными входными данными применяется параметризация. Она задаётся декоратором @pytest.mark.parametrize и позволяет описать несколько наборов данных для одного теста. Благодаря этому разные сценарии проверяются без дублирования тестового кода.
Ключевые моменты
- У декоратора два основных аргумента: названия параметров в виде строки или списка и коллекция значений — кортежей либо списков. Например:
python @pytest.mark.parametrize("input,expected", [(1,2), (3,4)]) - Одновременно можно передавать несколько аргументов. Тогда pytest формирует комбинации всех указанных вариантов, что удобно для кросс-проверки различных входных данных.
- Начиная с pytest 6+, доступна indirect parametrization: значения параметров можно передавать в фикстуры и тем самым гибче готовить тестовое окружение.
- Если нужно запустить только определённые параметризированные тесты, применяют CLI-опцию
-kс фильтром по имени теста или его части, в том числе по параметрам.
Практический контекст
В прикладных проектах параметризация помогает охватить большое число сценариев: проверить функции на разных типах данных, граничных значениях и сочетаниях конфигурационных флагов. Это повышает покрытие и уменьшает технический долг, поскольку не требует вручную создавать множество похожих тестов.
Пример простой параметризации:
@pytest.mark.parametrize("x, y, expected", [(1,2,3), (4,5,9), (10,20,30)])
def test_sum(x, y, expected):
assert x + y == expected
Здесь тест будет выполнен три раза — для каждого набора входных значений.