Changelog

Версии следуют за Semantic Versioning (<major>.<minor>.<patch>).

Изменения, несовместимые назад (ломающие), будут вноситься только в основные версии с предварительным уведомлением в разделе Deprecations релизов.

pytest 7.2.0 (2022-10-23)

Амортизация

  • #10012: Обновите pytest.PytestUnhandledCoroutineWarning на deprecation; он будет вызывать ошибку в pytest 8.

  • #10396: pytest больше не зависит от библиотеки py. pytest предоставляет вендорные копии модулей py.error и py.path, но будет использовать библиотеку py, если она установлена. Если вам нужны другие модули py.*, продолжайте устанавливать устаревшую библиотеку py отдельно, в противном случае ее обычно можно удалить как зависимость.

  • #4562: Исчезнуть конфигурирование hook specs/impls с помощью атрибутов/маркеров.

    Вместо этого используйте pytest.hookimpl() и pytest.hookspec(). Более подробную информацию см. в docs.

  • #9886: Функциональность для запуска тестов, написанных для nose, была официально устаревшей.

    Сюда входят:

    • Простые функции и методы setup и teardown: это может застать пользователей врасплох, поскольку setup() и teardown() не являются идиомами pytest, а являются частью поддержки nose.

    • Установка/снятие с помощью декоратора @with_setup.

    Для получения более подробной информации обратитесь к deprecation docs.

  • #7337: Предупреждение об устаревании теперь выдается, если тестовая функция возвращает что-то, отличное от None. Это предотвращает распространенную ошибку среди новичков, которые ожидают, что возвращение bool (например, return foo(a, b) == result) приведет к прохождению или провалу теста, вместо того, чтобы использовать assert. В будущем планируется сделать возврат не None из тестов ошибкой.

Характеристики

  • #9897: В testpaths добавлена поддержка подстановочных знаков в стиле shell.

Улучшения

  • #10218: @pytest.mark.parametrize() (и подобные функции) теперь принимают любые Sequence[str] для имен аргументов, вместо только list[str] и tuple[str, ...].

    (Обратите внимание, что str, который сам по себе является Sequence[str], по-прежнему рассматривается как список имен, разделенный запятыми, как и раньше).

  • #10381: Был добавлен флаг --no-showlocals. Его можно передавать непосредственно в тесты для переопределения --showlocals, объявленных через addopts.

  • #3426: Ошибки утверждения со строками в формах NFC и NFD, которые нормализуются в одну и ту же строку, теперь имеют специальное сообщение об ошибке, подробно описывающее проблему, и вместо этого выражается их представление utf-8.

  • #8508: Введено многострочное отображение для предупреждающего сопоставления через pytest.warns() и улучшено сопоставление для _pytest._code.ExceptionInfo.match(), возвращаемое pytest.raises().

  • #8646: Улучшение pytest.raises(). Ранее передача пустого кортежа приводила к непонятной ошибке. Теперь мы сразу же выдаем более полезное сообщение.

  • #9741: В Python 3.11 для разбора TOML используйте tomllib из стандартной библиотеки.

    tomli больше не является зависимостью от Python 3.11.

  • #9742: Вывести сообщение утверждения без символов новой строки с -vv.

  • #9823: Улучшено сообщение об ошибке, которое показывается, если для заданного файла не найден коллектор.

  • #9873: В краткое резюме теста добавлены некоторые цвета.

  • #9883: Нормализовать описание справки для всех опций командной строки.

  • #9920: Отображение полных сообщений о сбоях в short test summary info при запуске в среде CI.

  • #9987: Добавлена поддержка скрытого конфигурационного файла путем разрешения .pytest.ini в качестве альтернативы pytest.ini.

Исправления ошибок

  • #10150: sys.stdin теперь содержит все ожидаемые методы файлоподобного объекта при включенном захвате.

  • #10382: Не разбивайте pdb, когда raise unittest.SkipTest() появляется на верхнем уровне в файле.

  • #7792: Теперь метки наследуются в соответствии с полным MRO в тестовых классах. Ранее, если тестовый класс наследовался от двух или более классов, применялись только метки первого суперкласса.

    При наследовании знаков от суперклассов знаки подклассов теперь упорядочиваются перед знаками суперклассов в порядке MRO. Ранее было наоборот.

    При наследовании меток от суперклассов атрибут pytestmark подкласса теперь содержит только те метки, которые непосредственно применяются к нему. Ранее он также содержал метки от суперклассов. Обратите внимание, что обычно к этому атрибуту не следует обращаться напрямую; вместо этого используйте pytest.Node.iter_markers().

  • #9159: Показ внутренних исключений путем принудительного нативного отображения в ExceptionGroups даже при использовании опций отображения, отличных от --tb=native. Временный шаг перед полной реализацией pytest-native отображения внутренних исключений в ExceptionGroups.

  • #9877: Убедитесь, что caplog.get_records(when) возвращает текущие/корректные данные после вызова caplog.clear().

Улучшенная документация

  • #10344: Обновите информацию о написании плагинов для использования pyproject.toml вместо setup.py.

  • #9248: Документация теперь строится с использованием Sphinx 5.x (по сравнению с 3.x ранее).

  • #9291: Обновление документации о том, как pytest.warns() влияет на DeprecationWarning.

Тривиальные/внутренние изменения

  • #10313: Сделали _pytest.doctest.DoctestItem экспортом pytest.DoctestItem для проверки типов и целей выполнения. Заставил _pytest.doctest использовать внутренние API, чтобы избежать циклического импорта.

  • #9906: Сделал _pytest.compat реэкспорт importlib_metadata в глазах программ проверки типов.

  • #9910: Исправьте предупреждение о кодировке по умолчанию (EncodingWarning) в cacheprovider

  • #9984: Улучшите сообщение об ошибке при попытке получить доступ к приспособлению, которое было снесено. Добавьте дополнительное предложение в строку документации, объясняющее, когда не стоит вызывать getfixturevalue.

pytest 7.1.3 (2022-08-31)

Исправления ошибок

  • #10060: При запуске с --pdb, TestCase.tearDown больше не вызывается для тестов, когда класс был пропущен через unittest.skip или pytest.mark.skip.

  • #10190: Недопустимые символы XML в сообщениях об ошибках установки или разрушения теперь правильно экранируются для отчетов JUnit XML.

  • #10230: Игнорировать файлы .py, созданные редактируемыми сборками на основе pyproject.toml, представленными в pip 21.3.

  • #3396: Доктесты теперь уважают флаг --import-mode.

  • #9514: Аннотируйте FixtureRequest.param как Any в качестве временной меры, пока issue #8073 не будет исправлено.

  • #9791: Исправлен код обработки путей в rewrite.py, который вроде бы работает нормально, но был некорректен и не работает в некоторых системах.

  • #9917: Исправлено представление строки для pytest.approx() при использовании для сравнения кортежей.

Улучшенная документация

  • #9937: Явное указание на то, что крепление tmpdir не рекомендуется в пользу tmp_path.

Тривиальные/внутренние изменения

  • #10114: Замените atomicwrites зависимость от windows с помощью os.replace.

pytest 7.1.2 (2022-04-23)

Исправления ошибок

  • #9726: Удален ненужный импорт numpy внутри pytest.approx().

  • #9820: Исправьте сравнение dataclasses с InitVar.

  • #9869: Увеличьте stacklevel для деплоя NODE_CTOR_FSPATH_ARG, чтобы он указывал на код пользователя, а не на pytest.

  • #9871: Исправление странной (и, к счастью, редкой) ошибки, когда приспособление temp_path могло вызвать внутреннюю ошибку при попытке получить имя пользователя текущего пользователя.

pytest 7.1.1 (2022-03-17)

Исправления ошибок

  • #9767: Исправлена ошибка в pytest 7.1.0, когда некоторые файлы conftest.py вне дерева исходников (например, в каталоге site-packages) не подхватывались.

pytest 7.1.0 (2022-03-13)

Разрывные изменения

  • #8838: В соответствии с нашей политикой, следующие функции были устаревшими в серии 6.X и теперь удалены:

    • pytest._fillfuncargs функция.

    • Хук pytest_warning_captured - используйте вместо него pytest_warning_recorded.

    • Синтаксис -k -foobar - вместо него используйте -k 'not foobar'.

    • -k foobar: синтаксис.

    • Модуль pytest.collect - импортировать из pytest напрямую.

    Для получения дополнительной информации обратитесь к Deprecations and Removals в документации.

  • #9437: Прекращена поддержка Python 3.6, который достиг end-of-life в 2021-12-23.

Улучшения

  • #5192: Исправлен тестовый вывод для некоторых типов данных, где -v показывал меньше информации.

    Также, при отображении различий для последовательностей, -q выдавал полные различия вместо ожидаемых.

  • #9362: pytest теперь избегает специализированного форматирования утверждений, когда обнаруживается, что стандартное __eq__ переопределено в attrs или dataclasses.

  • #9536: Если в командной строке указано -vv, показывать причины пропуска и xfail полностью, а не усекать их для соответствия ширине терминала.

  • #9644: Дополнительную информацию о расположении ресурсов, которые заставили Python поднять ResourceWarning, теперь можно получить, включив tracemalloc.

    Для получения дополнительной информации см. раздел Предупреждения о ресурсах.

  • #9678: Теперь в аргументе ids для @pytest.mark.parametrize принимается больше типов. Ранее принимались только str, float, int and bool were accepted; now bytes, complex, re.Pattern, Enum and anything with a __имя__.

  • #9692: pytest.approx() теперь выдает TypeError, когда задается неупорядоченная последовательность (например, set).

    Обратите внимание, что это означает, что пользовательские классы, которые реализуют только __iter__ и __len__, больше не поддерживаются, поскольку они не гарантируют порядок.

Исправления ошибок

  • #8242: Устранение возможности поднимать unittest.SkipTest для пропуска сбора тестов на этапе сбора pytest отменено - теперь это снова поддерживается.

  • #9493: Символьные компоненты ссылок больше не разрешаются в путях контестов. Это означает, что если контест появляется дважды в дереве коллекции, используя симлинки, он будет выполнен дважды. Например, задано

    tests/real/conftest.py tests/real/test_it.py tests/link -> tests/real

    выполнение pytest tests теперь импортирует conftest дважды, один раз как tests/real/conftest.py и один раз как tests/link/conftest.py. Это исправление соответствует аналогичному изменению, внесенному в саму коллекцию тестов в pytest 6.0 (подробности см. в pull request #6523).

  • #9626: Исправлен подсчет выбранных тестов в сводке коллекции терминалов при наличии ошибок или пропущенных модулей.

    Если при сборе были ошибки или пропущенные модули, pytest ошибочно вычитал их из выбранного количества.

  • #9645: Исправлена регрессия, когда --import-mode=importlib, использованный вместе с PYTHONPATH или pythonpath, приводил к ошибкам импорта в тестовых наборах.

  • #9708: pytester теперь запрашивает фикстуру monkeypatch вместо того, чтобы создавать ее внутри. Это решает некоторые проблемы с тестами, в которых используются переменные окружения pytest.

  • #9730: Неправильно сформированные файлы pyproject.toml теперь выдают более четкое сообщение об ошибке.

pytest 7.0.1 (2022-02-11)

Исправления ошибок

  • #9608: Исправление некорректного импорта importlib.readers в Python 3.9.

  • #9610: Восстановите UnitTestFunction.obj to return unbound rather than bound method. Fixes a crash during a failed teardown in unittest TestCases with non-default __init__. Устранено в pytest 7.0.0.

  • #9636: Плагин pythonpath был переименован в python_path. Это позволяет избежать конфликта с плагином pytest-pythonpath.

  • #9642: Исправление запуска тестов по id с :: в части параметризации.

  • #9643: Задержите выдачу PytestWarning о наследовании бриллиантов с участием Item и Collector, чтобы его можно было отфильтровать с помощью standard warning filters.

pytest 7.0.0 (2022-02-03)

(Пожалуйста, смотрите полный набор изменений для этого выпуска также в примечаниях к 7.0.0rc1 ниже)

Амортизация

  • #9488: Если пользовательские подклассы узлов типа pytest.Item переопределяют метод __init__, они должны принимать **kwargs. Подробности см. в разделе Конструкторы пользовательских подклассов pytest.Node должны принимать **kwargs.

    Обратите внимание, что предупреждение об исправлении выдается только в том случае, если существует конфликт в аргументах, которые pytest ожидал передать. Это исправление уже было частью pytest 7.0.0rc1, но не было задокументировано.

Исправления ошибок

  • #9355: Исправлено сообщение об ошибке, печатающее декораторы функций при использовании assert в Python 3.8 и выше.

  • #9396: Убедитесь, что pytest.Config.inifile доступен во время хука pytest_cmdline_main (регрессия во время 7.0.0rc1).

Улучшенная документация

  • #9404: Добавлена дополнительная документация по альтернативам распространенных случаев неправильного использования pytest.warns(None) в преддверии его депривации.

  • #9505: Уточните, где находятся файлы конфигурации. Во избежание путаницы в документации упоминается, что конфигурационный файл находится в корне хранилища.

Тривиальные/внутренние изменения

  • #9521: Добавьте покрытие тестов в путь перезаписи утверждений.

pytest 7.0.0rc1 (2021-12-06)

Разрывные изменения

  • #7259: Тип первого возвращаемого значения функции Node.reportinfo() был расширен с py.path.local | str до os.PathLike[str] | str.

    Большинство плагинов, которые ссылаются на reportinfo(), определяют его только как часть пользовательской реализации pytest.Item. Поскольку py.path.local является os.PathLike[str], эти плагины не имеют с ним ничего общего.

    Плагины и пользователи, которые вызывают reportinfo(), используют первое возвращаемое значение и взаимодействуют с ним как с py.path.local, должны будут адаптироваться, вызывая py.path.local(fspath). Хотя предпочтительнее избегать унаследованного py.path.local и использовать pathlib.Path, или использовать item.location или item.path, вместо этого.

    Примечание: pytest не смог предоставить период устаревания для этого изменения.

  • #8246: --version теперь записывает информацию о версии в stdout, а не в stderr.

  • #8733: Удалите обходное решение для pyreadline, которое заставляло его работать с --pdb.

    Обходной путь был представлен в #1281 в 2015 году, однако с тех пор pyreadline seems to have gone unmaintained, является generating warnings, и перестанет работать на Python 3.10.

  • #9061: Использование pytest.approx() в булевом контексте теперь вызывает ошибку, подсказывающую правильное использование.

    Очевидно, что пользователи часто ошибочно используют pytest.approx таким образом:

    assert pytest.approx(actual, expected)
    

    Хотя правильное использование - это:

    assert actual == pytest.approx(expected)
    

    Новое сообщение об ошибке помогает выявить эти ошибки.

  • #9277: Коллекторный тип pytest.Instance был удален. Импорт pytest.Instance или _pytest.python.Instance возвращает фиктивный тип и выдает предупреждение об устаревании. Подробности см. в Коллектор pytest.Instance.

  • #9308: PytestRemovedIn7Warning deprecation warnings теперь по умолчанию являются ошибками..

    Следуя нашему плану по удалению устаревших функций с минимальными нарушениями, все предупреждения типа PytestRemovedIn7Warning теперь по умолчанию генерируют ошибки вместо предупреждений.

    Затронутые функции будут фактически удалены в pytest 7.1, поэтому обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.

    В серии pytest 7.0.X можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файл pytest.ini:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestRemovedIn7Warning
    

    Но это перестанет работать, когда выйдет pytest 7.1.

    Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #9308.

Амортизация

  • #7259: py.path.local аргументы для крючков были устаревшими. Подробную информацию смотрите в the deprecation note.

    py.path.local аргументы конструкторов Node были устаревшими. Подробную информацию смотрите в the deprecation note.

    Примечание

    Название аргументов и атрибутов Node (новый атрибут - path) является противоположностью ситуации для крючков (старый аргумент - path).

    Это досадный артефакт, вызванный историческими причинами, который должен быть устранен в будущих версиях, поскольку мы постепенно избавляемся от зависимости py (см. issue #9283 для более подробного обсуждения).

  • #7469: Прямое конструирование следующих классов теперь устарело:

    • _pytest.mark.structures.Mark

    • _pytest.mark.structures.MarkDecorator

    • _pytest.mark.structures.MarkGenerator

    • _pytest.python.Metafunc

    • _pytest.runner.CallInfo

    • _pytest._code.ExceptionInfo

    • _pytest.config.argparsing.Parser

    • _pytest.config.argparsing.OptionGroup

    • _pytest.pytester.HookRecorder

    Эти конструкторы всегда считались приватными, но теперь выдают предупреждение об устаревании, которое может стать жесткой ошибкой в pytest 8.

  • #8242: Поднятие unittest.SkipTest для пропуска сбора тестов на этапе сбора pytest устарело. Вместо этого используйте pytest.skip().

    Замечание: Это устаревание относится только к использованию unittest.SkipTest во время сбора тестов. Скорее всего, вы этого не делаете. Обычное использование unittest.SkipTest / unittest.TestCase.skipTest() / unittest.skip() в unittest тестах полностью поддерживается.

    Примечание

    Эта ошибка была исправлена в pytest 7.1.0.

  • #8315: Некоторые поведения Parser.addoption теперь запланированы к удалению в pytest 8 (deprecated с pytest 2.4.0):

    • parser.addoption(..., help=".. %default ..") - используйте вместо этого %(default)s.

    • parser.addoption(..., type="int/string/float/complex") - используйте вместо этого type=int и т.д.

  • #8447: Определение пользовательского типа узла pytest, который является одновременно pytest.Item и pytest.Collector (например, pytest.File), теперь выдает предупреждение. Это никогда разумно не поддерживалось и вызывало трудноотлаживаемые ошибки.

    Подробную информацию см. в разделе the deprecation note.

  • #8592: pytest_cmdline_preparse был официально устаревшим. Он будет удален в одном из будущих выпусков. Вместо него используйте pytest_load_initial_conftests.

    Подробную информацию см. в разделе the deprecation note.

  • #8645: pytest.warns(None) теперь устарел, потому что многие использовали его для обозначения «этот код не выдает предупреждений», но на самом деле он проверял, что код выдает хотя бы одно предупреждение любого типа - как pytest.warns() или pytest.warns(Warning).

  • #8948: Сигнатуры pytest.skip(msg=...), pytest.fail(msg=...) и pytest.exit(msg=...) теперь принимают аргумент reason вместо msg. Использование msg по-прежнему работает, но является устаревшим и будет удалено в одном из будущих выпусков.

    Это было изменено для согласованности с pytest.mark.skip и pytest.mark.xfail, которые оба принимают reason в качестве аргумента.

  • #8174: В типы, достижимые через pytest.ExceptionInfo.traceback, были внесены следующие изменения:

    • Свойство path от _pytest.code.Code возвращает Path вместо py.path.local.

    • Свойство path от _pytest.code.TracebackEntry возвращает Path вместо py.path.local.

    Для этого изменения не было периода амортизации (извините!).

Характеристики

  • #5196: Тесты теперь упорядочены по порядку определения в большем количестве случаев.

    В иерархии классов тесты из базовых классов теперь последовательно упорядочены перед тестами, определенными для их подклассов (обратный порядок MRO).

  • #7132: Добавлены две переменные окружения PYTEST_THEME и PYTEST_THEME_MODE для того, чтобы пользователи могли настроить используемую тему pygments.

  • #7259: Добавлено cache.mkdir(), которое аналогично существующему cache.makedir(), но возвращает pathlib.Path вместо унаследованного py.path.local.

    Добавлен тип paths к parser.addini(), как в parser.addini("mypaths", "my paths", type="paths"), который аналогичен существующему pathlist, но возвращает список pathlib.Path вместо унаследованного py.path.local.

  • #7469: Типы объектов, используемые в API pytest, теперь экспортируются, чтобы их можно было использовать в аннотациях типов.

    Новыми экспортируемыми типами являются:

    • pytest.Config для Config.

    • pytest.Mark для marks.

    • pytest.MarkDecorator для mark decorators.

    • pytest.MarkGenerator для синглтона pytest.mark.

    • pytest.Metafunc для аргумента metafunc к крючку pytest_generate_tests.

    • pytest.CallInfo для типа CallInfo, передаваемого различным крючкам.

    • pytest.PytestPluginManager для PytestPluginManager.

    • pytest.ExceptionInfo для типа ExceptionInfo, возвращаемого из pytest.raises() и передаваемого различным хукам.

    • pytest.Parser для типа Parser, переданного в крючок pytest_addoption.

    • pytest.OptionGroup для типа OptionGroup, возвращаемого из метода parser.addgroup.

    • pytest.HookRecorder для типа HookRecorder, возвращаемого из Pytester.

    • pytest.RecordedHookCall для типа RecordedHookCall, возвращаемого из HookRecorder.

    • pytest.RunResult для типа RunResult, возвращаемого из Pytester.

    • pytest.LineMatcher для типа LineMatcher, используемого в RunResult и других.

    • pytest.TestReport для типа TestReport, используемого в различных крючках.

    • pytest.CollectReport для типа CollectReport, используемого в различных крючках.

    Конструирование большинства из них напрямую не поддерживается; они предназначены только для использования в аннотациях типов. Это приведет к предупреждению об устаревании и может стать жесткой ошибкой в pytest 8.0.

    Их подклассы также не поддерживаются. В настоящее время это не соблюдается во время выполнения, но обнаруживается программами проверки типов, такими как mypy.

  • #7856: –import-mode=importlib теперь работает с функциями, которые зависят от модулей на sys.modules, такими как pickle и dataclasses.

  • #8144: Следующие крючки теперь получают дополнительный аргумент pathlib.Path, эквивалентный существующему аргументу py.path.local:

    • pytest_ignore_collect - Параметр collection_path (эквивалентен существующему параметру path).

    • pytest_collect_file - Параметр file_path (эквивалентен существующему параметру path).

    • pytest_pycollect_makemodule - Параметр module_path (эквивалентен существующему параметру path).

    • pytest_report_header - Параметр start_path (эквивалентен существующему параметру startdir).

    • pytest_report_collectionfinish - Параметр start_path (эквивалентен существующему параметру startdir).

    Примечание

    Название аргументов и атрибутов Node (новый атрибут - path) является противоположностью ситуации для крючков (старый аргумент - path).

    Это досадный артефакт, вызванный историческими причинами, который должен быть устранен в будущих версиях, поскольку мы постепенно избавляемся от зависимости py (см. issue #9283 для более подробного обсуждения).

  • #8251: Реализуйте Node.path как pathlib.Path. Как старый fspath, так и этот новый атрибут устанавливается независимо от того, передается ли конструктору path или fspath (deprecated). Это замена атрибута fspath (который представляет тот же путь, что и py.path.local). Хотя fspath еще не устарел из-за продолжающегося перехода на такие методы, как reportinfo(), мы ожидаем, что он будет устаревшим в одном из будущих выпусков.

    Примечание

    Название аргументов и атрибутов Node (новый атрибут - path) является противоположностью ситуации для крючков (старый аргумент - path).

    Это досадный артефакт, вызванный историческими причинами, который должен быть устранен в будущих версиях, поскольку мы постепенно избавляемся от зависимости py (см. issue #9283 для более подробного обсуждения).

  • #8421: pytest.approx() теперь работает на Decimal в связках/дискретах и последовательностях/списках.

  • #8606: вызовы pytest с --fixtures-per-test и --fixtures были обогащены:

    • Путь расположения приспособления печатается с именем приспособления.

    • Первый раздел документальной строки приспособления, выводимый под именем приспособления.

    • Целая документальная строка приспособления, выведенная под именем приспособления с помощью опции --verbose.

  • #8761: Новый атрибут pytest.version_tuple, который упрощает пользователям возможность делать что-то в зависимости от версии pytest (например, объявлять хуки, которые появляются в более поздних версиях).

  • #8789: Переключение парсера TOML с toml на tomli для поддержки TOML v1.0.0 в pyproject.toml.

  • #8920: Добавлена pytest.Stash, возможность для плагинов хранить свои данные на Config и Nodeв безопасной и свободной от конфликтов манере. Подробности смотрите в Хранение данных об элементах через функции hook.

  • #8953: RunResult метод assert_outcomes теперь принимает аргумент warnings для утверждения общего количества перехваченных предупреждений.

  • #8954: Флаг --debug теперь принимает файл str для маршрутизации журналов отладки, по умолчанию остается pytestdebug.log.

  • #9023: Теперь для утверждений равенства итераций всегда показываются полные диффы, если в окружении найдено CI или BUILD_NUMBER, даже если -v не используется.

  • #9113: RunResult метод assert_outcomes теперь принимает аргумент deselected для подтверждения общего количества отмененных тестов.

  • #9114: Добавлена настройка pythonpath, которая добавляет перечисленные пути в sys.path на время тестовой сессии. Если вы сейчас используете плагины pytest-pythonpath или pytest-srcpaths, вы можете заменить их встроенной настройкой pythonpath.

Улучшения

  • #7480: Изъятие, которое планируется удалить в основной версии X (например, pytest 7, 8, 9, …), теперь использует категорию предупреждений PytestRemovedInXWarning, подкласс PytestDeprecationWarning, вместо PytestDeprecationWarning напрямую.

    Более подробную информацию см. в разделе Политика обратной совместимости.

  • #7864: Улучшены сообщения об ошибках при разборе предупреждающих фильтров.

    Ранее pytest показывал внутренний откат трассировки, который кроме того, что был некрасивым, иногда скрывал причину проблемы (например, ImportError при импорте определенного типа предупреждения).

  • #8335: Улучшены сообщения утверждения pytest.approx() для последовательностей чисел.

    Сообщения утверждения теперь сбрасывают таблицу с индексом и ошибкой каждого различия. Пример:

    >       assert [1, 2, 3, 4] == pytest.approx([1, 3, 3, 5])
    E       assert comparison failed for 2 values:
    E         Index | Obtained | Expected
    E         1     | 2        | 3 +- 3.0e-06
    E         3     | 4        | 5 +- 5.0e-06
    
  • #8403: По умолчанию pytest будет усекать длинные строки в ошибках assert, чтобы они не слишком загромождали вывод, сейчас по умолчанию это 240 символов.

    Однако в некоторых случаях более длинный вывод помогает или даже имеет решающее значение для диагностики сбоя. Использование -v теперь увеличит порог усечения до 2400 символов, а -vv и выше полностью отключит усечение.

  • #8509: Исправлена проблема, при которой unittest.TestCase.setUpClass() не вызывался, если тест имеет / в своем имени, начиная с pytest 6.2.0.

    Это относится к части пути в идентификаторах узлов pytest, например, TestClass::test_it в идентификаторе узла tests/test_file.py::TestClass::test_it.

    Теперь вместо предположения, что имя теста не содержит /, предполагается, что путь теста не содержит ::. Мы планируем надеяться, что оба эти варианта будут работать в будущем.

  • #8803: Теперь можно добавлять цвета к пользовательским уровням журнала в журнале cli.

    Используя add_color_level с крючка pytest_configure, можно добавить цвета:

    logging_plugin = config.pluginmanager.get_plugin('logging-plugin')
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.INFO, 'cyan')
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.SPAM, 'blue')
    

    Для получения дополнительной информации см. раздел Настройка цветов.

  • #8822: При отображении путей к фикстурам в --fixtures или --fixtures-by-test, фикстуры, приходящие из самого pytest, теперь отображают элиминированный путь, а не полный путь к файлу в каталоге site-packages.

  • #8898: Комплексные числа теперь обрабатываются как плавающие и целые числа при генерации идентификаторов параметризации.

  • #9062: --stepwise-skip теперь неявно включает --stepwise и может использоваться самостоятельно.

  • #9205: pytest.Cache.set() теперь сохраняет порядок ключей при сохранении матриц.

Исправления ошибок

  • #7124: Исправлена проблема, при которой __main__.py вызывал ошибку ImportError, когда было предоставлено --doctest-modules.

  • #8061: Исправлена ошибка с ошибками в тестовых случаях staticmethod, если они наследуются от родительского тестового класса.

  • #8192: testdir.makefile теперь молча принимает значения, которые не начинаются с . для поддержания обратной совместимости со старыми версиями pytest.

    pytester.makefile теперь выдает более четкую ошибку, если . отсутствует в аргументе ext.

  • #8258: Исправлена проблема, из-за которой поддержка faulthandler в pytest не выводила трассировку при сбоях, если модуль faulthandler уже был включен во время запуска pytest (например, с помощью python -X dev -m pytest).

  • #8317: Исправлена проблема, при которой недопустимые символы каталога, полученные из getpass.getuser(), вызывали ошибку OSError.

  • #8367: Исправьте Class.from_parent так, чтобы он передавал лишние аргументы ключевых слов в конструктор.

  • #8377: Опции выбора теста pytest -k и pytest -m теперь поддерживают сопоставление имен, содержащих символы прямой косой черты (/).

  • #8384: Декоратор @pytest.mark.skip теперь правильно обрабатывает свои аргументы. Когда аргумент reason случайно задан и как позиционный, и как ключевое слово (например, потому что его перепутали с skipif), теперь происходит проверка TypeError. Раньше такие проверки молча пропускались, а позиционный аргумент игнорировался. Кроме того, reason теперь правильно документируется как позиционное или ключевое слово (а не только как ключевое слово).

  • #8394: Используйте приватные имена для внутренних фикстур, которые обрабатывают классическую установку/исчезновение, чтобы они не отображались при вызове --fixtures по умолчанию (но они по-прежнему отображаются при --fixtures -v).

  • #8456: Опция конфигурации required_plugins теперь работает корректно, когда установлены предварительные версии плагинов, вместо того, чтобы ошибочно утверждать, что эти плагины вообще не установлены.

  • #8464: -c <config file> теперь также правильно определяет rootdir как каталог, содержащий <config file>.

  • #8503: pytest.MonkeyPatch.syspath_prepend() больше не срабатывает, если setuptools не установлен. Теперь он вызывает pkg_resources.fixup_namespace_packages() только если pkg_resources был ранее импортирован, поскольку в противном случае он не нужен.

  • #8548: Введено исправление для обработки точной ширины в log-cli-format в свою очередь для исправления раскраски вывода для некоторых форматов.

  • #8796: Исправлена внутренняя ошибка при пропуске доктестов.

  • #8983: Опции выбора теста pytest -k и pytest -m теперь поддерживают сопоставление имен, содержащих символы обратной косой черты (`\`). Обратные косые черты воспринимаются буквально, а не как экранирующие символы (значения, с которыми производится сравнение, уже экранированы).

  • #8990: Исправление падения pytest -vv с внутренним исключением AttributeError: 'str' object has no attribute 'relative_to' в некоторых случаях.

  • #9077: Исправлено непонятное сообщение об ошибке, когда доступ к request.fspath / request.path осуществлялся из фикстуры, скопированной на сессию.

  • #9131: Исправлен URL, используемый --pastebin, на использование bpa.st.

  • #9163: Номер конечной строки и смещение конечного столбца теперь правильно устанавливаются для переписанных утверждений assert.

  • #9169: Поддержка API files из importlib.resources внутри переписанных файлов.

  • #9272: Фиксы setup() и teardown() на уровне модуля совместимости с носом теперь вызываются только один раз на модуль, а не для каждой тестовой функции. Теперь они вызываются, даже если определены setup/teardown на уровне объекта.

Улучшенная документация

  • #4320: Улучшена документация для pytester.copy_example.

  • #5105: Добавить автоматически сгенерированный Список плагинов. Список обновляется по периодическому расписанию.

  • #8337: Рекомендуйте модуль numpy.testing на pytest.approx() документации.

  • #8655: Текст справки для --pdbcls более точно отражает поведение опции.

  • #9210: Удалите неверную информацию в документации о том, что confcutdir является опцией конфигурации: она может быть установлена только через опцию командной строки --confcutdir.

  • #9242: Обновите конфигурацию readthedocs, чтобы использовать newer Ubuntu version <https://blog.readthedocs.com/new-build-specification/>`__ с лучшей поддержкой юникода для PDF-документов.

  • #9341: Различные методы, обычно используемые для Работа с непитоновскими тестами, теперь правильно документированы в справочной документации. Ранее они были недокументированы.

Тривиальные/внутренние изменения

  • #8133: Переход на setuptools_scm 6.x для использования SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST для более надежного инструментария выпуска.

  • #8174: Следующие изменения были внесены во внутренние типы/функции pytest:

    • Функция _pytest.code.getfslineno() возвращает Path вместо py.path.local.

    • Функция _pytest.python.path_matches_patterns() принимает Path вместо py.path.local.

    • Функция _pytest._code.Traceback.cut() принимает любые os.PathLike[str], а не только py.path.local.

  • #8248: Внутренняя реструктуризация: пусть python.PyObjMixin наследуется от nodes.Node, чтобы перенести информацию о типизации.

  • #8432: улучшено сообщение об ошибке, когда pytest.skip() используется на уровне модуля без передачи allow_module_level=True.

  • #8818: Убедитесь, что regendoc отказывается от выбора кэшира TOX_ENV, чтобы обеспечить независимый запуск теста примера.

  • #8913: Атрибут private CallSpec2._arg2scopenum был удален после внутренней рефакторинга.

  • #8967: pytest_assertion_pass больше не считается экспериментальным, и будущие изменения в нем будут рассматриваться более тщательно.

  • #9202: Добавьте действие github для загрузки отчета о покрытии в codecov вместо загрузчика bash.

  • #9225: Изменена команда, используемая для создания артефактов sdist и wheel: используется пакет build вместо setup.py.

  • #9351: Исправьте незначительные опечатки в doc/en/example/special.rst.

pytest 6.2.5 (2021-08-29)

Тривиальные/внутренние изменения

  • issue #8494: Теперь поддерживается Python 3.10.

  • issue #9040: Включить совместимость с pluggy 1.0 или более поздней версией.

pytest 6.2.4 (2021-05-04)

Исправления ошибок

  • issue #8539: Исправлена перезапись утверждений в Python 3.10.

pytest 6.2.3 (2021-04-03)

Исправления ошибок

  • issue #8414: pytest создавал каталоги под именем /tmp с правами на чтение, доступными для всего мира. Это означает, что любой пользователь в системе мог прочитать информацию, записанную тестами во временных каталогах (например, созданных фикстурой tmp_path/tmpdir). Теперь каталоги создаются с закрытыми правами доступа.

    Раньше pytest молча использовал уже существующий каталог /tmp/pytest-of-<username>, даже если он принадлежал другому пользователю. Это означало, что другой пользователь мог предварительно создать такой каталог и получить контроль над временным каталогом другого пользователя. Теперь такое условие приводит к ошибке.

pytest 6.2.2 (2021-01-25)

Исправления ошибок

  • issue #8152: Исправлено отображение «(<Пропущенный экземпляр>)» в качестве причины пропуска в строке краткой сводки теста, когда причина пуста.

  • issue #8249: Исправьте плагин faulthandler для случаев, когда он работает с twisted.logger и использует pytest --capture=no.

pytest 6.2.1 (2020-12-15)

Исправления ошибок

  • issue #7678: Исправлена ошибка, при которой ImportPathMismatchError возникала ошибка для файлов, скомпилированных в хосте и загруженных позже из UNC смонтированного пути (Windows).

  • issue #8132: Исправлена регрессия в approx: в 6.2.0 approx больше не вызывает TypeError при работе с нечисловыми типами, возвращаясь к нормальному сравнению. До версии 6.2.0 типы массивов, такие как tf.DeviceArray, переходили в скалярный случай и корректно сравнивались со скаляром, если имели только один элемент. После 6.2.0 эти типы начали давать сбой, поскольку они не унаследовали ни от стандартной иерархии чисел Python, ни от numpy.ndarray.

    approx теперь преобразует аргументы в numpy.ndarray, если они используют протокол массивов и не являются скалярами. Это позволяет обращаться с массивоподобными объектами как с массивами numpy, независимо от размера.

pytest 6.2.0 (2020-12-12)

Разрывные изменения

  • issue #7808: pytest теперь поддерживает только python3.6+.

Амортизация

  • issue #7469: Прямое построение/вызов следующих классов/функций теперь устарело:

    • _pytest.cacheprovider.Cache

    • _pytest.cacheprovider.Cache.for_config()

    • _pytest.cacheprovider.Cache.clear_cache()

    • _pytest.cacheprovider.Cache.cache_dir_from_config()

    • _pytest.capture.CaptureFixture

    • _pytest.fixtures.FixtureRequest

    • _pytest.fixtures.SubRequest

    • _pytest.logging.LogCaptureFixture

    • _pytest.pytester.Pytester

    • _pytest.pytester.Testdir

    • _pytest.recwarn.WarningsRecorder

    • _pytest.recwarn.WarningsChecker

    • _pytest.tmpdir.TempPathFactory

    • _pytest.tmpdir.TempdirFactory

    Они всегда считались приватными, но теперь выдают предупреждение об устаревании, которое может стать жесткой ошибкой в pytest 8.0.0.

  • issue #7530: Опция командной строки --strict была устаревшей, вместо нее используйте --strict-markers.

    Мы планируем, возможно, в будущем снова ввести --strict и сделать его всеобъемлющим флагом для всех опций, связанных со строгостью (--strict-markers и --strict-config на данный момент, в будущем могут быть введены другие).

  • issue #7988: Декоратор/функция @pytest.yield_fixture теперь устарела. Вместо него используйте pytest.fixture().

    yield_fixture уже очень давно является псевдонимом для fixture, поэтому его можно смело искать/заменять.

Характеристики

  • issue #5299: pytest теперь предупреждает о невыводимых исключениях и необработанных исключениях потока, возникающих в тестах на Python>=3.8. Смотрите Предупреждение о невыполнимых исключениях и необработанных исключениях потока для получения дополнительной информации.

  • issue #7425: Новое приспособление pytester, которое идентично testdir, но его методы возвращают pathlib.Path при необходимости вместо py.path.local.

    Это часть движения к использованию pathlib.Path объектов внутри, чтобы устранить зависимость от py в будущем.

    Внутренне, старый Testdir теперь является тонкой оберткой вокруг Pytester, сохраняя старый интерфейс.

  • issue #7695: Был добавлен новый хук pytest_markeval_namespace, который должен возвращать словарь. Этот словарь будет использоваться для дополнения «глобальных» переменных, доступных для оценки маркеров skipif/xfail/xpass.

    Псевдопример

    conftest.py:

    def pytest_markeval_namespace():
        return {"color": "red"}
    

    test_func.py:

    @pytest.mark.skipif("color == 'blue'", reason="Color is not red")
    def test_func():
        assert False
    
  • issue #8006: Теперь можно сконструировать объект MonkeyPatch непосредственно как pytest.MonkeyPatch(), в случаях, когда нельзя использовать приспособление monkeypatch. Ранее некоторые пользователи импортировали его из частного пространства имен _pytest.monkeypatch.MonkeyPatch.

    Кроме того, MonkeyPatch.context теперь является методом класса и может быть использован как with MonkeyPatch.context() as mp: .... Это рекомендуемый способ прямого использования MonkeyPatch, поскольку в отличие от приспособления monkeypatch, экземпляр, созданный напрямую, не undo()-руется автоматически.

Улучшения

  • issue #1265: Добавлена реализация __str__ в класс LineMatcher, который возвращается из pytester.run_pytest().stdout и подобных. Она возвращает весь вывод, как и существующий метод str().

  • issue #2044: Режим Verbose теперь показывает причину, по которой тест был пропущен, в терминальной строке теста после «SKIPPED», «XFAIL» или «XPASS».

  • issue #7469 Типы встроенных приспособлений pytest теперь экспортируются, чтобы их можно было использовать в аннотациях типов тестовых функций. Новые экспортированные типы:

    • pytest.FixtureRequest для приспособления request.

    • pytest.Cache для приспособления cache.

    • pytest.CaptureFixture[str] для фиксаторов capfd и capsys.

    • pytest.CaptureFixture[bytes] для фиксаторов capfdbinary и capsysbinary.

    • pytest.LogCaptureFixture для приспособления caplog.

    • pytest.Pytester для приспособления pytester.

    • pytest.Testdir для приспособления testdir.

    • pytest.TempdirFactory для приспособления tmpdir_factory.

    • pytest.TempPathFactory для приспособления tmp_path_factory.

    • pytest.MonkeyPatch для приспособления monkeypatch.

    • pytest.WarningsRecorder для приспособления recwarn.

    Конструирование их не поддерживается (за исключением MonkeyPatch); они предназначены только для использования в аннотациях типов. Это приведет к предупреждению об устаревании, а в pytest 8.0 может стать жесткой ошибкой.

    Их подклассы также не поддерживаются. В настоящее время это не соблюдается во время выполнения, но обнаруживается программами проверки типов, такими как mypy.

  • issue #7527: Когда сравнение между namedtuple экземплярами одного и того же типа завершается неудачей, pytest теперь показывает имена различных полей (возможно, вложенных) вместо их индексов.

  • issue #7615: Node.warn теперь допускает любой подкласс Warning, а не только PytestWarning.

  • issue #7701: Улучшена отчетность при использовании --collected-only. Теперь в сводной статистике будет показано количество собранных тестов.

  • issue #7710: Используйте строгое сравнение равенства для нечисловых типов в pytest.approx() вместо повышения TypeError.

    До версии 3.7 это было недокументированное поведение, но теперь это официально поддерживаемая функция.

  • issue #7938: Новый аргумент --sw-skip, который является сокращением для --stepwise-skip.

  • issue #8023: Добавлено 'node_modules' к значению по умолчанию для norecursedirs.

  • issue #8032: doClassCleanups (введенный в unittest в Python и 3.8) теперь называется соответствующим образом.

Исправления ошибок

  • issue #4824: Исправлено квадратичное поведение и улучшена производительность сбора элементов с помощью autouse fixtures и xunit fixtures.

  • issue #7758: Исправлена проблема, из-за которой некоторые файлы в пакетах терялись из --lf, даже если они содержали тесты, которые не прошли. Устранено в pytest 5.4.0.

  • issue #7911: Каталоги, созданные с помощью tmp_path и tmpdir, теперь считаются устаревшими после 3 дней без изменений (предыдущее значение было 3 часа), чтобы избежать удаления каталогов, все еще используемых в давно работающих наборах тестов.

  • issue #7913: Исправлено падение или зависание в pytester.spawn, когда задействован модуль readline.

  • issue #7951: Исправлена обработка рекурсивных симлинков при сборе тестов.

  • issue #7981: Исправлено, что каталоги с симлинками не отслеживались во время сбора. Исправлено в pytest 6.1.0.

  • issue #8016: Исправлен сбор только одного теста при использовании pytest --doctest-modules path/to/an/__init__.py.

Улучшенная документация

  • issue #7429: Добавьте больше информации и примеров использования о пропуске доктестов.

  • issue #7780: Классы, от которых не следует наследоваться, теперь помечены final class в справке API.

  • issue #7872: _pytest.config.argparsing.Parser.addini() принимает явные None и "string".

  • issue #7878: В разделе pull request просим фиксировать после редактирования журнала изменений и файла авторов.

Тривиальные/внутренние изменения

  • issue #7802: Требование зависимости attrs теперь >=19.2.0 вместо >=17.4.0.

  • issue #8014: файлы .pyc, создаваемые при переписывании утверждений в pytest, теперь соответствуют более новому формату PEP 552 на Python>=3.7. (Эти файлы являются внутренними и интерпретируются только самим pytest).

pytest 6.1.2 (2020-10-28)

Исправления ошибок

  • issue #7758: Исправлена проблема, из-за которой некоторые файлы в пакетах терялись из --lf, даже если они содержали тесты, которые не прошли. Устранено в pytest 5.4.0.

  • issue #7911: Каталоги, созданные tmpdir, теперь считаются устаревшими после 3 дней без изменений (предыдущее значение было 3 часа), чтобы избежать удаления каталогов, все еще используемых в давно работающих наборах тестов.

Улучшенная документация

  • issue #7815: Улучшено предупреждение об устаревании для pytest._fillfuncargs().

pytest 6.1.1 (2020-10-03)

Исправления ошибок

  • issue #7807: Исправлена регрессия в pytest 6.1.0, приводившая к неправильному определению rootdir в некоторых нетривиальных случаях, когда родительские каталоги содержат также и конфигурационные файлы.

  • issue #7814: Исправлен сбой в отчете о заголовках, когда используется testpaths и содержит абсолютные пути (регрессия в 6.1.0).

pytest 6.1.0 (2020-09-26)

Разрывные изменения

  • issue #5585: В соответствии с нашей политикой, следующие функции, которые были устаревшими в серии 5.X, теперь удалены:

    • Свойство funcargnames только для чтения классов FixtureRequest, Metafunc и Function. Используйте атрибут fixturenames.

    • @pytest.fixture больше не поддерживает позиционные аргументы, вместо этого передавайте все аргументы по ключевому слову.

    • Прямое построение подклассов Node теперь вызывает ошибку, вместо этого используйте from_parent.

    • Значение по умолчанию для junit_family изменилось на xunit2. Если вам нужен старый формат, добавьте junit_family=xunit1 в ваш конфигурационный файл.

    • У TerminalReporter больше нет атрибута writer. Авторы плагинов могут использовать публичные функции TerminalReporter вместо прямого доступа к объекту TerminalWriter.

    • Опция --result-log была удалена. Вместо нее пользователям рекомендуется использовать плагин pytest-reportlog.

    Для получения дополнительной информации обратитесь к Амортизация и удаление в документации.

Амортизация

  • issue #6981: Модуль pytest.collect устарел: все его имена могут быть импортированы из pytest напрямую.

  • issue #7097: Функция pytest._fillfuncargs устарела. Эта функция была сохранена для обратной совместимости со старым плагином.

    Его функциональность не предназначена для прямого использования, но если вы должны заменить его, используйте function._request._fillfixtures() вместо него, хотя обратите внимание, что это не публичный API и может сломаться в будущем.

  • issue #7210: Специальный синтаксис -k '-expr' к -k является устаревшим. Вместо него используйте -k 'not expr'.

    Специальный синтаксис -k 'expr:' к -k устарел. Пожалуйста, откройте проблему, если вы используете его и хотите замену.

  • issue #7255: Хук pytest_warning_captured устарел в пользу pytest_warning_recorded и будет удален в будущей версии.

  • issue #7648: Методы gethookproxy() и isinitpath() из FSCollector и Package устарели; вместо них используйте self.session.gethookproxy() и self.session.isinitpath(). Это должно работать на всех версиях pytest.

Характеристики

  • issue #7667: Новый флаг командной строки --durations-min управляет минимальной длительностью для включения в самый медленный список тестов, показанный --durations. Ранее это значение было жестко закодировано в 0.005s.

Улучшения

  • issue #6681: Внутренние предупреждения pytest, выдаваемые на ранних стадиях инициализации, теперь обрабатываются должным образом и могут фильтроваться через filterwarnings или --pythonwarnings/-W.

    Это также исправляет ряд давно существующих проблем: issue #2891, issue #7620, issue #7426.

  • issue #7572: Если плагин, указанный в required_plugins, отсутствует или неизвестный ключ конфигурации используется в --strict-config, теперь вместо трассировки отображается простое сообщение об ошибке.

  • issue #7685: Добавлены два новых атрибута rootpath и inipath к Config. Эти атрибуты являются pathlib.Path версиями существующих атрибутов rootdir и inifile, и им следует отдавать предпочтение, когда это возможно.

  • issue #7780: Публичные классы, которые не предназначены для наследования, теперь помечены @final. Код, наследующий от этих классов, будет вызывать ошибку проверки типов (например, mypy), но при этом будет работать во время выполнения. В настоящее время обозначение final не появляется в API Reference, но, надеюсь, появится в будущем.

Исправления ошибок

  • issue #1953: Исправлена ошибка при перезаписи параметризованного приспособления, при этом повторно используется значение суперприспособления.

    # conftest.py
    import pytest
    
    
    @pytest.fixture(params=[1, 2])
    def foo(request):
        return request.param
    
    
    # test_foo.py
    import pytest
    
    
    @pytest.fixture
    def foo(foo):
        return foo * 2
    
  • issue #4984: Исправлен сбой внутренней ошибки IndexError: list index out of range при сборе модуля, который начинается с декорированной функции, декоратор поднимается, а перезапись утверждений включена.

  • issue #7591: pylint больше не должен жаловаться на нереализованные абстрактные методы при наследовании от File.

  • issue #7628: Исправлен сбор тестов, когда в pytest на Windows передавался полный путь без буквы диска (например, \projects\tests\test.py вместо c:\projects\tests\pytest.py).

  • issue #7638: Исправьте обработку опций командной строки, которые отображаются как пути, но вызывают синтаксическую ошибку на уровне ОС в Windows, например, опции, используемые внутри pytest-xdist.

  • issue #7742: Исправлен INTERNALERROR при обращении к локальным / глобальным файлам с неисправным exec.

Улучшенная документация

  • issue #1477: Удален файл faq.rst и его ссылка в файле contents.rst.

Тривиальные/внутренние изменения

  • issue #7536: Внутренний плагин junitxml был переписан для использования xml.etree.ElementTree. Порядок атрибутов в элементах XML может отличаться. Некоторые ненужные экранирования больше не выполняются.

  • issue #7587: Зависимость от пакета more-itertools была удалена.

  • issue #7631: Тип результата capfd.readouterr() (и подобных) больше не является именованным кортежем, но должен вести себя как именованный кортеж во всех отношениях. Это было сделано по техническим причинам.

  • issue #7671: При сборе тестов pytest находит тестовые классы и функции, изучая атрибуты объектов python (модулей, классов и экземпляров). Чтобы ускорить этот процесс, pytest теперь игнорирует встроенные атрибуты (такие как __class__, __delattr__ и __new__), не обращаясь к опциям конфигурации python_classes и python_functions и не передавая их плагинам с помощью хука pytest_pycollect_makeitem.

pytest 6.0.2 (2020-09-04)

Исправления ошибок

  • issue #7148: Исправлено --log-cli, которое могло привести к заглатыванию несвязанного вывода print.

  • issue #7672: Исправлено некорректное восстановление уровня захвата журнала, если caplog.set_level вызывается более одного раза.

  • issue #7686: Исправлено использование NotSetType.token в качестве идентификатора параметра, когда список параметризации пуст. Устранено в pytest 6.0.0.

  • issue #7707: Исправление внутренней ошибки при обработке некоторых исключений, которые содержат несколько строк или стиль использует несколько строк (например, --tb=line).

pytest 6.0.1 (2020-07-30)

Исправления ошибок

  • issue #7394: Передача пустого значения help в Parser.add_option теперь принимается вместо сбоя при выполнении pytest --help. Передача None вызывает более информативный TypeError.

  • issue #7558: Исправьте pylint not-callable lint на pytest.mark.parametrize() и другие встроенные метки: skip, skipif, xfail, usefixtures, filterwarnings.

  • issue #7559: Исправление регрессии в плагинах, использующих TestReport.longreprtext (например, pytest-html), когда TestReport.longrepr не является строкой.

  • issue #7569: Исправление того, что уровень обработчика захвата журнала не сбрасывался при разрыве после вызова caplog.set_level().

pytest 6.0.0 (2020-07-28)

(Пожалуйста, смотрите полный набор изменений для этого выпуска также в примечаниях к версии 6.0.0rc1 ниже)

Разрывные изменения

  • issue #5584: PytestDeprecationWarning теперь являются ошибками по умолчанию..

    В соответствии с нашим планом по удалению устаревших функций с минимальными нарушениями, все предупреждения типа PytestDeprecationWarning теперь генерируют ошибки вместо предупреждений.

    Затронутые функции будут фактически удалены в pytest 6.1, поэтому, пожалуйста, обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.

    В серии pytest 6.0.X можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файл pytest.ini:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestDeprecationWarning
    

    Но это перестанет работать, когда выйдет pytest 6.1.

    Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #5584.

  • issue #7472: Методы exec_() и is_true() в _pytest._code.Frame были удалены.

Характеристики

  • issue #7464: Добавлена поддержка переменных окружения NO_COLOR и FORCE_COLOR для управления цветным выводом.

Улучшения

  • issue #7467: --log-file CLI опция и log_file ini маркер теперь создают поддиректории, если это необходимо.

  • issue #7489: Функция pytest.raises() имеет более четкое сообщение об ошибке, когда match равна полученной строке, но не является совпадением с regex. В этом случае предлагается экранировать regex.

Исправления ошибок

  • issue #7392: Исправьте сообщение о местоположении тестов, пропущенных с помощью @pytest.mark.skip при использовании --runxfail.

  • issue #7491: tmpdir и tmp_path больше не вызывают ошибку, если блокировка для проверки устаревших временных каталогов недоступна.

  • issue #7517: Сохранять окончания строк при захвате через capfd.

  • issue #7534: Восстановлено прежнее форматирование TracebackEntry.__str__, которое было изменено случайно.

Улучшенная документация

  • issue #7422: Уточнено, когда метка usefixtures может применять приспособления для тестирования.

  • issue #7441: Добавьте примечание об опции -q, используемой в руководстве по началу работы.

Тривиальные/внутренние изменения

  • issue #7389: Область применения приспособления package больше не считается экспериментальной.

pytest 6.0.0rc1 (2020-07-08)

Разрывные изменения

  • issue #1316: TestReport.longrepr теперь всегда является экземпляром ReprExceptionInfo. Ранее это был str, когда тест проваливался с pytest.fail(..., pytrace=False).

  • issue #5965: симлинки больше не разрешаются во время сбора и сопоставления файлов conftest.py с путями к тестовым файлам.

    Разрешение симлинков для текущего каталога и во время сбора было представлено как исправление в версии 3.9.0, но на самом деле это новая функция, которая привела к печальным последствиям в Windows и удивительным результатам на других платформах.

    Команда решила отказаться от разрешения симлинков вообще, планируя пересмотреть этот вопрос в будущем с более надежным решением (подробнее см. обсуждение в pull request #6523).

    Это может нарушить работу тестовых наборов, которые использовали эту возможность; исправление заключается в создании симлинка для всего дерева тестов, а не только для частичных файлов/тестов, как это было возможно ранее.

  • issue #6505: Testdir.run().parseoutcomes() теперь всегда возвращает разобранные существительные в форме множественного числа.

    Первоначально parseoutcomes() всегда возвращало существительные во множественном числе, но изменение, призванное улучшить сводку терминала за счет использования одиночных элементов в единственном числе (1 warning или 1 error), вызвало непреднамеренный регресс, изменив ключи, возвращаемые parseoutcomes().

    Теперь API гарантирует, что всегда будет возвращаться форма множественного числа, поэтому вызовы, подобные этому:

    result = testdir.runpytest()
    result.assert_outcomes(error=1)
    

    Необходимо изменить на:

    result = testdir.runpytest()
    result.assert_outcomes(errors=1)
    
  • issue #6903: Теперь предполагается, что функция os.dup() существует. Мы не знаем ни одной поддерживаемой реализации Python 3, которая бы ее не предоставляла.

  • issue #7040: -k больше не сопоставляет имена каталогов вне корня тестовой сессии.

    Кроме того, pytest.Package.name теперь является просто именем каталога, содержащего файл пакета __init__.py, вместо полного пути. Это соответствует тому, как названы другие узлы, а также является одной из причин, почему -k будет соответствовать любой директории, содержащей тестовый пакет.

  • issue #7122: Выражения, заданные в опциях -m и -k, больше не оцениваются с помощью Python’овского eval(). Формат поддерживает or, and, not, скобки и общие идентификаторы для сравнения. Константы, ключевые слова и другие операторы Python больше не оцениваются по-другому.

  • issue #7135: Pytest теперь использует свой собственный класс TerminalWriter вместо класса из библиотеки py. Плагины обычно обращаются к этому классу через TerminalReporter.writer, TerminalReporter.write() (и подобные методы) или _pytest.config.create_terminal_writer().

    Были внесены следующие изменения:

    • Вывод (метод write() и другие) больше не промывается неявно; поведение промывки базового файла соблюдается. Для явного промывания (например, если вы хотите, чтобы вывод был показан до печати конца строки), используйте write(flush=True) или terminal_writer.flush().

    • Явная поддержка консоли Windows была удалена и передана библиотеке colorama.

    • Удалена поддержка записи bytes.

    • Метод reline и свойство chars_on_current_line были удалены.

    • Аргументы stringio и encoding были удалены.

    • Удалена поддержка передачи вызываемого файла вместо файла.

  • issue #7224: Атрибуты item.catch_log_handler и item.catch_log_handlers, устанавливаемые плагином логирования и никогда не предназначенные для публичного использования, больше не доступны.

    Удалены устаревшие опции --no-print-logs и log_print ini. Вместо них используйте --show-capture.

  • issue #7226: Удален неиспользуемый параметр args из pytest.Function.__init__.

  • issue #7418: Удалена спецификация хука pytest_doctest_prepare_content. Этот хук не вызывался pytest уже как минимум 10 лет.

  • issue #7438: Некоторые изменения были внесены во внутренний _pytest._code.source, приведенные здесь для пользы авторов плагинов, которые могут его использовать:

    • Аргумент deindent в Source() был удален, теперь он всегда истинен.

    • Поддержка нулевых или множественных аргументов для Source() была удалена.

    • Удалена поддержка сравнения Source с str.

    • Методы Source.isparseable() и Source.putaround() были удалены.

    • Метод Source.compile() и функция _pytest._code.compile() были удалены; вместо них используйте обычные compile().

    • Функция _pytest._code.source.getsource() была удалена; вместо нее используйте непосредственно Source().

Амортизация

  • issue #7210: Специальный синтаксис -k '-expr' к -k является устаревшим. Вместо него используйте -k 'not expr'.

    Специальный синтаксис -k 'expr:' к -k устарел. Пожалуйста, откройте проблему, если вы используете его и хотите замену.

  • issue #4049: pytest_warning_captured устарел в пользу хука pytest_warning_recorded.

Характеристики

  • issue #1556: pytest теперь поддерживает pyproject.toml файлы для конфигурации.

    Параметры конфигурации аналогичны тем, что доступны в других форматах, но должны быть определены в таблице [tool.pytest.ini_options], чтобы быть подхваченными pytest:

    # pyproject.toml
    [tool.pytest.ini_options]
    minversion = "6.0"
    addopts = "-ra -q"
    testpaths = [
        "tests",
        "integration",
    ]
    

    Более подробную информацию можно найти in the docs.

  • issue #3342: pytest теперь включает аннотации типов inline и открывает их для пользовательских программ. Охвачена большая часть API, ориентированного на пользователя, а также внутренний код.

    Если вы используете в своих тестах программу проверки типов, такую как mypy, вы можете начать замечать ошибки типов, указывающие на их неправильное использование. Если вы столкнулись с ошибкой, которую вы считаете неправильной, пожалуйста, сообщите нам об этом в проблеме.

    Типы были разработаны для версии mypy 0.780. Известно, что версии до 0.750 не работают. Мы рекомендуем использовать последнюю версию. Другие средства проверки типов также могут работать, но они еще официально не подтверждены pytest.

  • issue #4049: Введен новый хук pytest_warning_recorded для передачи информации о предупреждениях, перехваченных внутренним плагином предупреждений pytest.

    Этот хук предназначен для замены pytest_warning_captured, который устарел и будет удален в будущем релизе.

  • issue #6471: Новые флаги командной строки:

    • --no-header: отключает начальный заголовок, включая платформу, версию и плагины.

    • --no-summary: отключает итоговое резюме теста, включая предупреждения.

  • issue #6856: Теперь при чтении неизвестного ключа из INI-файла конфигурации выдается предупреждение.

    Флаг --strict-config был добавлен, чтобы рассматривать эти предупреждения как ошибки.

  • issue #6906: Добавлена опция командной строки --code-highlight для включения/выключения подсветки кода в выводе терминала.

  • issue #7245: Новая опция --import-mode=importlib, которая использует importlib для импорта тестовых модулей.

    Традиционно pytest использовал __import__, изменяя sys.path для импорта тестовых модулей (что также изменяет sys.modules как побочный эффект), что работает, но имеет ряд недостатков, например, требует, чтобы тестовые модули, которые не живут в пакетах, имели уникальные имена (поскольку они должны находиться под уникальным именем в sys.modules).

    --import-mode=importlib использует более тонкие механизмы импорта из importlib, которые не требуют от pytest изменения sys.path или sys.modules вообще, устраняя большую часть недостатков предыдущего режима.

    Мы намерены сделать --import-mode=importlib по умолчанию в будущих версиях, поэтому пользователям рекомендуется попробовать новый режим и оставить отзыв (как положительный, так и отрицательный) в выпуске issue #7245.

    Подробнее об этой опции вы можете прочитать в the documentation.

  • issue #7305: Новый параметр конфигурации required_plugins позволяет пользователю указать список плагинов, включая информацию о версии, которые необходимы для работы pytest. Если при запуске pytest не будет найден ни один из требуемых плагинов, будет выдана ошибка.

Улучшения

  • issue #4375: Команда pytest теперь подавляет сообщение об ошибке BrokenPipeError, которое печатается на stderr, когда вывод pytest передается по трубопроводу, а трубопровод закрывается программой-трубопроводом (обычные примеры - less и head).

  • issue #4391: Улучшена точность измерения продолжительности теста. У элементов CallInfo теперь есть новый атрибут <CallInfo>.duration, созданный с помощью time.perf_counter(). Этот атрибут используется для заполнения атрибута <TestReport>.duration, который является более точным, чем предыдущие <CallInfo>.stop - <CallInfo>.start (поскольку они основаны на time.time()).

  • issue #4675: Богатое сравнение для классов данных и attrs-классов теперь рекурсивно.

  • issue #6285: Раскрыто исключение pytest.FixtureLookupError, которое вызывается request.getfixturevalue() (где request является фикстурой FixtureRequest), когда фикстура с заданным именем не может быть возвращена.

  • issue #6433: Если при форматировании сообщения в вызове логирования возникает ошибка, например logging.warning("oh no!: %s: %s", "first") (отсутствует второй аргумент), pytest теперь распространяет ошибку, что может привести к неудаче теста.

    Ранее такая ошибка приводила к печати ошибки в stderr, которая по умолчанию не отображается при прохождении тестов. Это изменение делает ошибку видимой во время тестирования.

    Вы можете временно или постоянно подавить это поведение, установив logging.raiseExceptions = False.

  • issue #6817: Сохраняются явные новые строки в текстах справки по опциям командной строки, что позволяет плагинам лучше контролировать справку, отображаемую пользователям.

  • issue #6940: При использовании опции --duration вывод сообщений терминала теперь более точно указывает количество и продолжительность скрытых элементов.

  • issue #6991: Собранные файлы отображаются после любых отчетов от хуков, например, статус от --lf.

  • issue #7091: Когда используется захват fd через --capture=fd или через фиксаторы capfd и capfdbinary, и дескриптор файла (0, 1, 2) не может быть продублирован, захват FD все равно выполняется. Ранее прямая запись в дескрипторы файлов в этом случае не выполнялась или терялась.

  • issue #7119: Выход с ошибкой, если аргумент --basetemp пуст, является текущим рабочим каталогом или одним из родительских каталогов. Это сделано для защиты от случайной потери данных, так как любой каталог, переданный в этом аргументе, очищается.

  • issue #7128: pytest --version теперь показывает только версию pytest, в то время как pytest --version --version отображает более подробную информацию, включая плагины. Это больше соответствует тому, как другие инструменты показывают --version.

  • issue #7133: caplog.set_level() теперь будет переопределять любые log_level, установленные через CLI или конфигурационный файл.

  • issue #7159: caplog.set_level() и caplog.at_level() больше не влияют на уровень журналов, которые отображаются в разделе отчета Отчет о захваченных журналах.

  • issue #7348: Улучшение рекурсивного отчета diff для утверждений сравнения на классах данных / атрибутах.

  • issue #7385: --junitxml теперь включает причину исключения в XML-атрибут message для сбоев при установке и разрушении.

    Ранее:

    <error message="test setup failure">
    

    Сейчас:

    <error message="failed on setup with &quot;ValueError: Some error during setup&quot;">
    

Исправления ошибок

  • issue #1120: Исправление проблемы, при которой каталоги из tmpdir не удалялись должным образом, когда несколько экземпляров pytest работают параллельно.

  • issue #4583: Предотвращение сбоев и предоставление удобной для пользователя ошибки, когда маркерное выражение (-m), вызывающее eval(), вызывает какое-либо исключение.

  • issue #4677: Путь, показанный в сводном отчете для ПРОПУЩЕННЫХ тестов, теперь всегда является относительным. Ранее он иногда был абсолютным.

  • issue #5456: Исправление возможного состояния гонки при попытке удалить файлы блокировки, используемые для контроля доступа к папкам, созданным tmp_path и tmpdir.

  • issue #6240: Устранена проблема, при которой ведение журнала на этапе сбора приводило к дублированию сообщений журнала в stderr.

  • issue #6428: Пути, появляющиеся в сообщениях об ошибках, теперь корректны в случае, если текущий рабочий каталог изменился с момента начала сеанса.

  • issue #6755: Пути, появляющиеся в сообщениях об ошибках, теперь корректны в случае, если текущий рабочий каталог изменился с момента начала сеанса.

  • issue #6871: Исправление сбоя с захваченным выводом при использовании capsysbinary.

  • issue #6909: Верните изменение, внесенное pull request #6330, которое требовало, чтобы все аргументы для @pytest.mark.parametrize были явно определены в сигнатуре функции.

    Цель первоначального изменения заключалась в том, чтобы удалить то, что, как ожидалось, было непреднамеренным/ неожиданным поведением, но оказалось, что многие люди полагались на это, поэтому ограничение было отменено.

  • issue #6910: Исправление сбоя, когда плагины возвращали неизвестную статистику при использовании опции --reportlog.

  • issue #6924: Убедитесь, что unittest.IsolatedAsyncioTestCase действительно ожидается.

  • issue #6925: Исправьте экземпляры TerminalRepr, чтобы они снова были хэшируемыми.

  • issue #6947: Исправление регрессии, когда функции, зарегистрированные с unittest.TestCase.addCleanup(), не вызывались при ошибках тестирования.

  • issue #6951: Позволяет пользователям по-прежнему устанавливать устаревший атрибут TerminalReporter.writer.

  • issue #6956: Запретить pytest печатать ConftestImportFailure трассировку возврата в stdout.

  • issue #6991: Исправление регрессий, связанных со слишком сильной фильтрацией --lf с pytest 5.4.

  • issue #6992: Пересмотрите «tmpdir: очистить перенаправление через конфигурацию для фабрик» issue #6767, так как это нарушает pytest-xdist.

  • issue #7061: Когда приспособление для выхода не выдает значение, вместо сбоя сообщайте об ошибке настройки теста.

  • issue #7076: Путь к файлу, пропущенному @pytest.mark.skip в отчете SKIPPED, теперь указывается относительно каталога вызова. Ранее он был относительно корневого каталога.

  • issue #7110: Исправлена регрессия: asyncbase.TestCase тесты снова выполняются правильно.

  • issue #7126: --setup-show теперь не вызывает ошибку, когда значение байта используется в качестве параметра parametrize, когда Python вызывается с флагом -bb.

  • issue #7143: Исправьте pytest.File.from_parent() так, чтобы он передавал лишние аргументы ключевых слов в конструктор.

  • issue #7145: Классы с неработающими методами __getattribute__ корректно отображаются при сбоях.

  • issue #7150: Предотвращает скрытие основного исключения при возникновении ConfTestImportFailure.

  • issue #7180: Исправление _is_setup_py для файлов с кодировкой, отличной от локали.

  • issue #7215: Исправление регрессии, когда при запуске с --pdb вызывался unittest.TestCase.tearDown() для пропущенных тестов.

  • issue #7253: При использовании pytest.fixture в функции напрямую, как в pytest.fixture(func), если также переданы аргументы autouse или params, функция больше не игнорируется, а помечается как приспособление.

  • issue #7360: Исправление возможной некорректной оценки строковых выражений, переданных в pytest.mark.skipif и pytest.mark.xfail, в редких случаях, когда используется одна и та же строка, но ссылающаяся на разные глобальные значения.

  • issue #7383: Исправлены причины возникновения исключений по всей кодовой базе, т.е. используйте raise new_exception from old_exception при обертывании исключения.

Улучшенная документация

  • issue #7202: Руководство по разработке теперь ссылается на раздел документации по внесению вклада и RELEASING.rst на GitHub.

  • issue #7233: Добавить примечание о --strict и --strict-markers и предпочтении последнего.

  • issue #7345: Объясните косвенную параметризацию и маркеры для приспособлений.

Тривиальные/внутренние изменения

  • issue #7035: Атрибут originalname в _pytest.python.Function теперь по умолчанию равен name, если не указан явно, и всегда установлен.

  • issue #7264: Зависимость от пакета wcwidth была удалена.

  • issue #7291: Замените py.iniconfig на iniconfig.

  • issue #7295: src/_pytest/config/__init__.py теперь использует модуль warnings для сообщения о предупреждениях вместо sys.stderr.write.

  • issue #7356: Удалите последние внутренние использования устаревшего термина slave из старого pytest-xdist.

  • issue #7357: ``py``=1.8.2 теперь требуется.

pytest 5.4.3 (2020-06-02)

Исправления ошибок

  • issue #6428: Пути, появляющиеся в сообщениях об ошибках, теперь корректны в случае, если текущий рабочий каталог изменился с момента начала сеанса.

  • issue #6755: Поддержка удаления путей длиной более 260 символов в окнах, созданных внутри tmpdir.

  • issue #6956: Запретить pytest печатать отслеживание ConftestImportFailure в stdout.

  • issue #7150: Предотвращает скрытие основного исключения при возникновении ConfTestImportFailure.

  • issue #7215: Исправление регрессии, когда при запуске с --pdb вызывались методы tearDown подклассов unittest.TestCase для пропущенных тестов.

pytest 5.4.2 (2020-05-08)

Исправления ошибок

  • issue #6871: Исправление сбоя с захваченным выводом при использовании capsysbinary fixture.

  • issue #6924: Убедитесь, что unittest.IsolatedAsyncioTestCase действительно ожидается.

  • issue #6925: Исправьте экземпляры TerminalRepr, чтобы они снова были хэшируемыми.

  • issue #6947: Исправление регрессии, когда функции, зарегистрированные с TestCase.addCleanup, не вызывались при ошибках тестирования.

  • issue #6951: Позволяет пользователям по-прежнему устанавливать устаревший атрибут TerminalReporter.writer.

  • issue #6992: Отмена «tmpdir: очистить перенаправление через конфигурацию для фабрик» #6767, так как это ломает pytest-xdist.

  • issue #7110: Исправлена регрессия: asyncbase.TestCase тесты снова выполняются правильно.

  • issue #7143: Исправьте File.from_parent так, чтобы он передавал лишние аргументы ключевых слов в конструктор.

  • issue #7145: Классы с неработающими методами __getattribute__ корректно отображаются при сбоях.

  • issue #7180: Исправление _is_setup_py для файлов с кодировкой, отличной от локали.

pytest 5.4.1 (2020-03-13)

Исправления ошибок

  • issue #6909: Верните изменение, внесенное pull request #6330, которое требовало, чтобы все аргументы для @pytest.mark.parametrize были явно определены в сигнатуре функции.

    Цель первоначального изменения заключалась в том, чтобы удалить то, что, как ожидалось, было непреднамеренным/ неожиданным поведением, но оказалось, что многие люди полагались на это, поэтому ограничение было отменено.

  • issue #6910: Исправление сбоя, когда плагины возвращали неизвестную статистику при использовании опции --reportlog.

pytest 5.4.0 (2020-03-12)

Разрывные изменения

  • issue #6316: Сопоставление -k EXPRESSION с именами тестов теперь не чувствительно к регистру.

  • issue #6443: Плагины, указанные с -p, теперь загружаются после внутренних плагинов, что приводит к тому, что их хуки вызываются перед внутренними.

    Это делает поведение -p согласованным с PYTEST_PLUGINS.

  • issue #6637: Удален давно устаревший хук pytest_itemstart.

    Этот хук был помечен как устаревший и даже не вызывался pytest уже более 10 лет.

  • issue #6673: Пересмотрено/исправлено значение «+/-» в диффах ошибок. «-» означает, что в результате отсутствует что-либо ожидаемое, а «+» означает, что в результате есть неожиданные дополнения.

  • issue #6737: Атрибут cached_result в FixtureDef теперь устанавливается в None, когда результат недоступен, а не удаляется.

    Если ваш плагин выполняет проверки типа hasattr(fixturedef, 'cached_result'), например, в реализации хука pytest_fixture_post_finalizer, замените его на fixturedef.cached_result is not None. Если вы del атрибут, установите вместо него значение None.

Амортизация

  • issue #3238: Опция --no-print-logs является устаревшей и будет удалена в будущем релизе. Если вы используете --no-print-logs, пожалуйста, попробуйте --show-capture и оставьте отзыв.

    Опция командной строки --show-capture была добавлена в pytest 3.5.0 и позволяет указать, как отображать захваченный вывод при неудачных тестах: no, stdout, stderr, log или all (по умолчанию).

  • issue #571: Исправьте неиспользуемый/сломанный хук pytest_collect_directory. Он был неправильно настроен после удаления коллектора Directory в 2010 году и стал некорректным/неиспользуемым, как только сбор был отделен от выполнения тестов.

  • issue #5975: Откажитесь от использования прямых конструкторов для Nodes.

    Вместо этого они теперь строятся через Node.from_parent.

    Этот переходный механизм позволяет нам распутать очень интенсивно запутанные отношения Node путем введения более контролируемых моделей создания/конфигурации.

    В рамках этого изменения параметры session/config уже запрещены, и по мере работы над деталями нам, возможно, потребуется запретить еще несколько параметров.

    Ожидается, что подклассы будут использовать super().from_parent, если они намерены расширить создание Nodes.

  • issue #6779: Атрибут TerminalReporter.writer был устаревшим и больше не должен использоваться. Он был непреднамеренно раскрыт как часть публичного API этого плагина и слишком сильно связывает его с py.io.TerminalWriter.

Характеристики

  • issue #4597: Новая опция –capture=tee-sys позволяет печатать и захватывать тестовый вывод.

  • issue #5712: Теперь все аргументы для @pytest.mark.parametrize должны быть явно объявлены в сигнатуре функции или через indirect. Ранее можно было опустить аргумент, если существовало приспособление с таким же именем, что было просто случайностью реализации и не являлось частью API.

  • issue #6454: Изменено значение по умолчанию для -r на fE, которое отображает сбои и ошибки в short test summary. -rN может быть использован для отключения этого (старое поведение).

  • issue #6469: К опции junit_logging добавлены новые опции: log, out-err и all.

  • issue #6834: Избыточные сводки предупреждений теперь сворачиваются в файл, чтобы обеспечить читабельное отображение сводок предупреждений.

Улучшения

  • issue #1857: pytest.mark.parametrize снова принимает целые числа для ids, преобразуя их в строки.

  • issue #449: Используйте «желтый» основной цвет с любыми тестами XPASSED.

  • issue #4639: Пересмотрите «Теперь выдается предупреждение, когда утверждения делаются для None».

    Предупреждение оказалось менее полезным, чем ожидалось изначально, и имело довольно много случаев ложного срабатывания.

  • issue #5686: tmpdir_factory.mktemp теперь не работает при задании абсолютных и ненормализованных путей.

  • issue #5984: крючок pytest_warning_captured теперь получает параметр location с местом кода, который выдал предупреждение.

  • issue #6213: pytester: приспособление testdir соблюдает настройки окружения из приспособления monkeypatch для внутренних запусков.

  • issue #6247: --fulltrace соблюдается при ошибках сбора.

  • issue #6384: Заставьте --showlocals работать также с --tb=short.

  • issue #6653: Добавьте поддержку сопоставления строк, идущих последовательно с LineMatcherfnmatch_lines() и re_match_lines().

  • issue #6658: Код теперь выделяется в трассировках, когда установлен pygments.

    Пользователям предлагается установить pygments в свою среду и оставить отзыв, поскольку в будущем планируется сделать pygments регулярной зависимостью.

  • issue #6795: Сообщение об ошибке использования импорта с недопустимой опцией -o.

  • issue #759: pytest.mark.parametrize поддерживает итераторы и генераторы для ids.

Исправления ошибок

  • issue #310: Добавьте поддержку вызова pytest.xfail() и pytest.importorskip() с помощью доктестов.

  • issue #3823: --trace теперь работает с нетестами.

  • issue #4445: Исправлены некоторые сообщения о предупреждениях, выдаваемые pytest, чтобы они указывали на правильное местоположение предупреждения в коде пользователя.

  • issue #5301: Исправьте --last-failed для сбора новых тестов из файлов с известными сбоями.

  • issue #5928: Сообщайте PytestUnknownMarkWarning на уровне кода пользователя, а не pytest.

  • issue #5991: Исправьте взаимодействие с --pdb и unittests: не используйте TestCase.debug() unittest’а.

  • issue #6334: Исправление двойного отображения итоговых записей, когда символы отчета f/F и s/S использовались одновременно в опции командной строки -r (например, -rFf).

    Варианты с верхним регистром никогда не документировались, и предпочтительной формой должен быть нижний регистр.

  • issue #6409: Возврат к зеленому цвету (вместо желтого) для не последних элементов без предыдущих проходов с цветным индикатором выполнения терминала.

  • issue #6454: --disable-warnings уважается с -ra и -rA.

  • issue #6497: Исправьте ошибку в сравнении ключа запроса с кэшированным ключом в приспособлении.

    Конструкция if key == cached_key: может не сработать либо потому, что == явно запрещена, либо, например, для массивов NumPy, где результат a == b в общем случае не может быть преобразован в bool. Реализованное исправление заменяет == на is.

  • issue #6557: Заставить метод capture output streams .write() возвращать то же возвращаемое значение, что и исходные потоки.

  • issue #6566: Исправьте EncodedFile.writelines для вызова метода writelines базового буфера.

  • issue #6575: Исправление внутреннего сбоя, когда faulthandler запускается инициализированным (например, с установленной переменной окружения PYTHONFAULTHANDLER=1) и faulthandler_timeout определен в конфигурационном файле.

  • issue #6597: Исправьте идентификаторы узлов, которые содержат параметризованную переменную с пустой строкой.

  • issue #6646: Крючки перезаписи утверждений (пере)сохраняются для текущего элемента, что исправляет их использование после, например, pytester’s testdir.runpytest и т.д.

  • issue #6660: pytest.exit() обрабатывается, когда выдается из хука pytest_sessionfinish. Это включает выход из отладчика.

  • issue #6752: Когда pytest.raises() используется как функция (в отличие от менеджера контекста), аргумент ключевого слова match теперь передается в тестируемую функцию. Ранее он проглатывался и игнорировался (регрессия в pytest 5.1.0).

  • issue #6801: Не отображать пустые строки между трассировками для неожиданных исключений с doctests.

  • issue #6802: testdir fixture теперь работает внутри доктестов.

Улучшенная документация

  • issue #6696: Добавить список приспособлений в начало главы о приспособлениях.

  • issue #6742: Разверните первое предложение о креплениях в абзац.

Тривиальные/внутренние изменения

  • issue #6404: Удалите использование модуля parser, устаревшего в Python 3.9.

pytest 5.3.5 (2020-01-29)

Исправления ошибок

  • issue #6517: Исправление регрессии в pytest 5.3.4, вызывающей INTERNALERROR из-за неверного утверждения.

pytest 5.3.4 (2020-01-20)

Исправления ошибок

  • issue #6496: Revert issue #6436: к сожалению, это изменение вызвало ряд регрессий во многих наборах, поэтому команда решила вернуть это изменение и сделать новый выпуск, пока мы продолжаем искать решение.

pytest 5.3.3 (2020-01-16)

Исправления ошибок

  • issue #2780: Захваченный вывод во время разрыва показан с -rP.

  • issue #5971: Исправьте ошибку pytest-xdist при работе с исключениями, возникающими в подпроцессах, созданных модулем multiprocessing.

  • issue #6436: Объекты FixtureDef теперь правильно регистрируют свои финализаторы с автодома и параметризованными фикстурами, которые выполняются перед ними в стеке фикстур, так что они срываются в нужное время и в нужном порядке.

  • issue #6532: Исправление разбора исходов, содержащих множественные ошибки с результатами testdir (регрессия в 5.3.0).

Тривиальные/внутренние изменения

  • issue #6350: Оптимизировано автоматическое переименование идентификаторов тестовых параметров.

pytest 5.3.2 (2019-12-13)

Улучшения

  • issue #4639: Пересмотрите «Теперь выдается предупреждение, когда утверждения делаются для None».

    Предупреждение оказалось менее полезным, чем ожидалось изначально, и имело довольно много случаев ложного срабатывания.

Исправления ошибок

  • issue #5430: junitxml: Логи для неудачного теста теперь передаются в отчет junit в случае, если тест не прошел во время фазы вызова.

  • issue #6290: вспомогательные файлы в каталоге .pytest_cache сохраняются с помощью --cache-clear, который теперь только очищает кэшированные значения.

  • issue #6301: Исправление перезаписи утверждений для дистрибутивов на основе яиц и установок editable (pip install --editable).

pytest 5.3.1 (2019-11-25)

Улучшения

Исправления ошибок

  • issue #5914: pytester: исправление no_fnmatch_line() при использовании после положительного совпадения.

  • issue #6082: Исправьте определение строк для примеров doctest внутри property docstrings, как обходной путь для bpo-17446.

  • issue #6254: Исправление совместимости с pytest-parallel (регрессия в pytest 5.3.0).

  • issue #6255: Очистите атрибуты sys.last_traceback, sys.last_type и sys.last_value, удалив их вместо того, чтобы установить их в None. Это лучше соответствует поведению стандартной библиотеки Python.

pytest 5.3.0 (2019-11-19)

Амортизация

  • issue #6179: Значение по умолчанию опции junit_family изменится на "xunit2" в pytest 6.0, учитывая, что именно эта версия поддерживается по умолчанию в современных инструментах, манипулирующих этим типом файлов.

    Чтобы сгладить переход, pytest будет выдавать предупреждение в случае, если опция --junitxml задана в командной строке, но junit_family не настроена явно в pytest.ini.

    Для получения дополнительной информации see the docs.

Характеристики

  • issue #4488: Команда pytest создала плагин pytest-reportlog, который предоставляет новую опцию --report-log=FILE, записывающую логи отчетов в файл по мере выполнения тестовой сессии.

    Каждая строка журнала отчетов содержит самодостаточный объект JSON, соответствующий событию тестирования, такому как коллекция или отчет о результатах тестирования. После записи каждой строки файл гарантированно промывается, поэтому системы могут читать и обрабатывать события в режиме реального времени.

    Плагин предназначен для замены опции --resultlog, которая устарела и должна быть удалена в будущем релизе. Если вы используете --resultlog, пожалуйста, попробуйте pytest-reportlog и оставьте отзыв.

  • issue #4730: Если установлено значение sys.pycache_prefix (Python 3.8+), оно будет использоваться pytest для кэширования тестовых файлов, измененных механизмом перезаписи утверждений.

    Это облегчает использование кэшированных файлов .pyc даже на файловых системах без прав доступа.

  • issue #5515: Разрешить выборочное автоиндентирование многострочных сообщений журнала.

    Добавляет опцию командной строки --log-auto-indent, опцию конфигурации log_auto_indent и поддержку настройки поведения отступов для каждого вхождения при вызове logging.log().

    Изменяет значение по умолчанию для автозамещения с "on" на "off". Это восстанавливает старое поведение, существовавшее до версии 4.6.0. Этот возврат к более раннему поведению был сделан потому, что лучше активировать новые возможности, которые могут привести к поломке тестов, явно, а не неявно.

  • issue #5914: testdir изучил две новые функции, no_fnmatch_line() и no_re_match_line().

    Эти функции используются для проверки того, что захваченный текст не соответствует заданному шаблону.

    Предыдущая идиома заключалась в использовании re.match():

    result = testdir.runpytest()
    assert re.match(pat, result.stdout.str()) is None
    

    Или оператор in:

    result = testdir.runpytest()
    assert text in result.stdout.str()
    

    Но новые функции дают лучший результат при неудаче.

  • issue #6057: Добавлены допуски к сложным значениям при печати pytest.approx.

    Например, repr(pytest.approx(3+4j)) возвращает (3+4j) ± 5e-06 ±180°. Это полярная нотация, обозначающая круг вокруг ожидаемого значения с радиусом 5e-06. Чтобы сравнение approx возвращало True, фактическое значение должно попадать в этот круг.

  • issue #6061: Добавил pluginmanager в качестве аргумента к pytest_addoption, чтобы можно было вызывать хуки при настройке опций командной строки. Это полезно для того, чтобы один плагин сообщал другому плагину, например, значения по умолчанию или набор опций командной строки для добавления.

Улучшения

  • issue #5061: Используйте несколько цветов в сводной статистике терминала.

  • issue #5630: Выход из отладчика теперь правильно обрабатывается в элементах doctest.

  • issue #5924: Улучшен вывод verbose diff с последовательностями.

    До:

    E   AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...]
    E     Right contains 3 more items, first extra item: ' '
    E     Full diff:
    E     - ['version', 'version_info', 'sys.version', 'sys.version_info']
    E     + ['version',
    E     +  'version_info',
    E     +  'sys.version',
    E     +  'sys.version_info',
    E     +  ' ',
    E     +  'sys.version',
    E     +  'sys.version_info']
    

    После:

    E   AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...]
    E     Right contains 3 more items, first extra item: ' '
    E     Full diff:
    E       [
    E        'version',
    E        'version_info',
    E        'sys.version',
    E        'sys.version_info',
    E     +  ' ',
    E     +  'sys.version',
    E     +  'sys.version_info',
    E       ]
    
  • issue #5934: repr объектов ExceptionInfo была улучшена для соблюдения метода __repr__ основного исключения.

  • issue #5936: Отображение неусеченного сообщения об утверждении с -vv.

  • issue #5990: Исправлено несоответствие множественности в сводке тестов (например, отображение «1 ошибка» вместо «1 ошибки»).

  • issue #6008: Config.InvocationParams.args теперь всегда tuple, чтобы лучше передать, что он должен быть неизменяемым и избегать случайных модификаций.

  • issue #6023: pytest.main теперь возвращает экземпляр pytest.ExitCode, за исключением случаев, когда используются пользовательские коды выхода (тогда он возвращает int).

  • issue #6026: Выравнивание префиксов в выводе pytester’s LineMatcher.

  • issue #6059: Ошибки сбора сообщаются как ошибки (а не сбои, как раньше) в краткой сводке теста в терминале.

  • issue #6069: pytester.spawn больше не пропускает/xfail тесты на FreeBSD безоговорочно.

  • issue #6097: Индикатор «[…%]» в сводке теста теперь окрашен в соответствии с основным цветом финальной (новой) многоцветной линии.

  • issue #6116: Добавлено --co в качестве синонима к --collect-only.

  • issue #6148: atomicwrites теперь используется только в Windows, исправляя регресс производительности при перезаписи утверждений на Unix.

  • issue #6152: Теперь параметризация будет использовать атрибут __name__ любого объекта для id, если он присутствует. Ранее она использовала __name__ только для функций и классов.

  • issue #6176: Улучшен отчет об ошибках при использовании pytester’s Hookrecorder.assertoutcome.

  • issue #6181: Причина остановки сессии, например, с помощью --maxfail / -x, теперь сообщается в резюме теста.

  • issue #6206: Улучшена надежность и производительность cache.set.

Исправления ошибок

  • issue #2049: Исправлено --setup-plan, показывающее неточную информацию о сроках службы приспособлений.

  • issue #2548: Исправлено несоответствие смещения строки пропущенных тестов в сводке терминала.

  • issue #6039: PytestDoctestRunner теперь правильно аннулируется при снятии конфигурации плагина doctest.

    Это важно при использовании pytester с runpytest_inprocess.

  • issue #6047: BaseExceptions теперь обрабатываются в saferepr, который включает pytest.fail.Exception и т.д.

  • issue #6074: pytester: исправлен порядок аргументов в предупреждении rm_rf при очистке временных каталогов, и не выдаются предупреждения для ошибок с os.open.

  • issue #6189: Исправлен результат метода getmodpath.

Тривиальные/внутренние изменения

  • issue #4901: RunResult из pytester теперь отображает мнемонику атрибута ret, когда он является допустимым значением pytest.ExitCode.

pytest 5.2.4 (2019-11-15)

Исправления ошибок

  • issue #6194: Исправление некорректного обнаружения нетестовых файлов __init__.py.

  • issue #6197: Пересмотр «Первый тест в пакете (__init__.py), помеченный @pytest.mark.skip, теперь правильно пропускается.».

pytest 5.2.3 (2019-11-14)

Исправления ошибок

  • issue #5830: Первый тест в пакете (__init__.py), помеченный @pytest.mark.skip, теперь правильно пропускается.

  • issue #6099: Исправьте --trace при использовании с параметризованными функциями.

  • issue #6183: Использование request в качестве имени параметра в @pytest.mark.parametrize теперь выдает более удобную для пользователя ошибку.

pytest 5.2.2 (2019-10-24)

Исправления ошибок

  • issue #5206: Исправьте --nf, чтобы не забывать об известных узлах при частичном выборе теста.

  • issue #5906: Исправление сбоя при KeyboardInterrupt во время --setup-show.

  • issue #5946: Исправлена проблема при параметризации приспособлений с помощью массивов numpy (и, возможно, других типов, подобных последовательности).

  • issue #6044: Правильно игнорировать исключения FileNotFoundError при попытке удаления старых временных каталогов, например, когда несколько процессов пытаются удалить один и тот же каталог (часто встречается, например, в pytest-xdist).

pytest 5.2.1 (2019-10-06)

Исправления ошибок

  • issue #5902: Исправьте предупреждения об устаревшем атрибуте cmp в attrs>=19.2.

pytest 5.2.0 (2019-09-28)

Амортизация

  • issue #1682: Передача аргументов в pytest.fixture() как позиционных аргументов устарела - вместо этого передавайте их как аргумент ключевого слова.

Характеристики

  • issue #1682: Параметр scope в @pytest.fixture теперь может быть вызываемой переменной, которая получает имя приспособления и объект config в качестве параметров только для ключевого слова. Дополнительную информацию см. в разделе the docs.

  • issue #5764: Новое поведение опции --pastebin: сообщается об ошибках при подключении к серверу pastebin, без отказа выполнения pytest

Исправления ошибок

  • issue #5806: Исправьте «lexer», используемый при загрузке на bpaste.net с --pastebin на «text».

  • issue #5884: Исправьте --setup-only и --setup-show для пользовательских элементов pytest.

Тривиальные/внутренние изменения

  • issue #5056: HelpFormatter использует py.io.get_terminal_width для лучшего определения ширины.

pytest 5.1.3 (2019-09-18)

Исправления ошибок

  • issue #5807: Исправьте pypy3.6 (nightly) на windows.

  • issue #5811: Правильно обрабатывайте --fulltrace с pytest.raises.

  • issue #5819: Windows: Исправление регрессии с conftest, чье квалифицированное имя содержит символы верхнего регистра (введено в #5792).

pytest 5.1.2 (2019-08-30)

Исправления ошибок

  • issue #2270: Исправлена ссылка self в функционально-скопированных фикстурах, определяющих классы плагинов: ранее self была ссылкой на класс test, а не на класс plugin.

  • issue #570: Исправлена давняя проблема, из-за которой не соблюдалась область видимости приспособлений, когда при параметризации использовались косвенные приспособления.

  • issue #5782: Исправление ошибки декодирования при печати ответа на ошибку от --pastebin.

  • issue #5786: Цепочки исключений в отчетах тестов и коллекций теперь правильно сериализуются, что позволяет плагинам типа pytest-xdist правильно их отображать.

  • issue #5792: Windows: Исправление ошибки, возникающей в определенных обстоятельствах при загрузке conftest.py из рабочего каталога, имеющего корпус, отличный от хранящегося в файловой системе (например, c:\test вместо C:\test).

pytest 5.1.1 (2019-08-20)

Исправления ошибок

  • issue #5751: Исправлено TypeError при импорте pytest на Python 3.5.0 и 3.5.1.

pytest 5.1.0 (2019-08-15)

Перемещение

  • issue #5180: В соответствии с нашей политикой, следующие функции были устаревшими в серии 4.X и теперь удалены:

    • Request.getfuncargvalue: используйте Request.getfixturevalue вместо этого.

    • pytest.raises и pytest.warns больше не поддерживают строки в качестве второго аргумента.

    • message параметр pytest.raises.

    • pytest.raises, pytest.warns и ParameterSet.param теперь используют родной синтаксис только для ключевых слов. Это может изменить сообщение об исключении из предыдущих версий, но они, как и раньше, поднимают TypeError при неизвестных аргументах ключевых слов.

    • pytest.config глобальная переменная.

    • tmpdir_factory.ensuretemp метод.

    • pytest_logwarning крючок.

    • RemovedInPytest4Warning тип предупреждения.

    • request теперь является зарезервированным именем для фиксаторов.

    Для получения дополнительной информации обратитесь к Амортизация и удаление в документации.

  • issue #5565: Удален неиспользуемый код поддержки для unittest2.

    Модуль бэкпорта unittest2 больше не нужен с Python 3.3+, и небольшое количество кода в pytest для его поддержки также, похоже, не используется: после удаления все тесты проходят без изменений.

    Хотя наша политика заключается в том, чтобы вводить период амортизации перед удалением каких-либо функций или поддержки сторонних библиотек, поскольку этот код, по-видимому, вообще не используется (даже если unittest2 используется тестовым набором, выполняемым pytest), было решено удалить его в этом релизе.

    Если у вас возникнет регресс из-за этого, пожалуйста, file an issue.

  • issue #5615: pytest.fail, pytest.xfail и pytest.skip больше не поддерживают байты для аргумента сообщения.

    Это поддерживалось в Python 2, где было заманчиво использовать "message" вместо u"message".

    Код Python 3 вряд ли будет передавать bytes в эти функции. Если вы это сделаете, пожалуйста, предварительно декодируйте его в str.

Характеристики

  • issue #5564: Новый атрибут Config.invocation_args, содержащий неизменные аргументы, переданные в pytest.main().

  • issue #5576: Новая опция NUMBER для doctests, позволяющая игнорировать несущественные различия в числах с плавающей точкой. Вдохновлено расширением numtest для doctest Себастьяна Буажеро.

Улучшения

  • issue #5471: JUnit XML теперь включает метку времени и имя хоста в тег testsuite.

  • issue #5707: Время, затраченное на выполнение набора тестов, теперь включает человекочитаемое представление, когда оно занимает более 60 секунд, например:

    ===== 2 failed in 102.70s (0:01:42) =====
    

Исправления ошибок

  • issue #4344: Исправьте RuntimeError/StopIteration при попытке собрать пакет только с «__init__.py».

  • issue #5115: Предупреждения, выдаваемые во время pytest_configure, явно не рассматриваются как ошибки, даже если они настроены как таковые, потому что иначе это полностью ломает pytest.

  • issue #5477: XML-файл, создаваемый --junitxml, теперь правильно содержит корневой элемент <testsuites>.

  • issue #5524: Исправление проблемы, когда tmp_path и tmpdir не удаляли каталоги, содержащие файлы, помеченные как доступные только для чтения, что могло привести к аварийному завершению pytest при выполнении во второй раз с опцией --basetemp.

  • issue #5537: Замените importlib_metadata backport на importlib.metadata из стандартной библиотеки на Python 3.8+.

  • issue #5578: Улучшена проверка типов для некоторых функций, вызывающих исключения (pytest.xfail, pytest.skip и т.д.), чтобы они выдавали лучшие сообщения об ошибках, когда пользователи хотели использовать знаки (например, @pytest.xfail вместо @pytest.mark.xfail).

  • issue #5606: Исправлена внутренняя ошибка, когда тестовые функции исправлялись с объектами, которые нельзя сравнивать на истинность с другими, например, с массивами numpy.

  • issue #5634: pytest.exit теперь правильно обрабатывается в unittest случаях. Это заставляет случаи unittest правильно обрабатывать quit из pdb pytest.

  • issue #5650: Улучшен вывод при неудачном разборе конфигурационного файла ini.

  • issue #5701: Исправьте коллекцию объектов staticmethod, определенных с помощью functools.partial.

  • issue #5734: Пропустите тестовые функции генератора async и обновите предупреждение, чтобы оно ссылалось на функции async def.

Улучшенная документация

  • issue #5669: Добавьте docstring для Testdir.copy_example.

Тривиальные/внутренние изменения

  • issue #5095: XML файлы семейства xunit2 теперь проверяются на соответствие схеме собственным набором тестов pytest, чтобы избежать будущих регрессий.

  • issue #5516: Функция разделения узлов кэша, которая может улучшить производительность сбора в очень больших наборах тестов.

  • issue #5603: Упрощен внутренний класс SafeRepr и удален некоторый мертвый код.

  • issue #5664: При вызове собственного набора тестов pytest с помощью PYTHONDONTWRITEBYTECODE=1 тест test_xfail_handling больше не завершается неудачей.

  • issue #5684: Замените ручную обработку OSError.errno в кодовой базе новыми подклассами OSError (PermissionError, FileNotFoundError и т.д.).

pytest 5.0.1 (2019-07-04)

Исправления ошибок

  • issue #5479: улучшено цитирование в сообщении о неудачном совпадении raises.

  • issue #5523: Исправлено использование нескольких коротких опций вместе в командной строке (например, -vs) в Python 3.8+.

  • issue #5547: --step-wise теперь правильно обрабатывает маркеры xfail(strict=True).

Улучшенная документация

  • issue #5517: Улучшение раздела «Объявление новых хуков» в главе «Написание плагинов»

pytest 5.0.0 (2019-06-28)

Важно

Этот выпуск предназначен только для Python3.5+.

Для получения более подробной информации см. наш Python 2.7 and 3.4 support plan.

Перемещение

  • issue #1149: Pytest больше не принимает префиксы аргументов командной строки, например, вводя pytest --doctest-mod вместо --doctest-modules. Ранее это допускалось, если ArgumentParser считался однозначным, но это могло быть неверно из-за задержки разбора опций для плагинов. Смотрите, например, проблемы issue #1149, issue #3413 и issue #4009.

  • issue #5402: PytestDeprecationWarning теперь являются ошибками по умолчанию..

    В соответствии с нашим планом по удалению устаревших функций с минимальными нарушениями, все предупреждения типа PytestDeprecationWarning теперь генерируют ошибки вместо предупреждений.

    Затронутые функции будут фактически удалены в pytest 5.1, поэтому, пожалуйста, обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.

    В серии pytest 5.0.X можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файл pytest.ini:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestDeprecationWarning
    

    Но это перестанет работать, когда выйдет pytest 5.1.

    Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #5402.

  • issue #5412: Объекты ExceptionInfo (возвращаемые pytest.raises) теперь имеют такое же представление str, как и repr, что позволяет избежать некоторой путаницы, когда пользователи используют print(e) для осмотра объекта.

    Это означает код типа:

    with pytest.raises(SomeException) as e:
        ...
    assert "some message" in str(e)
    

    Должно быть изменено на:

    with pytest.raises(SomeException) as e:
        ...
    assert "some message" in str(e.value)
    

Амортизация

  • issue #4488: Удаление опции и модуля --result-log было отложено до (предварительно) pytest 6.0, поскольку команда пока не смогла реализовать хорошую альтернативу для него.

  • issue #466: Атрибут funcargnames был псевдонимом для fixturenames со времен pytest 2.3, и теперь он также устарел в коде.

Характеристики

  • issue #3457: Новый хук pytest_assertion_pass, вызываемый с информацией о контексте, когда утверждение проходит.

    Этот крючок все еще экспериментальный, поэтому используйте его с осторожностью.

  • issue #5440: Модуль стандартной библиотеки faulthandler теперь включен по умолчанию, чтобы помочь пользователям диагностировать сбои в модулях C.

    Эта функциональность была предоставлена путем интеграции внешнего плагина pytest-faulthandler в ядро, поэтому пользователям следует удалить этот плагин из своих требований, если он используется.

    Для получения дополнительной информации см. документацию: Обработчик неисправностей.

  • issue #5452: Когда предупреждения настроены как ошибки, предупреждения pytest теперь отображаются как исходящие от pytest. вместо внутреннего модуля _pytest.warning_types..

  • issue #5125: Session.exitcode значения теперь кодируются в pytest.ExitCode, an IntEnum. Это делает код выхода доступным для потребительского кода и более явным, чем просто документация. Определенные пользователем коды выхода все еще действительны, но должны использоваться с осторожностью.

    Команда не ожидает, что это изменение нарушит работу тестовых наборов или плагинов в целом, за исключением эзотерических/специфических сценариев.

    Пользователи pytest-xdist должны перейти на версию 1.29.0 или более позднюю, поскольку pytest-xdist требует исправления совместимости из-за этого изменения.

Исправления ошибок

  • issue #1403: Переключение с imp на importlib.

  • issue #1671: Имя файлов .pyc, кэшируемых составителем утверждений, теперь включает версию pytest, чтобы избежать устаревших кэшей.

  • issue #2761: Честь PEP 235 на файловых системах, не чувствительных к регистру.

  • issue #5078: Тестовый модуль больше не импортируется дважды при использовании --pyargs.

  • issue #5260: Улучшено сравнение байтовых строк.

    При сравнении байтов используется утверждающее сообщение, показывающее числовое значение байта при отображении различий:

        def test():
    >       assert b'spam' == b'eggs'
    E       AssertionError: assert b'spam' == b'eggs'
    E         At index 0 diff: 115 != 101
    E         Use -v to get the full diff
    

    Теперь вместо него отображается фактическое представление ascii, что зачастую более удобно:

        def test():
    >       assert b'spam' == b'eggs'
    E       AssertionError: assert b'spam' == b'eggs'
    E         At index 0 diff: b's' != b'e'
    E         Use -v to get the full diff
    
  • issue #5335: Раскрашивает имена уровней, когда уровень в формате логирования имеет формат „%(levelname).Xs“ (усеченное выравнивание по фиксированной ширине), где X - целое число.

  • issue #5354: Исправьте pytest.mark.parametrize, когда argvalues является итератором.

  • issue #5370: Верните разворачивание all(), чтобы исправить NameError на вложенных постижениях.

  • issue #5371: Верните разворачивание all(), чтобы исправить неправильную обработку генераторов с if.

  • issue #5372: Верните разворачивание all() для исправления неверного утверждения при использовании all() в выражении.

  • issue #5383: -q снова влияет на стиль собранных предметов (--collect-only), когда используется --log-cli-level.

  • issue #5389: Исправление регрессий pull request #5063 для importlib_metadata.PathDistribution, у которых атрибут files является None.

  • issue #5390: Исправление регрессии, при которой атрибут obj у элементов TestCase больше не привязывался к методам.

  • issue #5404: Выдавать предупреждение, когда попытка развернуть сломанный объект приводит к исключению, для облегчения отладки (issue #5080).

  • issue #5432: Предотвращение предупреждений «already imported» от assertion rewriter при многократном вызове pytest in-process.

  • issue #5433: Исправление перезаписи утверждений в пакетах (__init__.py).

  • issue #5444: Исправьте режим --stepwise, когда первый файл, переданный в командной строке, не удается собрать.

  • issue #5482: Исправление ошибки, появившейся в версии 4.6.0, которая приводила к ошибкам сбора при передаче более 2 позиционных аргументов в pytest.mark.parametrize.

  • issue #5505: Исправление сбоя при неудачном обнаружении при использовании -p no:terminal.

Улучшенная документация

  • issue #5315: Расширьте документацию по мокингу классов и словарей с помощью monkeypatch.

  • issue #5416: Исправьте PytestUnknownMarkWarning в примере run/skip.

pytest 4.6.11 (2020-06-04)

Исправления ошибок

  • issue #6334: Исправление двойного отображения итоговых записей, когда символы отчета f/F и s/S использовались одновременно в опции командной строки -r (например, -rFf).

    Варианты с верхним регистром никогда не документировались, и предпочтительной формой должен быть нижний регистр.

  • issue #7310: Исправьте UnboundLocalError: local variable 'letter' referenced before assignment в _pytest.terminal.pytest_report_teststatus(), когда плагины возвращают объекты отчетов в нестандартном состоянии.

    Это заставляло pytest_report_teststatus() пропускать ветви if-блока, которые объявляют переменную letter.

    Исправление заключалось в установке начального значения letter перед каскадом if-блоков, чтобы он всегда имел значение.

pytest 4.6.10 (2020-05-08)

Характеристики

  • issue #6870: Новый атрибут Config.invocation_args, содержащий неизменные аргументы, переданные в pytest.main().

    Замечание: хотя технически это новая функция, и согласно нашему policy она не должна была быть перенесена, мы сделали исключение в данном конкретном случае, поскольку она исправляет серьезное взаимодействие с pytest-xdist, поэтому ее также можно считать исправлением.

Тривиальные/внутренние изменения

  • issue #6404: Удалите использование модуля parser, устаревшего в Python 3.9.

pytest 4.6.9 (2020-01-04)

Исправления ошибок

  • issue #6301: Исправление перезаписи утверждений для дистрибутивов на основе яиц и установок editable (pip install --editable).

pytest 4.6.8 (2019-12-19)

Характеристики

  • issue #5471: JUnit XML теперь включает метку времени и имя хоста в тег testsuite.

Исправления ошибок

  • issue #5430: junitxml: Логи для неудачного теста теперь передаются в отчет junit в случае, если тест не прошел во время фазы вызова.

Тривиальные/внутренние изменения

  • issue #6345: Привязка colorama к 0.4.1 только для Python 3.4, чтобы более новые версии Python могли получать обновления colorama.

pytest 4.6.7 (2019-12-05)

Исправления ошибок

  • issue #5477: XML-файл, создаваемый --junitxml, теперь правильно содержит корневой элемент <testsuites>.

  • issue #6044: Правильно игнорировать исключения FileNotFoundError (OSError.errno == NOENT в Python 2) при попытке удаления старых временных каталогов, например, когда несколько процессов пытаются удалить один и тот же каталог (часто встречается, например, pytest-xdist).

pytest 4.6.6 (2019-10-11)

Исправления ошибок

  • issue #5523: Исправлено использование нескольких коротких опций вместе в командной строке (например, -vs) в Python 3.8+.

  • issue #5537: Замените importlib_metadata backport на importlib.metadata из стандартной библиотеки на Python 3.8+.

  • issue #5806: Исправьте «lexer», используемый при загрузке на bpaste.net с --pastebin на «text».

  • issue #5902: Исправьте предупреждения об устаревшем атрибуте cmp в attrs>=19.2.

Тривиальные/внутренние изменения

  • issue #5801: Исправляет проверку версии python (определяемую flake8-2020) на случай, если python4 станет вещью.

pytest 4.6.5 (2019-08-05)

Исправления ошибок

  • issue #4344: Исправьте RuntimeError/StopIteration при попытке собрать пакет только с «__init__.py».

  • issue #5478: Исправление ошибки кодирования при использовании строк unicode в исключениях с pytest.raises.

  • issue #5524: Исправление проблемы, когда tmp_path и tmpdir не удаляли каталоги, содержащие файлы, помеченные как доступные только для чтения, что могло привести к аварийному завершению pytest при выполнении во второй раз с опцией --basetemp.

  • issue #5547: --step-wise теперь правильно обрабатывает маркеры xfail(strict=True).

  • issue #5650: Улучшен вывод при неудачном разборе конфигурационного файла ini.

pytest 4.6.4 (2019-06-28)

Исправления ошибок

  • issue #5404: Выдавать предупреждение, когда попытка развернуть сломанный объект приводит к исключению, для облегчения отладки (issue #5080).

  • issue #5444: Исправьте режим --stepwise, когда первый файл, переданный в командной строке, не удается собрать.

  • issue #5482: Исправление ошибки, появившейся в версии 4.6.0, которая приводила к ошибкам сбора при передаче более 2 позиционных аргументов в pytest.mark.parametrize.

  • issue #5505: Исправление сбоя при неудачном обнаружении при использовании -p no:terminal.

pytest 4.6.3 (2019-06-11)

Исправления ошибок

  • issue #5383: -q снова влияет на стиль собранных предметов (--collect-only), когда используется --log-cli-level.

  • issue #5389: Исправление регрессий pull request #5063 для importlib_metadata.PathDistribution, у которых атрибут files является None.

  • issue #5390: Исправление регрессии, при которой атрибут obj у элементов TestCase больше не привязывался к методам.

pytest 4.6.2 (2019-06-03)

Исправления ошибок

  • issue #5370: Верните разворачивание all(), чтобы исправить NameError на вложенных постижениях.

  • issue #5371: Верните разворачивание all(), чтобы исправить неправильную обработку генераторов с if.

  • issue #5372: Верните разворачивание all() для исправления неверного утверждения при использовании all() в выражении.

pytest 4.6.1 (2019-06-02)

Исправления ошибок

  • issue #5354: Исправьте pytest.mark.parametrize, когда argvalues является итератором.

  • issue #5358: Исправьте переписывание утверждений в вызовах all() для работы с негенераторами.

pytest 4.6.0 (2019-05-31)

Важно

Серия 4.6.X будет последней серией, поддерживающей Python 2 и Python 3.4.

Для получения более подробной информации см. наш Python 2.7 and 3.4 support plan.

Характеристики

  • issue #4559: Добавлено значение ini junit_log_passing_tests, которое можно использовать для включения или отключения протоколирования результатов прохождения теста в XML-файле Junit.

  • issue #4956: pytester’s testdir.spawn использует tmpdir как каталог HOME/USERPROFILE.

  • issue #5062: Разверните вызовы all в полные for-циклы с перезаписью утверждений для улучшения сообщений о сбоях, особенно при использовании Generator Expressions.

  • issue #5063: Переход от pkg_resources к importlib-metadata для определения точки входа для улучшения производительности и времени импорта.

  • issue #5091: Улучшен вывод ini-опций в --help.

  • issue #5269: pytest.importorskip включает ImportError, который сейчас находится в reason по умолчанию.

  • issue #5311: Захваченные журналы, которые выводятся для каждого неудачного теста, форматируются с помощью ColoredLevelFormatter.

  • issue #5312: Улучшено форматирование многострочных сообщений журнала в Python 3.

Исправления ошибок

  • issue #2064: Плагин отладки теперь импортирует обернутый класс Pdb (--pdbcls) по требованию.

  • issue #4908: Хук pytest_enter_pdb вызывается вместе с post-mortem (--pdb).

  • issue #5036: Исправление проблемы, когда приспособления, зависящие от других параметризованных приспособлений, ошибочно параметризовались.

  • issue #5256: Обработка внутренней ошибки из-за того, что одинокий суррогатный символ юникода не может быть представлен в Jython.

  • issue #5257: Убедитесь, что sys.stdout.mode не включает 'b', поскольку это текстовый поток.

  • issue #5278: Внутренний python-плагин Pytest можно отключить, снова используя -p no:python.

  • issue #5286: Исправление проблемы с неработающей опцией disable_test_id_escaping_and_forfeit_all_rights_to_community_support при использовании списка идентификаторов тестов в параметризованных тестах.

  • issue #5330: Показывать собираемый тестовый модуль при выдаче сообщений PytestCollectionWarning для тестовых классов с методами __init__ и __new__, чтобы было легче определить проблему.

  • issue #5333: Исправление регрессии в 4.5.0, когда --lf не выполнял повторно все тесты с известными отказами из невыбранных тестов.

Улучшенная документация

  • issue #5250: Расширение документации по использованию setenv и delenv с monkeypatch.

pytest 4.5.0 (2019-05-11)

Характеристики

  • issue #4826: Теперь выдается предупреждение, когда в качестве декоратора используются неизвестные знаки. Часто это происходит из-за опечатки, что может привести к молчаливому нарушению тестов.

  • issue #4907: Показывать причину XFail как часть поля сообщения JUnitXML.

  • issue #5013: Сообщения из отчетов о сбоях теперь отображаются в сводках тестов, усеченные до ширины терминала.

  • issue #5023: Новый флаг --strict-markers, который вызывает ошибку, когда в тестовом наборе используются неизвестные маркеры (например, не зарегистрированные с помощью опции markers в конфигурационном файле).

    Существующая опция --strict имеет такое же поведение в настоящее время, но может быть дополнена в будущем для дополнительных проверок.

  • issue #5026: Сообщения об отказе утверждения для последовательностей и массивов теперь содержат количество различных элементов.

  • issue #5034: Улучшение отчетности при --lf и --ff (запуск по последнему отказу).

  • issue #5035: Опция/действие --cache-show принимает необязательный glob, чтобы показать только совпадающие записи кэша.

  • issue #5059: Стандартный ввод (stdin) может быть передан на Testdir.run() и Testdir.popen() в pytester.

  • issue #5068: Опция -r узнала о A для отображения всех отчетов (включая пройденные) в кратком резюме теста.

  • issue #5108: Краткое резюме теста отображается после прохождения с выводом (-rP).

  • issue #5172: Опция --last-failed (--lf) стала умнее и теперь будет пропускать целые файлы, если все тесты этого тестового файла прошли в предыдущих запусках, что значительно ускоряет сбор.

  • issue #5177: Введены новые специфические подклассы предупреждений PytestWarning, чтобы упростить фильтрацию предупреждений на основе класса, а не сообщения. Новыми подклассами являются:

    • PytestAssertRewriteWarning

    • PytestCacheWarning

    • PytestCollectionWarning

    • PytestConfigWarning

    • PytestUnhandledCoroutineWarning

    • PytestUnknownMarkWarning

  • issue #5202: Новое приспособление record_testsuite_property, скопированное на сессию, позволяет пользователям регистрировать <property> теги на testsuite уровне с помощью плагина junitxml.

    Сгенерированный XML совместим с последним стандартом xunit, в отличие от свойств, записанных record_property и record_xml_attribute.

  • issue #5214: Для улучшения читабельности был изменен формат протоколирования по умолчанию. Вот пример предыдущего сообщения журнала:

    test_log_cli_enabled_disabled.py    3 CRITICAL critical message logged by test
    

    Теперь это стало:

    CRITICAL root:test_log_cli_enabled_disabled.py:3 critical message logged by test
    

    Форматирование можно изменить с помощью параметра конфигурации log_format.

  • issue #5220: --fixtures теперь также показывает область применения приспособления для диапазонов, отличных от "function".

Исправления ошибок

  • issue #5113: Теперь правильно сообщается о невыбранных элементах из плагинов, использующих pytest_collect_modifyitems в качестве хукаппера.

  • issue #5144: При ошибках использования exitstatus устанавливается в EXIT_USAGEERROR в хуке pytest_sessionfinish теперь, как и ожидалось.

  • issue #5235: outcome.exit больше не используется с EOF в обертке pdb, а только с quit.

Улучшенная документация

  • issue #4935: Расширение документации о регистрации знаков и эффекте --strict.

Тривиальные/внутренние изменения

  • issue #4942: logging.raiseExceptions больше не устанавливается на False.

  • issue #5013: pytest теперь зависит от wcwidth для правильного отслеживания размеров символов юникода для более точного вывода в терминале.

  • issue #5059: pytester’s Testdir.popen() использует stdout и stderr через аргументы ключевых слов, теперь по умолчанию (subprocess.PIPE).

  • issue #5069: Код для краткого резюме теста в терминале был перенесен в плагин терминала.

  • issue #5082: Улучшена проверка kwargs для различных методов в плагине pytester.

  • issue #5202: record_property теперь выдает PytestWarning при использовании с junit_family=xunit2: приспособление генерирует теги property как дочерние теги testcase, что не разрешено согласно самому recent schema.

  • issue #5239: Привяжите pluggy к < 1.0, чтобы мы не обновлялись до 1.0 автоматически, когда он выйдет: планируются разрывные изменения, и мы хотим убедиться, что pytest правильно поддерживает pluggy 1.0.

pytest 4.4.2 (2019-05-08)

Исправления ошибок

  • issue #5089: Исправление сбоя, вызванного ошибкой в функции __repr__ с включенным showlocals и вербальным выводом.

  • issue #5139: Устранение зависимости ядра от плагина „terminal“.

  • issue #5229: Require pluggy>=0.11.0, который возвращает зависимость importlib-metadata, добавленную в 0.10.0. Пакет importlib-metadata не может быть импортирован при установке в виде яйца и вызывает проблемы, если полагаться на setup.py для установки тестовых зависимостей.

Улучшенная документация

  • issue #5171: Док: pytest_ignore_collect, pytest_collect_directory, pytest_collect_file и pytest_pycollect_makemodule документированный тип параметра „path“ крючков теперь py.path.local

  • issue #5188: Улучшена помощь для флага --runxfail.

Тривиальные/внутренние изменения

  • issue #5182: Удалены внутренние и неиспользуемые _pytest.deprecated.MARK_INFO_ATTRIBUTE.

pytest 4.4.1 (2019-04-15)

Исправления ошибок

  • issue #5031: Переменные окружения правильно восстанавливаются при использовании приспособления pytester testdir.

  • issue #5039: Исправление регрессии с --pdbcls, которая перестала работать с локальными модулями в версии 4.0.0.

  • issue #5092: Выдавать предупреждение при передаче неизвестных ключевых слов в pytest.param(...).

  • issue #5098: аннулируйте кэши импорта с помощью monkeypatch.syspath_prepend, что необходимо при использовании пакетов пространства имен.

pytest 4.4.0 (2019-03-29)

Характеристики

  • issue #2224: async тестовые функции пропускаются и выдается предупреждение, если не установлен подходящий плагин async (например, pytest-asyncio или pytest-trio).

    Ранее функции async вообще не выполнялись, но при этом помечались как «пройденные».

  • issue #2482: Включите новую опцию disable_test_id_escaping_and_forfeit_all_rights_to_community_support для отключения ascii-escaping в параметризованных значениях. Это может вызвать ряд проблем, и, как ясно из названия, используйте ее на свой страх и риск.

  • issue #4718: Опция -p теперь может быть использована для ранней загрузки плагинов также по имени точки входа, а не только по имени модуля.

    Это делает возможным раннюю загрузку внешних плагинов типа pytest-cov в командной строке:

    pytest -p pytest_cov
    
  • issue #4855: Опция --pdbcls теперь обрабатывает классы через атрибуты модуля (например, pdb:pdb.Pdb с pdbpp), и улучшена ее валидация.

  • issue #4875: Опция конфигурации testpaths теперь отображается рядом со строками rootdir и inifile в заголовке pytest, если опция действует, т.е. имена каталогов или файлов не были явно переданы в командной строке.

    Кроме того, inifile отображается только при наличии файла конфигурации, вместо пустой строки inifile:.

  • issue #4911: Доктесты теперь можно пропускать динамически с помощью pytest.skip().

  • issue #4920: Были произведены внутренние рефакторинги, чтобы сделать возможной реализацию плагина pytest-subtests, который добавляет поддержку подтестов unittest и новое приспособление subtests, как обсуждалось в issue #1367.

    Подробную информацию о внутренних рефакторингах можно найти в соответствующем PR.

  • issue #4931: pytester’s LineMatcher утверждает, что переданные строки являются последовательностью.

  • issue #4936: Обращайтесь к -p plug после -p no:plug.

    Это можно использовать для отмены заблокированного плагина (например, в «addopts») из командной строки и т.д.

  • issue #4951: Захват вывода обрабатывается правильно, если захват осуществляется только через фикстуры (capsys, capfs) с pdb.set_trace().

  • issue #4956: pytester устанавливает $HOME и $USERPROFILE во временный каталог во время тестовых запусков.

    Это позволяет не загружать файлы конфигурации из домашнего каталога реального пользователя.

  • issue #4980: Пакеты пространства имен лучше обрабатываются с помощью monkeypatch.syspath_prepend и testdir.syspathinsert (через pkg_resources.fixup_namespace_packages).

  • issue #4993: Плагин stepwise теперь сообщает информацию о состоянии.

  • issue #5008: Если файл setup.cfg содержит [tool:pytest], а также более не поддерживаемую секцию [pytest], pytest будет использовать [tool:pytest], игнорируя [pytest]. Ранее он безоговорочно выдавал ошибку.

    Это упрощает поддержку плагинами старых версий pytest.

Исправления ошибок

  • issue #1895: Исправление ошибки, при которой фикстуры, запрашиваемые динамически через request.getfixturevalue(), могли быть разрушены раньше запрашивающей фикстуры.

  • issue #4851: pytester unsets PYTEST_ADDOPTS теперь не использует внешние опции с testdir.runpytest().

  • issue #4903: Используйте правильное измененное время для лет после 2038 года в переписанных файлах .pyc.

  • issue #4928: Исправьте смещения строк с ошибками ScopeMismatch.

  • issue #4957: -p no:plugin теперь корректно обрабатывается для плагинов по умолчанию (внутренних), например, с -p no:capture.

    Ранее они загружались (импортировались) всегда, делая доступным, например, приспособление capfd.

  • issue #4968: Команда pdb quit обрабатывается правильно при использовании после команды debug с командой pdbpp.

  • issue #4975: Исправьте интерпретацию опции -qq, когда она рассматривалась как -v.

  • issue #4978: outcomes.Exit больше не заглатывается в assertrepr_compare.

  • issue #4988: Явное закрытие обработчика файлов логирования при завершении сеанса.

  • issue #5003: Исправьте смещение строки с ошибкой сбора меток (смещение на единицу).

Улучшенная документация

  • issue #4974: Обновите документацию для крючка pytest_cmdline_parse, чтобы отметить ограничения доступности

Тривиальные/внутренние изменения

  • issue #4718: pluggy>=0.9 теперь требуется.

  • issue #4815: funcsigs>=1.0 теперь требуется для Python 2.7.

  • issue #4829: Удалены некоторые остатки внутреннего кода, связанные с тестами yield.

  • issue #4890: Удалите внутренне неиспользуемое приспособление anypython из плагина pytester.

  • issue #4912: Удалите устаревшую директиву Sphinx, add_description_unit(), добавьте sphinx-removed-in к версии >= 0.2.0 для поддержки Sphinx 2.0.

  • issue #4913: Исправьте вызов тестов pytest с пользовательскими PYTHONPATH.

  • issue #4965: Новые pytest_report_to_serializable и pytest_report_from_serializable экспериментальные крючки.

    Эти хуки будут использоваться pytest-xdist, pytest-subtests и заменой resultlog для сериализации и настройки отчетов.

    Они являются экспериментальными, то есть их детали могут измениться или даже быть полностью удалены в будущих выпусках патчей без предупреждения.

    Отзывы приветствуются как от авторов плагинов, так и от пользователей.

  • issue #4987: Collector.repr_failure соблюдает опцию --tb, но по умолчанию теперь только shortauto).

pytest 4.3.1 (2019-03-11)

Исправления ошибок

  • issue #4810: Сообщения журнала внутри pytest_runtest_logreport() теперь правильно перехватываются и отображаются.

  • issue #4861: Улучшена проверка содержимого, записываемого в захваченный вывод, чтобы он вел себя так же, как при отключенном захвате.

  • issue #4898: Исправьте ошибку AttributeError: FixtureRequest has no 'confg' attribute в testdir.copy_example.

Тривиальные/внутренние изменения

  • issue #4768: Избегайте импорта pkg_resources на верхнем уровне.

pytest 4.3.0 (2019-02-16)

Амортизация

  • issue #4724: pytest.warns() теперь выдает предупреждение при получении неизвестных аргументов ключевых слов.

    В будущем это будет заменено на ошибку.

Характеристики

  • issue #2753: Ошибки использования от argparse отображаются на ошибки pytest’s UsageError.

  • issue #3711: Добавьте параметр --ignore-glob для исключения тестовых модулей с подстановочными знаками в стиле Unix shell. Добавьте параметр collect_ignore_glob для conftest.py, чтобы исключить тестовые модули с подстановочными знаками в стиле Unix shell.

  • issue #4698: Предупреждение о том, что Python 2.7 и 3.4 не поддерживаются в pytest 5.0, было удалено.

    В конце концов, это было сочтено скорее неудобством, чем реальной пользой, и у пользователей этих версий Python не должно возникнуть проблем, поскольку pip не будет устанавливать pytest 5.0 на эти интерпретаторы.

  • issue #4707: С помощью нового метода set_log_path() появилась возможность устанавливать log_file пути из хуков.

Исправления ошибок

  • issue #4651: --help и --version обрабатываются с помощью UsageError.

  • issue #4782: Исправление AssertionError со сбором битых симлинков с пакетами.

pytest 4.2.1 (2019-02-12)

Исправления ошибок

  • issue #2895: крючок pytest_report_collectionfinish теперь также вызывается с помощью --collect-only.

  • issue #3899: Не поднимать UsageError, когда импортируемый пакет имеет pytest_plugins.py дочерний модуль.

  • issue #4347: Исправьте захват вывода при использовании pdb++ с рекурсивной отладкой.

  • issue #4592: Исправьте обработку collect_ignore через родителя conftest.py.

  • issue #4700: Исправление регрессии, когда setUpClass всегда вызывался в подклассах, даже если все тесты были пропущены декоратором unittest.skip(), примененным в подклассе.

  • issue #4739: Исправьте parametrize(... ids=<function>), когда функция возвращает нестроки.

  • issue #4745: Исправьте/улучшите сбор args при передаче __init__.py и тестового файла.

  • issue #4770: more_itertools теперь ограничивается значением <6.0.0, когда это требуется для совместимости с Python 2.7.

  • issue #526: Исправление исключений «ValueError: Plugin already registered» исключения при запуске в каталогах сборки с симлинками на реальный исходный код.

Улучшенная документация

  • issue #3899: Добавить примечание к plugins.rst о том, что pytest_plugins не должно использоваться в качестве имени для пользовательского модуля, содержащего плагины.

  • issue #4324: Документируйте, как использовать raises и does_not_raise для написания параметризованных тестов с условным повышением.

  • issue #4709: Документируйте, как настраивать сообщения об отказе теста при использовании pytest.warns.

Тривиальные/внутренние изменения

  • issue #4741: Некоторые атрибуты плагина TerminalReporter, связанные с многословностью, теперь являются свойствами только для чтения.

pytest 4.2.0 (2019-01-30)

Характеристики

  • issue #3094: Classic xunit-style функции и методы теперь подчиняются области видимости autouse фиксаторов.

    Это устраняет ряд неожиданных проблем, например, setup_method вызывается до сессионных фиксов autouse (см. пример issue #517).

  • issue #4627: Выводить сообщение в конце сеанса тестирования при работе под Python 2.7 и 3.4 о том, что pytest 5.0 больше не будет поддерживать эти версии Python.

  • issue #4660: Количество выбранных тестов теперь также отображается при использовании флагов -k или -m.

  • issue #4688: Хук pytest_report_teststatus теперь также может принимать параметр config.

  • issue #4691: Хук pytest_terminal_summary теперь также может принимать параметр config.

Исправления ошибок

  • issue #3547: --junitxml может выдавать XML, совместимый с Jenkins xUnit. Опция junit_family INI принимает legacy|xunit1, который производит вывод в старом стиле, и xunit2, который более строго соответствует https://github.com/jenkinsci/xunit-plugin/blob/xunit-2.3.2/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd.

  • issue #4280: улучшено завершение работы из pdb, особенно при использовании --trace.

    Использование q[quit] после pdb.set_trace() также приведет к выходу из pytest.

  • issue #4402: Сводка предупреждений теперь группирует предупреждения по сообщениям, а не по идентификатору теста.

    Это делает вывод более компактным и лучше передает общее представление о том, сколько кода на самом деле генерирует предупреждения, а не о том, сколько тестов вызывают этот код.

  • issue #4536: monkeypatch.delattr обрабатывает дескрипторы классов типа staticmethod/classmethod.

  • issue #4649: Восстановление того, чтобы метки считались ключевыми словами для выражений с ключевыми словами.

  • issue #4653: tmp_path приспособление и другие связанные с ним обеспечивает разрешенный путь (он же реальный путь)

  • issue #4667: pytest_terminal_summary использует результат от хука pytest_report_teststatus, а не жестко закодированные строки.

  • issue #4669: Корректная обработка исключения unittest.SkipTest, содержащего неасксичные символы, на Python 2.

  • issue #4680: Убедитесь, что папки tmpdir и tmp_path находятся в одной и той же папке.

  • issue #4681: Убедитесь, что tmp_path всегда является реальным путем.

Тривиальные/внутренние изменения

  • issue #4643: Используйте a.item() вместо устаревшего np.asscalar(a) в pytest.approx.

    np.asscalar был deprecated в numpy 1.16..

  • issue #4657: Скопируйте saferepr из pylib

  • issue #4668: Словесное обозначение ожидаемых сбоев в отчете о состоянии теста изменено с xfail на XFAIL, чтобы соответствовать другим результатам тестирования.

pytest 4.1.1 (2019-01-12)

Исправления ошибок

  • issue #2256: Показать полное повторение с assert a==b и -vv.

  • issue #3456: Расширение Doctest-модулей для игнорирования mock-объектов.

  • issue #4617: Исправлена ошибка pytest.warns при повторном использовании менеджера контекста (например, многократная параметризация).

  • issue #4631: Не переписывайте утверждение, когда __getattr__ нарушено

Улучшенная документация

  • issue #3375: Документируйте, что использование setup.cfg может привести к сбою других инструментов или вызвать трудно отслеживаемые проблемы, поскольку он использует другой парсер, чем файлы pytest.ini или tox.ini.

Тривиальные/внутренние изменения

  • issue #4602: Удалите hypothesis в regen tox env.

pytest 4.1.0 (2019-01-05)

Перемещение

  • issue #2169: pytest.mark.parametrize: в предыдущих версиях ошибки, вызванные функциями id, подавлялись и заменялись на предупреждения. Теперь исключения распространяются вместе с сообщением pytest, информирующим об узле, значении параметра и индексе, где произошло исключение.

  • issue #3078: Удалите устаревшую систему внутренних предупреждений: config.warn, Node.warn. pytest_logwarning теперь выдает предупреждение при выполнении.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #3079: Удалена поддержка тестов yield - они принципиально неработоспособны, поскольку не поддерживают фикстуры должным образом с тех пор, как сбор и выполнение тестов были разделены.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #3082: Удалена поддержка применения меток непосредственно к значениям в @pytest.mark.parametrize. Вместо этого используйте pytest.param.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #3083: Удалено Metafunc.addcall. Это был механизм-предшественник @pytest.mark.parametrize.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #3085: Удалена поддержка передачи строк в pytest.main. Теперь вместо этого всегда передавайте список строк.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #3086: Секция [pytest] в файлах setup.cfg больше не поддерживается, вместо нее используйте [tool:pytest]. Файлы setup.cfg предназначены для использования с distutils, а секция pytest печально известна как источник конфликтов и ошибок.

    Обратите внимание, что для файлов pytest.ini и tox.ini секция остается [pytest].

  • issue #3616: Удалены устаревшие свойства compat для node.Class/Function/Module - теперь используйте pytest.Class/Function/Module.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #4421: Удалена реализация хука pytest_namespace.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #4489: Удалено request.cached_setup. Это был механизм-предшественник современных приспособлений.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #4535: Удален устаревший метод PyCollector.makeitem. Этот метод был обнародован по ошибке давным-давно.

  • issue #4543: Удалена поддержка определения светильников с помощью префикса pytest_funcarg__. Вместо этого используйте декоратор @pytest.fixture.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #4545: Вызов фикстур напрямую теперь всегда приводит к ошибке, а не к предупреждению.

    Информацию о том, как обновить код, см. на нашем сайте docs.

  • issue #4546: Удалить Node.get_marker(name) возвращаемое значение было непригодно для использования более чем для проверки существования.

    Используйте Node.get_closest_marker(name) в качестве замены.

  • issue #4547: Устаревшее приспособление record_xml_property было удалено, вместо него используйте более универсальное record_property.

    Более подробную информацию см. на нашем сайте docs.

  • issue #4548: Теперь выдается ошибка, если переменная pytest_plugins определена в файле conftest.py не верхнего уровня (т.е. не находится в rootdir).

    Более подробную информацию см. на нашем сайте docs.

  • issue #891: Удалите атрибуты testfunction.markername - используйте Node.iter_markers(name=None) для их итерации.

Амортизация

  • issue #3050: Утратил силу глобал pytest.config.

    Обоснование см. в pytest.config глобальный.

  • issue #3974: Передача параметра message в pytest.raises теперь выдает DeprecationWarning.

    Частой ошибкой является мнение, что этот параметр будет соответствовать сообщению об исключении, в то время как на самом деле он служит только для предоставления пользовательского сообщения в случае, если проверка pytest.raises не прошла. Чтобы избежать этой ошибки и поскольку считается, что этот параметр мало используется, pytest его деприватизирует, не предоставляя на данный момент альтернативы.

    Если у вас есть сомнения по этому поводу, пожалуйста, напишите в комментариях issue #3974.

  • issue #4435: Утратили силу raises(..., 'code(as_a_string)') и warns(..., 'code(as_a_string)').

    Обоснование и примеры см. в raises / warns со строкой в качестве второго аргумента.

Характеристики

  • issue #3191: Теперь выдается предупреждение, когда утверждения делаются для None.

    Это частый источник путаницы среди новых пользователей, которые пишут:

    assert mocked_object.assert_called_with(3, 4, 5, key="value")
    

    Когда они должны писать:

    mocked_object.assert_called_with(3, 4, 5, key="value")
    

    Потому что метод assert_called_with объекта mock уже выполняет утверждение.

    Это предупреждение не будет выдано, если явно проверяется None. Утверждение типа:

    assert variable is None
    

    не будет выдавать предупреждение.

  • issue #3632: Более богатая интроспекция сравнения равенств на AssertionError для объектов, созданных с помощью attrs или dataclasses (Python 3.7+, backported to 3.6).

  • issue #4278: CACHEDIR.TAG файлы теперь создаются внутри каталогов кэша.

    Эти файлы являются частью каталога Cache Directory Tagging Standard, и могут использоваться программами резервного копирования или синхронизации для определения каталога кэша pytest как такового.

  • issue #4292: pytest.outcomes.Exit выводится из SystemExit вместо KeyboardInterrupt. Это позволяет нам лучше обрабатывать выход из pdb.

  • issue #4371: Обновлена опция --collect-only для отображения описаний тестов при запуске с помощью --verbose.

  • issue #4386: Реструктурировано построение объекта ExceptionInfo и обеспечено, чтобы неполные экземпляры имели repr/str.

  • issue #4416: pdb: добавлена поддержка аргументов с ключевыми словами pdb.set_trace.

    Он обрабатывает header аналогично тому, как это делает Python 3.7, и направляет любые другие аргументы ключевых слов в конструктор Pdb.

    Это позволяет __import__("pdb").set_trace(skip=["foo.*"]).

  • issue #4483: Добавлен ini-параметр junit_duration_report для опционального отчета о длительности тестовых вызовов, исключая время установки и разрыва.

    Спецификация JUnit XML и поведение pytest по умолчанию предусматривают включение времени установки и завершения в отчет о продолжительности теста. Вы можете включить только длительность вызовов (без учета установки и разрыва), добавив это в ваш файл pytest.ini:

    [pytest]
    junit_duration_report = call
    
  • issue #4532: -ra теперь будет показывать ошибки и сбои последними, а не первыми в сводке.

    Это облегчает получение списка ошибок и сбоев для выборочного запуска тестов.

  • issue #4599: pytest.importorskip теперь поддерживает параметр reason, который будет показан, когда запрашиваемый модуль не может быть импортирован.

Исправления ошибок

  • issue #3532: -p теперь принимает аргумент без пробела между значениями, например -pmyplugin.

  • issue #4327: approx снова работает с более общими контейнерами, точнее, с экземплярами Iterable и Sized вместо более ограничительного Sequence.

  • issue #4397: Убедитесь, что идентификаторы узлов доступны для печати.

  • issue #4435: Исправлено имя файла кадра raises(..., 'code(string)').

  • issue #4458: Отображение фактических идентификаторов тестов в --collect-only.

Улучшенная документация

  • issue #4557: Страница документации примера маркеров обновлена для поддержки последней версии pytest.

  • issue #4558: Обновите пример документации по кэшу, чтобы правильно показывать попадания и промахи кэша.

  • issue #4580: Улучшена документация по подробным сводным отчетам.

Тривиальные/внутренние изменения

  • issue #4447: Изменен тип депривации --result-log на PytestDeprecationWarning.

    Было решено убрать эту функцию в следующем крупном пересмотре.

pytest 4.0.2 (2018-12-13)

Исправления ошибок

  • issue #4265: Проверять аргументы из переменной окружения PYTEST_ADDOPTS и опции ini addopts отдельно.

  • issue #4435: Исправьте имя файла кадра raises(..., 'code(string)').

  • issue #4500: Когда приспособление выходит из строя и после выполнения теста происходит вызов журнала, а также, если тест прерывается, атрибуты захвата None.

  • issue #4538: Поднимите TypeError для with raises(..., match=<non-None falsey value>).

Улучшенная документация

  • issue #1495: Документирование распространенных «подводных камней» структуры дерева каталогов приспособления doctest

pytest 4.0.1 (2018-11-23)

Исправления ошибок

  • issue #3952: Снова отображение предупреждений перед «краткой информацией о тесте», но все еще более поздние предупреждения в конце.

  • issue #4386: Обработка неинициализированного исключения exceptioninfo в repr/str.

  • issue #4393: Не создавайте файлы .gitignore/README.md в существующих каталогах кэша.

  • issue #4400: Перестройте обработку предупреждений для ошибок теста доходности, чтобы корректно работал отказ от использования в 4.0.x.

  • issue #4405: Исправьте сбор тест-путей с --pyargs.

  • issue #4412: Исправление перезаписи утверждений, включающих Starred + побочные эффекты.

  • issue #4425: Убедитесь, что мы разрешаем абсолютный путь, когда заданный --basetemp является относительным путем.

Тривиальные/внутренние изменения

  • issue #4315: Используйте pkg_resources.parse_version вместо LooseVersion при проверке минверсии.

  • issue #4440: Настройте уровень стека некоторых внутренних предупреждений pytest.

pytest 4.0.0 (2018-11-13)

Перемещение

  • issue #3737: RemovedInPytest4Warnings теперь по умолчанию являются ошибками..

    В соответствии с нашим планом по удалению устаревших функций с минимальными нарушениями, все предупреждения типа RemovedInPytest4Warnings теперь генерируют ошибки вместо предупреждений.

    Затронутые функции будут фактически удалены в pytest 4.1, поэтому, пожалуйста, обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.

    В серии pytest 4.0.X можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файл pytest.ini:

    [pytest]
    filterwarnings =
        ignore::pytest.RemovedInPytest4Warning
    

    Но это перестанет работать, когда выйдет pytest 4.1.

    Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #4348.

  • issue #4358: Убрать обозначение ::() для обозначения экземпляра тестового класса в идентификаторах узлов.

    Ранее идентификаторы узлов, содержащие экземпляры тестов, использовали ::() для обозначения экземпляра следующим образом:

    test_foo.py::Test::()::test_bar
    

    Дополнительные ::() вызывали недоумение у большинства пользователей и были удалены, так что теперь идентификатор теста становится:

    test_foo.py::Test::test_bar
    

    Это изменение не могло сопровождаться периодом амортизации, как это обычно происходит при изменении функциональности, ориентированной на пользователя, поскольку было невозможно определить, когда функциональность используется явно.

    Лишний ::() мог быть удален в некоторых местах, что привело к путанице в тех местах, где он ожидался, например, с --deselect (issue #4127).

    Экземпляры тестовых классов также больше не перечисляются с --collect-only.

Характеристики

  • issue #4270: Опция cache_dir использует $TOX_ENV_DIR в качестве префикса (если он установлен в окружении).

    По умолчанию используется разный кэш для каждого окружения tox.

Исправления ошибок

  • issue #3554: Исправьте CallInfo.__repr__ для случаев, когда вызов еще не завершен.

pytest 3.10.1 (2018-11-11)

Исправления ошибок

  • issue #4287: Исправьте вложенное использование отладочного плагина (pdb), например, с pytester’s testdir.runpytest.

  • issue #4304: Заблокируйте плагин stepwise, если cacheprovider также заблокирован, так как один зависит от другого.

  • issue #4306: Разбирайте minversion как фактическую версию, а не как строки, разделенные точками.

  • issue #4310: Исправление дублирующего сбора из-за того, что несколько args соответствуют одним и тем же пакетам.

  • issue #4321: Исправьте item.nodeid с разрешенными симлинками.

  • issue #4325: Исправьте сбор файлов с прямыми симлинками, где цель не совпадает с python_files.

  • issue #4329: Исправьте TypeError в report_collect с _collect_report_last_write.

Тривиальные/внутренние изменения

  • issue #4305: Замените байтовые/юникодовые помощники в test_capture на синтаксис уровня python.

pytest 3.10.0 (2018-11-03)

Характеристики

  • issue #2619: Возобновите захват вывода после continue с помощью __import__("pdb").set_trace().

    Это также добавляет новый хук pytest_leave_pdb и передает pdb в существующий хук pytest_enter_pdb.

  • issue #4147: Добавьте --sw, --stepwise в качестве альтернативы --lf -x для остановки при первом сбое, но запуска следующего вызова теста с этого теста. Дополнительную информацию см. в the documentation.

  • issue #4188: Заставьте --color выдавать разноцветные точки, когда он не работает в режиме verbose. Ранее он окрашивал вывод по тестам, только если --verbose также был передан.

  • issue #4225: Улучшение производительности при создании отчетов о сборах в бесшумном режиме с терминалами.

    Сообщение «сбор …» печатается/обновляется только каждые 0,5 с.

Исправления ошибок

  • issue #2701: Исправьте ложные предупреждения RemovedInPytest4Warning: usage of Session... is deprecated, please use pytest.

  • issue #4046: Исправление проблем с запуском тестов в файлах пакета __init__.py.

  • issue #4260: Проглатывание предупреждений во время анонимной компиляции исходного текста.

  • issue #4262: Исправьте ошибку отказа в доступе при удалении устаревших каталогов, созданных tmpdir / tmp_path.

  • issue #611: Именование фикстуры request теперь вызывает предупреждение: фикстура request является внутренней и не должна перезаписываться, так как это приведет к внутренним ошибкам.

  • issue #4266: Обработка (игнорирование) исключений, возникающих во время сбора, например, при использовании прокси-класса LazySettings от Django.

Улучшенная документация

  • issue #4255: Добавлена недостающая документация о том, что имена модулей, передаваемые в предупреждения фильтра, не имеют regex-выражения.

Тривиальные/внутренние изменения

  • issue #4272: Отображать кэшированный каталог также в невербозном режиме, если он не по умолчанию.

  • issue #4277: pdb: улучшить сообщение о захвате вывода с помощью set_trace.

    Не отображайте «IO-capturing turned off/on», когда используется -s, чтобы избежать путаницы.

  • issue #4279: улучшено сообщение и уровень стека предупреждений, выдаваемых monkeypatch.setenv, когда значение переменной окружения не является str.

pytest 3.9.3 (2018-10-27)

Исправления ошибок

  • issue #4174: Исправьте «ValueError: Plugin already registered» при использовании плагинов conftest через symlink.

  • issue #4181: Обработка состояния гонки между созданием и удалением временных папок.

  • issue #4221: Исправлена ошибка, при которой сводка предупреждений в конце сеанса тестирования не показывала тест, в котором возникло предупреждение.

  • issue #4243: Исправление регрессии, когда stacklevel для предупреждений передавался как позиционный аргумент на python2.

Улучшенная документация

  • issue #3851: Добавьте ссылку на опцию ini empty_parameter_set_mark в документации @pytest.mark.parametrize

Тривиальные/внутренние изменения

  • issue #4028: Верните исправление sys.breakpointhook, поскольку оно, похоже, ничего не делает.

  • issue #4233: Применить сортировщик импорта (reorder-python-imports) к кодовой базе.

  • issue #4248: Удалите использование ненужного compat shim, six.binary_type

pytest 3.9.2 (2018-10-22)

Исправления ошибок

  • issue #2909: Улучшение сообщения об ошибке при обнаружении рекурсивной зависимости между приспособлениями.

  • issue #3340: Исправьте сообщения журнала, не отображаемые в хуках pytest_sessionstart() и pytest_sessionfinish().

  • issue #3533: Исправление необработанных объектов XML в отчете JUnit для пропущенных тестов

  • issue #3691: Python 2: безопасное форматирование предупреждения о передаче строк unicode в warnings.warn, что может вызвать неожиданное MemoryError исключение при самостоятельном патче обезьяны warnings.warn.

  • issue #4026: Улучшение сообщения об ошибке, когда невозможно определить сигнатуру функции.

  • issue #4177: Штырь setuptools>=40.0 для поддержки py_modules в setup.cfg

  • issue #4179: Восстанавливает поведение tmpdir при симлинкинге текущего тестового запуска.

  • issue #4192: Исправьте имя файла, сообщаемое warnings.warn при использовании recwarn под python2.

pytest 3.9.1 (2018-10-16)

Характеристики

  • issue #4159: Для тестовых наборов, содержащих тестовые классы, информация о подклассифицированном модуле теперь выводится только в том случае, если указан более высокий уровень вербальности (по крайней мере, «-vv»).

pytest 3.9.0 (2018-10-15 - не опубликован из-за ошибки автоматизации выпуска)

Амортизация

  • issue #3616: Следующие доступы были задокументированы как устаревшие в течение многих лет, но теперь они действительно выдают предупреждения об устаревании.

    • Доступ к экземплярам Module, Function, Class, Instance, File и Item через Node. Теперь пользователи будут получать следующее предупреждение:

      usage of Function.Module is deprecated, please use pytest.Module instead
      

      Пользователи должны просто import pytest и обращаться к этим объектам с помощью модуля pytest.

    • request.cached_setup, это был предшественник механизма установки/отмены, доступного для фикстур. Вы можете обратиться к funcarg comparison section in the docs.

    • Использование объектов с именем "Class" в качестве способа настройки типа узлов, которые собираются в подклассах Collector, было устаревшим. Вместо этого пользователи должны использовать pytest_collect_make_item для настройки типов узлов во время сбора.

      Эта проблема должна затрагивать только продвинутые плагины, которые создают новые типы коллекций, поэтому если вы видите это предупреждение, пожалуйста, свяжитесь с авторами, чтобы они могли изменить код.

    • Предупреждение, выдающее сообщение ниже, изменилось на RemovedInPytest4Warning:

      getfuncargvalue is deprecated, use getfixturevalue
      
  • issue #3988: Добавьте предупреждение об устаревании для pytest.ensuretemp, поскольку он был устаревшим с некоторых пор.

Характеристики

  • issue #2293: Улучшите сообщения об ошибках использования, скрыв внутренние детали, которые могут быть отвлекающими и шумными.

    Это имеет побочный эффект: некоторые условия ошибок, которые ранее вызывали общие ошибки (например, ValueError для незарегистрированных знаков), теперь вызывают исключения Failed.

  • issue #3332: Улучшение ошибки, отображаемой, когда файл conftest.py не может быть импортирован.

    Чтобы реализовать это, в Python 3 был добавлен новый параметр chain к ExceptionInfo.getrepr для показа или скрытия цепочек трассировок (по умолчанию True).

  • issue #3849: Добавьте в ini опцию empty_parameter_set_mark=fail_at_collect для выдачи исключения, когда параметризация собирает пустое множество.

  • issue #3964: Сообщения журнала, созданные в фазе сбора, отображаются, если включено ведение живого журнала и/или если они записываются в файл.

  • issue #3985: Представьте tmp_path как фикстуру, предоставляющую объект Path. Также вводится tmp_path_factory как приспособление с сеансовой привязкой для создания произвольных временных каталогов из любого другого приспособления или теста.

  • issue #4013: Предупреждения об износе теперь отображаются, даже если вы сами настраиваете фильтры предупреждений. В предыдущей версии любая настройка отменяла фильтры pytest, и предупреждения об износе снова становились скрытыми по умолчанию.

  • issue #4073: Позволяет задать тайм-аут для Testdir.runpytest_subprocess() и Testdir.run().

  • issue #4098: Добавьте аргумент returncode в pytest.exit(), чтобы завершить pytest с определенным кодом возврата.

  • issue #4102: Перереализуйте pytest.deprecated_call с помощью pytest.warns, чтобы он поддерживал аргумент ключевого слова match='...'.

    Это имеет побочный эффект: pytest.deprecated_call теперь вызывает pytest.fail.Exception вместо AssertionError.

  • issue #4149: Требуется setuptools>=30.3 и перемещение большей части метаданных в setup.cfg.

Исправления ошибок

  • issue #2535: Улучшите сообщение об ошибке, когда тестовые функции подклассов unittest.TestCase используют параметризованное приспособление.

  • issue #3057: request.fixturenames теперь правильно возвращает имя приспособлений, созданных request.getfixturevalue().

  • issue #3946: Фильтры предупреждений, переданные в качестве опций командной строки с помощью -W, теперь имеют приоритет над фильтрами, определенными в конфигурационных файлах ini.

  • issue #4066: Исправьте переиндексирование исходного текста при использовании textwrap.dedent напрямую.

  • issue #4102: pytest.warn будет перехватывать ранее предупрежденные предупреждения в Python 2. Ранее они никогда не возникали.

  • issue #4108: Разрешите символические ссылки для args.

    Это исправляет выполнение pytest tests/test_foo.py::test_bar, где tests является симлинком на project/app/tests: ранее project/app/conftest.py игнорировалось для фиксов.

  • issue #4132: Исправление дублирования печати внутренних ошибок при использовании --pdb.

  • issue #4135: очистка tmpdir на основе pathlib теперь правильно обрабатывает симлинки в папке.

  • issue #4152: Отображать имя файла при встрече с SyntaxWarning.

Улучшенная документация

  • issue #3713: Обновите документацию usefixtures, чтобы уточнить, что его нельзя использовать с функциями приспособлений.

  • issue #4058: Обновите документацию по приспособлениям, чтобы указать, что приспособление может быть вызвано дважды в области видимости, для которой оно определено.

  • issue #4064: Согласно unittest.rst, setUpModule и tearDownModule не были реализованы, но оказалось, что они реализованы. Поэтому мы обновили документацию по unittest.

  • issue #4151: Добавьте пример тестирования tempir в руководство CONTRIBUTING.rst

Тривиальные/внутренние изменения

  • issue #2293: Внутреннее исключение MarkerError было удалено.

  • issue #3988: Перенесите реализацию tmpdir на pathlib.

  • issue #4063: Исключить записи длительностью 0,00 секунды из вывода --duration, если в командной строке не передано -vv.

  • issue #4093: Исправлено форматирование строковых литералов во внутренних тестах.

pytest 3.8.2 (2018-10-02)

Амортизация и удаление

  • issue #4036: Параметр item в хуке pytest_warning_captured теперь документирован как устаревший. Только после выпуска 3.8 мы поняли, что этот параметр несовместим с pytest-xdist.

    Наша политика заключается в том, чтобы не обесценивать функции во время выпуска исправлений, но в данном случае мы считаем, что это имеет смысл, поскольку мы только документируем его как обесцененный, не выдавая предупреждений, которые потенциально могут нарушить тестовые наборы. Это даст понять, что разработчики крючков не должны использовать этот параметр вообще.

    В будущем выпуске item всегда будет None и будет выдавать соответствующее предупреждение, когда реализация hook использует его.

Исправления ошибок

  • issue #3539: Исправление перезагрузки при утверждении перезаписанных модулей.

  • issue #4034: Атрибут .user_properties объектов TestReport представляет собой список кортежей (имя, значение), но иногда может быть инстанцирован как кортеж кортежей. Теперь это всегда список.

  • issue #4039: Больше не выдаются предупреждения об использовании pytest_plugins в каталогах не верхнего уровня при использовании --pyargs: текущий механизм --pyargs ненадежен и может давать ложные отрицательные результаты.

  • issue #4040: Исключение пустых отчетов для пройденных тестов при использовании опции -rP.

  • issue #4051: улучшено сообщение об ошибке, когда в опцию -m передается недопустимое выражение Python.

  • issue #4056: MonkeyPatch.setenv и MonkeyPatch.delenv выдают предупреждение, если имя переменной окружения не str на Python 2.

    В Python 2 добавление ключей unicode к os.environ вызывает проблемы с subprocess (и, возможно, с другими модулями), что делает эту тонкую ошибку особо уязвимой при использовании с from __future__ import unicode_literals.

Улучшенная документация

  • issue #3928: Добавьте в документацию возможные значения для области действия приспособления.

pytest 3.8.1 (2018-09-22)

Исправления ошибок

  • issue #3286: .pytest_cache каталог теперь автоматически игнорируется Git’ом. Пользователи, которые хотели бы предложить решение для других SCM, пожалуйста, проконсультируйтесь/прокомментируйте этот вопрос.

  • issue #3749: Исправьте следующую ошибку при сборе тестов внутри пакетов:

    TypeError: object of type 'Package' has no len()
    
  • issue #3941: Исправление ошибки, когда при косвенной параметризации для определения области действия параметризации учитывалась область действия всех приспособлений, используемых тестовой функцией, а не только область действия приспособлений, которые параметризуются.

  • issue #3973: Исправление сбоя перезаписи утверждений, если тест изменял текущий рабочий каталог без последующего его восстановления.

  • issue #3998: Исправление проблемы, из-за которой некоторые свойства caplog (например, record_tuples) не были доступны при входе в отладчик с помощью --pdb.

  • issue #3999: Исправьте UnicodeDecodeError в python2.x, когда класс возвращает двоичный код __repr__ неascii в утверждении, которое также содержит текст неascii.

Улучшенная документация

  • issue #3996: Новая страница Амортизация и удаление показывает все устаревшие на данный момент функции, обоснование их необходимости и альтернативы для обновления кода. Здесь также перечислены функции, удаленные из pytest в прошлых основных выпусках, чтобы помочь тем, у кого есть старые версии pytest, обновиться.

Тривиальные/внутренние изменения

  • issue #3955: Улучшено определение пре-коммита для имен файлов журнала изменений

  • issue #3975: Удалите устаревший код вокруг im_func, поскольку он был только в python2

pytest 3.8.0 (2018-09-05)

Амортизация и удаление

  • issue #2452: Config.warn и Node.warn были устаревшими, см. обоснование и примеры в Config.warn и Node.warn..

  • issue #3936: @pytest.mark.filterwarnings второй параметр больше не является regex-escaped, что делает возможным реальное использование регулярных выражений для проверки предупреждающего сообщения.

    Примечание: regex-escaping строки соответствия был упущением в реализации, которое могло нарушить тестовые наборы, зависящие от старого поведения.

Характеристики

  • issue #2452: Внутренние предупреждения pytest теперь выдаются с помощью стандартного модуля warnings, что позволяет использовать стандартные фильтры предупреждений для управления этими предупреждениями. Это вводит типы предупреждений PytestWarning, PytestDeprecationWarning и RemovedInPytest4Warning как часть публичного API.

    Для получения дополнительной информации обратитесь к the documentation.

  • issue #2908: DeprecationWarning и PendingDeprecationWarning теперь показываются по умолчанию, если не настроен никакой другой фильтр предупреждений. Это делает pytest более совместимым с PEP 506#recommended-filter-settings-for-test-runners. Дополнительную информацию смотрите в the docs.

  • issue #3251: Предупреждения теперь перехватываются и отображаются во время сбора тестов.

  • issue #3784: PYTEST_DISABLE_PLUGIN_AUTOLOAD переменная окружения отключает автозагрузку плагинов, если она установлена.

  • issue #3829: Добавлена опция count к console_output_style, чтобы включить отображение прогресса в виде счета, а не в процентах.

  • issue #3837: Добавлена поддержка результатов „xfailed“ и „xpassed“ в сигнатуру pytester.RunResult.assert_outcomes.

Исправления ошибок

  • issue #3911: Программа записи терминала теперь учитывает ширину символов юникода при выводе прогресса.

  • issue #3913: Pytest теперь возвращает правильный код выхода (EXIT_USAGEERROR, 4) при вызове с неизвестными аргументами.

  • issue #3918: Улучшение производительности перезаписи утверждений.

Улучшенная документация

  • issue #3566: Добавлена заметка в usage.rst об использовании флага -r, который используется для показа дополнительной сводной информации о тесте.

  • issue #3907: Исправлен тип коллекции исключений, передаваемой в xfail: Аргумент raises принимает tuple вместо list.

Тривиальные/внутренние изменения

  • issue #3853: Удалено сообщение "run all (no recorded failures)", выводимое вместе с --failed-first и --last-failed, когда нет неудачных тестов.

pytest 3.7.4 (2018-08-29)

Исправления ошибок

  • issue #3506: Исправление возможной бесконечной рекурсии при записи файлов .pyc.

  • issue #3853: Плагин кэша теперь подчиняется флагу -q, когда используются флаги --last-failed и --failed-first.

  • issue #3883: Исправление плохого вывода консоли при использовании console_output_style=classic.

  • issue #3888: Исправьте код, специфичный для macOS, используя плагин capturemanager в doctests.

Улучшенная документация

  • issue #3902: Исправьте ссылки на pytest.org

pytest 3.7.3 (2018-08-26)

Исправления ошибок

  • issue #3033: Приспособления во время разрушения могут снова использовать capsys и capfd для проверки вывода, захваченного во время тестов.

  • issue #3773: Исправьте сбор тестов из файлов __init__.py, если они соответствуют параметру конфигурации python_files.

  • issue #3796: Исправление проблемы, при которой разрушение креплений последовательных подпакетов выполнялось один раз, в конце внешнего пакета.

  • issue #3816: Исправление ошибки, при которой опция --show-capture=no по-прежнему показывала журналы, распечатанные во время разрушения приспособления.

  • issue #3819: Исправление того, что stdout/stderr не перехватывается, когда активна запись логов cli в реальном времени.

  • issue #3843: Исправление ошибки сбора при указании тестовых функций непосредственно в командной строке с использованием синтаксиса test.py::test вместе с --doctest-modules.

  • issue #3848: Исправление ошибки, когда аргументы unicode не могли быть переданы в testdir.runpytest на Python 2.

  • issue #3854: Исправление двойного сбора тестов внутри пакетов, когда имя файла начинается с заглавной буквы.

Улучшенная документация

  • issue #3824: Добавлен пример для множественного совпадения шаблонов glob в python_files.

  • issue #3833: Добавлена недостающая документация для pytester.Testdir.

  • issue #3870: Исправление документации для интеграции setuptools.

Тривиальные/внутренние изменения

  • issue #3826: Замените неработающие аннотации типов комментариями типов.

  • issue #3845: Удалите из документации ссылку на проблему issue #568, которая с тех пор была исправлена.

pytest 3.7.2 (2018-08-16)

Исправления ошибок

  • issue #3671: Исправление того, что filterwarnings не регистрировался как встроенный знак.

  • issue #3768, issue #3789: Исправьте сбор тестов из пакетов, смешанных с обычными каталогами.

  • issue #3771: Исправление бесконечной рекурсии во время сбора, если хук pytest_ignore_collect возвращает False вместо None.

  • issue #3774: Исправление ошибки, при которой декорированные фиксы теряли функциональность (например, @mock.patch).

  • issue #3775: Исправление ошибки, при которой импорт модулей или других объектов с префиксом pytest_ вызывал ошибку PluginValidationError.

  • issue #3788: Исправьте AttributeError при сносе подклассов TestCase, которые вызывают исключение при __init__.

  • issue #3804: Исправьте отчет о возврате к трассировке для исключений с циклами __cause__.

Улучшенная документация

  • issue #3746: Добавьте документацию для metafunc.config, которая была ошибочно скрыта.

pytest 3.7.1 (2018-08-02)

Исправления ошибок

  • issue #3473: Немедленно поднимает сообщение, если approx() получает ожидаемое значение типа, который он не понимает (например, строки, вложенные массивы и т.д.).

  • issue #3712: Правильное представление размеров массива numpy при вызове repr() на approx().

  • issue #3742: Исправление несовместимости со сторонними плагинами во время сбора, которая приводила к ошибке object has no attribute '_collectfile'.

  • issue #3745: Выводить абсолютный путь, если cache_dir не является относительным к rootdir, вместо отказа.

  • issue #3747: Исправление проблемы совместимости с плагинами и кода предупреждения, выдаваемого функциями приспособления при их прямом вызове.

  • issue #3748: Исправьте бесконечную рекурсию в pytest.approx с массивами в numpy<1.13.

  • issue #3757: Привяжите pathlib2 к >=2.2.0, так как нам требуется поддержка __fspath__.

  • issue #3763: Исправьте TypeError, когда сообщение утверждения имеет вид bytes в python 3.

pytest 3.7.0 (2018-07-30)

Амортизация и удаление

Характеристики

  • issue #2283: Новая область применения фикстур package: фикстуры завершаются, когда завершается последний тест пакета. Эта функция считается экспериментальной, поэтому используйте ее осторожно.

  • issue #3576: Node.add_marker теперь поддерживает параметр append=True/False для определения того, идет ли метка последней (по умолчанию) или первой.

  • issue #3579: Приспособление caplog теперь имеет свойство messages, обеспечивая удобный доступ к интерполированным по формату сообщениям журнала без дополнительных данных, предоставляемых форматером/хандлером.

  • issue #3610: Новая опция --trace для входа в отладчик в начале теста.

  • issue #3623: Внедрите pytester.copy_example в качестве помощника для проведения приемочных тестов на примерах из проекта.

Исправления ошибок

  • issue #2220: Исправление ошибки, когда приспособления, переопределяемые прямыми параметрами (например, параметризация), инстанцировались, даже если они не использовались тестом.

  • issue #3695: Исправьте путаницу аргументов инициализации ApproxNumpy, допуски abs и rel были перевернуты, что приводило к странным результатам сравнения. Добавьте тесты для проверки допусков abs и rel для np.array и тест на ожидание nan с np.array().

  • issue #980: Исправление усеченного вывода локалов в режиме verbose.

Улучшенная документация

  • issue #3295: Исправьте документацию по использованию --last-failed-no-failures, добавив недостающий аргумент --last-failed в приведенные примеры, поскольку они вводят в заблуждение и заставляют думать, что недостающий аргумент не нужен.

Тривиальные/внутренние изменения

  • issue #3519: Теперь в README.md создается файл .pytest_cache, чтобы было понятно, зачем существует каталог.

pytest 3.6.4 (2018-07-28)

Исправления ошибок

  • Вызывайте pytest, используя -mpytest, чтобы sys.path не загрязнялся пакетами, установленными в site-packages. (issue #742)

Улучшенная документация

  • Используйте smtp_connection вместо smtp в документации по исправлениям, чтобы избежать возможной путаницы. (issue #3592)

Тривиальные/внутренние изменения

  • Удалите устаревшие импорты __future__. (issue #2319)

  • Добавьте CITATION, чтобы предоставить информацию о том, как формально цитировать pytest. (issue #3402)

  • Замените неработающие аннотации типов комментариями типов. (issue #3635)

  • Контакт pluggy с <0.8. (issue #3727)

pytest 3.6.3 (2018-07-04)

Исправления ошибок

  • Исправление ImportWarning, вызванное явным относительным импортом в модулях пакетов, написанных с помощью утверждений. (issue #3061)

  • Исправьте ошибку в pytest.approx при работе с 0-мерными массивами numpy. (issue #3593)

  • Больше не вызывает ошибку ValueError при использовании API get_marker. (issue #3605)

  • Исправление проблемы, при которой сообщения журнала с неасксиальными символами не появлялись в выходном файле журнала. (issue #3630)

  • Больше не вызывает ошибку AttributeError, когда унаследованные метки не могут быть сохранены в функциях. (issue #3631)

Улучшенная документация

  • Описание над примером для @pytest.mark.skipif теперь лучше соответствует коду. (issue #3611)

Тривиальные/внутренние изменения

  • Внутренний рефакторинг: удалены неиспользуемые атрибут CallSpec2tox ._globalid_args и параметр metafunc из CallSpec2.copy(). (issue #3598)

  • Запрет на использование предупреждения reduce в Python 2 (issue #3609)

  • Исправьте использование устаревшего параметра attr.ib convert. (issue #3653)

pytest 3.6.2 (2018-06-20)

Исправления ошибок

  • Исправление регрессии в Node.add_marker при извлечении объекта метки из MarkDecorator. (issue #3555)

  • Предупреждения без location сообщались как None. Это исправлено и теперь сообщается <undetermined location>. (issue #3563)

  • Продолжайте вызывать финализаторы в стеке, если финализатор в прежней области видимости вызывает исключение. (issue #3569)

  • Исправьте ошибку кодировки с утверждениями print в доктестах (issue #3583)

Улучшенная документация

  • Добавьте документацию для флага --strict. (issue #3549)

Тривиальные/внутренние изменения

  • Обновите старый стиль кавычек на паренс в документации fixture.rst. (issue #3525)

  • Улучшите отображение подсказки о --fulltrace с KeyboardInterrupt. (issue #3545)

  • pytest’s testsuite больше не запускается через python setup.py test - вместо этого вызывайте pytest или tox напрямую. (issue #3552)

  • Исправьте опечатку в документации (issue #3567)

pytest 3.6.1 (2018-06-05)

Исправления ошибок

  • Исправлена ошибка, когда при пометке теста xfail junitxml дважды записывал в журнал stdout и stderr. (issue #3491)

  • Исправьте метку usefixtures, применяемую к unittest-тестам, правильно инстанцируя FixtureInfo. (issue #3498)

  • Исправление совместимости перезаписывателя утверждений с библиотеками, которые обезьяньими патчами file объектов. (issue #3503)

Улучшенная документация

  • В документацию по приспособлениям добавлен раздел о том, как использовать приспособления в качестве фабрик. (issue #3461)

Тривиальные/внутренние изменения

  • Включите кэширование для pip/pre-commit, чтобы уменьшить время сборки на travis/appveyor. (issue #3502)

  • Переключите pytest на компоновку src/, поскольку мы уже предлагали это для хорошей практики - теперь мы это реализуем. (issue #3513)

  • Исправьте if в тестах для поддержки 3.7.0b5, где обработка docstring в AST была отменена. (issue #3530)

  • Удалите некоторый код совместимости с python2.5. (issue #3529)

pytest 3.6.0 (2018-05-23)

Характеристики

  • Переработайте внутреннюю часть реализации pytest.mark с правильной обработкой каждого узла, что исправляет ряд давних ошибок, вызванных старым дизайном. Это вводит новые API Node.iter_markers(name) и Node.get_closest_marker(name). Пользователям настойчиво рекомендуется прочитать reasons for the revamp in the docs или перейти к подробностям о updating existing code to use the new APIs. (issue #3317)

  • Теперь, когда @pytest.fixture применяется более одного раза к одной и той же функции, возникает ошибка ValueError. Такое поведение вызывало неожиданные проблемы, и если и работало в тестовом наборе, то в основном случайно. (issue #2334)

  • Поддержка встроенного метода breakpoint() в Python 3.7, подробности см. в Using the builtin breakpoint function. (issue #3180)

  • monkeypatch теперь поддерживает функцию context(), которая действует как менеджер контекста, отменяющий все исправления, сделанные в блоке with. (issue #3290)

  • Опция --pdb теперь вызывает прерывание KeyboardInterrupt для входа в отладчик вместо остановки сеанса тестирования. В python 2.7 повторное нажатие CTRL+C выводит из отладчика. В python 3.2 и выше используйте CTRL+D. (issue #3299)

  • pytest больше не изменяет уровень журнала корневого регистратора, когда параметр log-level имеет большее числовое значение, чем уровень корневого регистратора, что позволяет лучше работать с пользовательской конфигурацией регистрации в пользовательском коде. (issue #3307)

Исправления ошибок

  • Редкое состояние гонки, которое могло привести к повреждению файлов .pyc в Windows, надеюсь, решено. (issue #3008)

  • Также используйте iter_marker для обнаружения меток, применяемых для маркерных выражений из cli, чтобы избежать плохих данных из устаревшего хранилища меток. (issue #3441)

  • При показе дифференциалов неудачных утверждений, содержимое которых содержит только пробелы, сначала экранируйте их с помощью repr(), чтобы было легче заметить различия. (issue #3443)

Улучшенная документация

  • Измените год авторского права документации на диапазон, который автоматически обновляется при каждой публикации. (issue #3303)

Тривиальные/внутренние изменения

  • pytest теперь зависит от библиотеки python-atomicwrites. (issue #3008)

  • Обновите все URL-адреса pypi.python.org до pypi.org. (issue #3431)

  • Определяйте хуки с префиксом pytest_, используя внутренний менеджер плагинов, поскольку pluggy устаревает аргумент implprefix для PluginManager. (issue #3487)

  • Импортируйте Mapping и Sequence из _pytest.compat, а не напрямую из collections в python_api.py::approx. Добавьте Mapping в _pytest.compat, импортируйте его из collections на python 2, но из collections.abc на Python 3, чтобы избежать DeprecationWarning на Python 3.7 или новее. (issue #3497)

pytest 3.5.1 (2018-04-23)

Исправления ошибок

  • Сбросьте sys.last_type, sys.last_value и sys.last_traceback перед выполнением каждого теста. Эти атрибуты добавляются pytest во время выполнения теста для облегчения отладки, но никогда не сбрасываются, поэтому они создают утечку ссылок на фрейм последнего неудачного теста, который, в свою очередь, никогда не может быть возвращен сборщиком мусора. (issue #2798)

  • pytest.raises теперь поднимает TypeError при получении неизвестного аргумента ключевого слова. (issue #3348)

  • pytest.raises теперь работает с классами исключений, которые выглядят как итерации. (issue #3372)

Улучшенная документация

  • Исправьте опечатку в документации по приспособлениям caplog, которая неправильно определяла некоторые атрибуты как методы. (issue #3406)

Тривиальные/внутренние изменения

  • Добавлено более показательное сообщение об ошибке при параметризации функции, аргумент которой принимает значение по умолчанию. (issue #3221)

  • Удалите внутреннюю функцию _pytest.terminal.flatten в пользу more_itertools.collapse. (issue #3330)

  • Импортируйте некоторые модули из collections.abc вместо collections, поскольку первые модули срабатывают DeprecationWarning в Python 3.7. (issue #3339).

  • record_property больше не является экспериментальным, удаление предупреждений было забыто. (issue #3360)

  • Упомяните в документации и справке CLI, что фикстуры с ведущими _ печатаются pytest --fixtures только в том случае, если добавлена опция -v. (issue #3398)

pytest 3.5.0 (2018-03-21)

Амортизация и удаление

  • Фиксация record_xml_property теперь устарела в пользу более универсальной record_property. (issue #2770)

  • Определение pytest_plugins теперь не рекомендуется в файлах conftest.py не верхнего уровня, поскольку они «просачиваются» во все дерево каталогов. See the docs для обоснования этого решения (issue #3084)

Характеристики

  • Новая опция командной строки --show-capture, позволяющая указать, как отображать захваченный вывод при неудачных тестах: no, stdout, stderr, log или all (по умолчанию). (issue #1478)

  • Новая опция командной строки --rootdir для переопределения правил обнаружения корневого каталога. Подробности см. в документации customize. (issue #1642)

  • Фикстуры теперь инстанцируются на основе их областей видимости, причем более высокоскопированные фикстуры (например, session) инстанцируются первыми, чем более низкоскопированные (например, function). Относительный порядок фикстур одной области видимости остается неизменным, основываясь на порядке их объявления и зависимостях. (issue #2405)

  • record_xml_property переименовано в record_property и теперь совместимо с xdist, markers и любым репортером. Имя record_xml_property теперь устарело. (issue #2770)

  • Новые опции --nf, --new-first: запускать сначала новые тесты, а затем остальные, в обоих случаях тесты также сортируются по времени изменения файла, причем более свежие файлы идут первыми. (issue #3034)

  • Новая опция командной строки --last-failed-no-failures, позволяющая указать поведение функции `--last-failed плагина кэша, когда ни один тест не прошел в последнем запуске (или кэш не был найден): none или all (по умолчанию). (issue #3139)

  • Новая опция командной строки --doctest-continue-on-failure позволяет doctests показывать несколько отказов для каждого фрагмента, вместо того, чтобы останавливаться на первом отказе. (issue #3149)

  • Перехваченные сообщения журнала добавляются в тег <system-out> в сгенерированном junit xml файле, если для ini опции junit_logging установлено значение system-out. Если значение этой ini-опции равно system-err, логи записываются в <system-err>. Значение по умолчанию для junit_logging равно no, что означает, что перехваченные журналы не записываются в выходной файл. (issue #3156)

  • Позволяет плагину ведения журнала обрабатывать pytest_runtest_logstart и pytest_runtest_logfinish хуки, когда включены живые журналы. (issue #3189)

  • Передача --log-cli-level в командной строке теперь автоматически активирует ведение журнала в реальном времени. (issue #3190)

  • Добавьте параметр командной строки --deselect, позволяющий отменить выбор отдельных тестов во время сбора. (issue #3198)

  • Захваченные журналы печатаются перед входом в pdb. (issue #3204)

  • Количество невыбранных элементов теперь отображается перед запуском тестов, например, collected X items / Y deselected. (issue #3213)

  • Встроенный модуль platform теперь доступен для использования в выражениях в pytest.mark. (issue #3236)

  • Раздел short test summary info теперь отображается после трассировок и предупреждений в терминале. (issue #3255)

  • Новый флаг --verbosity для явного задания уровня многословности. (issue #3296)

  • pytest.approx теперь принимает сравнение массива numpy со скаляром. (issue #3312)

Исправления ошибок

  • Подавление IOError при закрытии временного файла, используемого для захвата потоков в Python 2.7. (issue #2370)

  • Исправлен метод clear() на приспособлении caplog, который очищал records, но не свойство text. (issue #3297)

  • Во время сбора тестов, когда stdin не разрешено читать, объект DontReadFromStdin по-прежнему позволяет себе быть итерабельным и разрешается в итератор без сбоев. (issue #3314)

Улучшенная документация

Тривиальные/внутренние изменения

  • Измените минимальное требование attrs на 17.4.0. (issue #3228)

  • Переименовал каталоги примеров, чтобы все тесты проходили при запуске из базового каталога. (issue #3245)

  • Внутренний модуль mark.py был превращен в пакет. (issue #3250)

  • pytest теперь зависит от пакета more-itertools. (issue #3265)

  • Добавлено предупреждение, когда секция [pytest] используется в файле .cfg, переданном с -c (issue #3268).

  • nodeids теперь можно явно передавать конструкторам FSCollector и Node. (issue #3291)

  • Внутренний рефакторинг FormattedExcinfo для использования средств attrs и удаления старого кода поддержки устаревших версий Python. (issue #3292)

  • Рефакторинг для унификации внутренней обработки многословности. (issue #3296)

  • Внутренний рефакторинг для лучшей интеграции с argparse. (issue #3304)

  • Исправьте пример python при вызове фикстуры в doc/en/usage.rst (issue #3308).

pytest 3.4.2 (2018-03-04)

Исправления ошибок

  • Удалена информация о ходе выполнения, когда опция захвата имеет значение no. (issue #3203)

  • Рефакторная проверка bindir с exists на isdir. (issue #3241)

  • Исправьте проблему TypeError при использовании approx со значением Decimal. (issue #3247)

  • Исправьте ссылочный цикл, создаваемый при использовании приспособления request. (issue #3249)

  • Секции [tool:pytest] в файлах *.cfg, переданных опцией -c, теперь правильно распознаются. (issue #3260)

Улучшенная документация

  • Добавьте плагин ведения журнала в список плагинов. (issue #3209)

Тривиальные/внутренние изменения

  • Исправьте незначительную опечатку в fixture.rst (issue #3259)

pytest 3.4.1 (2018-02-20)

Исправления ошибок

  • Перенесите импорт doctest.UnexpectedException на верхний уровень, чтобы избежать возможных ошибок при использовании --pdb. (issue #1810)

  • Добавлена печать захваченных stdout/stderr перед входом в pdb, а также улучшен тест, который давал ложные отрицательные результаты о захвате вывода. (issue #3052)

  • Исправьте упорядочивание тестов, использующих параметризованные фикстуры, которое может привести к тому, что фикстур будет создано больше, чем нужно. (issue #3161)

  • Исправление ошибки, при которой ведение журнала в хуках, не относящихся к хукам «test run», приводило к внутренней ошибке. (issue #3184)

  • Правильное определение аргументов, инжектируемых декоратором unittest.mock.patch, когда pypi mock.patch установлен и импортирован. (issue #3206)

  • Ошибки, отображаемые при неудачной комбинации pytest.raises() с match=, теперь более точно отражают произошедшее: Когда исключение не было вызвано, часть «matching „…“» была удалена, поскольку она ложно подразумевает, что исключение было вызвано, но оно не совпало. Когда было вызвано неправильное исключение, оно теперь выбрасывается (как если бы было pytest.raised() без match=), а не жалуется на несопоставленный текст. (issue #3222)

  • Исправлена обработка захвата вывода в doctests на macOS. (issue #985)

Улучшенная документация

  • Добавьте документацию по параметрам Sphinx для аргументов match и message в pytest.raises. (issue #3202)

Тривиальные/внутренние изменения

  • pytest изменил процедуру публикации и теперь публикуется в PyPI непосредственно из Travis. (issue #3060)

  • Переименуйте ParameterSet._for_parameterize() в _for_parametrize(), чтобы соблюсти соглашение об именовании. (issue #3166)

  • Пропустите неудачный тест pdb/doctest на mac. (issue #985).

pytest 3.4.0 (2018-01-30)

Амортизация и удаление

  • Все классы pytest теперь подклассы object для лучшей совместимости с Python 2/3. Это не должно повлиять на пользовательский код, за исключением очень редких крайних случаев. (issue #2147)

Характеристики

  • Введена опция empty_parameter_set_mark ini для выбора того, какую метку применять, когда @pytest.mark.parametrize задан пустой набор параметров. Возможные варианты: skip (по умолчанию) и xfail. Обратите внимание, что в будущих выпусках планируется изменить значение по умолчанию на xfail, так как это считается менее подверженным ошибкам. (issue #2527)

  • Несовместимое изменение: после отзывов сообщества функциональность logging претерпела некоторые изменения. Пожалуйста, обратитесь к logging documentation за подробностями. (issue #3013)

  • Консольный вывод возвращается в «классический» режим, когда захват отключен (-s), иначе вывод становится беспорядочным и бесполезным. (issue #3038)

  • Новый хук pytest_runtest_logfinish, который вызывается, когда элемент теста завершает выполнение, аналогично pytest_runtest_logstart. (issue #3101)

  • Улучшение производительности при сборе тестов с использованием большого количества фикстур. (issue #3107)

  • Новый метод caplog.get_records(when), который предоставляет доступ к захваченным записям для этапов тестирования "setup", "call" и "teardown". (issue #3117)

  • Новое приспособление record_xml_attribute, позволяющее изменять и вставлять атрибуты на xml-узле <testcase> в отчетах JUnit. (issue #3130)

  • Каталог кэша по умолчанию был переименован из .cache в .pytest_cache после отзывов сообщества о том, что название .cache не давало понять, что он используется pytest. (issue #3138)

  • Раскрашивание столбца levelname в выводе live-log. (issue #3142)

Исправления ошибок

  • Исправьте зависание теста pexpect на MacOS, используя flush() вместо wait(). (issue #2022)

  • Исправьте восстановление состояния Python после запуска in-process pytest с помощью плагина pytester; это может нарушить тесты, использующие несколько запусков in-process pytest, если более поздние зависят от более ранних, пропуская глобальные изменения интерпретатора. (issue #3016)

  • Исправьте пропуск хука отчетности плагина, когда тест прерывался до появления хука настройки плагина. (issue #3074)

  • Исправьте процент выполнения, сообщаемый при неудачных тестах во время завершения. (issue #3088)

  • Несовместимое изменение: Опция -o/--override больше не съедает все остальные опции, что может привести к неожиданному поведению: например, pytest -o foo=1 /path/to/test.py будет неудачным, потому что /path/to/test.py будет рассматриваться как часть аргумента командной строки -o. Одним из следствий этого является то, что теперь для нескольких переопределений конфигурации требуется несколько флагов -o: pytest -o foo=1 -o bar=2. (issue #3103)

Улучшенная документация

  • Крючки документа (определенные с помощью historic=True), которые нельзя использовать с помощью hookwrapper=True. (issue #2423)

  • Уточните, что захват предупреждений по умолчанию не изменяет фильтр предупреждений. (issue #2457)

  • Проясните возможную путаницу при использовании pytest_fixture_setup с функциями фикстур, которые возвращают None. (issue #2698)

  • Исправьте формулировку предложения о флагах doctest, используемых в pytest. (issue #3076)

  • Предпочитайте https://*.readthedocs.io вместо http://*.rtfd.org для ссылок в документации. (issue #3092)

  • Улучшить читабельность (формулировки, грамматику) руководства по началу работы (issue #3131)

  • Добавлено замечание, что вызов pytest.main несколько раз из одного и того же процесса не рекомендуется из-за кэширования импорта. (issue #3143)

Тривиальные/внутренние изменения

  • Показать простую и понятную ошибку, когда выражения с ключевыми словами вызывают синтаксическую ошибку (например, "-k foo and import" покажет ошибку, что нельзя использовать ключевое слово import в выражениях). (issue #2953)

  • Измените параметризованную автоматическую генерацию идентификаторов тестов, чтобы использовать атрибут __name__ функций вместо имени аргумента возврата плюс счетчик. (issue #2976)

  • Замените py.std на импорт stdlib. (issue #3067)

  • Исправьте «you» на «your» в документации по ведению журнала. (issue #3129)

pytest 3.3.2 (2017-12-25)

Исправления ошибок

  • pytester: игнорировать файлы, используемые для получения метаданных текущего пользователя в детекторе утечек fd. (issue #2784)

  • Исправьте утечку памяти, когда объекты, возвращаемые фикстурами, никогда не уничтожались сборщиком мусора. (issue #2981)

  • Исправьте преобразование pyargs в имя файла, чтобы не преобразовывать симлинки на Python 2. (issue #2985).

  • PYTEST_DONT_REWRITE теперь проверяется и для плагинов, а не только для тестовых модулей. (issue #2995)

Улучшенная документация

  • Добавьте уточняющее примечание о поведении нескольких параметризованных аргументов (issue #3001)

Тривиальные/внутренние изменения

pytest 3.3.1 (2017-12-05)

Исправления ошибок

  • Исправьте проблему, связанную с отсутствием эффекта -p no:<plugin>. (issue #2920)

  • Исправление регрессии с предупреждениями, содержащими нестроки в аргументах в Python 2. (issue #2956).

  • Всегда экранируйте нулевые байты при установке PYTEST_CURRENT_TEST. (issue #2957)

  • Исправьте ZeroDivisionError при использовании плагина testmon, когда на самом деле не было собрано ни одного теста. (issue #2971)

  • Верните TerminalReporter.writer в качестве псевдонима для TerminalReporter._tw. Этот псевдоним был случайно удален в релизе 3.3.0. (issue #2984)

  • Плагин pytest-capturelog теперь также занесен в черный список, что позволяет избежать ошибок при запуске pytest с установленным плагином. (issue #3004)

Улучшенная документация

  • Исправьте неработающую ссылку на плагин pytest-localserver. (issue #2963)

Тривиальные/внутренние изменения

  • Обновление ссылки «bugs» на github в CONTRIBUTING.rst (issue #2949)

pytest 3.3.0 (2017-11-23)

Амортизация и удаление

  • pytest больше не поддерживает Python 2.6 и 3.3. Эти версии Python уже некоторое время как вышли из употребления и несут расходы на поддержку и совместимость для основной команды pytest, и после обсуждения с остальным сообществом мы решили, что они больше не будут поддерживаться, начиная с этой версии. Пользователи, которым все еще нужны эти версии, должны подключить pytest к <3.3. (issue #2812)

  • Удалите внутреннюю функцию _preloadplugins(). Это удаление является частью депривации хука pytest_namespace(). (issue #2636)

  • Внутренне измените CallSpec2, чтобы вместо разбитого отображения ключевых слов иметь список меток. Это удаляет атрибут keywords внутреннего класса CallSpec2. (issue #2672)

  • Удалите ParameterSet.deprecated_arg_dict - он не является публичным api, а отсутствие подчеркивания было ошибкой именования. (issue #2675)

  • Удалите внутренний многотиповой атрибут Node._evalskip и замените его булевым Node._skipped_by_mark. (issue #2767)

  • Список params, передаваемый в pytest.fixture, теперь для всех эффектов считается неизменным и замороженным на момент вызова pytest.fixture. Ранее список мог быть изменен до первого вызова приспособления, что позволяло использовать динамическую параметризацию (например, обновляемую из опций командной строки), но это была нежелательная деталь реализации, которая усложняла внутреннее устройство и препятствовала некоторой внутренней очистке. Подробности и рекомендуемый обходной путь см. в выпуске issue #2959.

Характеристики

  • Хук pytest_fixture_post_finalizer теперь может принимать аргумент request. (issue #2124)

  • Замените старый код интроспекции в compat.py, определяющий доступные аргументы функций, на inspect.signature на Python 3 и funcsigs.signature на Python 2. При этом должны соблюдаться объявления __signature__ в функциях. (issue #2267)

  • Сообщайте о тестах с глобальной переменной pytestmark только один раз. (issue #2549)

  • Теперь pytest отображает общий процент прогресса во время выполнения тестов. Предыдущий стиль вывода можно установить, настроив параметр console_output_style на classic. (issue #2657)

  • Сопоставьте сигнатуру warns с raises, добавив ключевое слово match. (issue #2708)

  • pytest теперь захватывает и отображает вывод из стандартного модуля logging. Пользователь может управлять уровнем перехвата журнала, задавая опции в pytest.ini, командной строке, а также во время отдельных тестов с помощью маркеров. Также доступно приспособление caplog, которое позволяет пользователям проверять захваченный журнал во время определенных тестов (аналогично, например, capsys). Для получения дополнительной информации см. раздел logging docs. Эта возможность была введена путем слияния популярного плагина pytest-catchlog, благодаря @thisch. Имейте в виду, что во время слияния интерфейс обратной совместимости с устаревшим pytest-capturelog был удален. (issue #2794)

  • Добавьте каргу allow_module_level к pytest.skip(), позволяющему пропустить весь модуль. (issue #2808)

  • Разрешить установку file_or_dir, -c и -o в PYTEST_ADDOPTS. (issue #2824)

  • Возвращать результаты захвата stdout/stderr в виде namedtuple, так что out и err могут быть доступны по атрибутам. (issue #2879)

  • Добавьте capfdbinary, версию capfd, которая возвращает байты из readouterr(). (issue #2923)

  • Добавьте capsysbinary версию capsys, которая возвращает байты из readouterr(). (issue #2934)

  • Реализуйте возможность пропускать файлы setup.py при запуске с --doctest-modules. (issue #502)

Исправления ошибок

  • Возобновление захвата вывода после capsys/capfd.disabled() менеджера контекста. (issue #1993)

  • Хуки pytest_fixture_setup и pytest_fixture_post_finalizer теперь вызываются для всех файлов conftest.py. (issue #2124)

  • Если при загрузке плагина происходит исключение, pytest больше не скрывает исходную трассировку. В Python 2 он будет показывать исходный отслеженный откат с новым сообщением, объясняющим, в каком плагине. В Python 3 он будет показывать 2 канонизированных исключения, оригинальное исключение при загрузке плагина в дополнение к исключению, которое pytest бросает о загрузке плагина. (issue #2491)

  • capsys и capfd теперь могут использоваться другими приспособлениями. (issue #2709)

  • Внутренний плагин pytester правильно кодирует аргументы bytes в utf-8. (issue #2738)

  • testdir теперь использует тот же метод, что и tmpdir для создания своего временного каталога. Это немного изменяет конечную структуру каталога testdir, но не должно повлиять на использование в обычных сценариях и позволяет избежать ряда потенциальных проблем. (issue #2751)

  • pytest больше не жалуется на то, что предупреждения с сообщениями unicode не совместимы с ascii, даже для сообщений, совместимых с ascii-кодом. В результате предупреждения с юникодовыми сообщениями сначала преобразуются в ascii представление для безопасности. (issue #2809)

  • Измените возвращаемое значение команды pytest при достижении --maxfail с 2 (прервано) на 1 (не удалось). (issue #2845)

  • Исправление проблемы в перезаписи утверждений, которая могла привести к перезаписи модулей, которые не должны быть перезаписаны. (issue #2939)

  • Обрабатывайте знаки без описания в pytest.ini. (issue #2942)

Тривиальные/внутренние изменения

  • pytest теперь зависит от attrs для внутренних структур, чтобы облегчить сопровождение кода. (issue #2641)

  • Переработан внутренний код совместимости с Python 2/3 для использования six. (issue #2642)

  • Перестаньте продавать pluggy - мы упускаем его последние изменения без особой пользы (issue #2719).

  • Внутренний рефактор: упрощение экранирования строк ascii с помощью обработчика ошибок backslashreplace в новых версиях Python 3. (issue #2734)

  • Удалите ненужный оценщик меток в плагине unittest (issue #2767)

  • Вызовы функции Metafunc.addcall теперь выдают предупреждение об устаревании. Эту функцию планируется удалить в pytest-4.0. (issue #2876)

  • Внутреннее перемещение извлечения набора параметров в более удобное для обслуживания место. (issue #2877)

  • Внутренний рефакторинг для упрощения поиска узла области видимости. (issue #2910)

  • Настройте pytest, чтобы предотвратить установку pip’ом pytest в неподдерживаемых версиях Python. (issue #2922)

pytest 3.2.5 (2017-11-15)

Исправления ошибок

  • Уберите ограничение py<1.5 из pytest, так как это может вызвать конфликты версий в некоторых установках. (issue #2926)

pytest 3.2.4 (2017-11-13)

Исправления ошибок

  • Исправьте ошибку, при которой запуск с --pyargs приводил к появлению элементов с пустыми parent.nodeid, если они запускались из другого корневого каталога. (issue #2775)

  • Исправление проблемы с @pytest.parametrize, если аргументы argnames были указаны как ключевые слова. (issue #2819)

  • Удаление пробелов из имен маркеров при чтении их из INI конфигурации. (issue #2856).

  • Показать полный контекст источника doctest в выводе pytest, если номер строки неудачного примера в docstring < 9. (issue #2882)

  • Сопоставьте пути приспособлений с реальными сегментами пути, чтобы избежать совпадения папок, имеющих общий префикс. (issue #2836)

Улучшенная документация

  • Ввести специальный раздел о conftest.py. (issue #1505)

  • Явно упомяните xpass в документации xfail. (issue #1997)

  • Добавьте пример для pytest.param в документ example/parametrize. (issue #2658)

  • Уточнить формулировку предложения для параметров приспособлений (issue #2893)

  • Перечислите python 3.6 в списке поддерживаемых версий в документе «Начало работы». (issue #2903)

  • Уточните документацию по доступным диапазонам приспособлений. (issue #538)

  • Добавьте документацию о вызове python -m pytest, добавляющем текущий каталог в sys.path. (issue #911)

pytest 3.2.3 (2017-10-03)

Исправления ошибок

  • Исправление сбоя в завершении вкладок, когда не задан префикс. (issue #2748)

  • Функция проверки равенства (__eq__) MarkDecorator возвращает False, если один объект не является экземпляром MarkDecorator. (issue #2758)

  • При выполнении pytest --fixtures-per-test: не падать, если элемент не имеет атрибута _fixtureinfo (например, доктесты) (issue #2788)

Улучшенная документация

  • В текст справки опции -k добавьте пример использования not, чтобы не выбирать некоторые тесты, имена которых соответствуют заданному выражению. (issue #1442)

  • Добавьте примечание в parametrize.rst о вызове metafunc.parametrize несколько раз. (issue #1548)

Тривиальные/внутренние изменения

  • Установите xfail_strict=True в собственном наборе тестов pytest, чтобы отлавливать ожидаемые сбои, как только они начинают проходить. (issue #2722)

  • Исправьте опечатку в примере передачи вызываемого объекта в маркеры (в example/markers.rst) (issue #2765)

pytest 3.2.2 (2017-09-06)

Исправления ошибок

  • Вызов устаревшего request.getfuncargvalue() теперь показывает источник вызова. (issue #2681)

  • Разрешить тестам, объявленным как @staticmethod, использовать фикстуры. (issue #2699)

  • Исправлена нештатная ситуация при сборе: атрибуты, которые при обращении к ним выдавали pytest.fail, прерывали весь сбор. (issue #2707)

  • Исправьте ReprFuncArgs при смешанных аргументах unicode и UTF-8. (issue #2731)

Улучшенная документация

  • В примеры по работе с пользовательскими маркерами добавить примеры, демонстрирующие использование pytest.mark.MARKER_NAME.with_args в сравнении с pytest.mark.MARKER_NAME.__call__ (issue #2604)

  • В одном из простых примеров используйте pytest_collection_modifyitems() для пропуска тестов, основанных на опции командной строки, что позволяет использовать ее совместно, предотвращая ошибку пользователя при обращении к pytest.config до разбора аргумента. (issue #2653)

Тривиальные/внутренние изменения

  • Исправлена незначительная ошибка в фрагменте кода „Good Practices/Manual Integration“. (issue #2691)

  • Исправлена опечатка в файле goodpractices.rst. (issue #2721)

  • Улучшите руководство для пользователей относительно устаревания --resultlog. (issue #2739)

pytest 3.2.1 (2017-08-08)

Исправления ошибок

  • Исправлен небольшой глюк терминала при сборе одного тестового предмета. (issue #2579)

  • Правильно считать / в качестве разделителя файлов для автоматической пометки подключаемых файлов для перезаписи в Windows. (issue #2591)

  • Правильно экранируйте имена тестов при установке переменной окружения PYTEST_CURRENT_TEST. (issue #2644)

  • Исправление ошибки на Windows и Python 3.6+, когда sys.stdout был заменен на потокоподобный объект, который не реализует полный протокол буферизации модуля io. В частности, это влияет на пользователей pytest-xdist на вышеупомянутой платформе. (issue #2666)

Улучшенная документация

  • Явно документируйте, какие функции pytest работают с unittest. (issue #2626)

pytest 3.2.0 (2017-07-30)

Амортизация и удаление

  • pytest.approx больше не поддерживает операторы >, >=, < и <=, чтобы избежать неожиданного/непоследовательного поведения. Дополнительную информацию см. в документации approx(). (issue #2003)

  • Все специфическое поведение старого стиля в текущих классах в API pytest на данный момент считается устаревшим и будет удалено в одном из будущих выпусков. Это касается только пользователей Python 2 и в редких ситуациях. (issue #2147)

  • При использовании меток для параметров в pytest.mark.parametrize теперь выдается предупреждение об устаревании. Вместо этого используйте pytest.param для применения меток к параметрам. (issue #2427)

Характеристики

  • Добавьте поддержку массивов numpy (и dicts) в approx. (issue #1994).

  • Теперь объекты тестовых функций имеют атрибут pytestmark, содержащий список оценок, применяемых непосредственно к тестовой функции, в отличие от оценок, наследуемых от родительских классов или модулей. (issue #2516)

  • По умолчанию коллекция игнорирует локальные virtualenvs; --collect-in-virtualenv отменяет это поведение. (issue #2518)

  • Позволяет методам класса, оформленным как @staticmethod, быть кандидатами на сбор в качестве тестовой функции. (Только для Python 2.7 и выше. Python 2.6 будет по-прежнему игнорировать статические методы.) (issue #2528)

  • Ввести mark.with_args, чтобы разрешить передачу функций/классов в качестве единственного аргумента меткам. (issue #2540)

  • Новая опция ini cache_dir: задает каталог, в котором хранится содержимое плагина кэша. Каталог может быть относительным или абсолютным путем: если путь относительный, то каталог создается относительно rootdir, иначе он используется как есть. Дополнительно путь может содержать переменные окружения, которые расширяются во время выполнения. (issue #2543)

  • Ввести переменную окружения PYTEST_CURRENT_TEST, которая устанавливается с помощью nodeid и стадии (setup, call и teardown) выполняемого в данный момент теста. Более подробную информацию см. в documentation. (issue #2583)

  • Введена метка @pytest.mark.filterwarnings, которая позволяет перезаписывать фильтр предупреждений на уровне каждого теста, класса или модуля. Дополнительную информацию см. в docs. (issue #2598)

  • --last-failed теперь навсегда запоминает, когда тест провалился, и забывает об этом, только если он проходит снова. Это упрощает исправление набора тестов путем выборочного запуска файлов и постепенного исправления тестов. (issue #2621)

  • Новый хук pytest_report_collectionfinish, который позволяет плагинам добавлять сообщения в отчет терминала после успешного завершения сбора. (issue #2622)

  • Добавлена поддержка PEP 415's Exception.__suppress_context__. Теперь если raise exception from None пойман pytest, pytest больше не будет цеплять контекст в отчете о тестировании. Поведение теперь соответствует поведению Python в отношении трассировки. (issue #2631)

  • Исключения, вызываемые pytest.fail, pytest.skip и pytest.xfail, теперь подкласса BaseException, что усложняет их непреднамеренную поимку обычным кодом. (issue #580)

Исправления ошибок

  • Установите stdin на замкнутый PIPE в pytester.py.Testdir.popen(), чтобы избежать нежелательных интерактивных pdb (issue #2023).

  • Добавьте недостающий атрибут encoding к потокам sys.std* при использовании режима захвата capsys. (issue #2375)

  • Исправьте изменение цвета терминала на черный в Windows, если colorama импортирован в файл conftest.py. (issue #2510)

  • Исправьте номер строки в отчете о пропущенных тестах. (issue #2548)

  • перехват: убедитесь, что EncodedFile.name является строкой. (issue #2555)

  • Опции --fixtures и --fixtures-per-test теперь сохраняют отступы в документах. (issue #2574)

  • номера строк в doctests теперь сообщаются правильно, исправлено pytest-sugar#122. (issue #2610)

  • Исправление недетерминизма в порядке сбора фикстур. Добавляет новую зависимость (ordereddict) для Python 2.6. (issue #920)

Улучшенная документация

  • Уточните порядок вызова крючка pytest_configure. (issue #2539)

  • Расширьте документацию для тестирования кода плагина с помощью плагина pytester. (issue #971)

Тривиальные/внутренние изменения

  • Обновите сообщение справки для --strict, чтобы уточнить, что оно относится только к незарегистрированным маркерам, а не к предупреждениям. (issue #2444)

  • Внутреннее перемещение кода: переместите код для pytest.approx/pytest.raises в собственные файлы, чтобы уменьшить размер python.py (issue #2489)

  • Переименовали служебную функцию _pytest.compat._escape_strings в _ascii_escaped, чтобы лучше передать ее назначение. (issue #2533)

  • Улучшите сообщение об ошибке для CollectError с skip/skipif. (issue #2546).

  • Выдавать предупреждение об устаревании тестов yield только один раз на генератор. (issue #2562)

  • Убедитесь, что конечная собранная строка не содержит артефактов предыдущей записи. (issue #2571)

  • Исправлены все ошибки и предупреждения flake8. (issue #2581)

  • Добавлено окружение fix-lint tox для запуска автоматических исправлений pep8 в коде. (issue #2582)

  • Превращение предупреждений в ошибки в собственном тестовом наборе pytest для более оперативного выявления регрессий, связанных с депривацией. (issue #2588)

  • Показывать ссылки на несколько выпусков в записях CHANGELOG. (issue #2620)

pytest 3.1.3 (2017-07-03)

Исправления ошибок

  • Исправьте ошибку декодирования в Python 2 для доктестов в docstrings. (issue #2434)

  • Исключения, поднятые во время завершения работы финализаторами, теперь подавляются до тех пор, пока не будут вызваны все финализаторы, с повторным поднятием первоначального исключения. (issue #2440)

  • Исправление некорректного отчета «собранные элементы» при указании тестов в командной строке. (issue #2464)

  • deprecated_call в форме контекст-менеджера теперь фиксирует предупреждения об устаревании, даже если такое же предупреждение уже было выдано. Кроме того, deprecated_call всегда будет выдавать одно и то же сообщение об ошибке (ранее оно выдавало разные сообщения в режиме контекст-менеджера и в режиме вызова функции). (issue #2469)

  • Исправление проблемы, когда пути, собираемые pytest, могли содержать тройные ведущие символы /. (issue #2475)

  • Исправление внутренней ошибки при попытке определить начало рекурсивного возврата трассировки. (issue #2486)

Улучшенная документация

  • Явно укажите, для каких хуков вызовы прекращаются после первого результата не None. (issue #2493)

Тривиальные/внутренние изменения

  • Создайте задачи invoke для обновления вендорных пакетов. (issue #2474)

  • Обновите даты копирайта в LICENSE, README.rst и в документации. (issue #2499)

pytest 3.1.2 (2017-06-08)

Исправления ошибок

  • Необходимые опции, добавленные через pytest_addoption, больше не будут препятствовать использованию опции –help без их передачи. (#1999)

  • Соблюдайте python_files при переписывании утверждений. (#2121)

  • Исправьте обнаружение ошибок рекурсии, когда кадры в трассировке содержат объекты, которые нельзя сравнивать (например, массивы numpy). (#2459)

  • UnicodeWarning выдается из внутреннего плагина предупреждений pytest только в том случае, если сообщение содержит неаскриптивный юникод (только для Python 2). (#2463)

  • Добавлено обходное решение для Python 3.6 WindowsConsoleIO, ломающегося из-за FDCapture в Pytests. Другой код, использующий консольные дескрипторы, все еще может быть затронут той же проблемой и может потребовать дополнительных обходных путей/исправлений, т.е. colorama. (#2467)

Улучшенная документация

  • Исправьте внутренние ссылки API на объекты pluggy. (#2331)

  • Уточните, что pytest.xfail останавливает выполнение теста в точке вызова, и улучшите общий поток документации skipping. (#810)

pytest 3.1.1 (2017-05-30)

Исправления ошибок

  • Перехват предупреждений pytest больше не переопределяет существующие фильтры предупреждений. Предыдущее поведение переопределяло все фильтры и вызывало регрессии в тестовых наборах, которые настраивают фильтры предупреждений в соответствии со своими потребностями. Обратите внимание, что как побочный эффект этого, DeprecationWarning и PendingDeprecationWarning больше не отображаются по умолчанию. (#2430)

  • Исправление проблемы с неаскриптивным содержимым в текстовых файлах doctest. (#2434)

  • Исправьте ошибки кодировки для предупреждений unicode в Python 2. (#2436).

  • pytest.deprecated_call теперь захватывает PendingDeprecationWarning в форме контекстного менеджера. (#2441)

Улучшенная документация

  • Добавление towncrier для управления журналом изменений. (#2390)

3.1.0 (2017-05-22)

Новые возможности

  • Плагин pytest-warnings был интегрирован в ядро, и теперь pytest автоматически перехватывает и отображает предупреждения в конце сеанса тестирования.

    Предупреждение

    Эта возможность может нарушить работу тестовых наборов, которые сами применяют и обрабатывают предупреждения, и может быть отключена в вашем pytest.ini:

    [pytest]
    addopts = -p no:warnings
    

    Более подробную информацию см. в warnings documentation page.

    Спасибо @nicoddemus за PR.

  • Добавлена опция junit_suite_name ini для указания имени корня <testsuite> для XML-отчетов JUnit (issue #533).

  • Добавлена опция ini doctest_encoding для указания кодировки, которую следует использовать для файлов doctest. Спасибо @wheerd за PR (pull request #2101).

  • pytest.warns теперь проверяются отношения подклассов, а не равенство классов. Спасибо @lesteve за PR (pull request #2166)

  • pytest.raises теперь утверждает, что сообщение об ошибке соответствует тексту или regex с аргументом ключевого слова match. Спасибо @Kriechi за PR.

  • pytest.param можно использовать для объявления наборов тестовых параметров с метками и идентификаторами тестов. Спасибо @RonnyPfannschmidt за PR.

Изменения

  • удалить все внутренние использования хуков pytest_namespace, это необходимо для подготовки к удалению preloadconfig в pytest 4.0 Спасибо @RonnyPfannschmidt за PR.

  • pytest теперь предупреждает, когда в параметризованном тесте возникает callable ids. Спасибо @fogo за PR.

  • Теперь можно не собирать тестовые классы, установив атрибут __test__ в False в теле класса (issue #2007). Спасибо @syre за сообщение и @lwm за PR.

  • Измените junitxml.py для создания отчетов, соответствующих схеме Junitxml. Если один и тот же тест завершается неудачей при вызове, а затем ошибкой при разрушении, мы разбиваем элемент testcase на два, один из которых содержит ошибку, а другой - неудачу. (issue #2228) Спасибо @kkoukiou за PR.

  • Отчеты о тестировании с атрибутом url теперь будут правильно записывать это в junitxml. Спасибо @fushi за PR (pull request #1874).

  • Удалите общие элементы из вывода сравнения диктов при verbosity=1. Также обновите сообщение об усечении, чтобы было понятнее, что pytest усекает все сообщения об утверждениях, если verbosity < 2 (issue #1512). Спасибо @mattduck за PR

  • --pdbcls больше не подразумевает --pdb. Это делает возможным использование addopts=--pdbcls=module.SomeClass на pytest.ini. Спасибо @davidszotten за PR (pull request #1952).

  • исправить issue #2013: превратить RecordedWarning в namedtuple, чтобы придать ему понятный repr и в то же время предотвратить необоснованную модификацию.

  • исправление issue #2208: обеспечить ограничение итераций для _pytest.compat.get_real_func. Спасибо @RonnyPfannschmidt за отчет и PR.

  • Теперь хуки проверяются после завершения сбора, а не сразу после загрузки установленных плагинов. Это упрощает написание хуков для плагинов, которые будут загружены во время сбора, например, используя специальную переменную pytest_plugins (issue #1821). Спасибо @nicoddemus за PR.

  • Измените хук pytest_make_parametrize_id(), чтобы он принимал argname в качестве дополнительного параметра. Спасибо @unsignedint за PR.

  • Добавьте venv к настройке по умолчанию norecursedirs. Спасибо @The-Compiler за PR.

  • PluginManager.import_plugin теперь принимает юникодные имена плагинов в Python 2. Спасибо @reutsharabani за PR.

  • исправить issue #2308: При использовании --lf и --ff выполняются только последние неудачные тесты. Спасибо @ojii за PR.

  • Замените номера версий на уровне миноров/патчей в документации заполнителями. Это значительно снижает шум от изменений, поскольку разные авторы перегенерируют документацию на разных платформах. Спасибо @RonnyPfannschmidt за PR.

  • исправление issue #2391: учитывать pytest_plugins для всех подключаемых модулей Спасибо @RonnyPfannschmidt за PR.

Исправления ошибок

  • Исправьте AttributeError на sys.stdout.buffer / sys.stderr.buffer при использовании приспособления capsys в python 3. (issue #1407). Спасибо @asottile.

  • Измените класс capture.py DontReadFromInput, чтобы он выбрасывал io.UnsupportedOperation ошибки, а не ValueErrors в методе fileno (issue #2276). Спасибо @metasyn и @vlad-dragos за PR.

  • Исправьте форматирование исключений при импорте модулей, когда сообщение об исключении содержит неасксичные символы (issue #2336). Спасибо @fabioz за сообщение и @nicoddemus за PR.

  • Добавлена документация, связанная с проблемой (issue #1937) Спасибо @skylarjhdownes за PR.

  • Разрешить собирать файлы с любым расширением как модули Python (issue #2369). Спасибо @Kodiologist за PR.

  • Показывать корректное сообщение об ошибке при сборе функции «parametrize» с неправильными args (issue #2383). Спасибо @The-Compiler за сообщение и @robin0371 за PR.

3.0.7 (2017-03-14)

  • Исправление проблемы с нарушением перезаписи утверждений из-за того, что модули молча отбрасывали другие модули при неудачном импорте В частности, исправлен импорт модуля anydbm. (issue #2248). Спасибо @pfhayes за PR.

  • junitxml: Исправление проблемного случая, когда тег system-out встречался дважды на элемент testcase в XML-отчете. Спасибо @kkoukiou за PR.

  • Исправлена регрессия, pytest теперь корректно пропускает unittest, если запущен с --pdb (issue #2137). Спасибо @gst за сообщение и @mbyt за PR.

  • Игнорировать исключения, возникающие из дескрипторов (например, свойств) во время сбора тестов Python (issue #2234). Благодаря @bluetech.

  • --override-ini теперь правильно переопределяет некоторые фундаментальные опции, такие как python_files (issue #2238). Спасибо @sirex за отчет и @nicoddemus за PR.

  • Замените использование raise StopIteration в коде простыми returns для завершения генераторов, в соответствии с PEP 479 (issue #2160). Спасибо @nicoddemus за PR.

  • Исправление внутренних ошибок, когда внутри теста возникает непечатаемая ошибка AssertionError. Спасибо @omerhadari за PR.

  • Плагин Skipping теперь работает и с тестовыми элементами, сгенерированными пользовательскими коллекторами (issue #2231). Спасибо @vidartf.

  • Исправьте пробелы в выводе консоли, если не представлен файл .ini (issue #2281). Спасибо @fbjorn за PR.

  • Маркеры без условий xfail больше не зависят от того, является ли базовый элемент теста экземпляром PyobjMixin, и поэтому могут применяться к тестам, не собираемым встроенным сборщиком тестов python. Спасибо @barneygale за PR.

3.0.6 (2017-01-22)

  • pytest больше не генерирует PendingDeprecationWarning из своих собственных операций, что было введено по ошибке в версии 3.0.5 (issue #2118). Спасибо @nicoddemus за сообщение и @RonnyPfannschmidt за PR.

  • pytest больше не распознает функции coroutine как тесты yield (issue #2129). Спасибо @malinoff за PR.

  • Плагины, загруженные переменной окружения PYTEST_PLUGINS, теперь автоматически учитываются при переписывании утверждений (issue #2185). Спасибо @nicoddemus за PR.

  • Улучшено сообщение об ошибке при неудаче pytest.warns (issue #2150). В сообщение об ошибке добавляется тип(ы) ожидаемых предупреждений и список пойманных предупреждений. Спасибо @lesteve за PR.

  • Исправьте внутренний плагин pytester для корректной работы с последними версиями zope.interface (issue #1989). Спасибо @nicoddemus за PR.

  • Утверждения утверждений плагина pytester снова выигрывают от перезаписи утверждений (issue #1920). Спасибо @RonnyPfannschmidt за сообщение и @nicoddemus за PR.

  • Указание тестов с двоеточиями, например test_foo.py::test_bar, для тестов в подкаталогах с ini-файлами конфигурации теперь использует правильный ini-файл (issue #2148). Спасибо @pelme.

  • Отказывать testdir.runpytest().assert_outcomes() явно, если вывод терминала pytest, на который он полагается, отсутствует. Спасибо @eli-b за PR.

3.0.5 (2016-12-05)

  • Добавьте предупреждение при неправильной передаче option=value в -o/--override-ini (issue #2105). Также улучшена справочная документация. Спасибо @mbukatov за сообщение и @lwm за PR.

  • Теперь --confcutdir и --junit-xml правильно проверяются, если они являются каталогами и именами файлов, соответственно (issue #2089 и issue #2078). Спасибо @lwm за PR.

  • Добавить в сообщение об ошибке подсказку о возможном отсутствии __init__.py (issue #478). Спасибо @DuncanBetts.

  • Более точно опишите, когда происходит финализация приспособления в документации (issue #687). Спасибо @DuncanBetts.

  • Предоставьте :ref: цели для recwarn.rst, чтобы мы могли использовать межсфинксовые ссылки. Спасибо @dupuy за отчет и @lwm за PR.

  • В Python 2 в строковом представлении +- (например pytest.approx) используется простая строка "4 +- 4.0e-06" ASCII, поскольку внутренняя обработка этого в различных контекстах и представлениях в pytest является хрупкой, что может привести к ошибкам, таким как issue #2111. В Python 3 представление по-прежнему использует ± (например, 4 ± 4.0e-06). Спасибо @kerrick-lyft за сообщение и @nicoddemus за PR.

  • Использование item.Function, item.Module и т.д. теперь выдает предупреждения об устаревании, предпочитайте pytest.Function, pytest.Module и т.д. вместо них (issue #2034). Спасибо @nmundar за PR.

  • Исправьте сообщение об ошибке при использовании approx с комплексными числами (issue #2082). Спасибо @adler-j за отчет и @nicoddemus за PR.

  • Исправлены предупреждения о ложных срабатываниях от assertion rewrite hook для модулей, импортированных более одного раза механизмом pytest_plugins. Спасибо @nicoddemus за PR.

  • Удалите внутренний кэш, из-за которого хуки из conftest.py файлов в подкаталогах могли вызываться в других каталогах неправильно (issue #2016). Спасибо @d-b-w за сообщение и @nicoddemus за PR.

  • Удалите внутренний код, предназначенный для поддержки более ранних версий Python 3, который создавал побочный эффект оставления None в sys.modules, когда выражения оценивались pytest (например, передача условия в виде строки в pytest.mark.skipif)(issue #2103). Спасибо @jaraco за отчет и @nicoddemus за PR.

  • Изящно справляться с файлом .pyc без соответствующего файла .py (issue #2038). Спасибо @nedbat.

3.0.4 (2016-11-09)

  • Ошибки импорта при сборе тестовых модулей теперь отображают полный трассировочный откат (issue #1976). Спасибо @cwitty за отчет и @nicoddemus за PR.

  • Исправьте непонятное сообщение справки командной строки для пользовательских опций с двумя или более свойствами metavar (issue #2004). Спасибо @okulynyak и @davehunt за отчет и @nicoddemus за PR.

  • При загрузке плагинов ошибки импорта, содержащие неаскриптивные сообщения, теперь правильно обрабатываются в Python 2 (issue #1998). Спасибо @nicoddemus за PR.

  • Исправлена циклическая ссылка, когда pytest.raises используется в форме контекст-менеджера (issue #1965). Также в результате этого исправления sys.exc_info() остается пустым как при использовании контекст-менеджера, так и при использовании вызова функции. Ранее sys.exc_info содержал исключение, пойманное менеджером контекста, даже если произошло ожидаемое исключение. Спасибо @MSeifert04 за сообщение и PR.

  • Исправлены предупреждения о ложных срабатываниях от assertion rewrite hook для модулей, которые были переписаны, но позже были помечены явно pytest.register_assert_rewrite или неявно как плагин (issue #2005). Спасибо @RonnyPfannschmidt за сообщение и @nicoddemus за PR.

  • Сообщать о выходе разрыва при неудачном тестировании (issue #442). Спасибо @matclab за PR.

  • Исправьте сообщение об ошибке разрыва в сгенерированном xUnit XML. Спасибо @gdyuldin за PR.

  • Правильно обрабатывать исключения в задачах multiprocessing (issue #1984). Спасибо @adborden за сообщение и @nicoddemus за PR.

  • Очистка объектов unittest TestCase после завершения тестов (issue #1649). Спасибо @d-b-w за отчет и PR.

3.0.3 (2016-09-28)

  • Аргумент ids в parametrize снова принимает строки unicode в Python 2 (issue #1905). Спасибо @philpep за сообщение и @nicoddemus за PR.

  • Утверждения теперь переписываются для плагинов в режиме разработки (pip install -e) (issue #1934). Спасибо @nicoddemus за PR.

  • Исправьте ошибку импорта pkg_resources в проектах Jython (issue #1853). Спасибо @raquelalegre за PR.

  • Избавились от исключения AttributeError: 'Module' object has no attribute '_obj' в Python 3 (issue #1944). Спасибо @axil за PR.

  • Объясните плохое значение области видимости, переданное в объявления @fixture или вызов MetaFunc.parametrize().

  • Эта версия включает pluggy-0.4.0, который правильно обрабатывает VersionConflict ошибки в плагинах (issue #704). Спасибо @nicoddemus за PR.

3.0.2 (2016-09-01)

  • Улучшите сообщение об ошибке при передаче нестроковых идентификаторов в pytest.mark.parametrize (issue #1857). Спасибо @okken за отчет и @nicoddemus за PR.

  • Добавить атрибут buffer к классу stdin stub pytest.capture.DontReadFromInput Спасибо @joguSD за PR.

  • Исправьте UnicodeEncodeError, когда сравнение строк с юникодом было неудачным. (issue #1864) Спасибо @AiOO за PR.

  • pytest_plugins теперь корректно обрабатывается, если определена как строка (а не как последовательность строк), когда модули рассматриваются для перезаписи утверждений. Из-за этой ошибки переписывалось гораздо больше модулей, чем необходимо, если тестовый набор использует pytest_plugins для загрузки внутренних плагинов (issue #1888). Спасибо @jaraco за сообщение и @nicoddemus за PR (pull request #1891).

  • Не вызывайте tearDown и очистку при запуске тестов из подклассов unittest.TestCase с включенным --pdb. Это позволяет проводить надлежащую посмертную отладку для всех приложений, которые имеют значительную логику в механизме tearDown (issue #1890). Спасибо @mbyt за PR.

  • Исправьте использование устаревшего метода getfuncargvalue во внутреннем плагине doctest. Спасибо @ViviCoder за отчет (issue #1898).

3.0.1 (2016-08-23)

  • Исправление регрессии, когда importorskip используется на уровне модуля (issue #1822). Спасибо @jaraco и @The-Compiler за отчет и @nicoddemus за PR.

  • Исправьте область параметризации, когда сеансовые фиксы используются вместе с обычными параметрами в одном вызове (issue #1832). Спасибо @The-Compiler за сообщение, @Kingdread и @nicoddemus за PR.

  • Исправление внутренней ошибки при параметризации тестов или фикстур с использованием пустого аргумента ids (issue #1849). Спасибо @OPpuolitaival за отчет и @nicoddemus за PR.

  • Исправление ошибки загрузчика при запуске pytest, встроенного в zip-файл. Спасибо @mbachry за PR.

3.0.0 (2016-08-18)

Несовместимые изменения

В этом выпуске был внесен ряд несовместимых изменений, с намерением удалить давно устаревшие функции или изменить существующее поведение, чтобы сделать его менее удивительным/более полезным.

  • Режим переинтерпретации теперь удален. Доступны только простой режим и режим перезаписи, следовательно, опция --assert=reinterp больше недоступна. Это также означает, что файлы, импортированные из плагинов или conftest.py по умолчанию не будут пользоваться улучшенными утверждениями, вам следует использовать pytest.register_assert_rewrite() для явного включения перезаписи утверждений для этих файлов. Спасибо @flub за PR.

  • Следующие устаревшие параметры командной строки были удалены:

    • --genscript: больше не поддерживается;

    • --no-assert: используйте --assert=plain вместо этого;

    • --nomagic: используйте --assert=plain вместо этого;

    • --report: используйте -r вместо этого;

    Спасибо @RedBeardCode за PR (pull request #1664).

  • ImportErrors в плагинах теперь является фатальной ошибкой, а не выдает предупреждение pytest (issue #1479). Спасибо @The-Compiler за PR.

  • Удален код поддержки версий Python 3 < 3.3 (pull request #1627).

  • Удалены все точки входа py.test-X*. Версионные, суффиксные точки входа никогда не документировались и остались от эпохи до появления virtualenv. Эти точки входа также создавали неработающие точки входа в колёсах, поэтому их удаление также устраняет источник путаницы для пользователей (issue #1632). Спасибо @obestwalter за PR.

  • pytest.skip() теперь вызывает ошибку при использовании для украшения тестовой функции, в отличие от первоначального предназначения (императивный пропуск теста внутри тестовой функции). Ранее такое использование приводило к пропуску всего модуля (issue #607). Спасибо @omarkohl за полный PR (pull request #1519).

  • Завершать тесты при возникновении ошибки коллекции. Опрос показал, что большинство пользователей все равно нажмут CTRL-C, как только увидят ошибку коллекции, поэтому pytest мог бы сделать такое поведение по умолчанию (issue #1421). Опция --continue-on-collection-errors была добавлена для восстановления прежнего поведения. Спасибо @olegpidsadnyi и @omarkohl за полный PR (pull request #1628).

  • Переименовали модуль pytest pdb (плагин) в debugging, чтобы избежать конфликтов со встроенным модулем pdb.

  • Выдача полезного сообщения об ошибке при запросе параметризованного фикстура во время выполнения, например, с помощью request.getfixturevalue. Ранее эти параметры просто не определялись, поэтому приспособление, оформленное как @pytest.fixture(params=[0, 1, 2]), выполнялось только один раз (pull request #460). Спасибо @nikratio за сообщение об ошибке, @RedBeardCode и @tomviner за PR.

  • Класс _pytest.monkeypatch.monkeypatch был переименован в _pytest.monkeypatch.MonkeyPatch, чтобы он не конфликтовал с фикстурой monkeypatch.

  • Теперь --exitfirst / -x может быть отменено следующим --maxfail=N и является просто синонимом --maxfail=1.

Новые возможности

  • Поддержка атрибута nose-style __test__ для методов классов, включая классы в стиле unittest. Если он установлен в False, тест не будет собран.

  • Новое приспособление doctest_namespace для инъекции имен в пространство имен, в котором выполняются доктесты. Спасибо @milliams за полный PR (pull request #1428).

  • Доступна новая опция --doctest-report для изменения формата вывода дифов при запуске (неудачных) доктестов (реализует issue #1749). Спасибо @hartym за PR.

  • Новый аргумент name в декораторе pytest.fixture, который позволяет задать пользовательское имя для фикстуры (для решения проблемы funcarg-shadowing-fixture). Спасибо @novas0x2a за полный PR (pull request #1444).

  • Новая функция approx() для простого сравнения чисел с плавающей точкой в тестах. Спасибо @kalekundert за полный PR (pull request #1441).

  • Возможность добавления глобальных свойств в конечный выходной файл xunit путем обращения к внутреннему плагину junitxml (экспериментально). Спасибо @tareqalayan за полный PR pull request #1454).

  • Новый метод ExceptionInfo.match() для сопоставления регулярного выражения со строковым представлением исключения (issue #372). Спасибо @omarkohl за полный PR (pull request #1502).

  • __tracebackhide__ теперь также может быть установлен в вызываемый объект, который затем может решить, фильтровать ли обратную трассировку на основе переданного ему объекта ExceptionInfo. Спасибо @The-Compiler за полный PR (pull request #1526).

  • Новый хук pytest_make_parametrize_id(config, val), который может быть использован плагинами для предоставления дружественных строк для пользовательских типов. Спасибо @palaviv за PR.

  • capsys и capfd теперь имеют метод disabled() context-manager, который можно использовать для временного отключения захвата в тесте. Спасибо @nicoddemus за PR.

  • Новый флаг cli --fixtures-per-test: показывает, какие приспособления используются для каждого выбранного элемента теста. По умолчанию показывает doc-строки приспособлений. Может также показывать, где определены приспособления, если сочетается с -v. Спасибо @hackebrot за PR.

  • Ввести команду pytest в качестве рекомендуемой точки входа. Обратите внимание, что py.test по-прежнему работает и не планируется к удалению. Закрывает предложение issue #1629. Спасибо @obestwalter и @davehunt за полный PR (pull request #1633).

  • Новые флаги кли:

    • --setup-plan: выполняет обычный сбор и сообщает о потенциальной настройке и разрушении и не выполняет никаких фикстур и тестов;

    • --setup-only: выполняет обычный сбор, выполняет установку и снятие приспособлений и сообщает о них;

    • --setup-show: выполняет обычное выполнение теста и дополнительно показывает установку и демонтаж приспособлений;

    • --keep-duplicates: py.test теперь игнорирует дублирующиеся пути, указанные в командной строке. Чтобы сохранить прежнее поведение, когда один и тот же тест можно было запустить несколько раз, указав его в командной строке несколько раз, передайте аргумент --keep-duplicates (issue #1609);

    Спасибо @d6e, @kvas-it, @sallner, @ioggstream и @omarkohl за PR.

  • Новый флаг CLI --override-ini/-o: переопределяет значения из ini-файла. Например: "-o xfail_strict=True"“. Спасибо @blueyed и @fengxx за PR.

  • Новые крючки:

    • pytest_fixture_setup(fixturedef, request): выполняет настройку приспособления;

    • pytest_fixture_post_finalizer(fixturedef): вызывается после финализатора приспособления и имеет доступ к кэшу результатов приспособления.

    Спасибо @d6e, @sallner.

  • Выдавайте предупреждения для утверждений, тест которых представляет собой литерал кортежа. Такие утверждения никогда не будут неудачными, потому что кортежи всегда истинны и обычно являются ошибкой (см. issue #1562). Спасибо @kvas-it, за PR.

  • Разрешить передачу пользовательского класса отладчика (например, --pdbcls=IPython.core.debugger:Pdb). Спасибо @anntzer за PR.

Изменения

  • Плагины теперь получают преимущества от переписывания утверждений. Спасибо @sober7, @nicoddemus и @flub за PR.

  • Измените report.outcome для тестов xpassed на "passed" в нестрогом режиме и "failed" в строгом. Спасибо @hackebrot за PR (pull request #1795) и @gprasad84 за отчет (issue #1546).

  • Тесты, помеченные xfail(strict=False) (по умолчанию), теперь появляются в отчетах JUnitXML как пройденные тесты, а не пропущенные. Спасибо @hackebrot за PR (pull request #1795).

  • Выделите путь расположения файла в отчете об ошибке, чтобы его было легче копировать/вставлять. Спасибо @suzaku за PR (pull request #1778).

  • Фиксы, помеченные @pytest.fixture, теперь могут использовать утверждения yield точно так же, как и те, которые помечены декоратором @pytest.yield_fixture. Это изменение делает @pytest.yield_fixture устаревшим и делает @pytest.fixture с утверждениями yield предпочтительным способом написания разрывного кода (pull request #1461). Спасибо @csaftoiu за то, что обратили на это внимание, и @nicoddemus за PR.

  • Явно переданные идентификаторы параметров не приводятся к ascii (issue #1351). Спасибо @ceridwen за PR.

  • Теперь приспособления сортируются в сообщении об ошибке, отображаемом, когда неизвестное приспособление объявляется в тестовой функции. Спасибо @nicoddemus за PR.

  • pytest_terminal_summary хук теперь получает exitstatus тестовой сессии в качестве аргумента. Спасибо @blueyed за PR (pull request #1809).

  • Параметрические идентификаторы могут принимать None в качестве конкретного идентификатора теста, в этом случае будет использоваться автоматически сгенерированный идентификатор для этого аргумента. Спасибо @palaviv за полный PR (pull request #1468).

  • Параметр к методам установки/снятия в стиле xunit (setup_method, setup_module и т.д.) теперь является необязательным и может быть опущен. Спасибо @okken за то, что обратили на это внимание, и @nicoddemus за PR.

  • Улучшен автоматический выбор генерации id в случае дублирования id в параметризации. Спасибо @palaviv за полный PR (pull request #1474).

  • Теперь сводка предупреждений pytest отображается по умолчанию. Добавлен новый флаг --disable-pytest-warnings для явного отключения сводки предупреждений (issue #1668).

  • Сделайте ошибку ImportError во время сбора более явной, напомнив пользователю о необходимости проверить имя тестового модуля/пакета(ов) (issue #1426). Спасибо @omarkohl за полный PR (pull request #1520).

  • Добавьте build/ и dist/ в список --norecursedirs по умолчанию. Спасибо @mikofski за отчет и @tomviner за PR (issue #1544).

  • pytest.raises в форме контекстного менеджера принимает пользовательское message для обработки, когда исключение не произошло. Спасибо @palaviv за полный PR (pull request #1616).

  • conftest.py файлы теперь могут воспользоваться перезаписью утверждений; ранее это было доступно только для тестовых модулей. Спасибо @flub, @sober7 и @nicoddemus за PR (issue #1619).

  • Текстовые документы без доктестов больше не отображаются как «пропущенные». Спасибо @graingert за сообщение и предоставление полного PR (pull request #1580).

  • Убедитесь, что модуль в пакете пространства имен может быть найден, если он указан в командной строке вместе с опцией --pyargs. Спасибо @taschini за PR (pull request #1597).

  • Всегда включайте полное объяснение утверждения при перезаписи утверждений. Предыдущее поведение скрывало подвыражения, которые оказались False, полагая, что это лишняя информация. Спасибо @bagerard за сообщение (issue #1503). Спасибо @davehunt и @tomviner за PR.

  • OptionGroup.addoption() теперь проверяет, были ли имена опций уже добавлены ранее, чтобы облегчить отслеживание проблем, подобных issue #1618. Раньше вы получали исключения только позже из библиотеки argparse, не давая никаких подсказок о реальной причине двойного добавления опций.

  • Тесты на основе yield считаются устаревшими и будут удалены в pytest-4.0. Спасибо @nicoddemus за PR.

  • Секции [pytest] в файлах setup.cfg теперь должны называться [tool:pytest], чтобы избежать конфликтов с другими командами distutils (см. pull request #567). Секции [pytest] в файлах pytest.ini или tox.ini поддерживаются и не изменяются. Спасибо @nicoddemus за PR.

  • Использование префикса pytest_funcarg__ для объявления фикстур считается устаревшим и будет удалено в pytest-4.0 (pull request #1684). Спасибо @nicoddemus за PR.

  • Передача строки командной строки в pytest.main() считается устаревшей и планируется к удалению в pytest-4.0. Вместо этого рекомендуется передавать список аргументов (pull request #1723).

  • Переименуйте getfuncargvalue в getfixturevalue. getfuncargvalue все еще присутствует, но теперь считается устаревшим. Спасибо @RedBeardCode и @tomviner за PR (pull request #1626).

  • Использование типа optparse теперь вызывает предупреждения об устаревании (issue #1740).

  • Обратная совместимость optparse поддерживает float/комплексные типы (issue #457).

  • Уточнена логика определения rootdir, учитывающая только действительные пути, что устраняет ряд проблем: issue #1594, issue #1435 и issue #1471. Обновлена документация в соответствии с текущим поведением. Спасибо @blueyed, @davehunt и @matthiasha за PR.

  • Всегда включайте полное объяснение утверждения. Предыдущее поведение скрывало подвыражения, которые оказались False, полагая, что это лишняя информация. Спасибо @bagerard за сообщение (issue #1503). Спасибо @davehunt и @tomviner за PR.

  • Улучшенное сообщение в случае неиспользования параметризованной переменной (см. issue #1539). Спасибо @tramwaj29 за PR.

  • Обновлены подстрочники с более единым стилем.

  • Добавьте запись на stderr для pytest.exit(msg) во время запуска. Ранее сообщение никогда не показывалось. Спасибо @BeyondEvil за сообщение issue #1210. Спасибо @jgsonesen и @tomviner за PR.

  • Больше не отображается неправильная причина отмены выбора теста (issue #1372). Спасибо @ronnypfannschmidt за PR.

  • Опция командной строки --resultlog была устаревшей: она мало используется, и есть более современные и лучшие альтернативы (см. issue #830). Спасибо @nicoddemus за PR.

  • Улучшение сообщения об ошибках поиска приспособлений: добавьте „E“ в первую строку и „>“ в остальные. Исправления issue #717. Спасибо @blueyed за сообщение и PR, @eolo999 за первоначальный PR и @tomviner за руководство во время спринта EuroPython2016.

Устранение ошибок

  • Parametrize теперь правильно обрабатывает дублирующиеся идентификаторы тестов.

  • Исправление внутренней ошибки, когда аргумент method отсутствует для teardown_method() (issue #1605).

  • Исправьте визуализацию исключений в случае, если текущий рабочий каталог (CWD) удаляется во время тестирования (issue #1235). Спасибо @bukzor за сообщение. PR от @marscher.

  • Улучшите вывод теста для логического выражения со скобками (issue #925). Спасибо @DRMacIver за сообщение и @RedBeardCode за PR.

  • Создавать корректный diff для строк, заканчивающихся новыми строками (issue #1553). Спасибо @Vogtinator за сообщение и @RedBeardCode и @tomviner за PR.

  • ConftestImportFailure теперь показывает обратную трассировку, облегчая выявление ошибок в conftest.py файлах (pull request #1516). Спасибо @txomon за PR.

  • Текстовые документы без доктестов больше не отображаются как «пропущенные». Спасибо @graingert за сообщение и предоставление полного PR (pull request #1580).

  • Исправлена коллекция классов с пользовательским методом __new__. Исправляет issue #1579. Спасибо @Stranger6667 за PR.

  • Исправлено переопределение области видимости внутри metafunc.parametrize (issue #634). Спасибо @Stranger6667 за PR.

  • Исправлен подсчет общего количества тестов в xml-выводе junit (pull request #1798). Спасибо @cboelsen за PR.

  • Исправлена ошибка off-by-one со строками из request.node.warn. Спасибо @blueyed за PR.

2.9.2 (2016-05-31)

Устранение ошибок

  • исправление issue #510: пропускать тесты, в которых одно параметризуемое измерение было пустым спасибо Alex Stapleton за отчет и @RonnyPfannschmidt за PR

  • Исправление Xfail не работает с аргументом ключевого слова condition. Спасибо @astraw38 за сообщение о проблеме (issue #1496) и @tomviner за PR (pull request #1524).

  • Исправление проблемы с путями в win32 при помещении пользовательского файла конфигурации с абсолютным путем в pytest.main("-c your_absolute_path").

  • Исправьте определение максимальной глубины рекурсии, когда класс поднятой ошибки не знает об уникоде/кодированных байтах. Спасибо @prusse-martin за PR (pull request #1506).

  • Исправьте метку pytest.mark.skip при использовании в строгом режиме. Спасибо @pquentin за PR и @RonnyPfannschmidt за то, что показали, как исправить ошибку.

  • Незначительные улучшения и исправления в документации. Спасибо @omarkohl за PR.

  • Исправьте --fixtures для отображения всех определений приспособлений, а не только одного на имя приспособления. Спасибо @hackebrot за PR.

2.9.1 (2016-03-17)

Устранение ошибок

  • Улучшить сообщение об ошибке, когда плагин не загружается. Спасибо @nicoddemus за PR.

  • Исправление (issue #1178): pytest.fail с неасксиальными символами вызывает внутреннюю ошибку pytest. Спасибо @nicoddemus за PR.

  • Исправление (issue #469): junit неправильно анализирует report.nodeid, когда идентификаторы params содержат ::. Спасибо @tomviner за PR (pull request #1431).

  • Исправление (issue #578): SyntaxErrors, содержащие неascii строки в точке отказа, генерировали внутреннюю ошибку py.test. Спасибо @asottile за сообщение и @nicoddemus за PR.

  • Исправление (issue #1437): При передаче байтового regex-шаблона для параметризации попытка декодировать его как utf-8, игнорируя ошибки.

  • Исправление (issue #649): параметризованные тестовые узлы не могут быть указаны для запуска в командной строке.

  • Исправление (issue #138): улучшение отчетности для цепных исключений в python 3.3+

2.9.0 (2016-02-29)

Новые возможности

  • Новая метка pytest.mark.skip, которая безоговорочно пропускает помеченные тесты. Спасибо @MichaelAquilina за полный PR (pull request #1040).

  • --doctest-glob теперь можно передавать несколько раз в командной строке. Спасибо @jab и @nicoddemus за PR.

  • Новые опции отчетов -rp и -rP предоставляют сводный и полный вывод пройденных тестов, соответственно. Спасибо @codewarrior0 за PR.

  • pytest.mark.xfail теперь имеет опцию strict, которая заставляет XPASS тесты не проходить набор тестов (по умолчанию False). Также есть опция xfail_strict ini, которую можно использовать для настройки по проекту. Спасибо @rabbbit за запрос и @nicoddemus за PR (pull request #1355).

  • Parser.addini теперь поддерживает опции типа bool. Спасибо @nicoddemus за PR.

  • Новая опция doctest ALLOW_BYTES. Она удаляет префиксы b из байтовых строк в выводе doctest (аналогично ALLOW_UNICODE). Спасибо @jaraco за запрос и @nicoddemus за PR (pull request #1287).

  • Дайте подсказку на KeyboardInterrupt для использования опции --fulltrace для показа ошибок. Исправляет issue #1366. Спасибо @hpk42 за отчет и @RonnyPfannschmidt за PR.

  • Перехват исключений IndexError при получении местоположения источника исключения. Исправление внутренней ошибки pytest для динамически сгенерированного кода (фикстуры и тесты), в котором исходные строки являются фальшивыми по намерению.

Изменения

  • Важно: py.code был объединен в репозиторий pytest как pytest._code. Это решение было принято потому, что py.code имел очень мало применений за пределами pytest и тот факт, что он находился в другом репозитории, затруднял своевременное исправление ошибок в его коде. Команда надеется, что с помощью этого изменения она сможет лучше рефакторить и улучшить этот код. Это изменение не должно повлиять на пользователей, но полезно сообщить пользователям, если они столкнутся с каким-либо странным поведением.

    Помните, что код для pytest._code является частным и экспериментальным, поэтому вы определенно не должны импортировать его явно!

    Обратите внимание, что оригинал py.code все еще доступен в pylib.

  • pytest_enter_pdb теперь опционально получает объект pytest config. Спасибо @nicoddemus за PR.

  • Удален код и документация для Python 2.5 или более низких версий, включая удаление устаревшего модуля _pytest.assertion.oldinterpret. Спасибо @nicoddemus за PR (pull request #1226).

  • Теперь сравнения всегда отображаются полностью, если в окружении найдено CI или BUILD_NUMBER, даже если -vv не используется. Спасибо @The-Compiler за PR.

  • --lf и --ff теперь поддерживают длинные имена: --last-failed и --failed-first соответственно. Спасибо @MichaelAquilina за PR.

  • Добавлены ожидаемые исключения в сообщение об ошибке pytest.raises.

  • Collection отображает прогресс («собирает X элементов») только в терминале. Это позволяет избежать загромождения вывода при использовании --color=yes для получения цветов в системах интеграции CI (issue #1397).

Устранение ошибок

  • Опции -s и -c теперь должны работать под xdist; Config.fromdictargs теперь гораздо точнее представляет свои входные данные. Спасибо @bukzor за полный PR (issue #680).

  • Исправление (issue #1290): поддержка оператора @ в Python 3.5 при переписывании утверждений. Спасибо @Shinkenjoe за отчет с тестовым примером и @tomviner за PR.

  • Исправьте форматирование utf-8 пояснительных сообщений (issue #1379). Спасибо @biern за PR.

  • Исправьте traceback style docs для описания всех доступных опций (auto/long/short/line/native/no), при этом auto будет использоваться по умолчанию с версии 2.6. Спасибо @hackebrot за PR.

  • Исправление (issue #1422): junit record_xml_property не позволяет использовать несколько записей с одинаковым именем.

2.8.7 (2016-01-24)

  • исправление #1338: использовать предсказуемое разрешение объектов для monkeypatch

2.8.6 (2016-01-21)

  • исправление #1259: разрешить двойные nodeids в junitxml, это была регрессия, приводящая к сбоям в комбинациях плагинов, таких как pytest-pep8 + pytest-flakes

  • Обходное решение для исключения, возникающего в pyreadline при использовании --pdb при включенном стандартном захвате ввода-вывода. Спасибо Эрику М. Брэю за PR.

  • исправление #900: Улучшено сообщение об ошибке в случае, если цель вызова monkeypatch вызывает ImportError.

  • исправление #1292: вызовы monkeypatch (setattr, setenv и т.д.) теперь O(1). Спасибо David R. MacIver за сообщение и Bruno Oliveira за PR.

  • исправление #1223: захваченные stdout и stderr теперь правильно отображаются перед входом в pdb, когда используется --pdb, а не отбрасываются. Спасибо Кэлу Лимингу за PR.

  • исправление #1305: предупреждения pytest, выдаваемые во время pytest_terminal_summary, теперь отображаются правильно. Спасибо Ionel Maries Cristian за сообщение и Bruno Oliveira за PR.

  • исправление #628: исправлена внутренняя ошибка UnicodeDecodeError, когда доктесты содержат юникод. Спасибо Jason R. Coombs за сообщение и Bruno Oliveira за PR.

  • исправление #1334: Добавить захваченный stdout в jUnit XML отчет об ошибке настройки. Спасибо Георгию Дюльдину за PR.

2.8.5 (2015-12-11)

  • исправление #1243: исправлена проблема, когда атрибуты класса, внедренные во время сбора, могли нарушить pytest. PR Алексея Козленка, спасибо Ronny Pfannschmidt и Bruno Oliveira за рецензию и помощь.

  • исправление #1074: предварительное вычисление кусков junitxml вместо хранения всего дерева в объектах Спасибо Bruno Oliveira за отчет и Ronny Pfannschmidt за PR

  • исправление #1238: исправление pytest.deprecated_call() при получении нескольких аргументов (Регрессия внесена в 2.8.4). Спасибо Alex Gaynor за сообщение и Bruno Oliveira за PR.

2.8.4 (2015-12-06)

  • исправление #1190: deprecated_call() теперь работает, когда устаревшая функция уже была вызвана другим тестом в том же модуле. Спасибо Михаилу Черных за сообщение и Бруно Оливейре за PR.

  • исправление #1198: Опция --pastebin теперь работает на Python 3. Спасибо Mehdy Khoshnoody за PR.

  • исправление #1219: --pastebin теперь работает корректно, когда захваченный вывод содержит неасксичные символы. Спасибо Бруно Оливейра за PR.

  • исправление #1204: еще одна ошибка при сборе с неприятным __getattr__(). Спасибо Флориану Брухину за PR.

  • исправить сводку, выводимую при отсутствии тестов. Спасибо Флориану Брухину за PR.

  • исправление #1185 - убедитесь, что MANIFEST.in точно соответствует тому, что должно попасть в sdist

  • ряд модернизаций документации в соответствии с передовым опытом. Спасибо Бруно Оливейра за PR.

2.8.3 (2015-11-18)

  • исправление #1169: добавьте атрибут __name__ к тесткейсам в TestCaseFunction для поддержки декоратора @unittest.skip для функций и методов. Спасибо Ли Каментски за PR.

  • исправление #1035: сбор тестов, если у obj уровня тестового модуля есть __getattr__(). Спасибо Suor за сообщение и Bruno Oliveira / Tom Viner за PR.

  • исправление #331: не собирайте тесты, если об их неудаче нельзя корректно сообщить, например, они являются вызываемым экземпляром класса.

  • исправление #1133: исправлена внутренняя ошибка при фильтрации трассировок, когда одна запись принадлежит файлу, который больше не доступен. Спасибо Бруно Оливейра за PR.

  • Улучшение сделано для выделения красным цветом имен неудачных тестов, чтобы они выделялись в выводе. Спасибо Габриэлю Рейсу за PR.

  • добавить в документацию больше разговоров

  • расширить документацию по опции –ignore cli

  • используйте pytest-runner для интеграции setuptools

  • мелкие исправления для взаимодействия с защитой целостности системы OS X El Capitan (спасибо Флориану)

2.8.2 (2015-10-07)

  • исправление #1085: правильная обработка ошибок кодировки при передаче закодированных байтовых строк в pytest.parametrize в Python 2. Спасибо Themanwithoutaplan за сообщение и Бруно Оливейра за PR.

  • исправление #1087: обработка SystemError при передаче пустых байтовых строк в pytest.parametrize в Python 3. Спасибо Paul Kehrer за сообщение и Bruno Oliveira за PR.

  • исправление #995: исправлена внутренняя ошибка при фильтрации трассировок, в которых одна запись была сгенерирована оператором exec(). Спасибо Daniel Hahler, Ashley C Straw, Philippe Gauthier и Pavel Savchenko за участие и Bruno Oliveira за PR.

  • исправление #1100 и #1057: ошибки при использовании модулей autouse fixtures и doctest. Спасибо Sergey B Kirpichev и Vital Kudzelka за участие и Bruno Oliveira за PR.

2.8.1 (2015-09-29)

  • исправление #1034: Добавить недостающий nodeid при вызове pytest_logwarning в addhook. Спасибо Саймону Гомизелю за PR.

  • „deprecated_call“ теперь удовлетворяется только при наличии DeprecationWarning или PendingDeprecationWarning. До версии 2.8.0 он принимал любое предупреждение, а в версии 2.8.0 он стал принимать только DeprecationWarning (но не PendingDeprecationWarning). Спасибо Alex Gaynor за проблему и Eric Hunsberger за PR.

  • исправление проблемы #1073: избегайте вызова __getattr__ на потенциальных объектах плагина. Это исправляет несовместимость с pytest-django. Спасибо Andreas Pelme, Bruno Oliveira и Ronny Pfannschmidt за участие и Holger Krekel за исправление.

  • Исправление проблемы #704: более изящно обрабатывать конфликт версий при загрузке плагина. Спасибо Бруно Оливейра за PR.

  • Исправление проблемы #1064: регрессия «»–junitxml» при использовании с плагином «pytest-xdist», в результате чего тестовые отчеты назначались на неправильные тесты. Спасибо Daniel Grunwald за сообщение и Bruno Oliveira за PR.

  • (экспериментально) адаптировали версионность в стиле SEMVER и изменили значение ветки master в git-репо: В ветке «master» теперь хранятся исправления ошибок и изменения, предназначенные для микро-релизов. Ветка «features» будет выпускаться только с минорными или крупными релизами pytest.

  • Исправьте проблему #766, удалив из документации ссылки на distutils. Спасибо Расселу Уиндеру.

  • Исправление проблемы #1030: теперь байт-строки экранируются для получения идентификаторов узлов элементов, чтобы сделать их всегда сериализуемыми. Спасибо Andy Freeland за отчет и Bruno Oliveira за PR.

  • Python 2: если параметризованные значения unicode преобразуются в ascii, их представление ascii используется для идентификатора узла.

  • Исправление проблемы #411: Добавьте метод __eq__ в пример сравнения утверждений. Спасибо Бену Веббу.

  • Исправление проблемы #653: deprecated_call может быть использован в качестве менеджера контекста.

  • исправление проблемы 877: правильно обрабатывать пояснения утверждений с неасксиальными repr Спасибо Матье Агопьяну за сообщение и Ронни Пфанншмидту за PR.

  • исправление проблемы 1029: ошибки преобразования при записи значений кэша в pytest-warnings

2.8.0 (2015-09-18)

  • новые опции --lf и -ff для запуска только последних неудачных тестов или «сначала неудачные тесты» из последнего запуска. Эта функциональность обеспечивается за счет переноса ранее внешнего плагина pytest-cache в ядро pytest. ИСКЛЮЧЕНИЕ: если вы использовали функциональность pytest-cache для сохранения данных между запусками тестов, имейте в виду, что мы больше не сериализуем наборы. Спасибо Ronny Pfannschmidt за большую часть работы по объединению.

  • Опция «-r» теперь принимает «a» для включения всех возможных отчетов, аналогично передаче «fEsxXw» явным образом (issue960). Спасибо Abhijeet Kasurde за PR.

  • избежать предупреждений об устаревании python3.5, внедрив помощники проверки для конкретной версии, спасибо Michael Droettboom.

  • исправление проблемы562: @nose.tools.istest теперь полностью соблюдается.

  • исправить issue934: когда сравнение строк не удается и разница слишком велика для отображения без передачи -vv, все равно показывается несколько строк разницы. Спасибо Florian Bruhin за сообщение и Bruno Oliveira за PR.

  • issue736: Исправление ошибки, при которой параметры приспособления отбрасывались при объединении с маркерами параметризации. Спасибо Маркусу Унтервадицеру за PR.

  • исправить issue710: ввести опцию ALLOW_UNICODE doctest: если опция включена, префикс u удаляется из юникодовых строк в ожидаемом выводе doctest. Это позволяет доктестам, использующим юникод, выполняться в Python 2 и 3 без изменений. Спасибо Jason R. Coombs за сообщение и Bruno Oliveira за PR.

  • parametrize теперь также генерирует значимые идентификаторы тестов для объектов enum, regex и классов (в отличие от экземпляров классов). Спасибо Флориану Брухину за PR.

  • Добавьте „warns“, чтобы утверждать, что предупреждения отбрасываются (как и „raises“). Спасибо Эрику Хансбергеру за PR.

  • Исправьте проблему683: Не применять уже примененную метку. Спасибо ojake за PR.

  • Лучше справляться с ошибками перехвата, чтобы меньше исключений терялось в /dev/null. Спасибо Дэвиду Сзоттену за PR.

  • исправление issue730: устаревание и предупреждение об опции –genscript. Спасибо Ronny Pfannschmidt за сообщение и Christian Pommranz за PR.

  • исправление проблемы751: ошибка множественной параметризации с идентификаторами, если параметризуется класс с двумя или более тестовыми методами. Спасибо Сергею Чипиге за сообщение и Яну Беднарику за PR.

  • исправить issue82: по умолчанию избегать загрузки файлов conftest из файлов setup.cfg/pytest.ini/tox.ini и выше (–confcutdir все еще может быть установлен, чтобы отменить это). Спасибо Бруно Оливейра за PR.

  • исправление проблемы768: docstrings, найденные в модулях python, не устанавливали фикстуры сессии. Спасибо Jason R. Coombs за сообщение и Bruno Oliveira за PR.

  • добавлено tmpdir_factory, приспособление, скопированное на сессию, которое можно использовать для создания каталогов под базовым временным каталогом. Ранее этот объект устанавливался как атрибут _tmpdirhandler объекта config, но теперь он является частью официального API и использование config._tmpdirhandler устарело. Спасибо Бруно Оливейра за PR.

  • исправление issue808: внутренний хук перезаписи утверждений pytest теперь реализует необязательный API PEP 302 get_data, чтобы тесты могли обращаться к файлам данных рядом с ними. Спасибо xmo-odoo за запрос и пример и Бруно Оливейре за PR.

  • rootdir и inifile теперь отображаются при ошибках использования, чтобы помочь пользователям диагностировать такие проблемы, как неожиданные ini-файлы, которые добавляют неизвестные опции, подхватываемые pytest. Спасибо Павлу Савченко за привлечение внимания к проблеме в #821 и Бруно Оливейре за PR.

  • Сводная панель теперь окрашивается в желтый цвет для предупреждающих ситуаций, таких как: все тесты либо пропущены, либо xpass/xfail, либо тесты вообще не выполнялись (это частичное исправление проблемы 500).

  • исправление issue812: pytest теперь завершает работу с кодом состояния 5 в ситуациях, когда тесты не были запущены вообще, например, если каталог, указанный в командной строке, не содержит тестов или в результате того, что опция командной строки отфильтровывает все тесты (например, -k). Спасибо Eric Siegerman (issue812) и Bruno Oliveira за PR.

  • Сводная панель теперь окрашивается в желтый цвет для предупреждающих ситуаций, таких как: все тесты либо пропущены, либо xpass/xfailed, либо тесты вообще не выполнялись (связано с проблемой 500). Спасибо Эрику Зигерману.

  • Новая опция ini testpaths: список каталогов для поиска тестов при выполнении pytest из корневого каталога. Это может быть использовано для ускорения сбора тестов, когда в проекте есть хорошо заданные каталоги для тестов, что обычно более практично, чем настройка norecursedirs для всех каталогов, не содержащих тесты. Спасибо Adrian за идею (#694) и Bruno Oliveira за PR.

  • исправление issue713: JUnit XML-отчеты для неудачных доктестов. Спасибо Punyashloka Biswal.

  • исправление issue970: внутренние предупреждения pytest теперь отображаются в терминале как «pytest-warnings» вместо «warnings», так что пользователям ясно, что эти предупреждения от pytest, а не от встроенного модуля «warnings». Спасибо Бруно Оливейра.

  • Включите установку и разрушение в длительность тестов junitxml. Спасибо Янне Ванхала.

  • исправление проблемы735: сбои утверждений в отладочных версиях Python 3.4+

  • новая опция --import-mode, позволяющая изменить поведение импорта тестовых модулей на добавление к sys.path вместо префиксации. Это позволяет запускать тестовые модули против установленных версий пакета, даже если тестируемый пакет имеет тот же корень импорта. В данном примере:

    testing/__init__.py
    testing/test_pkg_under_test.py
    pkg_under_test/
    

    тесты будут работать с установленной версией pkg_under_test при использовании --import-mode=append, тогда как по умолчанию они всегда берут локальную версию. Спасибо Holger Krekel.

  • pytester: добавьте метод TmpTestdir.delete_loaded_modules() и вызывайте его из inline_run(), чтобы разрешить перезагрузку временных модулей. Спасибо Eduardo Schettino.

  • внутренне рефакторить API и код pluginmanager так, чтобы было четкое различие между pytest-agnostic довольно простым pluginmanager и PytestPluginManager, который добавляет много поведения, среди которого обработка локальных файлов conftest. С точки зрения документированных методов это изменение обратно совместимо, но оно все еще может сломать сторонние плагины, которые полагаются на детали, например, API pluginmanager.add_shutdown(). Спасибо Хольгеру Крекелю.

  • pluginmanagement: ввести декораторы pytest.hookimpl и pytest.hookspec для задания параметров, специфичных для impl/spec. Это заменяет предыдущее, ныне устаревшее использование pytest.mark, которое предназначено только для маркеров тестовых функций.

  • написать/доработать документацию по «написанию плагинов», которая теперь имеет свою собственную страницу и отделена от страницы «использование/установка плагинов».

  • исправление issue732: корректное снятие регистрации плагинов с любых вызывающих хук сайтов, позволяющее иметь временные плагины во время выполнения теста.

  • deprecate и предупреждать об аргументе __multicall__ в реализации хуков. Вместо этого используйте механизм hookwrapper, уже представленный в pytest-2.7.

  • значительно ускорить собственный набор тестов pytest, используя по умолчанию тесты в процессе (testrun может быть модифицирован с помощью –runpytest=subprocess для создания подпроцессов во многих местах). Основными API для запуска pytest в тесте являются «runpytest()» или «runpytest_subprocess» и «runpytest_inprocess», если вам нужен определенный способ запуска теста. Во всех случаях вы получите результат RunResult, но в случае с inprocess он также будет содержать атрибут «reprec» с записанными событиями/отчетами.

  • исправьте monkeypatch.setattr(«x.y», raising=False), чтобы он действительно не выдавал ошибку, если «y» не является уже существующим атрибутом. Спасибо Флориану Брухину.

  • исправить issue741: сделать вывод результатов работы из testdir.run копируемым/вставляемым Спасибо Бруно Оливейра.

  • добавить новый аргумент --noconftest, который игнорирует все файлы conftest.py.

  • добавить атрибуты file и line в вывод JUnit-XML.

  • исправление issue890: изменено расширение всех файлов документации с txt на rst. Спасибо Abhijeet за PR.

  • исправить issue714: добавить возможность применять параметр indirect=True для определенных argnames. Спасибо Elizaveta239.

  • исправление issue890: изменено расширение всех файлов документации с txt на rst. Спасибо Abhijeet за PR.

  • исправление проблемы957: «# doctest: SKIP» теперь будет регистрировать доктесты как SKIPPED, а не PASSED. Спасибо Thomas Grainger за отчет и Bruno Oliveira за PR.

  • issue951: добавьте новое приспособление record_xml_property, которое поддерживает запись дополнительной информации в xml-вывод. Спасибо Дэвиду Диасу за PR.

  • issue949: пути после обычных опций (например, -s, -v и т.д.) теперь правильно используются для обнаружения файлов rootdir и ini. Спасибо Peter Lauri за сообщение и Bruno Oliveira за PR.

2.7.3 (2015-09-15)

  • Разрешить „dev“, „rc“ или другие нецелые строки версий в importorskip. Спасибо Эрику Хансбергеру за PR.

  • исправить issue856: учитывать параметр –color во всех выводах (например, –fixtures). Спасибо Barney Gale за сообщение и Bruno Oliveira за PR.

  • исправление issue855: передача объектов str в качестве аргумента plugins в pytest.main теперь интерпретируется как имя модуля, который должен быть импортирован и зарегистрирован как плагин, вместо того, чтобы молча не иметь никакого эффекта. Спасибо xmo-odoo за сообщение и Бруно Оливейре за PR.

  • исправление issue744: исправление изменений ast.Call в Python 3.5+. Спасибо Guido van Rossum, Matthias Bussonnier, Stefan Zimmermann и Thomas Kluyver.

  • исправление проблемы 842: применение маркеров в классах больше не распространяло эти маркеры на суперклассы, которые также имеют маркеры. Спасибо xmo-odoo за сообщение и Бруно Оливейре за PR.

  • сохранять предупреждающие функции после вызова pytest.deprecated_call. Спасибо Pieter Mulder за PR.

  • исправление issue854: autouse yield_fixtures, определенные как члены класса подклассов unittest.TestCase, теперь работают как ожидалось. Спасибо xmo-odoo за сообщение и Бруно Оливейре за PR.

  • исправление issue833: –fixtures теперь показывает все фикстуры собранных тестовых файлов, а не только фикстуры, объявленные в первом из них. Спасибо Florian Bruhin за сообщение и Bruno Oliveira за PR.

  • исправление проблемы863: пропущенные тесты теперь сообщают правильную причину, когда выполняется условие пропуска/xfail при использовании нескольких маркеров. Спасибо Raphael Pierzina за сообщение и Bruno Oliveira за PR.

  • оптимизирована инициализация фикстуры tmpdir, что должно сделать тестовые сессии быстрее (особенно при использовании pytest-xdist). Единственный видимый эффект заключается в том, что теперь pytest использует подкаталог в каталоге $TEMP для всех каталогов, созданных этим приспособлением (по умолчанию $TEMP/pytest-$USER). Спасибо Бруно Оливейра за PR.

2.7.2 (2015-06-23)

  • исправление проблемы767: атрибут pytest.raises value не содержит экземпляр исключения на Python 2.6. Спасибо Eric Siegerman за предоставленный тестовый пример и Bruno Oliveira за PR.

  • Автоматическое создание каталога для junitxml и журнала результатов. Спасибо Арону Керзону.

  • исправление issue713: JUnit XML-отчеты для неудачных доктестов. Спасибо Punyashloka Biswal.

  • исправить issue735: assertion failures on debug versions of Python 3.4+ Спасибо Бенджамину Петерсону.

  • исправить проблему114: маркер skipif сообщает о внутреннем пропуске плагина; Спасибо Floris Bruynooghe за сообщение и Bruno Oliveira за PR.

  • исправление проблемы748: unittest.SkipTest сообщает о внутреннем плагине pytest unittest. Спасибо Thomas De Schampheleire за сообщение и Bruno Oliveira за PR.

  • исправить issue718: не удалось создать представление множеств, содержащих несортируемые элементы в python 2. Спасибо Edison Gustavo Muenz.

  • исправить issue756, исправить issue752 (и подобные проблемы): зависимость от py-1.4.29, который имеет уточненный алгоритм генерации трассировок.

2.7.1 (2015-05-19)

  • исправление issue731: не путайтесь в скобках, которые могут присутствовать и быть несбалансированными в repr объекта при сворачивании Ложных пояснений. Спасибо Карлу Мейеру за отчет и тестовый пример.

  • исправление проблемы 553: правильная обработка сбоев inspect.getsourcelines в FixtureLookupError, которые приводили к внутренней ошибке, скрывая исходную проблему. Спасибо talljosh за первоначальную диагностику/патч и Bruno Oliveira за финальный патч.

  • исправить issue660: правильно сообщать об ошибках scope-mismatch-access независимо от порядка аргументов приспособления. Также следует избегать внутренней трассировки pytest, которая не предоставляет информации пользователю. Спасибо Хольгеру Крекелю.

  • оптимизированный и документированный процесс выпуска. Также все версии (в setup.py и генерации документации) теперь считываются из _pytest/__init__.py. Спасибо Хольгеру Крекелю.

  • исправили документацию, чтобы убрать представление о том, что фиксы доходности являются экспериментальными. Они здесь и останутся :) Спасибо Бруно Оливейра.

  • Поддержка создания колес с помощью маркеров окружения для требований. Спасибо Ионелу Мариесу Кристиану.

  • исправлена регрессия до 2.6.4, которая проявлялась, например, в потере печати захвата stdout, когда тесты вызывали SystemExit. Спасибо Хольгеру Крекелю.

  • вновь введено крепление _pytest плагина pytester, которое используется по крайней мере pytest-xdist.

2.7.0 (2015-03-26)

  • исправить issue435: заставить reload() работать, когда активна перезапись утверждений. Спасибо Даниэлю Халеру.

  • исправление проблемы616: файлы conftest.py и содержащиеся в них фикстуры теперь правильно рассматриваются на предмет видимости, независимо от точного текущего рабочего каталога и используемых тестовых аргументов. Большое спасибо Эрику Зигерману и его PR235, который содержит систематические тесты на видимость conftest и теперь проходит. Это изменение также вводит понятие rootdir, которое выводится как новый заголовок pytest и документируется на веб-странице pytest customize.

  • изменение отчетности о «перенаправленных» тестах, т.е. тестах, которые собраны в одном файле, но на самом деле приходят из другого (например, когда тесты в тестовом классе приходят из базового класса в другом файле). Теперь мы показываем nodeid и указываем через постфикс другой файл.

  • добавить возможность задавать опции командной строки переменной окружения PYTEST_ADDOPTS.

  • добавлена документация по новым командам pytest-dev на bitbucket и github. См. https://pytest.org/en/stable/contributing.html . Спасибо Анатолию за толчок и первоначальную работу над этим.

  • исправление issue650: новая опция --docttest-ignore-import-errors, которая будет превращать ошибки импорта в доктестах в пропуски. Спасибо Charles Cloud за полный PR.

  • исправление проблемы655: работа над различными способами, которые приводят к тому, что python2/3 сливает информацию sys.exc_info в фикстуры/тесты, вызывая сбои в коде сторонних разработчиков

  • исправление проблемы615: при перезаписи утверждений неправильно экранировались знаки % при форматировании булевых операций, что приводило к ошибкам при смешивании булевых операций с операторами modulo. Спасибо Тому Винеру за сообщение, устранение проблемы и исправление.

  • реализовать issue351: добавить возможность указывать идентификаторы параметров в качестве вызываемого параметра для генерации пользовательских идентификаторов тестов. Спасибо Brianna Laugher за идею и реализацию.

  • ввести и документировать новый механизм hookwrapper, полезный для подключаемых модулей, которые хотят обернуть выполнение определенных хуков для своих целей. Он заменяет недокументированный протокол __multicall__, который используется самим pytest и некоторыми внешними плагинами. Обратите внимание, что в pytest-2.8 планируется отказаться от поддержки старого протокола __multicall__ и поддерживать только протокол hookwrapper.

  • значительно ускорить вызов хуков плагинов

  • использовать механизм hookwrapper во встроенных плагинах pytest.

  • добавить опцию doctest ini для флагов doctest, спасибо Хольгеру Петерсу.

  • добавить примечание к документации, что если вы хотите пометить параметр, а параметр является вызываемым, вам также нужно передать причину, чтобы отделить его от случая «декоратора». Спасибо, Том Винер.

  • Опции «python_classes» и «python_functions» теперь поддерживают glob-шаблоны для обнаружения тестов, как обсуждалось в issue600. Спасибо Ldiary Translations.

  • позволяют переопределять параметризованные фиксы непараметризованными и наоборот (bubenkoff).

  • исправление проблемы463: повышение специфической ошибки для неправильного написания „parameterize“ (pfctdayelise).

  • При неудаче устанавливаются значения sys.last_value, sys.last_type и sys.last_traceback, чтобы пользователь мог проверить ошибку через посмертную отладку (almarklein).

2.6.4 (2014-10-24)

  • Улучшение отчетности об ошибках утверждений на итерациях с помощью ndiff и pprint.

  • удалена устаревшая японская документация из дерева исходников.

  • документации для хука «pytest_addhooks». Спасибо Бруно Оливейра.

  • обновлена документация по индексу плагина. Спасибо Бруно Оливейра.

  • исправление проблемы 557: с «-k» мы разрешаем только старый стиль «-» для отрицания в начале строк, и даже он устарел. Вместо этого используйте «not». Это позволит отбирать параметризованные тесты, в которых «-» встречается в параметре.

  • исправление проблемы604: Исключите символ % в сообщении об утверждении.

  • исправить проблему620: добавить объяснение в цель –genscript о том, что означает двоичный блоб. Спасибо Дину Герман.

  • исправление issue614: исправлена поддержка pastebin.

  • исправить проблему620: добавить объяснение в цель –genscript о том, что означает двоичный блоб. Спасибо Дину Герман.

  • исправление issue614: исправлена поддержка pastebin.

2.6.3 (2014-09-24)

  • исправление issue575: xunit-xml сообщал об ошибках коллекции как о сбоях вместо ошибок, спасибо Олегу Синявскому.

  • исправить issue582: исправить пример setuptools, спасибо Laszlo Papp и Ronny Pfannschmidt.

  • Исправление ошибки бесконечной рекурсии при пикировании capture.EncodedFile, спасибо Уве Шмитту.

  • исправление issue589: исправлено плохое взаимодействие с numpy и другими при отображении исключений. Проверка на точное исключение «превышение максимальной глубины рекурсии» вместо предположения, что любой RuntimeError является таковым (реализовано в py dep). Спасибо Charles Cloud за анализ проблемы.

  • исправить проблему видимости фикстур, связанную с conftest: при запуске с CWD вне тестового пакета pytest ошибался в обнаружении фикстур. Спасибо Вольфгангу Шнерингу за то, что он нашел воспроизводимый пример.

  • Внедрите хук pytest_enter_pdb (необходим, например, pytest_timeout для отмены таймаута при интерактивном входе в pdb). Спасибо Вольфгангу Шнерингу.

  • проверять xfail/skip также с элементами тестирования функций, не относящихся к Python. Спасибо Floris Bruynooghe.

2.6.2 (2014-09-05)

  • Добавлена функция pytest.freeze_includes(), которая упрощает встраивание pytest в исполняемые файлы с помощью инструментов типа cx_freeze. Примеры и обоснование смотрите в документации. Спасибо Бруно Оливейра.

  • Улучшение точности аннулирования кэша перезаписи утверждений.

  • исправлена проблема561: адаптация примера приспособления autouse для python3.

  • исправлена проблема453: проблема с перезаписью утверждений, когда __repr__ содержит «n{», «n}» и «n~».

  • исправление проблемы560: корректное отображение кода, если за утверждениями «else:» или «finally:» следуют утверждения в одной строке.

  • Исправьте пример в документации по monkeypatch, спасибо t-8ch.

  • исправление issue572: исправьте пример документа tmpdir для python3.

  • Не отмечать как универсальное колесо, поскольку Python 2.6 отличается от других сборок из-за дополнительной зависимости argparse. Исправляет проблему566. Спасибо sontek.

  • Реализация issue549: пользовательские сообщения об утверждениях теперь не заменяют сообщения интроспекции py.test, а показываются в дополнение к ним.

2.6.1 (2014-08-07)

  • Больше не показывает номера строк в выводе –verbose, теперь вывод осуществляется только по идентификатору узла. Номер строки по-прежнему отображается в отчетах о сбоях. Спасибо Floris Bruynooghe.

  • исправление проблемы437, когда перезапись утверждений могла привести к тому, что рабочие узлы pytest-xdist собирали разные тесты. Спасибо Бруно Оливейра.

  • исправить issue555: добавить атрибут «errors» к capture-streams, чтобы удовлетворить некоторые distutils и, возможно, другой код, обращающийся к sys.stdout.errors.

  • исправление проблемы547 capsys/capfd также работают при отключенном захвате вывода («-s»).

  • решить проблему170: разрешить pytest.mark.xfail(…) указывать ожидаемые исключения с помощью необязательного аргумента «raises=EXC», где EXC может быть одним исключением или кортежем классов исключений. Спасибо David Mohr за полный PR.

  • исправить интеграцию pytest с декоратором unittest.mock.patch, когда он использует аргумент «new». Спасибо Nicolas Delaby за тестирование и PR.

  • исправление проблемы с обнаружением файлов conftest, если аргументы содержат «::» спецификации id узла (скопировано из вывода «-v»)

  • исправить проблему544, удаляя «@NUM» только в конце разделенных «::» частей и если часть имеет расширение «.py»

  • не используйте помощника py.std import, лучше импортируйте вещи напрямую. Спасибо Бруно Оливейра.

2.6

  • Кэширование исключений из фикстур в соответствии с их областью применения (проблема 467).

  • исправить issue537: Избегать импорта старого кода переинтерпретации утверждений по умолчанию.

  • исправить issue364: сократить и расширить представление трассировок по умолчанию. Новая опция «–tb=auto» (по умолчанию) будет отображать длинные трассировки только для первой и последней записи. Вы можете получить старое поведение печати всех записей как длинных записей с помощью «–tb=long». Также короткие записи по умолчанию теперь печатаются аналогично «–tb=native».

  • исправить проблему514: переинтерпретация утверждений об атрибутах частных классов

  • изменить вывод -v для включения полных идентификаторов узлов тестов. Пользователи могут скопировать идентификатор узла из теста, включая номер строки, и использовать его в качестве позиционного аргумента, чтобы запустить только один тест.

  • исправление проблемы 475: ранняя и понятная ошибка при вызове pytest.raises с неправильным типом исключения.

  • исправить issue516: сообщить в get-started о текущих зависимостях.

  • немного почистить setup.py и указать поддерживаемые версии. Спасибо Jurko Gospodnetic за PR.

  • изменить цвет XPASS на желтый, а не красный, когда тесты запускаются с параметром -v.

  • исправление проблемы473: решение проблемы, связанной с помещением несвязанного метода в dict класса при двойном исправлении.

  • исправление проблемы498: если финализатор приспособления не работает, убедитесь, что приспособление все еще недействительно.

  • исправление проблемы453: результат работы хука pytest_assertrepr_compare теперь экранируется новыми строками, чтобы исключение format_exception не раздувалось.

  • внутренняя новая система предупреждений: pytest теперь будет выдавать предупреждения, когда обнаружит странности в коллекции или выполнении тестов. Предупреждения отправляются в новый хук pytest_logwarning, который в настоящее время реализован только в терминальном плагине, который отображает предупреждения в итоговой строке и показывает более подробную информацию, если указано -rw (отчет о предупреждениях).

  • изменение переходит к предупреждениям для тестовых классов с __init__ и callables в тестовых модулях, которые выглядят как тест, но не являются функциями.

  • исправление issue436: улучшено нахождение начальных файлов conftest из аргументов командной строки путем использования результата parse_known_args, а не прежней шаткой эвристики. Спасибо Марку Абрамовицу за тесты и первоначальные подходы к исправлению в этой области.

  • исправить проблему #479: правильно обрабатывать исключения nose/unittest(2) SkipTest во время сбора/загрузки тестовых модулей. Спасибо Марку Шлайху за полный PR.

  • исправить issue490: включить pytest_load_initial_conftests в документацию и улучшить docstring.

  • исправить issue472: уточнить, что pytest.config.getvalue() не может работать, если он запускается перед разбором командной строки.

  • объединение PR123: улучшена интеграция с декоратором mock.patch в тестах.

  • исправление issue412: работа с потоками stdout/stderr FD-уровня теперь происходит без сбоев.

  • исправление проблемы483: trial/py33 теперь работает правильно. Спасибо Daniel Grana за PR.

  • улучшить пример интеграции pytest с «python setup.py test», который теперь имеет общую опцию «-a» или «–pytest-args», где вы можете передать дополнительные опции в виде строки с кавычками. Спасибо Тревору Беколаю.

  • упростил внутренний механизм захвата и сделал его более устойчивым к тестам или установкам, изменяющим FD1/FD2, также теперь он лучше интегрирован с pytest.pdb() в одиночных тестах.

  • улучшения в обнаружении утечек в собственном тестовом наборе pytest, благодаря PR от Марка Абрамовица

  • исправить issue492: избежать утечки в test_writeorg. Спасибо Марку Абрамовицу.

  • исправление проблемы493: не запускайте тесты в каталоге doc с python setup.py test (для этого используйте tox -e doctesting).

  • исправление issue486: улучшение отчетности и обработки ранних сбоев загрузки conftest

  • некоторая очистка и упрощение внутренней обработки тестов.

  • работать немного усерднее для разрыва ссылочных циклов при перехвате исключений. Спасибо Jurko Gospodnetic.

  • исправить issue443: исправьте примеры пропуска, чтобы использовать правильное сравнение. Спасибо Алексу Гроенхольму.

  • поддерживать атрибут nose-style __test__ на модулях, классах и функциях, включая классы в стиле unittest. Если установлено значение False, тест не будет собираться.

  • исправить issue512: показывать «<notset>» для аргументов, которые могут быть не заданы в плагине monkeypatch. Улучшает вывод в документации.

2.5.2 (2014-01-29)

  • исправить issue409 - лучше взаимодействует с cx_freeze, не пытаясь импортировать из collections.abc, что вызывает проблемы для py27/cx_freeze. Спасибо Wolfgang L. за сообщение и отслеживание проблемы.

  • исправил документацию и код, чтобы почти везде использовать «pytest» вместо «py.test». Спасибо Jurko Gospodnetic за полный PR.

  • исправить issue425: упомянуть в конце «py.test -h», что –markers и –fixtures работают в соответствии с указанным путем к тесту (или текущим каталогом)

  • исправление issue413: исключения с атрибутами unicode теперь печатаются корректно также на python2 и при запуске pytest-xdist. (для исправления требуется py-1.4.20)

  • копирование, очистка и интеграция захвата py.io из pylib 1.4.20.dev2 (rev 13d9af95547e)

  • решить проблему416: уточнить в документации семантику загрузки conftest.py

  • исправление issue429: сравнение байтовых строк с неаскриптивными символами в выражениях assert теперь работает лучше. Спасибо Floris Bruynooghe.

  • сделать capfd/capsys.capture приватным, он не используется и не должен быть открыт

2.5.1 (2013-12-17)

  • объединить новую документацию по стилизации PR от Тобиаса Беника.

  • исправить проблему403: разрешить параметризацию нескольких одноименных функций в узле коллекции. Спасибо Andreas Kloeckner и Alex Gaynor за отчет и анализ.

  • Разрешите параметризованным фикстурам указывать ID параметров, добавляя аргумент ids в pytest.fixture() и pytest.yield_fixture(). Спасибо Floris Bruynooghe.

  • исправить проблему404, всегда используя двоичный xml escape в плагине junitxml. Спасибо Ronny Pfannschmidt.

  • исправление issue407: исправьте addoption docstring, чтобы она указывала на argparse вместо optparse. Спасибо Дэниелу Д. Райту.

2.5.0 (2013-12-12)

  • исключил python2.5 из автоматического тестирования релиза самим pytest, что означает, что он, вероятно, скоро сломается (но все еще работает с этим релизом, мы уверены).

  • упрощена и исправлена реализация вызова финализаторов, когда задействованы параметризованные фикстуры или аргументы функций. Финализация теперь лениво выполняется во время установки, а не в «фазе разрушения». Хотя сначала это может показаться странным, это помогает убедиться, что мы правильно обрабатываем установку/разрушение даже в сложном коде. Код на уровне пользователя не должен пострадать, если только он не реализует хук pytest_runtest_teardown и не ожидает, что определенные экземпляры фикстур будут снесены внутри (очень маловероятно и в любом случае было бы ненадежно).

  • PR90: добавьте опцию –color=yes|no|auto для принудительного выбора режима раскраски терминала («auto» используется по умолчанию). Спасибо Марку Абрамовицу.

  • исправить issue319 - правильно отображать юникод в ошибках утверждения. Большое спасибо Floris Bruynooghe за полный PR. Также это означает, что теперь мы зависим от py>=1.4.19.

  • исправление issue396 - корректная сортировка и финализация класс-скопированных параметризованных тестов независимо от количества методов в классе.

  • исправление проблемы323 в лучшую сторону – параметризация теперь никогда не должна вызывать ошибки Runtime Recursion, поскольку лежащий в основе алгоритм переупорядочивания тестов по областям/по приспособлениям больше не является рекурсивным (раньше он был рекурсивным по хвостовым вызовам, что могло привести к проблемам для более чем >966 нефункциональных скопированных параметров).

  • исправление проблемы290 - теперь есть предварительная поддержка параметризации с повторяющимися одинаковыми значениями (иногда полезно проверить, работает ли вызов во второй раз так же, как и в первый).

  • закрыть issue240 - документировать, как именно работает импорт модулей pytest, обсудить две распространенные схемы расположения тестовых каталогов, и как это взаимодействует с пакетами PEP 420-namespace.

  • исправить issue246 исправить порядок финализатора на LIFO для независимых фикстур, зависящих от параметризованной фикстуры с масштабированием выше функции. (это потребовало определенных усилий, поэтому, пожалуйста, отнеситесь к сложности этого предложения :) Спасибо Ralph Schmitt за точный пример отказа.

  • исправление проблемы 244 путем внедрения специального индекса для параметров, чтобы использовать индексы только для запароленных идентификаторов тестов

  • исправить проблему 287, запустив все финализаторы, но сохранив исключение из первого неудачного финализатора и повторно подняв его, так что снос все равно будет неудачным. Мы поднимаем первое неудачное исключение, потому что оно может быть причиной неудач других финализаторов.

  • исправить упорядочивание, когда mock.patch или другие стандартные декораторы-обертки используются с тестовыми методами. Это исправляет проблему346 и должно помочь со случайными сбоями при сборе «xdist». Спасибо Ronny Pfannschmidt и Donald Stufft за помощь в выявлении проблемы.

  • исправление issue357 - специальный случай выражения «-k», позволяющий фильтровать простые строки, которые не являются допустимыми выражениями python. Примеры: «-k 1.3» фильтрует все тесты с параметром 1.3. «-k None» фильтрует все тесты, в названии которых есть «None», и наоборот «-k „not None“». Ранее эти примеры приводили к синтаксическим ошибкам.

  • исправить проблему384, удалив код поддержки trial, поскольку улучшения в unittest compat позволяют trial обрабатывать ее самостоятельно

  • не скрывать ImportError, когда при импорте плагина возникает ошибка. исправление проблемы375.

  • исправление проблемы275 - разрешить использование светильников и светильников autouse для запуска текстовых файлов doctest.

  • исправить проблему380, заставив –resultlog полагаться только на longrepr вместо атрибута «reprcrash», который существует только иногда.

  • решить проблему122: разрешить @pytest.fixture(params=iterator) путем раннего разложения в список.

  • исправление совместимости pexpect-3.0 для собственных тестов pytest. (исправляет проблему 386)

  • разрешить вложенные маркеры параметризации-значения, спасибо Джеймсу Лану за PR.

  • исправить обработку юникода с помощью нового API monkeypatch.setattr(import_path, value). Спасибо Робу Деннису. Исправляет проблему371.

  • исправлена работа с юникодом в junitxml, исправлена проблема 368.

  • В режиме перезаписи утверждений на Python 2 исправьте обнаружение кодировочных файлов cookie. См. выпуск #330.

  • заставить «–runxfail» превратить императивные вызовы pytest.xfail в отсутствие операций (он уже нейтрализовал маркеры pytest.mark.xfail).

  • улучшите взаимодействие pytest / pkg_resources: AssertionRewritingHook PEP 302 совместимый загрузчик теперь правильно регистрируется в setuptools/pkg_resources, чтобы метод pkg_resources.resource_stream работал правильно. Исправляет проблему 366. Спасибо за расследование и полный PR Джейсону Р. Кумбсу.

  • фикс pytestconfig теперь является session-scoped, поскольку это один и тот же объект во время всего выполнения теста. Исправляет проблему370.

  • избежать одного удивительного случая неисправности/перепутывания маркеров:

    @pytest.mark.some(lambda arg: ...)
    def test_function():
    

    не будет работать корректно, потому что pytest предполагает, что @pytest.mark.some уже получает функцию для оформления. Теперь мы по крайней мере определяем, является ли этот arg лямбдой, и таким образом пример будет работать. Спасибо Алексу Гейнору за то, что напомнил об этом.

  • xfail тест на pypy, который проверяет неправильную кодировку/ascii (pypy не выдает ошибку). исправляет проблему 385.

  • внутренне заставить varnames() работать с __init__ классов, хотя сейчас это не нужно самому pytest. Также исправлено кэширование. Исправляет проблему 376.

  • исправить issue221 - правильно обрабатывать импорт namespace-пакета без __init__.py.

  • рефакторинг внутренней обработки FixtureRequest, чтобы избежать обезьяньих патчей. Одним из положительных эффектов для пользователя является то, что объект «request» теперь можно использовать в закрытиях.

  • исправлено сравнение версий в pytest.importskip(modname, minverstring)

  • исправить проблему377, уточнив в документации nose-compat, что pytest не дублирует unittest-API в «простое» пространство имен.

  • исправление подробного отчета для тестовых функций @mock’d

2.4.2 (2013-10-04)

  • для Windows требуется colorama и более новая lib py, чтобы py.io.TerminalWriter() теперь использовал colorama вместо своих собственных хаков ctypes. (исправляет проблему365) Спасибо Полу Муру за то, что напомнил об этом.

  • исправление «-k» сопоставления тестов, где «repr», «attr» и другие имена приводили к неправильному сопоставлению из-за причуды внутренней реализации (не спрашивайте), которая теперь реализована правильно. исправление проблемы345.

  • предотвращение создания слишком длинных имен файлов с помощью функции tmpdir, особенно при использовании параметризации (issue354)

  • исправить взаимодействия pytest-pep8 и pytest-flakes / pytest (имена коллекций в плагине mark предполагали, что элемент всегда имеет функцию, что не верно для этих плагинов и т.д.) Спасибо Andi Zeidler.

  • ввести API node.get_marker/node.add_marker для таких плагинов, как pytest-pep8 и pytest-flakes, чтобы избежать беспорядочных деталей псевдодиктов node.keywords. Адаптированная документация.

  • удалите попытку «дублирования» stdout при запуске, так как это некрасиво. обычное перехватывание должно отловить достаточно возможностей тестов, портящих стандартные FD.

  • добавьте pluginmanager.do_configure(config) как ссылку на config.do_configure() для совместимости с плагинами

2.4.1 (2013-10-02)

  • При использовании parser.addoption() аргументы unicode к ключевому слову «type» также должны быть преобразованы в соответствующие типы. спасибо Floris Bruynooghe, @dnozay. (исправление проблемы 360 и проблемы 362)

  • исправлено точечное завершение имен файлов при использовании argcomplete Спасибо Anthon van der Neuth. (исправляет проблему 361)

  • исправление регрессии, когда для указания параметризации использовался кортеж 1 («arg»,) (значения параметризации передавались вложенными в кортеж). Спасибо Дональду Стафту.

  • исправление опечаток в документе, спасибо Энди Дирнбергеру

2.4

известные несовместимости:

  • при вызове –genscript из python2.7 или выше, вы получите только автономный скрипт, который работает на python2.7 или выше. Используйте Python2.6, чтобы также получить версию, совместимую с python2.5.

  • все методы разрушения в стиле xunit (nose-style, pytest-style, unittest-style) не будут вызываться, если соответствующий метод установки не сработал, см. проблему322 ниже.

  • хук pytest_plugin_unregister никогда не вызывался должным образом, и его реализация неизвестна - поэтому он был удален.

  • pytest.fixture-декорированные функции больше не могут быть генераторами (т.е. использовать yield). Это изменение может быть отменено в версии 2.4.1, если оно вызовет непредвиденные проблемы в реальной жизни. Тем не менее, вы всегда можете написать и вернуть внутреннюю функцию/генератор и изменить потребитель приспособлений для итерации над возвращаемым генератором. Это изменение было сделано вместо нового декоратора pytest.yield_fixture, см. ниже.

новые возможности:

  • экспериментально ввести новый декоратор pytest.yield_fixture, который принимает те же параметры, что и pytest.fixture, но требует от функций фиксации оператора yield вместо return statement. Это позволяет напрямую интегрировать контекстные менеджеры «with-style» в фикстурные функции и в целом избежать регистрации обратных вызовов финализации в пользу обработки «after-yield» как кода разрыва. Спасибо Andreas Pelme, Vladimir Keleshev, Floris Bruynooghe, Ronny Pfannschmidt и многим другим за обсуждение.

  • разрешать булевы выражения непосредственно с skipif/xfail, если также указана «причина». Переработайте документацию по пропуску, чтобы рекомендовать «условия как булевы», поскольку это предотвращает неожиданности при импорте маркеров между модулями. Указание условий в виде строк будет по-прежнему полностью поддерживаться.

  • отчетность: окрашивание последней строки в красный или зеленый цвет в зависимости от того, произошли ли сбои/ошибки или все прошло. спасибо Christian Theunert.

  • заставить «import pdb ; pdb.set_trace()» работать нативно в отношении захвата (больше не нужно «-s»), превращая pytest.set_trace() в простое сокращение.

  • исправление issue181: –pdb теперь работает и при ошибках сбора (и при внутренних ошибках) . Это было реализовано путем небольшого внутреннего рефакторинга и введения нового хука pytest_exception_interact (см. следующий пункт).

  • исправить issue341: ввести новый экспериментальный хук для IDE/терминалов для перехвата отладки: pytest_exception_interact(node, call, report).

  • новый вариант monkeypatch.setattr() для обеспечения более короткого вызова для исправления классов/функций из модулей:

    monkeypatch.setattr(«requests.get», myfunc)

    заменит функцию «get» модуля «requests» на myfunc.

  • исправление проблемы322: tearDownClass не запускается, если setUpClass не удался. Спасибо Mathieu Agopian за первоначальное исправление. Также сделайте все финализаторы pytest/nose имитирующими одно и то же общее поведение: если setupX существует и не сработал, не запускайте teardownX. Это вводит новый метод-помощник «node.addfinalizer()», который может быть вызван только на этапе установки узла.

  • упростить подпись pytest.mark.parametrize(): разрешить передавать строку, разделенную CSV, для указания argnames. Например: pytest.mark.parametrize("input,expected",  [(1,2), (2,3)]) работает так же, как и предыдущий: pytest.mark.parametrize(("input", "expected"), ...).

  • добавить поддержку определения setUpModule/tearDownModule, спасибо Брайану Оккену.

  • интегрировать завершение вкладок для опций через использование «argcomplete». Спасибо Антону ван дер Нойту за PR.

  • изменить имена опций на длинные опции, разделенные дефисом, но сохранить старое написание для обратной совместимости. py.test -h будет показывать только версию с дефисом, например, «–collect-only», но «–collectonly» также останется действительным (по причинам обратной совместимости). Большое спасибо Энтону ван дер Нойту за реализацию и Хинеку Шлаваку за то, что подтолкнул нас.

  • исправить проблему 308 - разрешить отмечать/xfail/skip отдельных наборов параметров при параметризации. Спасибо Брианне Лаугер.

  • вызвать новый экспериментальный хук pytest_load_initial_conftests, чтобы позволить сторонним плагинам делать что-то до загрузки conftest.

Исправление ошибок:

  • исправление проблемы358 - опции захвата теперь разбираются более корректно с помощью нового метода parser.parse_known_args.

  • pytest теперь использует argparse вместо optparse (спасибо Anthon), что означает, что «argparse» добавляется как зависимость при установке в окружение python2.6 или ниже.

  • исправление проблемы 333: исправление случая плохого взаимодействия хуков unittest/pytest.

  • PR27: правильно обрабатывать nose.SkipTest во время сбора. Спасибо Antonio Cuni, Ronny Pfannschmidt.

  • исправление проблемы355: junitxml помещает атрибут name=»pytest» в тег testsuite.

  • исправление проблемы336: фиксатор autouse в плагинах должен снова работать.

  • исправить issue279: улучшить сравнение объектов при отказе утверждения для стандартных типов данных и распознать collections.abc. Спасибо Brianna Laugher и Mathieu Agopian.

  • исправление проблемы317: поддержка перезаписи утверждений для метода is_package

  • исправление issue335: объект document py.code.ExceptionInfo() возвращался из pytest.raises(), спасибо Mathieu Agopian.

  • удалить неявную поддержку distribute_setup из setup.py.

  • исправление issue305: игнорировать любые проблемы при записи pyc-файлов.

  • SO-17664702: вызывать финализаторы приспособления, даже если функция приспособления частично завершилась (финализаторы не всегда вызывались раньше)

  • исправить issue320 - исправить область видимости класса для фикстур, когда они смешиваются с функциями уровня модуля. Спасибо Анатолию Бубенкову.

  • вы можете указать «-q» или «-qq» для получения различных уровней «более тихих» отчетов (спасибо Катажине Яхим).

  • исправить issue300 - Исправить порядок загрузки conftest при запуске py.test в подкаталоге.

  • исправление проблемы323 - сортировка многих параметризаций arg, скопированных в модуль

  • заставить хуки завершения сессии выполняться с тем же cwd-контекстом, что и при старте сессии (помогает исправить поведение плагинов, которые пишут выходные файлы с относительным путем, например, pytest-cov).

  • исправить проблему316 - правильно ссылаться на крючки коллекции в документации

  • исправление проблемы 306 - очистка опций -k/-m для соответствия только маркерам/именам тестов/ключевым словам соответственно. Спасибо Wouter van Ackooy.

  • улучшен подсчет доктестов в модулях python - файлы без элементов доктестов больше не отображаются, а примеры доктестов считаются как отдельные элементы теста. спасибо Danilo Bellini.

  • исправьте issue245 в зависимости от выпущенной версии py-1.4.14, которая исправляет py.io.dupfile для работы с файлами без режима. Спасибо Джейсону Р. Кумбсу.

  • исправлена генерация junitxml, когда тестовый вывод содержит управляющие символы, решение проблемы267, спасибо Jaap Broekhuizen

  • исправить issue338: использовать стиль –tb для ошибок setup/teardown также. Спасибо Махо.

  • исправить issue307 - использовать yaml.safe_load в примере, спасибо Марку Эйчину.

  • улучшить параметризацию сообщений об ошибках, спасибо Брианна Логер

  • Хуки pytest_terminal_summary(terminalreporter) теперь могут использовать методы «.section(title)» и «.line(msg)» для вывода дополнительной информации в конце выполнения теста.

2.3.5 (2013-04-30)

  • исправить проблему169: уважать –tb=style при ошибках setup/teardown.

  • никогда не рассматривайте функцию приспособления для сбора тестовых функций

  • разрешить повторный запуск элементов теста / помогает исправить плагин pytest-reruntests, а также помогает сохранить меньше ссылок на фикстуры/ресурсы живыми

  • помещать захваченный stdout/stderr в вывод junitxml даже при прохождении тестов (спасибо Adam Goucher)

  • Проблема 265 - интегрируйте настройку/снос носа с состоянием setupstate, чтобы он не пытался снести нос, если он не был настроен

  • проблема 271 - не пишите junitxml на рабочих узлах

  • Проблема 274 - не пытайтесь показать полный пример doctest, если doctest не знает местоположение примера

  • проблема 280 - отключение перезаписи утверждений на глючном CPython 2.6.0

  • внедрить помощник «getfixture()» для получения фикстур из доктестов, спасибо Андреасу Цайдлеру

  • проблема 259 - при переписывании утверждений соблюдайте кодировку источника по умолчанию ASCII в Python 2

  • проблема 251 - сообщайте о пропуске вместо игнорирования классов с init

  • выпуск250 смешение unicode/str в именах и значениях параметров теперь работает

  • issue257, assertion-triggered compilation of source ending in a comment line does not blow up in python2.5 (исправлено с помощью py>=1.4.13.dev6)

  • исправьте опцию –genscript для генерации автономных скриптов, которые также работают с python3.3 (упорядочивание импортера)

  • issue171 - при переписывании утверждений, покажите repr некоторых глобальных переменных

  • исправить справку о параметрах для «-k»

  • перенести длинное описание дистрибутива в файл README.rst

  • улучшите документацию для metafunc.parametrize()

  • исправление ошибки, при которой использование capsys с pytest.set_trace() в тестовой функции при просмотре capsys.readouterr() приводило к сбою.

  • разрешить указывать префиксы, начинающиеся с «_», при настройке обнаружения тестов python_функций. (спасибо Грэму Хорлеру)

  • улучшите вывод трассировки PYTEST_DEBUG, поместив дополнительные данные в новые строки с дополнительным отступом

  • убедиться, что исключения OutcomeExceptions типа skip/fail имеют инициализированные атрибуты исключения

  • проблема 260 - не используйте специальную настройку носа в обычных случаях unittest

  • исправление проблемы134 - печать ошибок сбора, которые препятствуют выполнению указанных элементов теста

  • исправить проблему266 - принимать юникод в выражениях MarkEvaluator

2.3.4 (2012-11-20)

  • у уступаемых тестовых функций теперь будет активен autouse-fixtures, но они не смогут принимать fixs в качестве funcargs - в любом случае рекомендуется использовать функции параметризации после версии 2.0 вместо yield, см.: http://pytest.org/en/stable/example/how-to/parametrize.html.

  • исправление проблемы с автодоводкой, когда автодоводчики не обнаруживались, если были определены в файле a/conftest.py и тесты в a/tests/test_some.py

  • исправление проблемы226 - заказ LIFO для списания приспособлений

  • исправление проблемы224 - вызовы с аргументами >256 символов теперь работают

  • исправить проблему91 - добавить/обсудить настройки уровня пакетов/директорий в примере

  • позволяет динамически определять маркеры через item.keywords[…]=назначение, интегрируя с опцией «-m»

  • сделать так, чтобы «-k» принимал выражения так же, как и «-m», чтобы можно было написать: -k «name1 или name2» и т.д. Это небольшая несовместимость, если вы использовали специальный синтаксис типа «TestClass.test_method», который теперь нужно писать как -k «TestClass и test_method», чтобы найти определенный метод в определенном тестовом классе.

2.3.3 (2012-11-06)

  • исправление issue214 - разбор модулей, содержащих специальные объекты, например, объект request в flask, который взрывается при обращении к getattr, если ни один запрос не активен. спасибо Thomas Waldmann.

  • исправить issue213 - разрешить параметризацию со значениями типа массивов numpy, которые не поддерживают оператор __eq__.

  • исправить проблему215 - разделить test_python.org на несколько файлов

  • исправление issue148 - @unittest.skip на классах теперь распознается и позволяет избежать вызова setUpClass/tearDownClass, спасибо Павел Репин

  • исправить issue209 - восстановить поддержку python2.4 в зависимости от более нового pylib, который повторно ввел поиск утверждений для интерпретаторов доAST

  • поддержка носа: вызывать setup только если это callable, спасибо Эндрю Таумоэфолау

  • исправить issue219 - добавить классификаторы py2.4-3.3 в список TROVE

  • в трассировках ,* значения аргументов теперь отображаются рядом с обычными аргументами (спасибо Мануэлю Якобу)

  • исправление issue217 - поддержка mock.patch с фикстурами pytest - обратите внимание, что вам нужен либо mock-1.0.1, либо встроенный в python3.3 unittest.mock.

  • исправить issue127 - улучшить документацию для pytest_addoption() и добавить вспомогательную функцию config.getoption(name) для согласованности.

2.3.2 (2012-10-25)

  • исправить проблему208 и исправить проблему29 использовать новую версию py, чтобы избежать длительных пауз при печати трассировок в длинных модулях

  • исправление issue205 - контесты в поддиректориях, настраивающих pytest_pycollect_makemodule и pytest_pycollect_makeitem, теперь работают правильно

  • исправить упорядочивание сноса для параметризованных установок

  • исправление issue127 - улучшение документации для pytest_addoption и связанных с ним объектов.

  • исправить поведение unittest: TestCase.runtest вызывается только в том случае, если определены методы тестирования

  • улучшить поддержку пробной версии: не собирать ее пустой метод unittest.TestCase.runTest()

  • «python setup.py test» теперь работает с самим pytest

  • исправление/улучшение внутренних/ связанных с упаковкой битов:

    • проверка сообщений об исключениях в test_nose.py теперь проходит и на python33

    • issue206 - исправление test_assertrewrite.py для работы при наличии глобального PYTHONDONTWRITEBYTECODE=1

    • добавить tox.ini в дистрибутив pytest, чтобы ignore-dirs и другие конфигурационные биты были правильно распределены для сопровождающих, запускающих собственные тесты pytest

2.3.1 (2012-10-20)

  • исправить issue202 - исправление регрессии: использование «self» из функций приспособления теперь работает как ожидалось (это тот же экземпляр «self», который видит тестовый метод, использующий приспособление)

  • пропускать pexpect при использовании тестов (в основном test_pdb.py) на системах freebsd* из-за того, что pexpect не поддерживает его должным образом (зависание)

  • ссылка на веб-страницы из вывода –markers, содержащие справку по использованию pytest.mark.*.

2.3.0 (2012-10-19)

  • исправление issue202 - улучшены автоматические имена для параметризованных тестовых функций

  • исправить проблему139 - ввести @pytest.fixture, который позволяет напрямую выбирать и параметризовать фабрики funcarg.

  • исправление проблемы198 - приспособления conftest не находились на windows32 в некоторых случаях с вложенными структурами каталогов из-за проблем с манипуляцией путями

  • исправить проблему193 пропускать тестовые функции, которые были параметризованы с пустыми наборами параметров

  • исправление совместимости с python3.3, в основном это касается битов, которые ранее зависели от упорядочивания диктов

  • ввести переупорядочивание тестов по ресурсам и параметризации, которое имеет приоритет перед обычным упорядочиванием по файлам

  • исправление проблемы185 monkeypatching time.time не приводит к сбою pytest

  • исправить проблему172 дублирующего вызова украшенных функций pytest.fixture setup_module

  • исправить построение junitxml=path так, чтобы если тесты меняют текущий рабочий каталог и путь является относительным, то он правильно строился из исходного текущего рабочего каталога.

  • исправьте пример «python setup.py test», чтобы он вызывал корректный возврат «errno»

  • исправить issue165 - исправить неработающие ссылки на документы и упомянуть stackoverflow для FAQ

  • перехватывать unicode-проблемы при записи представлений о сбоях в терминал, чтобы предотвратить крах всей сессии

  • исправьте путаницу xfail/skip: теперь отметка skip или императивный pytest.skip будут иметь приоритет перед xfail-маркерами, потому что мы не можем определить статус xfail/xpass в случае пропуска. см. также: http://stackoverflow.com/questions/11105828/in-py-test-when-i-explicitly-skip-a-test-that-is-marked-as-xfail-how-can-i-get.

  • всегда сообщать об установленных сторонних плагинах в заголовке тестового запуска

  • исправление проблемы160: о неудачной настройке тестов, помеченных xfail, следует сообщать как xfail (не xpass)

  • исправление проблемы128: показывать вывод захвата при использовании capsys/capfd

  • исправить проблему179: правильно отображать цепочку зависимостей фабрик

  • pluginmanager.register(…) теперь выдает ValueError, если плагин уже зарегистрирован или его имя занято

  • исправить issue159: улучшить https://docs.pytest.org/en/6.0.1/faq.html, особенно в отношении «волшебной» истории, также упомянуть pytest-django, пробную версию и интеграцию unittest.

  • сделать request.keywords и node.keywords доступными для записи. Все узлы коллекции-потомки будут видеть значения ключевых слов. Ключевые слова - это словари, содержащие маркеры и другую информацию.

  • исправление проблемы 178: бинарные экраны xml теперь обернуты в py.xml.raw

  • исправление проблемы 176: правильно перехватывать встроенный AssertionError, даже когда мы заменили AssertionError подклассом на уровне python

  • обнаружение фабрики больше не приводит к сбоям при использовании магических глобальных вызываемых объектов, которые не предоставляют вменяемого объекта __code__ (например, mock.call).

  • исправление проблемы 182: testdir.inprocess_run теперь учитывает переданные плагины

  • исправление проблемы 188: убедитесь, что sys.exc_info чист на python2

    перед вызовом в тест

  • исправить проблему 191: добавить поддержку метода unittest TestCase runTest

  • исправление проблемы 156: monkeypatch правильно обрабатывает дескрипторы уровня класса

  • уточнения отчетности:

    • pytest_report_header теперь получает «startdir», так что вы можете использовать startdir.bestrelpath(yourpath), чтобы показать хороший относительный путь

    • позволять плагинам реализовывать как pytest_report_header, так и pytest_sessionstart (sessionstart вызывается первым).

    • не показывать отмененную строку причины, если ее нет

    • py.test -vv покажет все сравнения утверждений вместо усечения

2.2.4 (2012-05-22)

  • исправление сообщения об ошибке для переписанных утверждений, включающих оператор %

  • исправление проблемы 126: корректное сопоставление всех недопустимых символов xml для бинарного экранирования junitxml

  • исправление проблемы с unittest: теперь маркеры @unittest.expectedFailure должны обрабатываться правильно (вы также можете использовать маркеры @pytest.markers).

  • интеграция документов с расширенными командами тестирования distribute/setuptools

  • исправить проблему 140: правильно получать реальные функции связанных classmethods для setup/teardown_class

  • исправление проблемы #141: переход с умершего paste.pocoo.org на bpaste.net

  • исправление проблемы #143: вызывать unconfigure/sessionfinish всегда, когда вызывается configure/sessionstart

  • исправление проблемы #144: лучше преобразовывать идентификаторы тестов в имена классов junitxml

  • обновить distribute_setup.py до версии 0.6.27

2.2.3 (2012-02-05)

  • исправление загружаемого пакета, чтобы он включал только необходимые файлы

2.2.2 (2012-02-05)

  • исправление issue101: неправильные args для тестовой функции unittest.TestCase теперь дают лучший результат

  • исправить issue102: сообщать более полезные ошибки и подсказки для случаев, когда тестовый каталог был переименован, а некоторые pyc/__pycache__ остались

  • исправить проблему106: разрешить применение параметризации несколько раз, например, из модуля, класса и на уровне функции.

  • исправить проблему107: действительно выполнять финализацию области видимости сессии

  • не проверяйте в parametrize, являются ли косвенные параметры именами funcarg

  • добавьте метод chdir к функции monkeypatch funcarg

  • исправление сбоя, возникающего при вызове отмены monkeypatch во второй раз

  • исправить проблему115: сделать –collectonly надежным против раннего отказа (отсутствующие файлы/каталоги)

  • «-qq –collectonly» теперь показывает только файлы и количество тестов в них

  • «-q –collectonly» теперь показывает идентификаторы тестов

  • позволяет добавлять атрибуты в тестовые отчеты так, чтобы это работало и при распределенном тестировании (обновление pytest-xdist не требуется).

2.2.1 (2011-12-16)

  • исправление issue99 (в pytest и py) внутренние ошибки с resultlog теперь дают лучший результат - исправлено путем нормализации входных аргументов pytest_internalerror.

  • исправить issue97 / проблемы с трассировкой (в pytest и py) улучшить вывод трассировок в сочетании с jinja2 и cython, которые взламывают трассировки

  • исправить issue93 (в pytest и pytest-xdist), чтобы избежать «отложенного завершения»: теперь последний тест в тестовом узле будет выполнять свое завершение непосредственно, а не ждать окончания сессии. Спасибо Дэйву Ханту за хорошую отчетность и обратную связь. Хуки pytest_runtest_protocol и pytest_runtest_teardown теперь имеют «nextitem», который будет None, указывающий на окончание выполнения теста.

  • исправление сбоя коллекции из-за собранных элементов с неизвестным источником, спасибо Ральфу Шмитту (исправлено путем зависимости от более нового pylib)

2.2.0 (2011-11-18)

  • исправить проблему90: ввести ускоренное сворачивание тестовых элементов, чтобы функция сворачивания вызывалась раньше.

  • добавить всемогущую функцию metafunc.parametrize, которая позволяет параметризовать аргументы тестовых функций в несколько этапов и, следовательно, из независимых плагинов и мест.

  • добавить помощник @pytest.mark.parametrize, который позволяет легко вызывать тестовую функцию с различными значениями аргументов

  • Добавьте примеры на страницу примеров «parametrize», включая быстрый перенос сценариев Test и новой функции parametrize и декоратора.

  • ввести регистрацию для помощников «pytest.mark.*» через ini-файлы или через хуки плагинов. Также введена опция «–strict», которая будет рассматривать незарегистрированные маркеры как ошибки, что позволит избежать опечаток и поддерживать хорошо описанный набор маркеров для вашего набора тестов. Смотрите примеры на http://pytest.org/en/stable/how-to/mark.html и по ссылкам.

  • issue50: ввести опцию «-m marker» для выбора тестов на основе маркеров (это более строгая и предсказуемая версия „-k“, поскольку «-m» соответствует только полным маркерам и имеет более очевидные правила для и/или семантики.

  • новая функция для оптимизации скорости ваших тестов: опция –durations=N для отображения N самых медленных вызовов теста и методов установки/выключения.

  • исправление проблемы87: –pastebin теперь работает с python3

  • исправление проблемы89: –pdb с неожиданными исключениями в doctest работает более осмысленно

  • исправление и очистка собственного набора тестов pytest для предотвращения утечки FD

  • исправление проблемы83: ссылка на сгенерированный список funcarg

  • исправление проблемы74: имена модулей pyarg теперь проверяются на предмет ложных срабатываний imp.find_module

  • исправление совместимости с вариантами использования twisted/trial-11.1.0

  • упростить Node.listchain

  • упростить код вывода junitxml, полагаясь на py.xml

  • добавить поддержку пропуска свойств для классов и функций unittest

2.1.3 (2011-10-18)

  • исправление проблемы79: при некоторых сравнениях в boolops перезапись утверждений не удавалась

  • корректно обрабатывать аргументы нулевой длины (как в pytest „“)

  • исправление issue67 / junitxml теперь содержит правильные длительности тестов, спасибо ronny

  • исправление проблемы75 / пропуск неудачного теста на jython

  • исправить issue77 / Разрешить применять хук assertrepr_compare к подмножеству тестов

2.1.2 (2011-09-24)

  • исправление перезаписи утверждений в файлах с новыми строками windows в некоторых версиях Python

  • уточнить обнаружение тестов по имени пакета/модуля (–pyargs), спасибо Флориану Майеру

  • исправление проблемы69 / переписывание утверждений исправлено для некоторых булевых операций

  • исправление проблемы68 / пакеты теперь работают с перезаписью утверждений

  • исправление проблемы66: использование различных кэшей перезаписи утверждений при передаче опции -O

  • не пытайтесь переписывать утверждения на Jython, используйте reinterp

2.1.1

  • исправить issue64 / pytest.set_trace теперь работает внутри хука pytest_generate_tests

  • исправить проблему60 / исправить ошибки, связанные с созданием __pycache__

  • исправление проблемы63 / перезапись утверждений при вставке строк, содержащих „%“

  • исправить переписывание утверждений в вызовах с аргументом **

  • не кэшировать переписанные модули, если генерация байткода отключена

  • исправление перезаписи утверждений в каталогах, доступных только для чтения

  • исправить проблему59: обеспечить теги system-out/err для вывода junitxml

  • исправление проблемы61: перезапись утверждений на булевых операциях с 3 или более операндами

  • теперь вы можете создать страницу руководства с помощью «cd doc ; make man».

2.1.0 (2011-07-09)

  • исправление проблемы53 вызов функций настройки стиля носа с правильным упорядочиванием

  • исправление проблемы 58 и проблемы 59: новые исправления кода утверждения

  • объединить ветку assertionrewrite Бенджамина: теперь утверждения для тестовых модулей на python 2.6 и выше выполняются путем переписывания AST и сохранения pyc-файла перед импортом тестового модуля. см. doc/assert.txt для получения дополнительной информации.

  • исправить проблему43: улучшить доктесты с улучшенным отчетом об отслеживании неожиданных исключений

  • исправление проблемы47: вывод времени в junitxml для тестовых примеров теперь корректен

  • исправление проблемы48: опечатка в MarkInfo repr приводила к исключению

  • исправить issue49: избежать путаницы при частичном сбое инициализации

  • исправление проблемы44: расширение env/username для пути к файлу junitxml

  • показывать информацию об уровне выпуска в тестовых запусках для pypy

  • переработаны страницы документов для лучшей навигации и создания PDF-файлов

  • сообщать о прерывании клавиатуры даже в случае прерывания во время запуска сессии

  • исправить проблему 35 - предоставить PDF-версию документа и ссылку на скачивание с индексной страницы

2.0.3 (2011-05-11)

  • исправление проблемы 38: более приятная трассировка вызовов хуков, особенно ранних конфигураций/запуска сессий

  • исправление отсутствующей информации о причине пропуска/меты в файлах junitxml, сообщено через http://lists.idyll.org/pipermail/testing-in-python/2011-March/003928.html.

  • исправление проблемы34: избежать сбоев в сборе с классами с префиксом «test», производными от object.

  • не требовать zlib (и другие библиотеки) для плагина genscript без фактического использования –genscript.

  • ускорить пропуски (не делая полного представления трассировки внутри)

  • исправление проблемы37: избегать недопустимых символов в выводе junitxml

2.0.2 (2011-03-09)

  • решить проблему32 - ускорить тестирование очень быстрых тестовых функций за счет снижения относительных накладных расходов

  • исправление issue30 - расширенная обработка xfail/skipif и улучшенные отчеты. Если в выражениях skip/xfail допущена синтаксическая ошибка, теперь вы получаете красивые отчеты об ошибках.

    Также теперь вы можете обращаться к глобальным файлам модуля из выражений xfail/skipif, так что теперь работает, например, следующее:

    import pytest
    import mymodule
    @pytest.mark.skipif("mymodule.__version__[0] == "1")
    def test_function():
        pass
    

    Это не приведет к запуску тестовой функции, если строка версии модуля не начинается с «1». Обратите внимание, что указание строки вместо булевых выражений позволяет py.test сообщать значимую информацию при подведении итогов выполнения теста о том, какие условия приводят к пропуску (или xfail-) тестов.

  • исправление проблемы28 - setup_method и pytest_generate_tests работают вместе Метод фикстуры setup_method теперь вызывается и для вызовов тестовых функций, сгенерированных хуком pytest_generate_tests.

  • исправление issue27 - collectonly и выбор ключевых слов (-k) теперь работают вместе Также, если вы сделаете «py.test –collectonly -q», вы получите плоский список идентификаторов тестов, который вы можете использовать для вставки в командную строку py.test, чтобы выполнить определенный тест.

  • исправление проблемы25 во избежание проблем с выводом –pdb и python3.2/encodings

  • исправление проблемы23 - аргумент tmpdir теперь работает на Python3.2 и WindowsXP Начиная с Python3.2 os.symlink может поддерживаться. Требуя более новую версию py lib, реализация py.path.local() признает это.

  • исправили опечатки в документации (спасибо Виктору Гарсия, Брианне Логер) и отдельное спасибо Лауре Крейтон, которая также просмотрела часть документации.

  • исправить немного неправильный вывод подробного отчета о ходе выполнения для классов (спасибо Amaury)

  • более точные (избегающие) предупреждения об устаревании для доступа к node.Class|Function

  • избегать вспомогательного кода std unittest assertion в трассировках (спасибо Ronny)

2.0.1 (2011-02-07)

  • уточнить и унифицировать начальный захват, чтобы он хорошо работал, даже если модуль протоколирования используется в рано загруженном файле conftest.py или плагине.

  • разрешить опускать «()» в идентификаторах тестов, чтобы обеспечить единообразие идентификаторов тестов, как это делает хороший плагин pytest.vim от Альфредо.

  • исправление проблемы12 - показывать версии плагинов с помощью «–version» и «–traceconfig», а также документировать, как добавить дополнительную информацию в заголовок теста отчетности

  • исправить проблему 17 (проблема с отчетностью import-* на python3), требуя py>1.4.0 (1.4.1 будет включать его)

  • исправление проблемы 10 (проверка истинности массивов numpy) путем уточнения интерпретации утверждений в py lib

  • исправить issue15: сделать тесты совместимости носа совместимыми с python3 (теперь, когда nose-1.0 поддерживает python3)

  • устранить несколько удивительное обнаружение «одинаковых conftest», поскольку он игнорирует conftest.py, когда они появляются в нескольких поддиректориях.

  • улучшить утверждения («не в»), спасибо Floris Bruynooghe

  • улучшить поведение/предупреждения при запуске поверх «python -OO» (assertions и docstrings отключены, что приводит к потенциальным ложным срабатываниям)

  • ввести хук pytest_cmdline_processargs(args) для динамического вычисления аргументов командной строки. Это исправляет регрессию, поскольку py.test до версии 2.0 позволял задавать параметры командной строки из файлов conftest.py, что до сих пор pytest-2.0 позволял делать только из ini-файлов.

  • исправление проблемы7: assert failures в модулях doctest. неожиданные отказы в doctest’ах, как правило, не будут отображаться более красиво, т.е. в контексте отказа doctest’а.

  • исправление проблемы9: функции setup/teardown для теста, помеченного xfail, будут сообщать о неудаче как xfail, но сообщать о нормальном прохождении (не xpassing) в случае успеха. Это справедливо только для «прямых» вызовов setup/teardown, потому что teardown_class/ teardown_module не могут быть тесно связаны с одним тестом.

  • исправление проблемы14: отсутствие ошибок протоколирования при завершении процесса

  • Уточнения для «сбора» вывода на не-ttys

  • уточнение внутренней регистрации плагинов и вывода –traceconfig

  • ввести механизм для предотвращения/отмены регистрации плагинов из командной строки, см. http://pytest.org/en/stable/how-to/plugins.html#cmdunregister

  • активировать плагин resultlog по умолчанию

  • исправление регрессии wrt приводило к появлению тестов, которые из-за семантики collection-before-running не настраивались, как в pytest 1.3.4. Заметим, однако, что рекомендуемым и гораздо более чистым способом параметризации тестов остается механизм «pytest_generate_tests», см. документацию.

2.0.0 (2010-11-25)

  • pytest-2.0 теперь является собственным пакетом и зависит от pylib-2.0

  • новая способность: python -m pytest / python -m pytest.main способность

  • новый вызов python: pytest.main(args, plugins) для ранней загрузки некоторых пользовательских плагинов.

  • стараться запускать наборы тестов unittest более совместимым образом, передавая семантику setup/teardown пакету unittest. также стараться запускать тесты twisted/trial и Django, которые теперь должны работать по умолчанию.

  • ввели новый способ задания параметров конфигурации через файлы ini-стиля, по умолчанию выполняется поиск в файлах setup.cfg и tox.ini. Старые способы (определенные переменные окружения, динамическое чтение conftest.py удалены).

  • добавить новую опцию «-q», которая уменьшает многословность и печатает вывод «точка» в стиле nose/unittest.

  • исправление проблемы135 - теперь метки работают и с тестовыми примерами unittest

  • исправить issue126 - ввести py.test.set_trace() для отслеживания выполнения через PDB во время выполнения тестов, даже если захват продолжается.

  • исправление проблемы123 - новый вызов «python -m py.test» для py.test (требуется Python 2.5 или выше)

  • исправить issue124 - повысить устойчивость отчетов к тестам, открывающим файлы на filedescriptor 1 (stdout).

  • исправление проблемы109 - файлы conftest.py братьев и сестер не будут загружаться. (и коллекторы директорий больше не могут быть настроены из conftest.py директории - это должно происходить как минимум на один уровень выше).

  • ввести (настраиваемые) представления сбоев утверждений и улучшить вывод информации о сбоях утверждений для сравнений и других случаев (Floris Bruynooghe)

  • nose-plugin: передавать ошибки подписи типов в функциях setup/teardown вместо того, чтобы не вызывать их (Ed Singleton)

  • удалить py.test.collect.Directory (следует из крупного рефакторинга и упрощения процесса сбора)

  • значительно сократить основной код py.test, перенести тестирование функций/питона в собственный плагин

  • исправление проблемы88 (поиск пользовательских тестовых узлов из аргумента командной строки)

  • уточнить создание „tmpdir“, теперь будут создаваться базовые имена, лучше связанные с именами тестов (спасибо Ronny)

  • Тесты «xpass» (неожиданный проход) не вызывают exitcode!=0

  • исправление проблемы131 / проблемы60 - импорт доктестов в файлы __init__, используемые в качестве пакетов пространства имен

  • исправление проблемы93 перехват stdout/stderr при импорте conftest.py

  • исправление ошибки: собранные функции unittest теперь также могут иметь «pytestmark» на уровне класса/модуля

  • добавить возможность использовать уровень «class» для помощника cached_setup

  • исправьте странность: объекты mark.* теперь неизменяемы, создавайте новые экземпляры

1.3.4 (2010-09-14)

  • исправить проблему111: улучшить документацию по установке для windows

  • исправление issue119: исправление возможности сбора __init__.py в качестве модуля

  • исправление проблемы116: –doctestmodules работает и с файлами __init__.py

  • исправление проблемы115: унификация пасстафинга внутренних исключений/catching/GeneratorExit

  • исправление issue118: новая –tb=native для представления стандартных исключений cpython

1.3.3 (2010-07-30)

  • исправление проблемы113: проблема представления утверждений для строк с тройными кавычками (и, возможно, в других случаях)

  • заставить загрузку conftest определять, что файл conftest с таким же содержимым уже был загружен, что позволяет избежать сюрпризов во вложенных структурах каталогов, которые могут быть созданы, например, Hudson. Вероятно, это устраняет необходимость использовать –confcutdir в большинстве случаев.

  • исправление раскраски терминала для win32 (спасибо Michael Foord за сообщение)

  • исправить странность: заставить определение ширины терминала работать на stdout, а не на stdin (спасибо Армину Ронахеру за сообщение)

  • удалить пробельные символы в конце всех файлов дистрибутива py/text

1.3.2 (2010-07-08)

Новые возможности

  • исправить issue103: представить py.test.raises в качестве менеджера контекста, примеры:

    with py.test.raises(ZeroDivisionError):
        x = 0
        1 / x
    
    with py.test.raises(RuntimeError) as excinfo:
        call_something()
    
    # you may do extra checks on excinfo.value|type|traceback here
    

    (спасибо Ронни Пфанншмидту)

  • Фабрики Funcarg теперь могут динамически применять маркер к вызову теста. Это, например, полезно, если фабрика предоставляет тесту параметры, которые ожидаются к отказу:

    def pytest_funcarg__arg(request):
        request.applymarker(py.test.mark.xfail(reason="flaky config"))
        ...
    
    def test_function(arg):
        ...
    
  • улучшен отчет об ошибках коллекции и импорта. Для этого используется более общий механизм, а именно: для пользовательских узлов test item/collect теперь единообразно вызывается node.repr_failure(excinfo), так что вы можете переопределить его, чтобы вернуть выбранное вами строковое представление ошибки, которое будет сообщено в виде (красной) строки.

  • ввести опцию „–junitprefix=STR“ для добавления префикса ко всем отчетам в файле junitxml.

Устранение ошибок

  • сделать тесты и, в частности, плагин pytest_recwarn полностью совместимыми с Python2.7 (если вы используете recwarn, предупреждения funcarg будут включены, чтобы вы могли правильно проверить их существование в кросс-питоновской манере).

  • refine –pdb: игнорировать xfailed тесты, унифицировать TB-отчетность и не показывать сбои в конце.

  • исправьте интерпретацию утверждений с помощью оператора ** (спасибо Бенджамину Петерсону)

  • исправление проблемы105 присваивания в той же строке, что и неудачное утверждение (спасибо Бенджамину Петерсону)

  • исправление проблемы104 правильного экранирования имен тестов в плагине junitxml (спасибо anonymous)

  • исправление проблемы57 -f|–looponfail для работы с тестами xpassing (спасибо Ronny)

  • исправление проблемы92 collectonly reporter и –pastebin (спасибо Бенджамину Петерсону)

  • исправьте py.code.compile(source) для создания уникальных имен файлов

  • устранить проблемы с повторным интерполированием утверждений на PyPy, отложив компиляцию кода в (переопределяемый) класс Frame.eval. (спасибо Amaury Forgeot)

  • исправьте py.path.local.pyimport() для работы с каталогами

  • оптимизировать реализацию и использование py.path.local.mkdtemp

  • не выводить пустые строки при отображении junitxml-filename

  • добавьте необязательный параметр boolean ignore_errors в py.path.local.remove

  • исправление записи терминала на win32/python2.4

  • py.process.cmdexec() теперь больше старается возвращать правильно закодированные объекты unicode на всех версиях python

  • установите обычные скрипты py.test/py.which также для Jython, это поможет получить канонические пути к скриптам в ситуациях с virtualenv

  • чтобы path.bestrelpath(path) возвращала «.», обратите внимание, что при вызове X.bestrelpath предполагается, что X - это каталог.

  • заставить начальное обнаружение conftest игнорировать аргументы с префиксом «–»

  • исправление плагина resultlog при использовании в ситуации multicpu/multihost xdist (спасибо Якубу Густаку)

  • выполнять отчетность, связанную с распределенным тестированием, в xdist-плагине, а не иметь код, связанный с распределенным тестированием, в общем дистрибутиве py.test

  • исправление обнаружения домашней папки в Windows

  • отправить distribute_setup.py версии 0.6.13

1.3.1 (2010-05-25)

Новые возможности

  • issue91: введен новый помощник py.test.xfail(reason) для императивной пометки теста как ожидаемо провального. Может использоваться из функций setup и test. Это особенно полезно для параметризованных тестов, когда определенные конфигурации ожидаются как неуспешные. В этом случае нельзя использовать декларативный подход с @py.test.mark.xfail, так как он пометит все конфигурации как xfail.

  • issue102: ввести новую опцию –maxfail=NUM для прекращения выполнения тестов после NUM неудач. Это обобщение опции „-x“ или „–exitfirst“, которая теперь эквивалентна „–maxfail=1“. И „-x“, и „–maxfail“ теперь будут также печатать строку в конце, указывающую на прерывание.

  • issue89: разрешить использование декораторов py.test.mark на классах (декораторы классов были введены в python2.6), а также разрешить применение нескольких маркеров на уровне класса/модуля путем указания списка.

  • улучшить и уточнить отчет о письмах в индикаторе выполнения: . пройден f провален тест s пропущенные тесты (напоминание: использовать только для несоответствия зависимостей/платформы) x xfailed test (тест, который ожидался как провальный) X xpassed test (тест, который ожидался как провальный, но прошел)

    Вы можете использовать любую комбинацию „fsxX“ с опцией расширенной отчетности „-r“. Результаты xfail/xpass будут отображаться как пропущенные тесты в выводе junitxml - это также исправляет проблему 99.

  • сделать так, чтобы py.test.cmdline.main() возвращала exitstatus, а не вызывала SystemExit, а также позволяла вызывать ее несколько раз. Это, конечно, требует, чтобы ваше приложение и тесты были правильно свернуты и не имели глобального состояния.

Устранение ошибок

  • улучшено представление трассировок: - улучшено и унифицировано представление трассировок для опции «–tb=short» - ошибки при импорте тестовых модулей значительно короче, (используя стиль –tb=short) - raises показывает более короткие более релевантные трассировки - –fulltrace теперь более систематически делает трассировки длиннее / препятствует сокращению

  • улучшена поддержка raises и другого динамически компилируемого кода путем манипулирования linecache.cache в python вместо прежнего довольно хакерского способа создания пользовательских объектов кода. Это позволяет ему без проблем работать на Jython и PyPy, где раньше этого не было.

  • исправление проблемы96: сделать захват более устойчивым к прерываниям Control-C (потребовался несколько существенный рефакторинг базовой функциональности захвата, чтобы избежать условий гонки).

  • исправление цепочки условных декораторов skipif/xfail - теперь использование нескольких декораторов @py.test.mark.skipif(condition) работает, как и ожидалось, включая конкретные сообщения о том, какие из условий приводят к пропуску.

  • исправить issue95: поздно импортировать zlib, чтобы он не требовался для общего запуска py.test.

  • исправить проблему94: сделать отчетность более устойчивой к фальшивому исходному коду (и внутри быть более осторожной при представлении неожиданных последовательностей байтов)

1.3.0 (2010-05-05)

  • отменить опцию –report в пользу новой, более короткой и легко запоминающейся опции -r: она принимает строковый аргумент, состоящий из любой комбинации символов „xfsX“. Они относятся к одиночным символам, которые вы видите во время точечной печати прогресса, и будут печатать дополнительную строку для каждого теста в конце выполнения теста. Эта дополнительная строка указывает точную позицию или идентификатор теста, который вы непосредственно вставляете в командную строку py.test, чтобы повторно запустить конкретный тест.

  • позволяет внешним плагинам регистрировать новые хуки с помощью нового хука pytest_addhooks(pluginmanager). Новая версия плагина pytest-xdist для распределенного и looponfailing тестирования требует этой возможности.

  • добавить новый хук pytest_ignore_collect(path, config), чтобы позволить проектам и плагинам определять поведение исключения для своей структуры каталогов - например, вы можете определить в conftest.py такой метод:

    def pytest_ignore_collect(path):
        return path.check(link=1)
    

    чтобы предотвратить даже попытку сбора любых тестов в симлинкованных каталогах.

  • новый хук pytest_pycollect_makemodule(path, parent) для возможности настройки объекта коллекции Module для соответствующего тестового модуля.

  • расширение и уточнение механизма xfail: @py.test.mark.xfail(run=False) не запускать декорированный тест @py.test.mark.xfail(reason="...") печатает строку причины в сводках xfail, указывая --runxfail в командной строке, практически игнорирует маркеры xfail

  • раскрывать (ранее внутренние) часто используемые методы: py.io.get_terminal_with() -> возвращать ширину терминала py.io.ansi_print(…) -> печатать цветной/жирный текст на linux/win32 py.io.saferepr(obj) -> возвращать строку ограниченного представления

  • раскрывать исключения, связанные с результатами тестирования, как py.test.skip.Exception, py.test.raises.Exception и т.д., полезные в основном для плагинов, выполняющих специальную интерпретацию/подстройку результатов тестирования

  • (issue85) исправление плагина junitxml для обработки тестов с неаскриптивным выводом

  • исправление/доработка совместимости с python3 (спасибо Бенджамину Петерсону)

  • исправления для обеспечения работы комбинации jython/win32, однако обратите внимание: jython2.5.1/win32 не предоставляет программу запуска из командной строки, см. https://bugs.jython.org/issue1491 . Как обойти эту проблему, смотрите в документации по установке pylib.

  • исправления для обработки значений исключений unicode и непечатаемых объектов

  • (issue87) исправление ошибки unboundlocal в коде assertionold

  • (issue86) улучшение документации для looponfailing

  • уточнение перехвата ввода-вывода: псевдофайл stdin-redirect теперь имеет метод NOP close()

  • отправить distribute_setup.py версии 0.6.10

  • добавлены ссылки на новые плагины capturelog и coverage

1.2.0 (2010-01-18)

  • уточненное использование и опции для «py.cleanup»:

    py.cleanup     # remove "*.pyc" and "*$py.class" (jython) files
    py.cleanup -e .swp -e .cache # also remove files with these extensions
    py.cleanup -s  # remove "build" and "dist" directory next to setup.py files
    py.cleanup -d  # also remove empty directories
    py.cleanup -a  # synonym for "-s -d -e 'pip-log.txt'"
    py.cleanup -n  # dry run, only show what would be removed
    
  • добавить новую опцию «py.test –funcargs», которая показывает доступные funcargs и их справочные строки (docstrings на соответствующую фабричную функцию) для заданного пути теста

  • выводить краткий и лаконичный traceback, если поиск funcarg завершился неудачно

  • ранняя загрузка файлов «conftest.py» в подкаталоги первого уровня без точки. позволяет удобно хранить и получать доступ к опциям, связанным с тестом, в подкаталоге test и при этом добавлять опции командной строки.

  • исправление проблемы67: новая суперкороткая опция печати трассировки: «–tb=line» выводит одну строку для каждого неудачного теста (python) с указанием имени файла, длины строки и значения ошибки.

  • исправление issue78: всегда вызывать функции разрушения на уровне python, даже если соответствующая установка не удалась. Это включает усовершенствования для вызова функций setup_module/class, которые теперь будут вызываться только один раз вместо предыдущего поведения, когда они вызывались несколько раз, если они вызывали исключение (включая исключение Skipped). Любое исключение будет повторно записано и связано со всеми тестами в соответствующей области видимости модуля/класса.

  • исправление проблемы63: считать <40 колонок ошибочной шириной терминала, по умолчанию - 80

  • исправление отладки pdb для корректного фрейма при ошибках, связанных с повышениями

  • обновить apipkg.py для устранения проблемы, когда рекурсивный импорт мог излишне нарушить импортирование

  • исправить ссылки на плагины

1.1.1 (2009-11-24)

  • перенесли dist/looponfailing из ядра py.test в новый отдельно выпущенный плагин pytest-xdist.

  • новый плагин junitxml: –junitxml=path будет генерировать xml-файл в стиле junit, который может быть обработан, например, системой Hudson CI.

  • новая опция: –genscript=path будет генерировать отдельный скрипт py.test, который не требует установки библиотек. спасибо Ralf Schmitt.

  • новая опция: –ignore предотвращает указанный путь от сбора. Может быть указан несколько раз.

  • новая опция: –confcutdir=dir заставит py.test рассматривать только те файлы conftest, которые находятся относительно указанного dir.

  • new funcarg: «pytestconfig» - это объект конфигурации pytest для доступа к аргументам командной строки, который теперь можно легко использовать в тесте.

  • устанавливать py.test и py.which с суффиксом -$VERSION, чтобы различать установленные версии Python3, python2.X, Jython и PyPy.

  • новая функция «pytestconfig» позволяет получить доступ к тестовому объекту конфигурации

  • новый хук «pytest_report_header» может возвращать дополнительные строки для отображения в заголовке тестового прогона.

  • (экспериментально) разрешить «py.test path::name1::name2::…» для прямого указания на тест в коллекции тестов. Со временем это может стать полноценной заменой спецификаций «-k».

  • оптимизирована загрузка плагинов: порядок теперь соответствует документированному в customize.html: setuptools, ENV, commandline, conftest. также имена точек входа setuptools приведены к каноническим именам («pytest_*»).

  • автоматически пропускать тесты, в которых требуется „capfd“, но нет os.dup

  • разрешить определять pytest_generate_tests и в классах

  • отказаться от использования атрибута „disabled“ в пользу pytestmark

  • deprecate definition of Directory, Module, Class and Function nodes in conftest.py files. Вместо этого используйте хуки pytest collect.

  • хуки runtest/collect, специфичные для узла коллекции/элемента, вызываются только в совпадающих файлах conftest.py, т.е. в тех, которые находятся точно ниже пути к файловой системе элемента

  • изменение: первый хук pytest_collect_directory, который что-то вернул, теперь не позволит вызывать последующие хуки.

  • изменение: для запуска плагина figleaf теперь требуется –figleaf. Также измените его длинные параметры командной строки на более короткие (см. py.test -h).

  • изменение: плагин pytest doctest теперь включен по умолчанию и имеет новую опцию –doctest-glob для установки шаблона для совпадений файлов.

  • изменение: удалить внутренние вспомогательные переменные py._*, оставить только py._pydir

  • повысить надежность захвата для выживания, если пользовательский код pytest_runtest_setup не сработал и не позволил запустить код настройки захвата.

  • сделать помощники py.test.*, предоставляемые плагинами по умолчанию, видимыми раньше - работает прозрачно как для pydoc, так и для интерактивных сессий, которые будут регулярно видеть, например, py.test.mark и py.test.importorskip.

  • упростить внутренний механизм менеджера плагинов

  • упростить внутреннее дерево коллекций, введя узел RootCollector

  • исправить реинтерпретацию assert, которая видит вызов, содержащий «keyword=…».

  • исправить issue66: вызывать хуки pytest_sessionstart и pytest_sessionfinish на рабочих узлах во время dist-тестирования, корректно сообщать о хуках разрыва модуля/сессии.

  • исправление проблемы65: правильно обрабатывать дист-тестирование, если удаленно не установлена библиотека execnet/py.

  • пропускать некоторые тесты установки, если не доступен execnet

  • исправление документации, исправление внутренней генерации bin/скриптов

1.1.0 (2009-11-05)

  • ввести автоматическую регистрацию плагинов через точки входа „pytest11“ через setuptools“ pkg_resources.iter_entry_points

  • исправьте py.test dist-testing для работы с execnet >= 1.0.0b4

  • повторное внедрение py.test.cmdline.main() для лучшей обратной совместимости

  • svn paths: исправлена ошибка с path.check(versioned=True) для svn paths, разрешено использовать „%“ в svn paths, svnwc.update() по умолчанию работает в интерактивном режиме, как в 1.0.x, и добавлен svnwc.update(interactive=False) для запрета взаимодействия.

  • уточнить распространяемый tarball, чтобы он содержал тестовые и не содержал pyc-файлы

  • старайтесь, чтобы предупреждения об устаревании для доступа к py.compat.* сообщали о правильном местоположении

1.0.3

  • корректировать и улучшать документы

  • удалить инструмент py.rest и внутреннее пространство имен - он никогда особо не рекламировался и все еще может быть использован со старым релизом, если это необходимо. Если есть интерес, его можно возродить в виде собственного инструмента.

  • исправить проблему48 и проблему59: вызывать ошибку, если модуль из импортированного тестового файла не похож на модуль из пути к файлу - позволяет избежать «одноименной» путаницы, о которой неоднократно сообщалось

  • объединены хаки Ронни для совместимости с носом: теперь поддерживаются функции setup_module() и setup() в стиле носа

  • ввести обобщенную функцию маркировки py.test.mark

  • перетасовка / уточнение группировки командной строки

  • deprecate parser.addgroup в пользу getgroup, который создает группу опций

  • добавить опцию командной строки –report, которая позволяет управлять показом пропущенных/неудачных секций

  • generalized skipping: новый способ пометить функции python как skipif или xfail на уровне функций, классов и модулей на основе атрибутов платформы или sys-модуля.

  • расширить декоратор py.test.mark, чтобы разрешить позиционные аргументы

  • ввести и протестировать «py.cleanup -d» для удаления пустых каталогов

  • исправление проблемы #59 - усиление коллекции тестов unittest

  • заставить взаимодействие bpython/help работать, добавив атрибут __all__ к ApiModule, очистка initpkg

  • использовать лицензию MIT для pylib, добавить некоторых участников

  • удалить код py.execnet и заменить все использования на „execnet“.

  • исправление проблемы50 - cached_setup теперь кэширует больше в соответствии с ожиданиями для тестовых функций с несколькими аргументами.

  • объединить исправления Жарко, выпуск #45 и #46

  • добавить возможность указать путь для поиска в py.lookup

  • исправить ошибку funcarg cached_setup, возникающую, вероятно, только в распределенном тестировании и в области действия «модуля» с разрывом.

  • множество исправлений и изменений для обеспечения совместимости кодовой базы с python3, большое спасибо Бенджамину Петерсону за помощь в этом.

  • консолидировать реализацию builtins для совместимости с >=2.3, добавить помощников для облегчения сохранения кода, совместимого с 2 и 3k

  • deprecate py.compat.doctest|subprocess|textwrap|optparse

  • deprecate py.magic.autopath, удалите каталог py/magic

  • перенести обработку утверждений pytest в py/code и плагин pytest_assertion, добавить опцию «–no-assert», деприватизировать пространства имен py.magic в пользу (меньших) пространств имен py.code.

  • консолидация и очистка классов и файлов py/code

  • очистка py/misc, перемещение тестов в bin-for-dist

  • ввести методы delattr/delitem/delenv в py.test’s monkeypatch funcarg

  • консолидировать реализацию py.log, удалить старый подход.

  • ввести py.io.TextIO и py.io.BytesIO для различения текста/юникода и байтовых потоков (используется базовый стандарт lib io.*, если он доступен).

  • сделать доступным вспомогательный скрипт py.unittest_convert, который конвертирует файлы стиля «unittest.py» в более простой стиль assert/direct-test-classes py.test/nosetests. Сценарий был написан Лорой Крейтон.

  • упрощенная реализация внутреннего локального пути

1.0.2 (2009-08-27)

  • исправление проблем с упаковкой, вызванных упаковкой fedora redhat, также в tarball добавлены файлы doc, examples и contrib.

  • добавлена ссылка на документацию к новому плагину django.

1.0.1 (2009-08-19)

  • добавлен плагин „pytest_nose“, который обрабатывает nose.SkipTest, установку/удаление функций/методов/генераторов в стиле nose и пытается корректно сообщать о функциях.

  • Запись юникода или кодированных строк в sys.stdout/err работает лучше, также запись терминала была адаптирована и несколько унифицирована между windows и linux.

  • значительно улучшена компоновка и содержание документации

  • добавлена опция «–help-config» для отображения имен conftest.py / ENV-var для всех опций командной строки longopt и некоторых специальных переменных conftest.py. переименовали параметр conftest „conf_capture“ в „option_capture“ соответственно.

  • исправление проблемы #27: улучшение отчетности о не собираемых элементах, заданных в командной строке (например, pyc-файлы)

  • исправление проблемы #33: добавлен флаг –version (спасибо Бенджамину Петерсону)

  • исправление проблемы #32: добавление поддержки «неполных» путей в wcpath.status()

  • Классы с префиксом «Test» больше не собираются по умолчанию, если у них есть метод __init__

  • monkeypatch setenv() теперь принимает параметр «prepend»

  • улучшенная отчетность об отслеживании ошибок при сборе

  • упрощен механизм мультивызовов и архитектура плагинов, переименованы некоторые внутренние методы и имена argnames

1.0.0 (2009-08-04)

  • более краткие отчеты пытаются показать путь к файловой системе относительно текущего dir

  • немного улучшить вывод xfail

1.0.0b9 (2009-07-31)

  • чисто обрабатывать и сообщать об окончательном разборе испытательной установки

  • исправление проблемы совместимости с svn-1.6 в py.path.svnwc().versioned() (спасибо Wouter Vanden Hove)

  • проблемы с установкой/снятием или сбором теперь отображаются как ОШИБКИ или с большой буквой «E» в строках прогресса. они сообщаются и подсчитываются отдельно.

  • dist-testing: правильно обрабатывать тестовые элементы, которые собираются локально, но не могут быть собраны на удаленной стороне - часто из-за причин, связанных с платформой/зависимостью

  • упрощен API py.test.mark - см. документацию по плагину ключевых слов

  • лучшая интеграция с протоколированием: захват теперь по умолчанию фиксирует тестовые функции и их непосредственную настройку/отключение в одном потоке

  • Функарги capsys и capfd теперь имеют метод readouterr() и close() (в основе лежит использование объектов py.io.StdCapture/FD, которые также имеют метод readouterr() для возврата снимков захваченных out/err).

  • улучшить работу ассертивной интерпретации со сравнениями, не возвращающими bools (сообщено с numpy из благодарности maciej fijalkowski).

  • переработали захват вывода для каждого теста в плагин pytest_iocapture.py и таким образом удалили код захвата из объекта config

  • item.repr_failure(excinfo) вместо item.repr_failure(excinfo, outerr)

1.0.0b8 (2009-07-22)

  • pytest_unittest-plugin теперь включен по умолчанию

  • введен хук pytest_keyboardinterrupt и доработан хук pytest_sessionfinish, добавлены тесты.

  • обход ошибки взаимодействия модуля протоколирования («закрытие уже закрытых файлов»). Спасибо Шридхару Ратнакумару за инициативу.

  • если плагины используют «py.test.importorskip» для импорта зависимости, вместо завершения процесса тестирования будет выдано только предупреждение.

  • много улучшений в документации: - доработан документ funcargs, используется термин «фабрика» вместо «провайдер» - добавлена новая страница документа talk/tutorial - улучшена страница загрузки - улучшены докстринги плагинов - добавлена новая страница плагинов и скрипт автоматической генерации документов

  • исправлена проблема с разрывом, связанная с частично неудачными установками funcarg (спасибо MrTopf за сообщение), «pytest_runtest_teardown» теперь всегда вызывается, даже если «pytest_runtest_setup» не удался.

  • исправлен вывод doctest для docstrings в py модулях, спасибо Радомиру.

1.0.0b7

  • переименовали py.test.xfail обратно в py.test.mark.xfail, чтобы избежать двух способов оформления для xfail

  • добавили декоратор py.test.mark для задания ключевых слов для функций (на самом деле это было задокументировано, поэтому удалять его было некрасиво)

  • удалить scope-аргумент из request.addfinalizer(), потому что request.cached_setup имеет scope arg. TOOWTDI.

  • выполнить окончательную настройку до сообщения о сбоях

  • применять модифицированные исправления от Андреаса Клоекнера, чтобы тестовые функции не имели кода func_code (#22) и чтобы ключевые слова «-k» и function работали (#20)

  • примените исправление от Daniel Peolzleithner (выпуск #23)

  • решить проблему #18, столкновение multiprocessing.Manager() и перенаправления

  • сделать __name__ == «__channelexec__» для кода remote_exec

1.0.0b3 (2009-06-19)

  • классы плагинов удалены: теперь можно определять хуки непосредственно в conftest.py или глобальных файлах pytest_*.py.

  • добавлен новый хук pytest_namespace(config), который позволяет внедрять хелперы непосредственно в пространство имен py.test.*.

  • документировано и усовершенствовано множество крючков

  • добавлен новый стиль генеративных тестов через хук pytest_generate_tests, который хорошо интегрируется с аргументами функций.

1.0.0b1

  • введен новый метод настройки «funcarg», см. doc/test/funcarg.txt

  • введена архитектура плагинов и множество новых плагинов py.test, см. doc/test/plugins.txt

  • teardown_method теперь гарантированно вызывается после выполнения метода тестирования.

  • новый метод: py.test.importorskip(mod,minversion) будет либо импортировать, либо вызывать py.test.skip()

  • полностью пересмотрена внутренняя архитектура py.test

  • новый объект py.process.ForkedFunc, позволяющий перебрасывать выполнение функции на подпроцесс и получать результат обратно.

XXX здесь много чего не хватает XXX

0.9.2

  • уточнил установку и метаданные, создал новый setup.py, теперь основанный на setuptools/ez_setup (спасибо Ralf Schmitt за поддержку).

  • улучшен способ сделать скрипты py.* доступными в среде windows, теперь они добавляются в каталог Scripts как файлы «.cmd».

  • py.path.svnwc.status() теперь более полный и использует вывод xml из команды „svn“, если он доступен (Guido Wesdorp)

  • исправление для py.path.svn* для работы с svn 1.5 (Крис Ламб)

  • исправьте метод path.relto(otherpath) в windows, чтобы использовать normcase для проверки относительности пути.

  • Трассировка py.test лучше разбирается из редакторов (следует соглашению filenames:LINENO: MSG) (спасибо Осмо Саломаа)

  • исправление в генерации javascript, теперь «py.test –runbrowser» должен работать более надежно

  • удалены ранее случайно добавленные хелперы py.test.broken и py.test.notimplemented.

  • теперь есть атрибут py.__version__

0.9.1

Это достаточно полный список v0.9.1, который может служить справочником для разработчиков.

  • Разрешение знаков + в урлах py.path.svn [39106]

  • исправлена поддержка исключений Failed без excinfo в py.test [39340]

  • добавлена поддержка убийства процессов для Windows (а также платформ, поддерживающих os.kill) в py.misc.killproc [39655]

  • добавил setup/teardown для генеративных тестов в py.test [40702]

  • добавлено обнаружение FAILED TO LOAD MODULE в py.test [40703, 40738, 40739].

  • исправлена проблема с вызовом .remove() на wcpaths неверсированных файлов в py.path [44248]

  • исправлены некоторые проблемы импорта и наследования в py.test [41480, 44648, 44655]

  • не удается запустить тесты greenlet, когда pypy доступен, но без stackless [45294]

  • небольшие исправления в тестах rsession [45295]

  • исправлена проблема с представлениями типов 2.5 в py.test [45483, 45484]

  • сделано так, чтобы отображение внутренних проблем отчетности выполнялось атомарно в py.test [45518]

  • сделано так, чтобы несуществующие файлы игнорировались скриптом py.lookup [45519]

  • улучшено создание имени исключения в py.test [45535]

  • сделано так, чтобы в execnet использовалось меньше потоков [объединено в 45539].

  • удалена блокировка, необходимая для отображения проблемы атомарного отчета в py.test [45545]

  • удалены глобальные файлы из execnet [45541, 45547]

  • рефакторинг механики очистки, сделано так, что setDaemon имеет значение 1, чтобы atexit вызывался в 2.5 (py.execnet) [45548]

  • исправлена ошибка при объединении потоков в servemain py.execnet [45549]

  • рефакторинг тестов py.test.rsession, чтобы больше не полагаться на точный формат вывода [45646]

  • использование repr() для результатов тестирования [45647]

  • добавлены классы „Reason“ для py.test.skip() [45648, 45649]

  • убили ненужную проверку на вменяемость в py.test.collect [45655]

  • избегайте использования os.tmpfile() в py.io.fdcapture, поскольку в Windows его могут использовать только администраторы [45901]

  • добавлена поддержка блокировки и нерекурсивных коммитов в py.path.svnwc [45994]

  • блокировка файлов в py.execnet для предотвращения сбоев CPython [46010]

  • добавлен метод export() в py.path.svnurl

  • исправлено -d -x в py.test [47277]

  • исправлена проблема с конкатенацией аргументов в py.path.svnwc [49423]

  • восстановить поведение py.test, чтобы он выходил с кодом 1 при наличии сбоев [49974]

  • don’t fail on html files that don’t have a accompanying .txt file [50606]

  • исправлено „utestconvert.py < input“ [50645]

  • небольшое исправление для отступов кода в py.code.source [50755]

  • исправить сборку документации _docgen.py [51285]

  • улучшена проверка исходного представления блоков кода в py.test [51292]

  • добавлена поддержка передачи аутентификации в объекты py.path.svn* [52000, 52001]

  • удален вызов sorted() для тестов py.apigen в пользу [].sort() для поддержки Python 2.3 [52481]

Вернуться на верх