Справочник · модуль 12 «Тесты»
Parametrize
Метка pytest.mark.parametrize запускает один тест с разными данными. В отчёте каждый запуск виден отдельно.
Сравнение из жизни
Как один бланк контрольной для всех вариантов.
Пример
$ pytest -v
============================= test session starts ==============================
platform linux -- Python 3.13.0, pytest-8.3.3, pluggy-1.5.0
cachedir: .pytest_cache
rootdir: /home/bit/shop
collecting ... collected 4 items
test_rules.py::test_is_adult[30-True] PASSED [ 25%]
test_rules.py::test_is_adult[18-True] PASSED [ 50%]
test_rules.py::test_is_adult[17-False] PASSED [ 75%]
test_rules.py::test_is_adult[0-False] PASSED [100%]
============================== 4 passed in 0.01s ===============================Учитель в уроке Писать много похожих тестов долго. Для этого есть метка parametrize. В ней список наборов данных: возраст и ожидание. Pytest запускает один тест столько раз, сколько наборов. Если добавить к команде флаг -v, в отчёте виден каждый запуск.
Запомнить
parametrize — как одна контрольная с разными вариантами. Тест один, а данных много.
Частые ошибки новичков на этой теме
Кажется: Прошедший тест доказывает, что ошибок нет
На самом деле: Тест проверяет только свой случай. Нужны и обычные, и крайние случаи.
Тема из урока 12.3 «Что проверять» курса PythonAZ.