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