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()при использовании для сравнения кортежей.
Улучшенная документация¶
Тривиальные/внутренние изменения¶
- #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,- intand- boolwere accepted; now- bytes,- complex,- re.Pattern,- Enumand 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.objto 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_scm6.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[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-callablelint на- 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-fileCLI опция и- log_fileini маркер теперь создают поддиректории, если это необходимо.
- 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_printini. Вместо них используйте- --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 "ValueError: Some error during setup""> 
Исправления ошибок¶
- 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: Добавьте поддержку сопоставления строк, идущих последовательно с - LineMatcher“- fnmatch_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 #6231: Улучшена проверка на неправильное написание pytest.mark.parametrize. 
- issue #6257: Обработка - pytest.exit(), используемого через- pytest_internalerror, например, при выходе из pdb из post mortem.
Исправления ошибок¶
- issue #5914: pytester: исправление - no_fnmatch_line()при использовании после положительного совпадения.
- issue #6082: Исправьте определение строк для примеров doctest внутри - propertydocstrings, как обходной путь для 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_metadatabackport на- 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_metadatabackport на- 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, но по умолчанию теперь только- short(с- auto).
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_familyINI принимает- 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 #2639: - pytest_namespaceбыл deprecated.
- issue #3661: Вызов функции приспособления напрямую, в отличие от запроса их в тестовой функции, теперь выдает - RemovedInPytest4Warning. См. the documentation for rationale and examples.
Характеристики¶
- 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)
Улучшенная документация¶
- Добавлена страница reference в документацию. (issue #1713) 
Тривиальные/внутренние изменения¶
- Измените минимальное требование - 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_markini для выбора того, какую метку применять, когда- @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) 
Тривиальные/внутренние изменения¶
- Очистка кода. (issue #3015, issue #3021) 
- Очистите код, заменив импорты и ссылки - _astна- ast. (issue #3018)
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-linttox для запуска автоматических исправлений 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_nameini для указания имени корня- <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): вызывается после финализатора приспособления и имеет доступ к кэшу результатов приспособления.
 
- Выдавайте предупреждения для утверждений, тест которых представляет собой литерал кортежа. Такие утверждения никогда не будут неудачными, потому что кортежи всегда истинны и обычно являются ошибкой (см. 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_strictini, которую можно использовать для настройки по проекту. Спасибо @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]