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