Как в pytest работает параметризация тестов?

возможность pytest запускать один тест многократно декоратор @pytest.mark.parametrize получает названия параметров и набор соответствующих значений pytest последовательно передаёт эти значения тесту увеличивает…

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

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

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

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

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

Как в pytest работает параметризация тестов?

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

Развёрнутый ответ

Основная идея

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

Что важно знать

  • Первым аргументом @pytest.mark.parametrize принимает строку с именами параметров, разделёнными запятыми, а вторым — список значений или кортежей. Каждый элемент этого списка используется для отдельного запуска теста.
  • Несколько аргументов можно параметризовать одновременно. Это особенно полезно в комплексных тестах, где входные данные меняются сразу по нескольким параметрам.
  • При выполнении варианты теста с разными параметрами pytest рассматривает как самостоятельные тесты с отдельными id. В отчётах это отображается, например, через test_func[param1-param2].
  • Параметризацию также можно сочетать с фикстурами, чтобы гибко и масштабируемо подготавливать окружение и тестовые данные.
  • Начиная с pytest 7 поддерживается более гибкий синтаксис с ids, который позволяет давать параметризованным случаям понятные имена. Кроме того, параметризацию можно задавать на уровне классов и модулей.

Пример применения

Представим тест функции сложения, которую нужно проверить на разных парах чисел. Вместо большого количества почти одинаковых тестов достаточно написать один параметризованный. В крупных проектах такой подход позволяет проверять множество вариантов входных данных или конфигураций без копирования кода и упрощает дальнейшую поддержку. Нередко его используют вместе с pytest-xdist, чтобы параллельно запускать параметры и ускорять тестирование.

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

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

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

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