Как использовать @pytest.mark.parametrize для параметризованных тестов?

Как создавать параметризованные тесты в pytest pytest — распространённый фреймворк для тестирования программ на Python @pytest.mark.parametrize — декоратор, позволяющий запускать тест повторно с разными данными В него…

Короткий ответ

Что ответить на собеседовании

Как создавать параметризованные тесты в pytest pytest — распространённый фреймворк для тестирования программ на Python @pytest.mark.parametrize — декоратор, позволяющий запускать тест повторно с разными данными В него передают строку с именами параметров и набор значений, представленных кортежами Один тест можно выполнить с большим количеством вариантов входных данных Подход упрощает проверку различных сценариев и наборов данных Он увеличивает покрытие и сокращает дублирование кода Особенно удобен для граничных случаев и разных типов входных значений

Подробный разбор

Ответ с пояснениями

Как создавать параметризованные тесты в pytest

  • pytest — распространённый фреймворк для тестирования программ на Python
  • @pytest.mark.parametrize — декоратор, позволяющий запускать тест повторно с разными данными
  • В него передают строку с именами параметров и набор значений, представленных кортежами
  • Один тест можно выполнить с большим количеством вариантов входных данных
  • Подход упрощает проверку различных сценариев и наборов данных
  • Он увеличивает покрытие и сокращает дублирование кода
  • Особенно удобен для граничных случаев и разных типов входных значений

Пример:

@pytest.mark.parametrize("input,expected", [(1,2), (3,4), (5,6)])
def test_increment(input, expected):
assert input+1 == expected

Итог: параметризация помогает сделать тестирование в pytest компактным и эффективным.

Подробный ответ

Основной ответ

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

Синтаксис декоратора несложен: первым параметром указывают строку с разделёнными запятыми именами аргументов, а вторым — список кортежей либо других итерируемых объектов с соответствующими значениями. В результате @pytest.mark.parametrize("input,expected", [(1, 2), (3, 4)]) выполнит тест два раза: сначала с входным значением 1, затем со значением 3.

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

Ключевые моменты

  • Одновременно можно передавать несколько аргументов, что помогает комбинировать различные сценарии.
  • Если данных много, их удобно получать из генераторов, CSV- или JSON-списков. Это автоматизирует подготовку входных наборов.
  • Каждый запуск parametrized test pytest считает самостоятельным тестом и отображает в отчётах с отдельным идентификатором. Поэтому источник ошибки определить проще.

Практический контекст

В проектах на Python 3.9+ и pytest 7+ при проверке REST API я часто параметризую варианты запросов вместе с ожидаемыми ответами. Такой подход позволяет сэкономить сотни строк отдельных функций, ускоряет тестирование и облегчает сопровождение при добавлении новых кейсов и требований.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку