Обновление Pytest 9.1.0: Ключевые Изменения для QA Автоматизации
TL;DR
- Пользователям
--doctest-modules: autouse фикстуры могут выполняться дважды; рассмотрите возможность переноса их вconftest.py. - Введены важные устаревания, включая
request.getfixturevalue()во время teardown и использование не-Collection итерируемых объектов вparametrize. - Добавлена опция
--max-warningsдля прерывания тестового прогона при превышении лимита предупреждений, повышая стабильность тестов.
Ключевые Изменения
Pytest 9.1.0, выпущенный 13 июня 2026 года, представляет собой сочетание критических изменений, устареваний и новых функций, актуальных для инженеров по автоматизации тестирования. Это минорное обновление направлено на улучшение поведения фикстур, совершенствование конфигурации и предоставление большего контроля над выполнением тестов.
Удаления и обратно несовместимые изменения:
Наиболее заметное критическое изменение касается пользователей --doctest-modules. Autouse фикстуры с областью видимости module, package или session, определенные непосредственно в тестовых модулях, теперь могут выполняться дважды. Чтобы избежать этого, рекомендуется перенести определения таких фикстур в файл conftest.py. Это изменение связано с улучшениями в реализации фикстур pytest и тем, как DoctestModule собирает фикстуры.
Устаревания: Pytest 9.1.0 вводит несколько устареваний, предвещая грядущие изменения в pytest 10:
- Управление фикстурами: Вызов
request.getfixturevalue()во время teardown для фикстуры, которая не была запрошена ранее, теперь устарел. Также устарели фикстуры с областью видимости класса, определенные как методы экземпляра (без@classmethod), из-за непредсказуемого поведения. Подробнее о фикстурах можно узнать в нашей статье pytest-tutorial-python-testing. - Параметризация: Использование итерируемых объектов, не являющихся
~collections.abc.Collection(например, генераторов), для параметраargvaluesв@pytest.mark.parametrizeиmetafunc.parametrizeустарело. Это предотвращает проблемы, когда итерируемые объекты исчерпываются после первого использования, что может привести к пропуску тестов. - Конфигурация и API: Приватный атрибут
config.inicfgустарел в пользуconfig.getini(). Передача строкbaseidилиnodeidв API регистрации фикстур устарела; вместо этого используйте параметрnode. - CLI и хуки: Опция
--pastebinустарела; теперь она доступна как внешний плагин (pytest-pastebin).pytest.console_mainустарел; используйтеpytest.mainдля программного выполнения. Метод настройки хуков с использованием маркеров, deprecado desde pytest 7.2, также запланирован к удалению.
Новые функции:
- Контроль предупреждений: Важным дополнением для QA команд является опция командной строки
--max-warningsи опция конфигурацииmax_warnings. Это позволяет прервать тестовый прогон, если количество предупреждений превышает заданный порог, способствуя созданию более чистых тестовых наборов. - Отчетность: Добавлена длинная опция CLI
--report-chars. - Регистрация фикстур: Для продвинутой разработки плагинов
pytest.register_fixture()предлагает императивный интерфейс для регистрации фикстур, дополняя декларативный декоратор@pytest.fixture. - Детали утверждений: Опция конфигурации
assertion_text_diff_styleпредоставляет больше контроля над выводом ошибок утверждений.
Влияние на QA Команды
QA командам следует пересмотреть свои существующие тестовые наборы на предмет устаревших шаблонов, особенно в отношении использования фикстур и параметризации, чтобы подготовиться к pytest 10. Новая опция --max-warnings предоставляет ценный инструмент для контроля количества предупреждений, повышая надежность и поддерживаемость тестов. Понимание этих изменений имеет решающее значение для эффективного применения pytest-advanced-techniques и поддержания стабильной автоматизации тестирования.
FAQ
- В: Какое изменение является наиболее критичным для существующих тестовых наборов?
О: Потенциальное двойное выполнение autouse фикстур с
--doctest-modulesтребует немедленного внимания, возможно, путем переноса определений фикстур вconftest.py. - В: Какую пользу
--max-warningsприносит QA? О: Это позволяет командам устанавливать допустимое количество предупреждений, автоматически прерывая сборки, если их слишком много, тем самым предотвращая накопление скрытых проблем. - В: Нужно ли мне рефакторить мои параметризованные тесты?
О: Если вы используете генераторы или другие не-Collection итерируемые объекты для
argvaluesвparametrize, вам следует переделать их на использование списков или кортежей, чтобы избежать предупреждений об устаревании и потенциальных пропусков тестов.
