Обновление 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, вам следует переделать их на использование списков или кортежей, чтобы избежать предупреждений об устаревании и потенциальных пропусков тестов.