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
,int
andbool
were accepted; nowbytes
,complex
,re.Pattern
,Enum
and anything with a__имя__
.#9692:
pytest.approx()
теперь выдаетTypeError
, когда задается неупорядоченная последовательность (например,set
).Обратите внимание, что это означает, что пользовательские классы, которые реализуют только
__iter__
и__len__
, больше не поддерживаются, поскольку они не гарантируют порядок.
Исправления ошибок¶
#8242: Устранение возможности поднимать
unittest.SkipTest
для пропуска сбора тестов на этапе сбора pytest отменено - теперь это снова поддерживается.#9493: Символьные компоненты ссылок больше не разрешаются в путях контестов. Это означает, что если контест появляется дважды в дереве коллекции, используя симлинки, он будет выполнен дважды. Например, задано
tests/real/conftest.py tests/real/test_it.py tests/link -> tests/real
выполнение
pytest tests
теперь импортирует conftest дважды, один раз какtests/real/conftest.py
и один раз какtests/link/conftest.py
. Это исправление соответствует аналогичному изменению, внесенному в саму коллекцию тестов в pytest 6.0 (подробности см. в pull request #6523).#9626: Исправлен подсчет выбранных тестов в сводке коллекции терминалов при наличии ошибок или пропущенных модулей.
Если при сборе были ошибки или пропущенные модули, pytest ошибочно вычитал их из выбранного количества.
#9645: Исправлена регрессия, когда
--import-mode=importlib
, использованный вместе сPYTHONPATH
илиpythonpath
, приводил к ошибкам импорта в тестовых наборах.#9708:
pytester
теперь запрашивает фикстуруmonkeypatch
вместо того, чтобы создавать ее внутри. Это решает некоторые проблемы с тестами, в которых используются переменные окружения pytest.#9730: Неправильно сформированные файлы
pyproject.toml
теперь выдают более четкое сообщение об ошибке.
pytest 7.0.1 (2022-02-11)¶
Исправления ошибок¶
#9608: Исправление некорректного импорта
importlib.readers
в Python 3.9.#9610: Восстановите
UnitTestFunction.obj
to return unbound rather than bound method. Fixes a crash during a failed teardown in unittest TestCases with non-default__init__
. Устранено в pytest 7.0.0.#9636: Плагин
pythonpath
был переименован вpython_path
. Это позволяет избежать конфликта с плагиномpytest-pythonpath
.#9642: Исправление запуска тестов по id с
::
в части параметризации.#9643: Задержите выдачу
PytestWarning
о наследовании бриллиантов с участиемItem
иCollector
, чтобы его можно было отфильтровать с помощью standard warning filters.
pytest 7.0.0 (2022-02-03)¶
(Пожалуйста, смотрите полный набор изменений для этого выпуска также в примечаниях к 7.0.0rc1 ниже)
Амортизация¶
#9488: Если пользовательские подклассы узлов типа
pytest.Item
переопределяют метод__init__
, они должны принимать**kwargs
. Подробности см. в разделе Конструкторы пользовательских подклассов pytest.Node должны принимать **kwargs.Обратите внимание, что предупреждение об исправлении выдается только в том случае, если существует конфликт в аргументах, которые pytest ожидал передать. Это исправление уже было частью pytest 7.0.0rc1, но не было задокументировано.
Исправления ошибок¶
#9355: Исправлено сообщение об ошибке, печатающее декораторы функций при использовании assert в Python 3.8 и выше.
#9396: Убедитесь, что
pytest.Config.inifile
доступен во время хукаpytest_cmdline_main
(регрессия во время7.0.0rc1
).
Улучшенная документация¶
#9404: Добавлена дополнительная документация по альтернативам распространенных случаев неправильного использования
pytest.warns(None)
в преддверии его депривации.#9505: Уточните, где находятся файлы конфигурации. Во избежание путаницы в документации упоминается, что конфигурационный файл находится в корне хранилища.
Тривиальные/внутренние изменения¶
#9521: Добавьте покрытие тестов в путь перезаписи утверждений.
pytest 7.0.0rc1 (2021-12-06)¶
Разрывные изменения¶
#7259: Тип первого возвращаемого значения функции Node.reportinfo() был расширен с
py.path.local | str
доos.PathLike[str] | str
.Большинство плагинов, которые ссылаются на
reportinfo()
, определяют его только как часть пользовательской реализацииpytest.Item
. Посколькуpy.path.local
являетсяos.PathLike[str]
, эти плагины не имеют с ним ничего общего.Плагины и пользователи, которые вызывают
reportinfo()
, используют первое возвращаемое значение и взаимодействуют с ним как сpy.path.local
, должны будут адаптироваться, вызываяpy.path.local(fspath)
. Хотя предпочтительнее избегать унаследованногоpy.path.local
и использоватьpathlib.Path
, или использоватьitem.location
илиitem.path
, вместо этого.Примечание: pytest не смог предоставить период устаревания для этого изменения.
#8246:
--version
теперь записывает информацию о версии вstdout
, а не вstderr
.#8733: Удалите обходное решение для pyreadline, которое заставляло его работать с
--pdb
.Обходной путь был представлен в #1281 в 2015 году, однако с тех пор pyreadline seems to have gone unmaintained, является generating warnings, и перестанет работать на Python 3.10.
#9061: Использование
pytest.approx()
в булевом контексте теперь вызывает ошибку, подсказывающую правильное использование.Очевидно, что пользователи часто ошибочно используют
pytest.approx
таким образом:assert pytest.approx(actual, expected)
Хотя правильное использование - это:
assert actual == pytest.approx(expected)
Новое сообщение об ошибке помогает выявить эти ошибки.
#9277: Коллекторный тип
pytest.Instance
был удален. Импортpytest.Instance
или_pytest.python.Instance
возвращает фиктивный тип и выдает предупреждение об устаревании. Подробности см. в Коллектор pytest.Instance.#9308: PytestRemovedIn7Warning deprecation warnings теперь по умолчанию являются ошибками..
Следуя нашему плану по удалению устаревших функций с минимальными нарушениями, все предупреждения типа
PytestRemovedIn7Warning
теперь по умолчанию генерируют ошибки вместо предупреждений.Затронутые функции будут фактически удалены в pytest 7.1, поэтому обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.
В серии pytest
7.0.X
можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файлpytest.ini
:[pytest] filterwarnings = ignore::pytest.PytestRemovedIn7Warning
Но это перестанет работать, когда выйдет pytest
7.1
.Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #9308.
Амортизация¶
#7259:
py.path.local
аргументы для крючков были устаревшими. Подробную информацию смотрите в the deprecation note.py.path.local
аргументы конструкторов Node были устаревшими. Подробную информацию смотрите в the deprecation note.Примечание
Название аргументов и атрибутов
Node
(новый атрибут -path
) является противоположностью ситуации для крючков (старый аргумент -path
).Это досадный артефакт, вызванный историческими причинами, который должен быть устранен в будущих версиях, поскольку мы постепенно избавляемся от зависимости py (см. issue #9283 для более подробного обсуждения).
#7469: Прямое конструирование следующих классов теперь устарело:
_pytest.mark.structures.Mark
_pytest.mark.structures.MarkDecorator
_pytest.mark.structures.MarkGenerator
_pytest.python.Metafunc
_pytest.runner.CallInfo
_pytest._code.ExceptionInfo
_pytest.config.argparsing.Parser
_pytest.config.argparsing.OptionGroup
_pytest.pytester.HookRecorder
Эти конструкторы всегда считались приватными, но теперь выдают предупреждение об устаревании, которое может стать жесткой ошибкой в pytest 8.
#8242: Поднятие
unittest.SkipTest
для пропуска сбора тестов на этапе сбора pytest устарело. Вместо этого используйтеpytest.skip()
.Замечание: Это устаревание относится только к использованию
unittest.SkipTest
во время сбора тестов. Скорее всего, вы этого не делаете. Обычное использованиеunittest.SkipTest
/unittest.TestCase.skipTest()
/unittest.skip()
в unittest тестах полностью поддерживается.Примечание
Эта ошибка была исправлена в pytest 7.1.0.
#8315: Некоторые поведения
Parser.addoption
теперь запланированы к удалению в pytest 8 (deprecated с pytest 2.4.0):parser.addoption(..., help=".. %default ..")
- используйте вместо этого%(default)s
.parser.addoption(..., type="int/string/float/complex")
- используйте вместо этогоtype=int
и т.д.
#8447: Определение пользовательского типа узла pytest, который является одновременно
pytest.Item
иpytest.Collector
(например,pytest.File
), теперь выдает предупреждение. Это никогда разумно не поддерживалось и вызывало трудноотлаживаемые ошибки.Подробную информацию см. в разделе the deprecation note.
#8592:
pytest_cmdline_preparse
был официально устаревшим. Он будет удален в одном из будущих выпусков. Вместо него используйтеpytest_load_initial_conftests
.Подробную информацию см. в разделе the deprecation note.
#8645:
pytest.warns(None)
теперь устарел, потому что многие использовали его для обозначения «этот код не выдает предупреждений», но на самом деле он проверял, что код выдает хотя бы одно предупреждение любого типа - какpytest.warns()
илиpytest.warns(Warning)
.#8948: Сигнатуры
pytest.skip(msg=...)
,pytest.fail(msg=...)
иpytest.exit(msg=...)
теперь принимают аргументreason
вместоmsg
. Использованиеmsg
по-прежнему работает, но является устаревшим и будет удалено в одном из будущих выпусков.Это было изменено для согласованности с
pytest.mark.skip
иpytest.mark.xfail
, которые оба принимаютreason
в качестве аргумента.#8174: В типы, достижимые через
pytest.ExceptionInfo.traceback
, были внесены следующие изменения:Свойство
path
от_pytest.code.Code
возвращаетPath
вместоpy.path.local
.Свойство
path
от_pytest.code.TracebackEntry
возвращаетPath
вместоpy.path.local
.
Для этого изменения не было периода амортизации (извините!).
Характеристики¶
#5196: Тесты теперь упорядочены по порядку определения в большем количестве случаев.
В иерархии классов тесты из базовых классов теперь последовательно упорядочены перед тестами, определенными для их подклассов (обратный порядок MRO).
#7132: Добавлены две переменные окружения
PYTEST_THEME
иPYTEST_THEME_MODE
для того, чтобы пользователи могли настроить используемую тему pygments.#7259: Добавлено
cache.mkdir()
, которое аналогично существующемуcache.makedir()
, но возвращаетpathlib.Path
вместо унаследованногоpy.path.local
.Добавлен тип
paths
кparser.addini()
, как вparser.addini("mypaths", "my paths", type="paths")
, который аналогичен существующемуpathlist
, но возвращает списокpathlib.Path
вместо унаследованногоpy.path.local
.#7469: Типы объектов, используемые в API pytest, теперь экспортируются, чтобы их можно было использовать в аннотациях типов.
Новыми экспортируемыми типами являются:
pytest.Config
дляConfig
.pytest.Mark
дляmarks
.pytest.MarkDecorator
дляmark decorators
.pytest.MarkGenerator
для синглтонаpytest.mark
.pytest.Metafunc
для аргументаmetafunc
к крючкуpytest_generate_tests
.pytest.CallInfo
для типаCallInfo
, передаваемого различным крючкам.pytest.PytestPluginManager
дляPytestPluginManager
.pytest.ExceptionInfo
для типаExceptionInfo
, возвращаемого изpytest.raises()
и передаваемого различным хукам.pytest.Parser
для типаParser
, переданного в крючокpytest_addoption
.pytest.OptionGroup
для типаOptionGroup
, возвращаемого из методаparser.addgroup
.pytest.HookRecorder
для типаHookRecorder
, возвращаемого изPytester
.pytest.RecordedHookCall
для типаRecordedHookCall
, возвращаемого изHookRecorder
.pytest.RunResult
для типаRunResult
, возвращаемого изPytester
.pytest.LineMatcher
для типаLineMatcher
, используемого вRunResult
и других.pytest.TestReport
для типаTestReport
, используемого в различных крючках.pytest.CollectReport
для типаCollectReport
, используемого в различных крючках.
Конструирование большинства из них напрямую не поддерживается; они предназначены только для использования в аннотациях типов. Это приведет к предупреждению об устаревании и может стать жесткой ошибкой в pytest 8.0.
Их подклассы также не поддерживаются. В настоящее время это не соблюдается во время выполнения, но обнаруживается программами проверки типов, такими как mypy.
#7856: –import-mode=importlib теперь работает с функциями, которые зависят от модулей на
sys.modules
, такими какpickle
иdataclasses
.#8144: Следующие крючки теперь получают дополнительный аргумент
pathlib.Path
, эквивалентный существующему аргументуpy.path.local
:pytest_ignore_collect
- Параметрcollection_path
(эквивалентен существующему параметруpath
).pytest_collect_file
- Параметрfile_path
(эквивалентен существующему параметруpath
).pytest_pycollect_makemodule
- Параметрmodule_path
(эквивалентен существующему параметруpath
).pytest_report_header
- Параметрstart_path
(эквивалентен существующему параметруstartdir
).pytest_report_collectionfinish
- Параметрstart_path
(эквивалентен существующему параметруstartdir
).
Примечание
Название аргументов и атрибутов
Node
(новый атрибут -path
) является противоположностью ситуации для крючков (старый аргумент -path
).Это досадный артефакт, вызванный историческими причинами, который должен быть устранен в будущих версиях, поскольку мы постепенно избавляемся от зависимости py (см. issue #9283 для более подробного обсуждения).
#8251: Реализуйте
Node.path
какpathlib.Path
. Как старыйfspath
, так и этот новый атрибут устанавливается независимо от того, передается ли конструкторуpath
илиfspath
(deprecated). Это замена атрибутаfspath
(который представляет тот же путь, что иpy.path.local
). Хотяfspath
еще не устарел из-за продолжающегося перехода на такие методы, какreportinfo()
, мы ожидаем, что он будет устаревшим в одном из будущих выпусков.Примечание
Название аргументов и атрибутов
Node
(новый атрибут -path
) является противоположностью ситуации для крючков (старый аргумент -path
).Это досадный артефакт, вызванный историческими причинами, который должен быть устранен в будущих версиях, поскольку мы постепенно избавляемся от зависимости py (см. issue #9283 для более подробного обсуждения).
#8421:
pytest.approx()
теперь работает наDecimal
в связках/дискретах и последовательностях/списках.#8606: вызовы pytest с
--fixtures-per-test
и--fixtures
были обогащены:Путь расположения приспособления печатается с именем приспособления.
Первый раздел документальной строки приспособления, выводимый под именем приспособления.
Целая документальная строка приспособления, выведенная под именем приспособления с помощью опции
--verbose
.
#8761: Новый атрибут pytest.version_tuple, который упрощает пользователям возможность делать что-то в зависимости от версии pytest (например, объявлять хуки, которые появляются в более поздних версиях).
#8789: Переключение парсера TOML с
toml
наtomli
для поддержки TOML v1.0.0 вpyproject.toml
.#8920: Добавлена
pytest.Stash
, возможность для плагинов хранить свои данные наConfig
иNode
в безопасной и свободной от конфликтов манере. Подробности смотрите в Хранение данных об элементах через функции hook.#8953:
RunResult
методassert_outcomes
теперь принимает аргументwarnings
для утверждения общего количества перехваченных предупреждений.#8954: Флаг
--debug
теперь принимает файлstr
для маршрутизации журналов отладки, по умолчанию остаетсяpytestdebug.log
.#9023: Теперь для утверждений равенства итераций всегда показываются полные диффы, если в окружении найдено
CI
илиBUILD_NUMBER
, даже если-v
не используется.#9113:
RunResult
методassert_outcomes
теперь принимает аргументdeselected
для подтверждения общего количества отмененных тестов.#9114: Добавлена настройка
pythonpath
, которая добавляет перечисленные пути вsys.path
на время тестовой сессии. Если вы сейчас используете плагины pytest-pythonpath или pytest-srcpaths, вы можете заменить их встроенной настройкойpythonpath
.
Улучшения¶
#7480: Изъятие, которое планируется удалить в основной версии X (например, pytest 7, 8, 9, …), теперь использует категорию предупреждений
PytestRemovedInXWarning
, подклассPytestDeprecationWarning
, вместоPytestDeprecationWarning
напрямую.Более подробную информацию см. в разделе Политика обратной совместимости.
#7864: Улучшены сообщения об ошибках при разборе предупреждающих фильтров.
Ранее pytest показывал внутренний откат трассировки, который кроме того, что был некрасивым, иногда скрывал причину проблемы (например,
ImportError
при импорте определенного типа предупреждения).#8335: Улучшены сообщения утверждения
pytest.approx()
для последовательностей чисел.Сообщения утверждения теперь сбрасывают таблицу с индексом и ошибкой каждого различия. Пример:
> assert [1, 2, 3, 4] == pytest.approx([1, 3, 3, 5]) E assert comparison failed for 2 values: E Index | Obtained | Expected E 1 | 2 | 3 +- 3.0e-06 E 3 | 4 | 5 +- 5.0e-06
#8403: По умолчанию pytest будет усекать длинные строки в ошибках assert, чтобы они не слишком загромождали вывод, сейчас по умолчанию это
240
символов.Однако в некоторых случаях более длинный вывод помогает или даже имеет решающее значение для диагностики сбоя. Использование
-v
теперь увеличит порог усечения до2400
символов, а-vv
и выше полностью отключит усечение.#8509: Исправлена проблема, при которой
unittest.TestCase.setUpClass()
не вызывался, если тест имеет/
в своем имени, начиная с pytest 6.2.0.Это относится к части пути в идентификаторах узлов pytest, например,
TestClass::test_it
в идентификаторе узлаtests/test_file.py::TestClass::test_it
.Теперь вместо предположения, что имя теста не содержит
/
, предполагается, что путь теста не содержит::
. Мы планируем надеяться, что оба эти варианта будут работать в будущем.#8803: Теперь можно добавлять цвета к пользовательским уровням журнала в журнале cli.
Используя
add_color_level
с крючкаpytest_configure
, можно добавить цвета:logging_plugin = config.pluginmanager.get_plugin('logging-plugin') logging_plugin.log_cli_handler.formatter.add_color_level(logging.INFO, 'cyan') logging_plugin.log_cli_handler.formatter.add_color_level(logging.SPAM, 'blue')
Для получения дополнительной информации см. раздел Настройка цветов.
#8822: При отображении путей к фикстурам в
--fixtures
или--fixtures-by-test
, фикстуры, приходящие из самого pytest, теперь отображают элиминированный путь, а не полный путь к файлу в каталогеsite-packages
.#8898: Комплексные числа теперь обрабатываются как плавающие и целые числа при генерации идентификаторов параметризации.
#9062:
--stepwise-skip
теперь неявно включает--stepwise
и может использоваться самостоятельно.#9205:
pytest.Cache.set()
теперь сохраняет порядок ключей при сохранении матриц.
Исправления ошибок¶
#7124: Исправлена проблема, при которой
__main__.py
вызывал ошибкуImportError
, когда было предоставлено--doctest-modules
.#8061: Исправлена ошибка с ошибками в тестовых случаях
staticmethod
, если они наследуются от родительского тестового класса.#8192:
testdir.makefile
теперь молча принимает значения, которые не начинаются с.
для поддержания обратной совместимости со старыми версиями pytest.pytester.makefile
теперь выдает более четкую ошибку, если.
отсутствует в аргументеext
.#8258: Исправлена проблема, из-за которой поддержка
faulthandler
в pytest не выводила трассировку при сбоях, если модульfaulthandler
уже был включен во время запуска pytest (например, с помощьюpython -X dev -m pytest
).#8317: Исправлена проблема, при которой недопустимые символы каталога, полученные из
getpass.getuser()
, вызывали ошибкуOSError
.#8367: Исправьте
Class.from_parent
так, чтобы он передавал лишние аргументы ключевых слов в конструктор.#8377: Опции выбора теста
pytest -k
иpytest -m
теперь поддерживают сопоставление имен, содержащих символы прямой косой черты (/
).#8384: Декоратор
@pytest.mark.skip
теперь правильно обрабатывает свои аргументы. Когда аргументreason
случайно задан и как позиционный, и как ключевое слово (например, потому что его перепутали сskipif
), теперь происходит проверкаTypeError
. Раньше такие проверки молча пропускались, а позиционный аргумент игнорировался. Кроме того,reason
теперь правильно документируется как позиционное или ключевое слово (а не только как ключевое слово).#8394: Используйте приватные имена для внутренних фикстур, которые обрабатывают классическую установку/исчезновение, чтобы они не отображались при вызове
--fixtures
по умолчанию (но они по-прежнему отображаются при--fixtures -v
).#8456: Опция конфигурации
required_plugins
теперь работает корректно, когда установлены предварительные версии плагинов, вместо того, чтобы ошибочно утверждать, что эти плагины вообще не установлены.#8464:
-c <config file>
теперь также правильно определяетrootdir
как каталог, содержащий<config file>
.#8503:
pytest.MonkeyPatch.syspath_prepend()
больше не срабатывает, еслиsetuptools
не установлен. Теперь он вызываетpkg_resources.fixup_namespace_packages()
только еслиpkg_resources
был ранее импортирован, поскольку в противном случае он не нужен.#8548: Введено исправление для обработки точной ширины в
log-cli-format
в свою очередь для исправления раскраски вывода для некоторых форматов.#8796: Исправлена внутренняя ошибка при пропуске доктестов.
#8983: Опции выбора теста
pytest -k
иpytest -m
теперь поддерживают сопоставление имен, содержащих символы обратной косой черты (`\`). Обратные косые черты воспринимаются буквально, а не как экранирующие символы (значения, с которыми производится сравнение, уже экранированы).#8990: Исправление падения
pytest -vv
с внутренним исключениемAttributeError: 'str' object has no attribute 'relative_to'
в некоторых случаях.#9077: Исправлено непонятное сообщение об ошибке, когда доступ к
request.fspath
/request.path
осуществлялся из фикстуры, скопированной на сессию.#9131: Исправлен URL, используемый
--pastebin
, на использование bpa.st.#9163: Номер конечной строки и смещение конечного столбца теперь правильно устанавливаются для переписанных утверждений assert.
#9169: Поддержка API
files
изimportlib.resources
внутри переписанных файлов.#9272: Фиксы
setup()
иteardown()
на уровне модуля совместимости с носом теперь вызываются только один раз на модуль, а не для каждой тестовой функции. Теперь они вызываются, даже если определеныsetup
/teardown
на уровне объекта.
Улучшенная документация¶
#4320: Улучшена документация для
pytester.copy_example
.#5105: Добавить автоматически сгенерированный Список плагинов. Список обновляется по периодическому расписанию.
#8337: Рекомендуйте модуль numpy.testing на
pytest.approx()
документации.#8655: Текст справки для
--pdbcls
более точно отражает поведение опции.#9210: Удалите неверную информацию в документации о том, что
confcutdir
является опцией конфигурации: она может быть установлена только через опцию командной строки--confcutdir
.#9242: Обновите конфигурацию readthedocs, чтобы использовать
newer Ubuntu version <https://blog.readthedocs.com/new-build-specification/>`__
с лучшей поддержкой юникода для PDF-документов.#9341: Различные методы, обычно используемые для Работа с непитоновскими тестами, теперь правильно документированы в справочной документации. Ранее они были недокументированы.
Тривиальные/внутренние изменения¶
#8133: Переход на
setuptools_scm
6.x для использованияSETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST
для более надежного инструментария выпуска.#8174: Следующие изменения были внесены во внутренние типы/функции pytest:
Функция
_pytest.code.getfslineno()
возвращаетPath
вместоpy.path.local
.Функция
_pytest.python.path_matches_patterns()
принимаетPath
вместоpy.path.local
.Функция
_pytest._code.Traceback.cut()
принимает любыеos.PathLike[str]
, а не толькоpy.path.local
.
#8248: Внутренняя реструктуризация: пусть
python.PyObjMixin
наследуется отnodes.Node
, чтобы перенести информацию о типизации.#8432: улучшено сообщение об ошибке, когда
pytest.skip()
используется на уровне модуля без передачиallow_module_level=True
.#8818: Убедитесь, что
regendoc
отказывается от выбора кэшираTOX_ENV
, чтобы обеспечить независимый запуск теста примера.#8913: Атрибут private
CallSpec2._arg2scopenum
был удален после внутренней рефакторинга.#8967:
pytest_assertion_pass
больше не считается экспериментальным, и будущие изменения в нем будут рассматриваться более тщательно.#9202: Добавьте действие github для загрузки отчета о покрытии в codecov вместо загрузчика bash.
#9225: Изменена команда, используемая для создания артефактов sdist и wheel: используется пакет build вместо setup.py.
#9351: Исправьте незначительные опечатки в doc/en/example/special.rst.
pytest 6.2.5 (2021-08-29)¶
Тривиальные/внутренние изменения¶
issue #8494: Теперь поддерживается Python 3.10.
issue #9040: Включить совместимость с
pluggy 1.0
или более поздней версией.
pytest 6.2.4 (2021-05-04)¶
Исправления ошибок¶
issue #8539: Исправлена перезапись утверждений в Python 3.10.
pytest 6.2.3 (2021-04-03)¶
Исправления ошибок¶
issue #8414: pytest создавал каталоги под именем
/tmp
с правами на чтение, доступными для всего мира. Это означает, что любой пользователь в системе мог прочитать информацию, записанную тестами во временных каталогах (например, созданных фикстуройtmp_path
/tmpdir
). Теперь каталоги создаются с закрытыми правами доступа.Раньше pytest молча использовал уже существующий каталог
/tmp/pytest-of-<username>
, даже если он принадлежал другому пользователю. Это означало, что другой пользователь мог предварительно создать такой каталог и получить контроль над временным каталогом другого пользователя. Теперь такое условие приводит к ошибке.
pytest 6.2.2 (2021-01-25)¶
Исправления ошибок¶
issue #8152: Исправлено отображение «(<Пропущенный экземпляр>)» в качестве причины пропуска в строке краткой сводки теста, когда причина пуста.
issue #8249: Исправьте плагин
faulthandler
для случаев, когда он работает сtwisted.logger
и используетpytest --capture=no
.
pytest 6.2.1 (2020-12-15)¶
Исправления ошибок¶
issue #7678: Исправлена ошибка, при которой
ImportPathMismatchError
возникала ошибка для файлов, скомпилированных в хосте и загруженных позже из UNC смонтированного пути (Windows).issue #8132: Исправлена регрессия в
approx
: в 6.2.0approx
больше не вызывает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-callable
lint наpytest.mark.parametrize()
и другие встроенные метки:skip
,skipif
,xfail
,usefixtures
,filterwarnings
.issue #7559: Исправление регрессии в плагинах, использующих
TestReport.longreprtext
(например,pytest-html
), когдаTestReport.longrepr
не является строкой.issue #7569: Исправление того, что уровень обработчика захвата журнала не сбрасывался при разрыве после вызова
caplog.set_level()
.
pytest 6.0.0 (2020-07-28)¶
(Пожалуйста, смотрите полный набор изменений для этого выпуска также в примечаниях к версии 6.0.0rc1 ниже)
Разрывные изменения¶
issue #5584: PytestDeprecationWarning теперь являются ошибками по умолчанию..
В соответствии с нашим планом по удалению устаревших функций с минимальными нарушениями, все предупреждения типа
PytestDeprecationWarning
теперь генерируют ошибки вместо предупреждений.Затронутые функции будут фактически удалены в pytest 6.1, поэтому, пожалуйста, обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.
В серии pytest
6.0.X
можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файлpytest.ini
:[pytest] filterwarnings = ignore::pytest.PytestDeprecationWarning
Но это перестанет работать, когда выйдет pytest
6.1
.Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #5584.
issue #7472: Методы
exec_()
иis_true()
в_pytest._code.Frame
были удалены.
Характеристики¶
issue #7464: Добавлена поддержка переменных окружения
NO_COLOR
иFORCE_COLOR
для управления цветным выводом.
Улучшения¶
issue #7467:
--log-file
CLI опция иlog_file
ini маркер теперь создают поддиректории, если это необходимо.issue #7489: Функция
pytest.raises()
имеет более четкое сообщение об ошибке, когдаmatch
равна полученной строке, но не является совпадением с regex. В этом случае предлагается экранировать regex.
Исправления ошибок¶
issue #7392: Исправьте сообщение о местоположении тестов, пропущенных с помощью
@pytest.mark.skip
при использовании--runxfail
.issue #7491:
tmpdir
иtmp_path
больше не вызывают ошибку, если блокировка для проверки устаревших временных каталогов недоступна.issue #7517: Сохранять окончания строк при захвате через
capfd
.issue #7534: Восстановлено прежнее форматирование
TracebackEntry.__str__
, которое было изменено случайно.
Улучшенная документация¶
issue #7422: Уточнено, когда метка
usefixtures
может применять приспособления для тестирования.issue #7441: Добавьте примечание об опции
-q
, используемой в руководстве по началу работы.
Тривиальные/внутренние изменения¶
issue #7389: Область применения приспособления
package
больше не считается экспериментальной.
pytest 6.0.0rc1 (2020-07-08)¶
Разрывные изменения¶
issue #1316:
TestReport.longrepr
теперь всегда является экземпляромReprExceptionInfo
. Ранее это былstr
, когда тест проваливался сpytest.fail(..., pytrace=False)
.issue #5965: симлинки больше не разрешаются во время сбора и сопоставления файлов
conftest.py
с путями к тестовым файлам.Разрешение симлинков для текущего каталога и во время сбора было представлено как исправление в версии 3.9.0, но на самом деле это новая функция, которая привела к печальным последствиям в Windows и удивительным результатам на других платформах.
Команда решила отказаться от разрешения симлинков вообще, планируя пересмотреть этот вопрос в будущем с более надежным решением (подробнее см. обсуждение в pull request #6523).
Это может нарушить работу тестовых наборов, которые использовали эту возможность; исправление заключается в создании симлинка для всего дерева тестов, а не только для частичных файлов/тестов, как это было возможно ранее.
issue #6505:
Testdir.run().parseoutcomes()
теперь всегда возвращает разобранные существительные в форме множественного числа.Первоначально
parseoutcomes()
всегда возвращало существительные во множественном числе, но изменение, призванное улучшить сводку терминала за счет использования одиночных элементов в единственном числе (1 warning
или1 error
), вызвало непреднамеренный регресс, изменив ключи, возвращаемыеparseoutcomes()
.Теперь API гарантирует, что всегда будет возвращаться форма множественного числа, поэтому вызовы, подобные этому:
result = testdir.runpytest() result.assert_outcomes(error=1)
Необходимо изменить на:
result = testdir.runpytest() result.assert_outcomes(errors=1)
issue #6903: Теперь предполагается, что функция
os.dup()
существует. Мы не знаем ни одной поддерживаемой реализации Python 3, которая бы ее не предоставляла.issue #7040:
-k
больше не сопоставляет имена каталогов вне корня тестовой сессии.Кроме того,
pytest.Package.name
теперь является просто именем каталога, содержащего файл пакета__init__.py
, вместо полного пути. Это соответствует тому, как названы другие узлы, а также является одной из причин, почему-k
будет соответствовать любой директории, содержащей тестовый пакет.issue #7122: Выражения, заданные в опциях
-m
и-k
, больше не оцениваются с помощью Python’овскогоeval()
. Формат поддерживаетor
,and
,not
, скобки и общие идентификаторы для сравнения. Константы, ключевые слова и другие операторы Python больше не оцениваются по-другому.issue #7135: Pytest теперь использует свой собственный класс
TerminalWriter
вместо класса из библиотекиpy
. Плагины обычно обращаются к этому классу черезTerminalReporter.writer
,TerminalReporter.write()
(и подобные методы) или_pytest.config.create_terminal_writer()
.Были внесены следующие изменения:
Вывод (метод
write()
и другие) больше не промывается неявно; поведение промывки базового файла соблюдается. Для явного промывания (например, если вы хотите, чтобы вывод был показан до печати конца строки), используйтеwrite(flush=True)
илиterminal_writer.flush()
.Явная поддержка консоли Windows была удалена и передана библиотеке colorama.
Удалена поддержка записи
bytes
.Метод
reline
и свойствоchars_on_current_line
были удалены.Аргументы
stringio
иencoding
были удалены.Удалена поддержка передачи вызываемого файла вместо файла.
issue #7224: Атрибуты
item.catch_log_handler
иitem.catch_log_handlers
, устанавливаемые плагином логирования и никогда не предназначенные для публичного использования, больше не доступны.Удалены устаревшие опции
--no-print-logs
иlog_print
ini. Вместо них используйте--show-capture
.issue #7226: Удален неиспользуемый параметр
args
изpytest.Function.__init__
.issue #7418: Удалена спецификация хука
pytest_doctest_prepare_content
. Этот хук не вызывался pytest уже как минимум 10 лет.issue #7438: Некоторые изменения были внесены во внутренний
_pytest._code.source
, приведенные здесь для пользы авторов плагинов, которые могут его использовать:Аргумент
deindent
вSource()
был удален, теперь он всегда истинен.Поддержка нулевых или множественных аргументов для
Source()
была удалена.Удалена поддержка сравнения
Source
сstr
.Методы
Source.isparseable()
иSource.putaround()
были удалены.Метод
Source.compile()
и функция_pytest._code.compile()
были удалены; вместо них используйте обычныеcompile()
.Функция
_pytest._code.source.getsource()
была удалена; вместо нее используйте непосредственноSource()
.
Амортизация¶
issue #7210: Специальный синтаксис
-k '-expr'
к-k
является устаревшим. Вместо него используйте-k 'not expr'
.Специальный синтаксис
-k 'expr:'
к-k
устарел. Пожалуйста, откройте проблему, если вы используете его и хотите замену.issue #4049:
pytest_warning_captured
устарел в пользу хукаpytest_warning_recorded
.
Характеристики¶
issue #1556: pytest теперь поддерживает
pyproject.toml
файлы для конфигурации.Параметры конфигурации аналогичны тем, что доступны в других форматах, но должны быть определены в таблице
[tool.pytest.ini_options]
, чтобы быть подхваченными pytest:# pyproject.toml [tool.pytest.ini_options] minversion = "6.0" addopts = "-ra -q" testpaths = [ "tests", "integration", ]
Более подробную информацию можно найти in the docs.
issue #3342: pytest теперь включает аннотации типов inline и открывает их для пользовательских программ. Охвачена большая часть API, ориентированного на пользователя, а также внутренний код.
Если вы используете в своих тестах программу проверки типов, такую как mypy, вы можете начать замечать ошибки типов, указывающие на их неправильное использование. Если вы столкнулись с ошибкой, которую вы считаете неправильной, пожалуйста, сообщите нам об этом в проблеме.
Типы были разработаны для версии mypy 0.780. Известно, что версии до 0.750 не работают. Мы рекомендуем использовать последнюю версию. Другие средства проверки типов также могут работать, но они еще официально не подтверждены pytest.
issue #4049: Введен новый хук
pytest_warning_recorded
для передачи информации о предупреждениях, перехваченных внутренним плагином предупрежденийpytest
.Этот хук предназначен для замены
pytest_warning_captured
, который устарел и будет удален в будущем релизе.issue #6471: Новые флаги командной строки:
--no-header
: отключает начальный заголовок, включая платформу, версию и плагины.--no-summary
: отключает итоговое резюме теста, включая предупреждения.
issue #6856: Теперь при чтении неизвестного ключа из INI-файла конфигурации выдается предупреждение.
Флаг
--strict-config
был добавлен, чтобы рассматривать эти предупреждения как ошибки.issue #6906: Добавлена опция командной строки
--code-highlight
для включения/выключения подсветки кода в выводе терминала.issue #7245: Новая опция
--import-mode=importlib
, которая используетimportlib
для импорта тестовых модулей.Традиционно pytest использовал
__import__
, изменяяsys.path
для импорта тестовых модулей (что также изменяетsys.modules
как побочный эффект), что работает, но имеет ряд недостатков, например, требует, чтобы тестовые модули, которые не живут в пакетах, имели уникальные имена (поскольку они должны находиться под уникальным именем вsys.modules
).--import-mode=importlib
использует более тонкие механизмы импорта изimportlib
, которые не требуют от pytest измененияsys.path
илиsys.modules
вообще, устраняя большую часть недостатков предыдущего режима.Мы намерены сделать
--import-mode=importlib
по умолчанию в будущих версиях, поэтому пользователям рекомендуется попробовать новый режим и оставить отзыв (как положительный, так и отрицательный) в выпуске issue #7245.Подробнее об этой опции вы можете прочитать в the documentation.
issue #7305: Новый параметр конфигурации
required_plugins
позволяет пользователю указать список плагинов, включая информацию о версии, которые необходимы для работы pytest. Если при запуске pytest не будет найден ни один из требуемых плагинов, будет выдана ошибка.
Улучшения¶
issue #4375: Команда
pytest
теперь подавляет сообщение об ошибкеBrokenPipeError
, которое печатается на stderr, когда выводpytest
передается по трубопроводу, а трубопровод закрывается программой-трубопроводом (обычные примеры -less
иhead
).issue #4391: Улучшена точность измерения продолжительности теста. У элементов
CallInfo
теперь есть новый атрибут<CallInfo>.duration
, созданный с помощьюtime.perf_counter()
. Этот атрибут используется для заполнения атрибута<TestReport>.duration
, который является более точным, чем предыдущие<CallInfo>.stop - <CallInfo>.start
(поскольку они основаны наtime.time()
).issue #4675: Богатое сравнение для классов данных и
attrs
-классов теперь рекурсивно.issue #6285: Раскрыто исключение
pytest.FixtureLookupError
, которое вызываетсяrequest.getfixturevalue()
(гдеrequest
является фикстуройFixtureRequest
), когда фикстура с заданным именем не может быть возвращена.issue #6433: Если при форматировании сообщения в вызове логирования возникает ошибка, например
logging.warning("oh no!: %s: %s", "first")
(отсутствует второй аргумент), pytest теперь распространяет ошибку, что может привести к неудаче теста.Ранее такая ошибка приводила к печати ошибки в stderr, которая по умолчанию не отображается при прохождении тестов. Это изменение делает ошибку видимой во время тестирования.
Вы можете временно или постоянно подавить это поведение, установив
logging.raiseExceptions = False
.issue #6817: Сохраняются явные новые строки в текстах справки по опциям командной строки, что позволяет плагинам лучше контролировать справку, отображаемую пользователям.
issue #6940: При использовании опции
--duration
вывод сообщений терминала теперь более точно указывает количество и продолжительность скрытых элементов.issue #6991: Собранные файлы отображаются после любых отчетов от хуков, например, статус от
--lf
.issue #7091: Когда используется захват
fd
через--capture=fd
или через фиксаторыcapfd
иcapfdbinary
, и дескриптор файла (0, 1, 2) не может быть продублирован, захват FD все равно выполняется. Ранее прямая запись в дескрипторы файлов в этом случае не выполнялась или терялась.issue #7119: Выход с ошибкой, если аргумент
--basetemp
пуст, является текущим рабочим каталогом или одним из родительских каталогов. Это сделано для защиты от случайной потери данных, так как любой каталог, переданный в этом аргументе, очищается.issue #7128:
pytest --version
теперь показывает только версию pytest, в то время какpytest --version --version
отображает более подробную информацию, включая плагины. Это больше соответствует тому, как другие инструменты показывают--version
.issue #7133:
caplog.set_level()
теперь будет переопределять любыеlog_level
, установленные через CLI или конфигурационный файл.issue #7159:
caplog.set_level()
иcaplog.at_level()
больше не влияют на уровень журналов, которые отображаются в разделе отчета Отчет о захваченных журналах.issue #7348: Улучшение рекурсивного отчета diff для утверждений сравнения на классах данных / атрибутах.
issue #7385:
--junitxml
теперь включает причину исключения в XML-атрибутmessage
для сбоев при установке и разрушении.Ранее:
<error message="test setup failure">
Сейчас:
<error message="failed on setup with "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 внутри
property
docstrings, как обходной путь для bpo-17446.issue #6254: Исправление совместимости с pytest-parallel (регрессия в pytest 5.3.0).
issue #6255: Очистите атрибуты
sys.last_traceback
,sys.last_type
иsys.last_value
, удалив их вместо того, чтобы установить их вNone
. Это лучше соответствует поведению стандартной библиотеки Python.
pytest 5.3.0 (2019-11-19)¶
Амортизация¶
issue #6179: Значение по умолчанию опции
junit_family
изменится на"xunit2"
в pytest 6.0, учитывая, что именно эта версия поддерживается по умолчанию в современных инструментах, манипулирующих этим типом файлов.Чтобы сгладить переход, pytest будет выдавать предупреждение в случае, если опция
--junitxml
задана в командной строке, ноjunit_family
не настроена явно вpytest.ini
.Для получения дополнительной информации see the docs.
Характеристики¶
issue #4488: Команда pytest создала плагин pytest-reportlog, который предоставляет новую опцию
--report-log=FILE
, записывающую логи отчетов в файл по мере выполнения тестовой сессии.Каждая строка журнала отчетов содержит самодостаточный объект JSON, соответствующий событию тестирования, такому как коллекция или отчет о результатах тестирования. После записи каждой строки файл гарантированно промывается, поэтому системы могут читать и обрабатывать события в режиме реального времени.
Плагин предназначен для замены опции
--resultlog
, которая устарела и должна быть удалена в будущем релизе. Если вы используете--resultlog
, пожалуйста, попробуйтеpytest-reportlog
и оставьте отзыв.issue #4730: Если установлено значение
sys.pycache_prefix
(Python 3.8+), оно будет использоваться pytest для кэширования тестовых файлов, измененных механизмом перезаписи утверждений.Это облегчает использование кэшированных файлов
.pyc
даже на файловых системах без прав доступа.issue #5515: Разрешить выборочное автоиндентирование многострочных сообщений журнала.
Добавляет опцию командной строки
--log-auto-indent
, опцию конфигурацииlog_auto_indent
и поддержку настройки поведения отступов для каждого вхождения при вызовеlogging.log()
.Изменяет значение по умолчанию для автозамещения с
"on"
на"off"
. Это восстанавливает старое поведение, существовавшее до версии 4.6.0. Этот возврат к более раннему поведению был сделан потому, что лучше активировать новые возможности, которые могут привести к поломке тестов, явно, а не неявно.issue #5914:
testdir
изучил две новые функции,no_fnmatch_line()
иno_re_match_line()
.Эти функции используются для проверки того, что захваченный текст не соответствует заданному шаблону.
Предыдущая идиома заключалась в использовании
re.match()
:result = testdir.runpytest() assert re.match(pat, result.stdout.str()) is None
Или оператор
in
:result = testdir.runpytest() assert text in result.stdout.str()
Но новые функции дают лучший результат при неудаче.
issue #6057: Добавлены допуски к сложным значениям при печати
pytest.approx
.Например,
repr(pytest.approx(3+4j))
возвращает(3+4j) ± 5e-06 ∠ ±180°
. Это полярная нотация, обозначающая круг вокруг ожидаемого значения с радиусом 5e-06. Чтобы сравнениеapprox
возвращалоTrue
, фактическое значение должно попадать в этот круг.issue #6061: Добавил pluginmanager в качестве аргумента к
pytest_addoption
, чтобы можно было вызывать хуки при настройке опций командной строки. Это полезно для того, чтобы один плагин сообщал другому плагину, например, значения по умолчанию или набор опций командной строки для добавления.
Улучшения¶
issue #5061: Используйте несколько цветов в сводной статистике терминала.
issue #5630: Выход из отладчика теперь правильно обрабатывается в элементах
doctest
.issue #5924: Улучшен вывод verbose diff с последовательностями.
До:
E AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...] E Right contains 3 more items, first extra item: ' ' E Full diff: E - ['version', 'version_info', 'sys.version', 'sys.version_info'] E + ['version', E + 'version_info', E + 'sys.version', E + 'sys.version_info', E + ' ', E + 'sys.version', E + 'sys.version_info']
После:
E AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...] E Right contains 3 more items, first extra item: ' ' E Full diff: E [ E 'version', E 'version_info', E 'sys.version', E 'sys.version_info', E + ' ', E + 'sys.version', E + 'sys.version_info', E ]
issue #5934:
repr
объектовExceptionInfo
была улучшена для соблюдения метода__repr__
основного исключения.issue #5936: Отображение неусеченного сообщения об утверждении с
-vv
.issue #5990: Исправлено несоответствие множественности в сводке тестов (например, отображение «1 ошибка» вместо «1 ошибки»).
issue #6008:
Config.InvocationParams.args
теперь всегдаtuple
, чтобы лучше передать, что он должен быть неизменяемым и избегать случайных модификаций.issue #6023:
pytest.main
теперь возвращает экземплярpytest.ExitCode
, за исключением случаев, когда используются пользовательские коды выхода (тогда он возвращаетint
).issue #6026: Выравнивание префиксов в выводе pytester’s
LineMatcher
.issue #6059: Ошибки сбора сообщаются как ошибки (а не сбои, как раньше) в краткой сводке теста в терминале.
issue #6069:
pytester.spawn
больше не пропускает/xfail тесты на FreeBSD безоговорочно.issue #6097: Индикатор «[…%]» в сводке теста теперь окрашен в соответствии с основным цветом финальной (новой) многоцветной линии.
issue #6116: Добавлено
--co
в качестве синонима к--collect-only
.issue #6148:
atomicwrites
теперь используется только в Windows, исправляя регресс производительности при перезаписи утверждений на Unix.issue #6152: Теперь параметризация будет использовать атрибут
__name__
любого объекта для id, если он присутствует. Ранее она использовала__name__
только для функций и классов.issue #6176: Улучшен отчет об ошибках при использовании pytester’s
Hookrecorder.assertoutcome
.issue #6181: Причина остановки сессии, например, с помощью
--maxfail
/-x
, теперь сообщается в резюме теста.issue #6206: Улучшена надежность и производительность
cache.set
.
Исправления ошибок¶
issue #2049: Исправлено
--setup-plan
, показывающее неточную информацию о сроках службы приспособлений.issue #2548: Исправлено несоответствие смещения строки пропущенных тестов в сводке терминала.
issue #6039:
PytestDoctestRunner
теперь правильно аннулируется при снятии конфигурации плагина doctest.Это важно при использовании
pytester
сrunpytest_inprocess
.issue #6047: BaseExceptions теперь обрабатываются в
saferepr
, который включаетpytest.fail.Exception
и т.д.issue #6074: pytester: исправлен порядок аргументов в предупреждении
rm_rf
при очистке временных каталогов, и не выдаются предупреждения для ошибок сos.open
.issue #6189: Исправлен результат метода
getmodpath
.
Тривиальные/внутренние изменения¶
issue #4901:
RunResult
изpytester
теперь отображает мнемонику атрибутаret
, когда он является допустимым значениемpytest.ExitCode
.
pytest 5.2.4 (2019-11-15)¶
Исправления ошибок¶
issue #6194: Исправление некорректного обнаружения нетестовых файлов
__init__.py
.issue #6197: Пересмотр «Первый тест в пакете (
__init__.py
), помеченный@pytest.mark.skip
, теперь правильно пропускается.».
pytest 5.2.3 (2019-11-14)¶
Исправления ошибок¶
issue #5830: Первый тест в пакете (
__init__.py
), помеченный@pytest.mark.skip
, теперь правильно пропускается.issue #6099: Исправьте
--trace
при использовании с параметризованными функциями.issue #6183: Использование
request
в качестве имени параметра в@pytest.mark.parametrize
теперь выдает более удобную для пользователя ошибку.
pytest 5.2.2 (2019-10-24)¶
Исправления ошибок¶
issue #5206: Исправьте
--nf
, чтобы не забывать об известных узлах при частичном выборе теста.issue #5906: Исправление сбоя при
KeyboardInterrupt
во время--setup-show
.issue #5946: Исправлена проблема при параметризации приспособлений с помощью массивов numpy (и, возможно, других типов, подобных последовательности).
issue #6044: Правильно игнорировать исключения
FileNotFoundError
при попытке удаления старых временных каталогов, например, когда несколько процессов пытаются удалить один и тот же каталог (часто встречается, например, вpytest-xdist
).
pytest 5.2.1 (2019-10-06)¶
Исправления ошибок¶
issue #5902: Исправьте предупреждения об устаревшем атрибуте
cmp
вattrs>=19.2
.
pytest 5.2.0 (2019-09-28)¶
Амортизация¶
issue #1682: Передача аргументов в pytest.fixture() как позиционных аргументов устарела - вместо этого передавайте их как аргумент ключевого слова.
Характеристики¶
issue #1682: Параметр
scope
в@pytest.fixture
теперь может быть вызываемой переменной, которая получает имя приспособления и объектconfig
в качестве параметров только для ключевого слова. Дополнительную информацию см. в разделе the docs.issue #5764: Новое поведение опции
--pastebin
: сообщается об ошибках при подключении к серверу pastebin, без отказа выполнения pytest
Исправления ошибок¶
issue #5806: Исправьте «lexer», используемый при загрузке на bpaste.net с
--pastebin
на «text».issue #5884: Исправьте
--setup-only
и--setup-show
для пользовательских элементов pytest.
Тривиальные/внутренние изменения¶
issue #5056: HelpFormatter использует
py.io.get_terminal_width
для лучшего определения ширины.
pytest 5.1.3 (2019-09-18)¶
Исправления ошибок¶
issue #5807: Исправьте pypy3.6 (nightly) на windows.
issue #5811: Правильно обрабатывайте
--fulltrace
сpytest.raises
.issue #5819: Windows: Исправление регрессии с conftest, чье квалифицированное имя содержит символы верхнего регистра (введено в #5792).
pytest 5.1.2 (2019-08-30)¶
Исправления ошибок¶
issue #2270: Исправлена ссылка
self
в функционально-скопированных фикстурах, определяющих классы плагинов: ранееself
была ссылкой на класс test, а не на класс plugin.issue #570: Исправлена давняя проблема, из-за которой не соблюдалась область видимости приспособлений, когда при параметризации использовались косвенные приспособления.
issue #5782: Исправление ошибки декодирования при печати ответа на ошибку от
--pastebin
.issue #5786: Цепочки исключений в отчетах тестов и коллекций теперь правильно сериализуются, что позволяет плагинам типа
pytest-xdist
правильно их отображать.issue #5792: Windows: Исправление ошибки, возникающей в определенных обстоятельствах при загрузке
conftest.py
из рабочего каталога, имеющего корпус, отличный от хранящегося в файловой системе (например,c:\test
вместоC:\test
).
pytest 5.1.1 (2019-08-20)¶
Исправления ошибок¶
issue #5751: Исправлено
TypeError
при импорте pytest на Python 3.5.0 и 3.5.1.
pytest 5.1.0 (2019-08-15)¶
Перемещение¶
issue #5180: В соответствии с нашей политикой, следующие функции были устаревшими в серии 4.X и теперь удалены:
Request.getfuncargvalue
: используйтеRequest.getfixturevalue
вместо этого.pytest.raises
иpytest.warns
больше не поддерживают строки в качестве второго аргумента.message
параметрpytest.raises
.pytest.raises
,pytest.warns
иParameterSet.param
теперь используют родной синтаксис только для ключевых слов. Это может изменить сообщение об исключении из предыдущих версий, но они, как и раньше, поднимаютTypeError
при неизвестных аргументах ключевых слов.pytest.config
глобальная переменная.tmpdir_factory.ensuretemp
метод.pytest_logwarning
крючок.RemovedInPytest4Warning
тип предупреждения.request
теперь является зарезервированным именем для фиксаторов.
Для получения дополнительной информации обратитесь к Амортизация и удаление в документации.
issue #5565: Удален неиспользуемый код поддержки для unittest2.
Модуль бэкпорта
unittest2
больше не нужен с Python 3.3+, и небольшое количество кода в pytest для его поддержки также, похоже, не используется: после удаления все тесты проходят без изменений.Хотя наша политика заключается в том, чтобы вводить период амортизации перед удалением каких-либо функций или поддержки сторонних библиотек, поскольку этот код, по-видимому, вообще не используется (даже если
unittest2
используется тестовым набором, выполняемым pytest), было решено удалить его в этом релизе.Если у вас возникнет регресс из-за этого, пожалуйста, file an issue.
issue #5615:
pytest.fail
,pytest.xfail
иpytest.skip
больше не поддерживают байты для аргумента сообщения.Это поддерживалось в Python 2, где было заманчиво использовать
"message"
вместоu"message"
.Код Python 3 вряд ли будет передавать
bytes
в эти функции. Если вы это сделаете, пожалуйста, предварительно декодируйте его вstr
.
Характеристики¶
issue #5564: Новый атрибут
Config.invocation_args
, содержащий неизменные аргументы, переданные вpytest.main()
.issue #5576: Новая опция NUMBER для doctests, позволяющая игнорировать несущественные различия в числах с плавающей точкой. Вдохновлено расширением numtest для doctest Себастьяна Буажеро.
Улучшения¶
issue #5471: JUnit XML теперь включает метку времени и имя хоста в тег testsuite.
issue #5707: Время, затраченное на выполнение набора тестов, теперь включает человекочитаемое представление, когда оно занимает более 60 секунд, например:
===== 2 failed in 102.70s (0:01:42) =====
Исправления ошибок¶
issue #4344: Исправьте RuntimeError/StopIteration при попытке собрать пакет только с «__init__.py».
issue #5115: Предупреждения, выдаваемые во время
pytest_configure
, явно не рассматриваются как ошибки, даже если они настроены как таковые, потому что иначе это полностью ломает pytest.issue #5477: XML-файл, создаваемый
--junitxml
, теперь правильно содержит корневой элемент<testsuites>
.issue #5524: Исправление проблемы, когда
tmp_path
иtmpdir
не удаляли каталоги, содержащие файлы, помеченные как доступные только для чтения, что могло привести к аварийному завершению pytest при выполнении во второй раз с опцией--basetemp
.issue #5537: Замените
importlib_metadata
backport наimportlib.metadata
из стандартной библиотеки на Python 3.8+.issue #5578: Улучшена проверка типов для некоторых функций, вызывающих исключения (
pytest.xfail
,pytest.skip
и т.д.), чтобы они выдавали лучшие сообщения об ошибках, когда пользователи хотели использовать знаки (например,@pytest.xfail
вместо@pytest.mark.xfail
).issue #5606: Исправлена внутренняя ошибка, когда тестовые функции исправлялись с объектами, которые нельзя сравнивать на истинность с другими, например, с массивами
numpy
.issue #5634:
pytest.exit
теперь правильно обрабатывается вunittest
случаях. Это заставляет случаиunittest
правильно обрабатыватьquit
из pdb pytest.issue #5650: Улучшен вывод при неудачном разборе конфигурационного файла ini.
issue #5701: Исправьте коллекцию объектов
staticmethod
, определенных с помощьюfunctools.partial
.issue #5734: Пропустите тестовые функции генератора async и обновите предупреждение, чтобы оно ссылалось на функции
async def
.
Улучшенная документация¶
issue #5669: Добавьте docstring для
Testdir.copy_example
.
Тривиальные/внутренние изменения¶
issue #5095: XML файлы семейства
xunit2
теперь проверяются на соответствие схеме собственным набором тестов pytest, чтобы избежать будущих регрессий.issue #5516: Функция разделения узлов кэша, которая может улучшить производительность сбора в очень больших наборах тестов.
issue #5603: Упрощен внутренний класс
SafeRepr
и удален некоторый мертвый код.issue #5664: При вызове собственного набора тестов pytest с помощью
PYTHONDONTWRITEBYTECODE=1
тестtest_xfail_handling
больше не завершается неудачей.issue #5684: Замените ручную обработку
OSError.errno
в кодовой базе новыми подклассамиOSError
(PermissionError
,FileNotFoundError
и т.д.).
pytest 5.0.1 (2019-07-04)¶
Исправления ошибок¶
issue #5479: улучшено цитирование в сообщении о неудачном совпадении
raises
.issue #5523: Исправлено использование нескольких коротких опций вместе в командной строке (например,
-vs
) в Python 3.8+.issue #5547:
--step-wise
теперь правильно обрабатывает маркерыxfail(strict=True)
.
Улучшенная документация¶
issue #5517: Улучшение раздела «Объявление новых хуков» в главе «Написание плагинов»
pytest 5.0.0 (2019-06-28)¶
Важно¶
Этот выпуск предназначен только для Python3.5+.
Для получения более подробной информации см. наш Python 2.7 and 3.4 support plan.
Перемещение¶
issue #1149: Pytest больше не принимает префиксы аргументов командной строки, например, вводя
pytest --doctest-mod
вместо--doctest-modules
. Ранее это допускалось, еслиArgumentParser
считался однозначным, но это могло быть неверно из-за задержки разбора опций для плагинов. Смотрите, например, проблемы issue #1149, issue #3413 и issue #4009.issue #5402: PytestDeprecationWarning теперь являются ошибками по умолчанию..
В соответствии с нашим планом по удалению устаревших функций с минимальными нарушениями, все предупреждения типа
PytestDeprecationWarning
теперь генерируют ошибки вместо предупреждений.Затронутые функции будут фактически удалены в pytest 5.1, поэтому, пожалуйста, обратитесь к разделу Амортизация и удаление в документации за указаниями по обновлению существующего кода.
В серии pytest
5.0.X
можно изменить ошибки обратно на предупреждения в качестве временной меры, добавив это в ваш файлpytest.ini
:[pytest] filterwarnings = ignore::pytest.PytestDeprecationWarning
Но это перестанет работать, когда выйдет pytest
5.1
.Если у вас есть опасения по поводу удаления конкретной функции, пожалуйста, добавьте комментарий по адресу issue #5402.
issue #5412: Объекты
ExceptionInfo
(возвращаемыеpytest.raises
) теперь имеют такое же представлениеstr
, как иrepr
, что позволяет избежать некоторой путаницы, когда пользователи используютprint(e)
для осмотра объекта.Это означает код типа:
with pytest.raises(SomeException) as e: ... assert "some message" in str(e)
Должно быть изменено на:
with pytest.raises(SomeException) as e: ... assert "some message" in str(e.value)
Амортизация¶
issue #4488: Удаление опции и модуля
--result-log
было отложено до (предварительно) pytest 6.0, поскольку команда пока не смогла реализовать хорошую альтернативу для него.issue #466: Атрибут
funcargnames
был псевдонимом дляfixturenames
со времен pytest 2.3, и теперь он также устарел в коде.
Характеристики¶
issue #3457: Новый хук
pytest_assertion_pass
, вызываемый с информацией о контексте, когда утверждение проходит.Этот крючок все еще экспериментальный, поэтому используйте его с осторожностью.
issue #5440: Модуль стандартной библиотеки
faulthandler
теперь включен по умолчанию, чтобы помочь пользователям диагностировать сбои в модулях C.Эта функциональность была предоставлена путем интеграции внешнего плагина pytest-faulthandler в ядро, поэтому пользователям следует удалить этот плагин из своих требований, если он используется.
Для получения дополнительной информации см. документацию: Обработчик неисправностей.
issue #5452: Когда предупреждения настроены как ошибки, предупреждения pytest теперь отображаются как исходящие от
pytest.
вместо внутреннего модуля_pytest.warning_types.
.issue #5125:
Session.exitcode
значения теперь кодируются вpytest.ExitCode
, anIntEnum
. Это делает код выхода доступным для потребительского кода и более явным, чем просто документация. Определенные пользователем коды выхода все еще действительны, но должны использоваться с осторожностью.Команда не ожидает, что это изменение нарушит работу тестовых наборов или плагинов в целом, за исключением эзотерических/специфических сценариев.
Пользователи pytest-xdist должны перейти на версию
1.29.0
или более позднюю, посколькуpytest-xdist
требует исправления совместимости из-за этого изменения.
Исправления ошибок¶
issue #1403: Переключение с
imp
наimportlib
.issue #1671: Имя файлов
.pyc
, кэшируемых составителем утверждений, теперь включает версию pytest, чтобы избежать устаревших кэшей.issue #2761: Честь PEP 235 на файловых системах, не чувствительных к регистру.
issue #5078: Тестовый модуль больше не импортируется дважды при использовании
--pyargs
.issue #5260: Улучшено сравнение байтовых строк.
При сравнении байтов используется утверждающее сообщение, показывающее числовое значение байта при отображении различий:
def test(): > assert b'spam' == b'eggs' E AssertionError: assert b'spam' == b'eggs' E At index 0 diff: 115 != 101 E Use -v to get the full diff
Теперь вместо него отображается фактическое представление ascii, что зачастую более удобно:
def test(): > assert b'spam' == b'eggs' E AssertionError: assert b'spam' == b'eggs' E At index 0 diff: b's' != b'e' E Use -v to get the full diff
issue #5335: Раскрашивает имена уровней, когда уровень в формате логирования имеет формат „%(levelname).Xs“ (усеченное выравнивание по фиксированной ширине), где X - целое число.
issue #5354: Исправьте
pytest.mark.parametrize
, когда argvalues является итератором.issue #5370: Верните разворачивание
all()
, чтобы исправитьNameError
на вложенных постижениях.issue #5371: Верните разворачивание
all()
, чтобы исправить неправильную обработку генераторов сif
.issue #5372: Верните разворачивание
all()
для исправления неверного утверждения при использованииall()
в выражении.issue #5383:
-q
снова влияет на стиль собранных предметов (--collect-only
), когда используется--log-cli-level
.issue #5389: Исправление регрессий pull request #5063 для
importlib_metadata.PathDistribution
, у которых атрибутfiles
являетсяNone
.issue #5390: Исправление регрессии, при которой атрибут
obj
у элементовTestCase
больше не привязывался к методам.issue #5404: Выдавать предупреждение, когда попытка развернуть сломанный объект приводит к исключению, для облегчения отладки (issue #5080).
issue #5432: Предотвращение предупреждений «already imported» от assertion rewriter при многократном вызове pytest in-process.
issue #5433: Исправление перезаписи утверждений в пакетах (
__init__.py
).issue #5444: Исправьте режим
--stepwise
, когда первый файл, переданный в командной строке, не удается собрать.issue #5482: Исправление ошибки, появившейся в версии 4.6.0, которая приводила к ошибкам сбора при передаче более 2 позиционных аргументов в
pytest.mark.parametrize
.issue #5505: Исправление сбоя при неудачном обнаружении при использовании
-p no:terminal
.
Улучшенная документация¶
issue #5315: Расширьте документацию по мокингу классов и словарей с помощью
monkeypatch
.issue #5416: Исправьте PytestUnknownMarkWarning в примере run/skip.
pytest 4.6.11 (2020-06-04)¶
Исправления ошибок¶
issue #6334: Исправление двойного отображения итоговых записей, когда символы отчета
f/F
иs/S
использовались одновременно в опции командной строки-r
(например,-rFf
).Варианты с верхним регистром никогда не документировались, и предпочтительной формой должен быть нижний регистр.
issue #7310: Исправьте
UnboundLocalError: local variable 'letter' referenced before assignment
в_pytest.terminal.pytest_report_teststatus()
, когда плагины возвращают объекты отчетов в нестандартном состоянии.Это заставляло
pytest_report_teststatus()
пропускать ветви if-блока, которые объявляют переменнуюletter
.Исправление заключалось в установке начального значения
letter
перед каскадом if-блоков, чтобы он всегда имел значение.
pytest 4.6.10 (2020-05-08)¶
Характеристики¶
issue #6870: Новый атрибут
Config.invocation_args
, содержащий неизменные аргументы, переданные вpytest.main()
.Замечание: хотя технически это новая функция, и согласно нашему policy она не должна была быть перенесена, мы сделали исключение в данном конкретном случае, поскольку она исправляет серьезное взаимодействие с
pytest-xdist
, поэтому ее также можно считать исправлением.
Тривиальные/внутренние изменения¶
issue #6404: Удалите использование модуля
parser
, устаревшего в Python 3.9.
pytest 4.6.9 (2020-01-04)¶
Исправления ошибок¶
issue #6301: Исправление перезаписи утверждений для дистрибутивов на основе яиц и установок
editable
(pip install --editable
).
pytest 4.6.8 (2019-12-19)¶
Характеристики¶
issue #5471: JUnit XML теперь включает метку времени и имя хоста в тег testsuite.
Исправления ошибок¶
issue #5430: junitxml: Логи для неудачного теста теперь передаются в отчет junit в случае, если тест не прошел во время фазы вызова.
Тривиальные/внутренние изменения¶
issue #6345: Привязка
colorama
к0.4.1
только для Python 3.4, чтобы более новые версии Python могли получать обновления colorama.
pytest 4.6.7 (2019-12-05)¶
Исправления ошибок¶
issue #5477: XML-файл, создаваемый
--junitxml
, теперь правильно содержит корневой элемент<testsuites>
.issue #6044: Правильно игнорировать исключения
FileNotFoundError
(OSError.errno == NOENT
в Python 2) при попытке удаления старых временных каталогов, например, когда несколько процессов пытаются удалить один и тот же каталог (часто встречается, например,pytest-xdist
).
pytest 4.6.6 (2019-10-11)¶
Исправления ошибок¶
issue #5523: Исправлено использование нескольких коротких опций вместе в командной строке (например,
-vs
) в Python 3.8+.issue #5537: Замените
importlib_metadata
backport наimportlib.metadata
из стандартной библиотеки на Python 3.8+.issue #5806: Исправьте «lexer», используемый при загрузке на bpaste.net с
--pastebin
на «text».issue #5902: Исправьте предупреждения об устаревшем атрибуте
cmp
вattrs>=19.2
.
Тривиальные/внутренние изменения¶
issue #5801: Исправляет проверку версии python (определяемую
flake8-2020
) на случай, если python4 станет вещью.
pytest 4.6.5 (2019-08-05)¶
Исправления ошибок¶
issue #4344: Исправьте RuntimeError/StopIteration при попытке собрать пакет только с «__init__.py».
issue #5478: Исправление ошибки кодирования при использовании строк unicode в исключениях с
pytest.raises
.issue #5524: Исправление проблемы, когда
tmp_path
иtmpdir
не удаляли каталоги, содержащие файлы, помеченные как доступные только для чтения, что могло привести к аварийному завершению pytest при выполнении во второй раз с опцией--basetemp
.issue #5547:
--step-wise
теперь правильно обрабатывает маркерыxfail(strict=True)
.issue #5650: Улучшен вывод при неудачном разборе конфигурационного файла ini.
pytest 4.6.4 (2019-06-28)¶
Исправления ошибок¶
issue #5404: Выдавать предупреждение, когда попытка развернуть сломанный объект приводит к исключению, для облегчения отладки (issue #5080).
issue #5444: Исправьте режим
--stepwise
, когда первый файл, переданный в командной строке, не удается собрать.issue #5482: Исправление ошибки, появившейся в версии 4.6.0, которая приводила к ошибкам сбора при передаче более 2 позиционных аргументов в
pytest.mark.parametrize
.issue #5505: Исправление сбоя при неудачном обнаружении при использовании
-p no:terminal
.
pytest 4.6.3 (2019-06-11)¶
Исправления ошибок¶
issue #5383:
-q
снова влияет на стиль собранных предметов (--collect-only
), когда используется--log-cli-level
.issue #5389: Исправление регрессий pull request #5063 для
importlib_metadata.PathDistribution
, у которых атрибутfiles
являетсяNone
.issue #5390: Исправление регрессии, при которой атрибут
obj
у элементовTestCase
больше не привязывался к методам.
pytest 4.6.2 (2019-06-03)¶
Исправления ошибок¶
issue #5370: Верните разворачивание
all()
, чтобы исправитьNameError
на вложенных постижениях.issue #5371: Верните разворачивание
all()
, чтобы исправить неправильную обработку генераторов сif
.issue #5372: Верните разворачивание
all()
для исправления неверного утверждения при использованииall()
в выражении.
pytest 4.6.1 (2019-06-02)¶
Исправления ошибок¶
issue #5354: Исправьте
pytest.mark.parametrize
, когда argvalues является итератором.issue #5358: Исправьте переписывание утверждений в вызовах
all()
для работы с негенераторами.
pytest 4.6.0 (2019-05-31)¶
Важно¶
Серия 4.6.X
будет последней серией, поддерживающей Python 2 и Python 3.4.
Для получения более подробной информации см. наш Python 2.7 and 3.4 support plan.
Характеристики¶
issue #4559: Добавлено значение ini
junit_log_passing_tests
, которое можно использовать для включения или отключения протоколирования результатов прохождения теста в XML-файле Junit.issue #4956: pytester’s
testdir.spawn
используетtmpdir
как каталог HOME/USERPROFILE.issue #5062: Разверните вызовы
all
в полные for-циклы с перезаписью утверждений для улучшения сообщений о сбоях, особенно при использовании Generator Expressions.issue #5063: Переход от
pkg_resources
кimportlib-metadata
для определения точки входа для улучшения производительности и времени импорта.issue #5091: Улучшен вывод ini-опций в
--help
.issue #5269:
pytest.importorskip
включаетImportError
, который сейчас находится вreason
по умолчанию.issue #5311: Захваченные журналы, которые выводятся для каждого неудачного теста, форматируются с помощью ColoredLevelFormatter.
issue #5312: Улучшено форматирование многострочных сообщений журнала в Python 3.
Исправления ошибок¶
issue #2064: Плагин отладки теперь импортирует обернутый класс
Pdb
(--pdbcls
) по требованию.issue #4908: Хук
pytest_enter_pdb
вызывается вместе с post-mortem (--pdb
).issue #5036: Исправление проблемы, когда приспособления, зависящие от других параметризованных приспособлений, ошибочно параметризовались.
issue #5256: Обработка внутренней ошибки из-за того, что одинокий суррогатный символ юникода не может быть представлен в Jython.
issue #5257: Убедитесь, что
sys.stdout.mode
не включает'b'
, поскольку это текстовый поток.issue #5278: Внутренний python-плагин Pytest можно отключить, снова используя
-p no:python
.issue #5286: Исправление проблемы с неработающей опцией
disable_test_id_escaping_and_forfeit_all_rights_to_community_support
при использовании списка идентификаторов тестов в параметризованных тестах.issue #5330: Показывать собираемый тестовый модуль при выдаче сообщений
PytestCollectionWarning
для тестовых классов с методами__init__
и__new__
, чтобы было легче определить проблему.issue #5333: Исправление регрессии в 4.5.0, когда
--lf
не выполнял повторно все тесты с известными отказами из невыбранных тестов.
Улучшенная документация¶
issue #5250: Расширение документации по использованию
setenv
иdelenv
сmonkeypatch
.
pytest 4.5.0 (2019-05-11)¶
Характеристики¶
issue #4826: Теперь выдается предупреждение, когда в качестве декоратора используются неизвестные знаки. Часто это происходит из-за опечатки, что может привести к молчаливому нарушению тестов.
issue #4907: Показывать причину XFail как часть поля сообщения JUnitXML.
issue #5013: Сообщения из отчетов о сбоях теперь отображаются в сводках тестов, усеченные до ширины терминала.
issue #5023: Новый флаг
--strict-markers
, который вызывает ошибку, когда в тестовом наборе используются неизвестные маркеры (например, не зарегистрированные с помощью опцииmarkers
в конфигурационном файле).Существующая опция
--strict
имеет такое же поведение в настоящее время, но может быть дополнена в будущем для дополнительных проверок.issue #5026: Сообщения об отказе утверждения для последовательностей и массивов теперь содержат количество различных элементов.
issue #5034: Улучшение отчетности при
--lf
и--ff
(запуск по последнему отказу).issue #5035: Опция/действие
--cache-show
принимает необязательный glob, чтобы показать только совпадающие записи кэша.issue #5059: Стандартный ввод (stdin) может быть передан на
Testdir.run()
иTestdir.popen()
в pytester.issue #5068: Опция
-r
узнала оA
для отображения всех отчетов (включая пройденные) в кратком резюме теста.issue #5108: Краткое резюме теста отображается после прохождения с выводом (
-rP
).issue #5172: Опция
--last-failed
(--lf
) стала умнее и теперь будет пропускать целые файлы, если все тесты этого тестового файла прошли в предыдущих запусках, что значительно ускоряет сбор.issue #5177: Введены новые специфические подклассы предупреждений
PytestWarning
, чтобы упростить фильтрацию предупреждений на основе класса, а не сообщения. Новыми подклассами являются:PytestAssertRewriteWarning
PytestCacheWarning
PytestCollectionWarning
PytestConfigWarning
PytestUnhandledCoroutineWarning
PytestUnknownMarkWarning
issue #5202: Новое приспособление
record_testsuite_property
, скопированное на сессию, позволяет пользователям регистрировать<property>
теги наtestsuite
уровне с помощью плагинаjunitxml
.Сгенерированный XML совместим с последним стандартом xunit, в отличие от свойств, записанных
record_property
иrecord_xml_attribute
.issue #5214: Для улучшения читабельности был изменен формат протоколирования по умолчанию. Вот пример предыдущего сообщения журнала:
test_log_cli_enabled_disabled.py 3 CRITICAL critical message logged by test
Теперь это стало:
CRITICAL root:test_log_cli_enabled_disabled.py:3 critical message logged by test
Форматирование можно изменить с помощью параметра конфигурации
log_format
.issue #5220:
--fixtures
теперь также показывает область применения приспособления для диапазонов, отличных от"function"
.
Исправления ошибок¶
issue #5113: Теперь правильно сообщается о невыбранных элементах из плагинов, использующих
pytest_collect_modifyitems
в качестве хукаппера.issue #5144: При ошибках использования
exitstatus
устанавливается вEXIT_USAGEERROR
в хукеpytest_sessionfinish
теперь, как и ожидалось.issue #5235:
outcome.exit
больше не используется сEOF
в обертке pdb, а только сquit
.
Улучшенная документация¶
issue #4935: Расширение документации о регистрации знаков и эффекте
--strict
.
Тривиальные/внутренние изменения¶
issue #4942:
logging.raiseExceptions
больше не устанавливается наFalse
.issue #5013: pytest теперь зависит от wcwidth для правильного отслеживания размеров символов юникода для более точного вывода в терминале.
issue #5059: pytester’s
Testdir.popen()
используетstdout
иstderr
через аргументы ключевых слов, теперь по умолчанию (subprocess.PIPE
).issue #5069: Код для краткого резюме теста в терминале был перенесен в плагин терминала.
issue #5082: Улучшена проверка kwargs для различных методов в плагине pytester.
issue #5202:
record_property
теперь выдаетPytestWarning
при использовании сjunit_family=xunit2
: приспособление генерирует тегиproperty
как дочерние тегиtestcase
, что не разрешено согласно самому recent schema.issue #5239: Привяжите
pluggy
к< 1.0
, чтобы мы не обновлялись до1.0
автоматически, когда он выйдет: планируются разрывные изменения, и мы хотим убедиться, что pytest правильно поддерживаетpluggy 1.0
.
pytest 4.4.2 (2019-05-08)¶
Исправления ошибок¶
issue #5089: Исправление сбоя, вызванного ошибкой в функции
__repr__
с включеннымshowlocals
и вербальным выводом.issue #5139: Устранение зависимости ядра от плагина „terminal“.
issue #5229: Require
pluggy>=0.11.0
, который возвращает зависимостьimportlib-metadata
, добавленную в0.10.0
. Пакетimportlib-metadata
не может быть импортирован при установке в виде яйца и вызывает проблемы, если полагаться наsetup.py
для установки тестовых зависимостей.
Улучшенная документация¶
issue #5171: Док:
pytest_ignore_collect
,pytest_collect_directory
,pytest_collect_file
иpytest_pycollect_makemodule
документированный тип параметра „path“ крючков теперьpy.path.local
issue #5188: Улучшена помощь для флага
--runxfail
.
Тривиальные/внутренние изменения¶
issue #5182: Удалены внутренние и неиспользуемые
_pytest.deprecated.MARK_INFO_ATTRIBUTE
.
pytest 4.4.1 (2019-04-15)¶
Исправления ошибок¶
issue #5031: Переменные окружения правильно восстанавливаются при использовании приспособления pytester
testdir
.issue #5039: Исправление регрессии с
--pdbcls
, которая перестала работать с локальными модулями в версии 4.0.0.issue #5092: Выдавать предупреждение при передаче неизвестных ключевых слов в
pytest.param(...)
.issue #5098: аннулируйте кэши импорта с помощью
monkeypatch.syspath_prepend
, что необходимо при использовании пакетов пространства имен.
pytest 4.4.0 (2019-03-29)¶
Характеристики¶
issue #2224:
async
тестовые функции пропускаются и выдается предупреждение, если не установлен подходящий плагин async (например,pytest-asyncio
илиpytest-trio
).Ранее функции
async
вообще не выполнялись, но при этом помечались как «пройденные».issue #2482: Включите новую опцию
disable_test_id_escaping_and_forfeit_all_rights_to_community_support
для отключения ascii-escaping в параметризованных значениях. Это может вызвать ряд проблем, и, как ясно из названия, используйте ее на свой страх и риск.issue #4718: Опция
-p
теперь может быть использована для ранней загрузки плагинов также по имени точки входа, а не только по имени модуля.Это делает возможным раннюю загрузку внешних плагинов типа
pytest-cov
в командной строке:pytest -p pytest_cov
issue #4855: Опция
--pdbcls
теперь обрабатывает классы через атрибуты модуля (например,pdb:pdb.Pdb
с pdbpp), и улучшена ее валидация.issue #4875: Опция конфигурации
testpaths
теперь отображается рядом со строкамиrootdir
иinifile
в заголовке pytest, если опция действует, т.е. имена каталогов или файлов не были явно переданы в командной строке.Кроме того,
inifile
отображается только при наличии файла конфигурации, вместо пустой строкиinifile:
.issue #4911: Доктесты теперь можно пропускать динамически с помощью
pytest.skip()
.issue #4920: Были произведены внутренние рефакторинги, чтобы сделать возможной реализацию плагина pytest-subtests, который добавляет поддержку подтестов unittest и новое приспособление
subtests
, как обсуждалось в issue #1367.Подробную информацию о внутренних рефакторингах можно найти в соответствующем PR.
issue #4931: pytester’s
LineMatcher
утверждает, что переданные строки являются последовательностью.issue #4936: Обращайтесь к
-p plug
после-p no:plug
.Это можно использовать для отмены заблокированного плагина (например, в «addopts») из командной строки и т.д.
issue #4951: Захват вывода обрабатывается правильно, если захват осуществляется только через фикстуры (capsys, capfs) с
pdb.set_trace()
.issue #4956:
pytester
устанавливает$HOME
и$USERPROFILE
во временный каталог во время тестовых запусков.Это позволяет не загружать файлы конфигурации из домашнего каталога реального пользователя.
issue #4980: Пакеты пространства имен лучше обрабатываются с помощью
monkeypatch.syspath_prepend
иtestdir.syspathinsert
(черезpkg_resources.fixup_namespace_packages
).issue #4993: Плагин stepwise теперь сообщает информацию о состоянии.
issue #5008: Если файл
setup.cfg
содержит[tool:pytest]
, а также более не поддерживаемую секцию[pytest]
, pytest будет использовать[tool:pytest]
, игнорируя[pytest]
. Ранее он безоговорочно выдавал ошибку.Это упрощает поддержку плагинами старых версий pytest.
Исправления ошибок¶
issue #1895: Исправление ошибки, при которой фикстуры, запрашиваемые динамически через
request.getfixturevalue()
, могли быть разрушены раньше запрашивающей фикстуры.issue #4851: pytester unsets
PYTEST_ADDOPTS
теперь не использует внешние опции сtestdir.runpytest()
.issue #4903: Используйте правильное измененное время для лет после 2038 года в переписанных файлах
.pyc
.issue #4928: Исправьте смещения строк с ошибками
ScopeMismatch
.issue #4957:
-p no:plugin
теперь корректно обрабатывается для плагинов по умолчанию (внутренних), например, с-p no:capture
.Ранее они загружались (импортировались) всегда, делая доступным, например, приспособление
capfd
.issue #4968: Команда pdb
quit
обрабатывается правильно при использовании после командыdebug
с командой pdbpp.issue #4975: Исправьте интерпретацию опции
-qq
, когда она рассматривалась как-v
.issue #4978:
outcomes.Exit
больше не заглатывается вassertrepr_compare
.issue #4988: Явное закрытие обработчика файлов логирования при завершении сеанса.
issue #5003: Исправьте смещение строки с ошибкой сбора меток (смещение на единицу).
Улучшенная документация¶
issue #4974: Обновите документацию для крючка
pytest_cmdline_parse
, чтобы отметить ограничения доступности
Тривиальные/внутренние изменения¶
issue #4718:
pluggy>=0.9
теперь требуется.issue #4815:
funcsigs>=1.0
теперь требуется для Python 2.7.issue #4829: Удалены некоторые остатки внутреннего кода, связанные с тестами
yield
.issue #4890: Удалите внутренне неиспользуемое приспособление
anypython
из плагина pytester.issue #4912: Удалите устаревшую директиву Sphinx,
add_description_unit()
, добавьте sphinx-removed-in к версии >= 0.2.0 для поддержки Sphinx 2.0.issue #4913: Исправьте вызов тестов pytest с пользовательскими
PYTHONPATH
.issue #4965: Новые
pytest_report_to_serializable
иpytest_report_from_serializable
экспериментальные крючки.Эти хуки будут использоваться
pytest-xdist
,pytest-subtests
и заменой resultlog для сериализации и настройки отчетов.Они являются экспериментальными, то есть их детали могут измениться или даже быть полностью удалены в будущих выпусках патчей без предупреждения.
Отзывы приветствуются как от авторов плагинов, так и от пользователей.
issue #4987:
Collector.repr_failure
соблюдает опцию--tb
, но по умолчанию теперь только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_family
INI принимаетlegacy|xunit1
, который производит вывод в старом стиле, иxunit2
, который более строго соответствует https://github.com/jenkinsci/xunit-plugin/blob/xunit-2.3.2/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd.issue #4280: улучшено завершение работы из pdb, особенно при использовании
--trace
.Использование
q[quit]
послеpdb.set_trace()
также приведет к выходу из pytest.issue #4402: Сводка предупреждений теперь группирует предупреждения по сообщениям, а не по идентификатору теста.
Это делает вывод более компактным и лучше передает общее представление о том, сколько кода на самом деле генерирует предупреждения, а не о том, сколько тестов вызывают этот код.
issue #4536:
monkeypatch.delattr
обрабатывает дескрипторы классов типаstaticmethod
/classmethod
.issue #4649: Восстановление того, чтобы метки считались ключевыми словами для выражений с ключевыми словами.
issue #4653:
tmp_path
приспособление и другие связанные с ним обеспечивает разрешенный путь (он же реальный путь)issue #4667:
pytest_terminal_summary
использует результат от хукаpytest_report_teststatus
, а не жестко закодированные строки.issue #4669: Корректная обработка исключения
unittest.SkipTest
, содержащего неасксичные символы, на Python 2.issue #4680: Убедитесь, что папки
tmpdir
иtmp_path
находятся в одной и той же папке.issue #4681: Убедитесь, что
tmp_path
всегда является реальным путем.
Тривиальные/внутренние изменения¶
issue #4643: Используйте
a.item()
вместо устаревшегоnp.asscalar(a)
вpytest.approx
.np.asscalar
был deprecated вnumpy 1.16.
.issue #4657: Скопируйте saferepr из pylib
issue #4668: Словесное обозначение ожидаемых сбоев в отчете о состоянии теста изменено с
xfail
наXFAIL
, чтобы соответствовать другим результатам тестирования.
pytest 4.1.1 (2019-01-12)¶
Исправления ошибок¶
issue #2256: Показать полное повторение с
assert a==b
и-vv
.issue #3456: Расширение Doctest-модулей для игнорирования mock-объектов.
issue #4617: Исправлена ошибка
pytest.warns
при повторном использовании менеджера контекста (например, многократная параметризация).issue #4631: Не переписывайте утверждение, когда
__getattr__
нарушено
Улучшенная документация¶
issue #3375: Документируйте, что использование
setup.cfg
может привести к сбою других инструментов или вызвать трудно отслеживаемые проблемы, поскольку он использует другой парсер, чем файлыpytest.ini
илиtox.ini
.
Тривиальные/внутренние изменения¶
issue #4602: Удалите
hypothesis
в regen tox env.
pytest 4.1.0 (2019-01-05)¶
Перемещение¶
issue #2169:
pytest.mark.parametrize
: в предыдущих версиях ошибки, вызванные функциями id, подавлялись и заменялись на предупреждения. Теперь исключения распространяются вместе с сообщением pytest, информирующим об узле, значении параметра и индексе, где произошло исключение.issue #3078: Удалите устаревшую систему внутренних предупреждений:
config.warn
,Node.warn
.pytest_logwarning
теперь выдает предупреждение при выполнении.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #3079: Удалена поддержка тестов yield - они принципиально неработоспособны, поскольку не поддерживают фикстуры должным образом с тех пор, как сбор и выполнение тестов были разделены.
Информацию о том, как обновить код, см. на нашем сайте docs.
issue #3082: Удалена поддержка применения меток непосредственно к значениям в
@pytest.mark.parametrize
. Вместо этого используйтеpytest.param
.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #3083: Удалено
Metafunc.addcall
. Это был механизм-предшественник@pytest.mark.parametrize
.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #3085: Удалена поддержка передачи строк в
pytest.main
. Теперь вместо этого всегда передавайте список строк.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #3086: Секция
[pytest]
в файлах setup.cfg больше не поддерживается, вместо нее используйте[tool:pytest]
. Файлыsetup.cfg
предназначены для использования сdistutils
, а секцияpytest
печально известна как источник конфликтов и ошибок.Обратите внимание, что для файлов pytest.ini и tox.ini секция остается
[pytest]
.issue #3616: Удалены устаревшие свойства compat для
node.Class/Function/Module
- теперь используйтеpytest.Class/Function/Module
.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #4421: Удалена реализация хука
pytest_namespace
.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #4489: Удалено
request.cached_setup
. Это был механизм-предшественник современных приспособлений.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #4535: Удален устаревший метод
PyCollector.makeitem
. Этот метод был обнародован по ошибке давным-давно.issue #4543: Удалена поддержка определения светильников с помощью префикса
pytest_funcarg__
. Вместо этого используйте декоратор@pytest.fixture
.Информацию о том, как обновить код, см. на нашем сайте docs.
issue #4545: Вызов фикстур напрямую теперь всегда приводит к ошибке, а не к предупреждению.
Информацию о том, как обновить код, см. на нашем сайте docs.
issue #4546: Удалить
Node.get_marker(name)
возвращаемое значение было непригодно для использования более чем для проверки существования.Используйте
Node.get_closest_marker(name)
в качестве замены.issue #4547: Устаревшее приспособление
record_xml_property
было удалено, вместо него используйте более универсальноеrecord_property
.Более подробную информацию см. на нашем сайте docs.
issue #4548: Теперь выдается ошибка, если переменная
pytest_plugins
определена в файлеconftest.py
не верхнего уровня (т.е. не находится вrootdir
).Более подробную информацию см. на нашем сайте docs.
issue #891: Удалите атрибуты
testfunction.markername
- используйтеNode.iter_markers(name=None)
для их итерации.
Амортизация¶
issue #3050: Утратил силу глобал
pytest.config
.Обоснование см. в pytest.config глобальный.
issue #3974: Передача параметра
message
вpytest.raises
теперь выдаетDeprecationWarning
.Частой ошибкой является мнение, что этот параметр будет соответствовать сообщению об исключении, в то время как на самом деле он служит только для предоставления пользовательского сообщения в случае, если проверка
pytest.raises
не прошла. Чтобы избежать этой ошибки и поскольку считается, что этот параметр мало используется, pytest его деприватизирует, не предоставляя на данный момент альтернативы.Если у вас есть сомнения по этому поводу, пожалуйста, напишите в комментариях issue #3974.
issue #4435: Утратили силу
raises(..., 'code(as_a_string)')
иwarns(..., 'code(as_a_string)')
.Обоснование и примеры см. в raises / warns со строкой в качестве второго аргумента.
Характеристики¶
issue #3191: Теперь выдается предупреждение, когда утверждения делаются для
None
.Это частый источник путаницы среди новых пользователей, которые пишут:
assert mocked_object.assert_called_with(3, 4, 5, key="value")
Когда они должны писать:
mocked_object.assert_called_with(3, 4, 5, key="value")
Потому что метод
assert_called_with
объекта mock уже выполняет утверждение.Это предупреждение не будет выдано, если явно проверяется
None
. Утверждение типа:assert variable is None
не будет выдавать предупреждение.
issue #3632: Более богатая интроспекция сравнения равенств на
AssertionError
для объектов, созданных с помощью attrs илиdataclasses
(Python 3.7+, backported to 3.6).issue #4278:
CACHEDIR.TAG
файлы теперь создаются внутри каталогов кэша.Эти файлы являются частью каталога Cache Directory Tagging Standard, и могут использоваться программами резервного копирования или синхронизации для определения каталога кэша pytest как такового.
issue #4292:
pytest.outcomes.Exit
выводится изSystemExit
вместоKeyboardInterrupt
. Это позволяет нам лучше обрабатывать выход изpdb
.issue #4371: Обновлена опция
--collect-only
для отображения описаний тестов при запуске с помощью--verbose
.issue #4386: Реструктурировано построение объекта
ExceptionInfo
и обеспечено, чтобы неполные экземпляры имелиrepr
/str
.issue #4416: pdb: добавлена поддержка аргументов с ключевыми словами
pdb.set_trace
.Он обрабатывает
header
аналогично тому, как это делает Python 3.7, и направляет любые другие аргументы ключевых слов в конструкторPdb
.Это позволяет
__import__("pdb").set_trace(skip=["foo.*"])
.issue #4483: Добавлен ini-параметр
junit_duration_report
для опционального отчета о длительности тестовых вызовов, исключая время установки и разрыва.Спецификация JUnit XML и поведение pytest по умолчанию предусматривают включение времени установки и завершения в отчет о продолжительности теста. Вы можете включить только длительность вызовов (без учета установки и разрыва), добавив это в ваш файл
pytest.ini
:[pytest] junit_duration_report = call
issue #4532:
-ra
теперь будет показывать ошибки и сбои последними, а не первыми в сводке.Это облегчает получение списка ошибок и сбоев для выборочного запуска тестов.
issue #4599:
pytest.importorskip
теперь поддерживает параметрreason
, который будет показан, когда запрашиваемый модуль не может быть импортирован.
Исправления ошибок¶
issue #3532:
-p
теперь принимает аргумент без пробела между значениями, например-pmyplugin
.issue #4327:
approx
снова работает с более общими контейнерами, точнее, с экземплярамиIterable
иSized
вместо более ограничительногоSequence
.issue #4397: Убедитесь, что идентификаторы узлов доступны для печати.
issue #4435: Исправлено имя файла кадра
raises(..., 'code(string)')
.issue #4458: Отображение фактических идентификаторов тестов в
--collect-only
.
Улучшенная документация¶
issue #4557: Страница документации примера маркеров обновлена для поддержки последней версии pytest.
issue #4558: Обновите пример документации по кэшу, чтобы правильно показывать попадания и промахи кэша.
issue #4580: Улучшена документация по подробным сводным отчетам.
Тривиальные/внутренние изменения¶
issue #4447: Изменен тип депривации
--result-log
наPytestDeprecationWarning
.Было решено убрать эту функцию в следующем крупном пересмотре.
pytest 4.0.2 (2018-12-13)¶
Исправления ошибок¶
issue #4265: Проверять аргументы из переменной окружения
PYTEST_ADDOPTS
и опции iniaddopts
отдельно.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
при использовании APIget_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
с правильной обработкой каждого узла, что исправляет ряд давних ошибок, вызванных старым дизайном. Это вводит новые APINode.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
, когда pypimock.patch
установлен и импортирован. (issue #3206)Ошибки, отображаемые при неудачной комбинации
pytest.raises()
сmatch=
, теперь более точно отражают произошедшее: Когда исключение не было вызвано, часть «matching „…“» была удалена, поскольку она ложно подразумевает, что исключение было вызвано, но оно не совпало. Когда было вызвано неправильное исключение, оно теперь выбрасывается (как если бы былоpytest.raised()
безmatch=
), а не жалуется на несопоставленный текст. (issue #3222)Исправлена обработка захвата вывода в doctests на macOS. (issue #985)
Улучшенная документация¶
Добавьте документацию по параметрам Sphinx для аргументов
match
иmessage
вpytest.raises
. (issue #3202)
Тривиальные/внутренние изменения¶
pytest изменил процедуру публикации и теперь публикуется в PyPI непосредственно из Travis. (issue #3060)
Переименуйте
ParameterSet._for_parameterize()
в_for_parametrize()
, чтобы соблюсти соглашение об именовании. (issue #3166)Пропустите неудачный тест pdb/doctest на mac. (issue #985).
pytest 3.4.0 (2018-01-30)¶
Амортизация и удаление¶
Все классы pytest теперь подклассы
object
для лучшей совместимости с Python 2/3. Это не должно повлиять на пользовательский код, за исключением очень редких крайних случаев. (issue #2147)
Характеристики¶
Введена опция
empty_parameter_set_mark
ini для выбора того, какую метку применять, когда@pytest.mark.parametrize
задан пустой набор параметров. Возможные варианты:skip
(по умолчанию) иxfail
. Обратите внимание, что в будущих выпусках планируется изменить значение по умолчанию наxfail
, так как это считается менее подверженным ошибкам. (issue #2527)Несовместимое изменение: после отзывов сообщества функциональность logging претерпела некоторые изменения. Пожалуйста, обратитесь к logging documentation за подробностями. (issue #3013)
Консольный вывод возвращается в «классический» режим, когда захват отключен (
-s
), иначе вывод становится беспорядочным и бесполезным. (issue #3038)Новый хук
pytest_runtest_logfinish
, который вызывается, когда элемент теста завершает выполнение, аналогичноpytest_runtest_logstart
. (issue #3101)Улучшение производительности при сборе тестов с использованием большого количества фикстур. (issue #3107)
Новый метод
caplog.get_records(when)
, который предоставляет доступ к захваченным записям для этапов тестирования"setup"
,"call"
и"teardown"
. (issue #3117)Новое приспособление
record_xml_attribute
, позволяющее изменять и вставлять атрибуты на xml-узле<testcase>
в отчетах JUnit. (issue #3130)Каталог кэша по умолчанию был переименован из
.cache
в.pytest_cache
после отзывов сообщества о том, что название.cache
не давало понять, что он используется pytest. (issue #3138)Раскрашивание столбца levelname в выводе live-log. (issue #3142)
Исправления ошибок¶
Исправьте зависание теста pexpect на MacOS, используя flush() вместо wait(). (issue #2022)
Исправьте восстановление состояния Python после запуска in-process pytest с помощью плагина
pytester
; это может нарушить тесты, использующие несколько запусков in-process pytest, если более поздние зависят от более ранних, пропуская глобальные изменения интерпретатора. (issue #3016)Исправьте пропуск хука отчетности плагина, когда тест прерывался до появления хука настройки плагина. (issue #3074)
Исправьте процент выполнения, сообщаемый при неудачных тестах во время завершения. (issue #3088)
Несовместимое изменение: Опция
-o/--override
больше не съедает все остальные опции, что может привести к неожиданному поведению: например,pytest -o foo=1 /path/to/test.py
будет неудачным, потому что/path/to/test.py
будет рассматриваться как часть аргумента командной строки-o
. Одним из следствий этого является то, что теперь для нескольких переопределений конфигурации требуется несколько флагов-o
:pytest -o foo=1 -o bar=2
. (issue #3103)
Улучшенная документация¶
Крючки документа (определенные с помощью
historic=True
), которые нельзя использовать с помощьюhookwrapper=True
. (issue #2423)Уточните, что захват предупреждений по умолчанию не изменяет фильтр предупреждений. (issue #2457)
Проясните возможную путаницу при использовании pytest_fixture_setup с функциями фикстур, которые возвращают None. (issue #2698)
Исправьте формулировку предложения о флагах doctest, используемых в pytest. (issue #3076)
Предпочитайте
https://*.readthedocs.io
вместоhttp://*.rtfd.org
для ссылок в документации. (issue #3092)Улучшить читабельность (формулировки, грамматику) руководства по началу работы (issue #3131)
Добавлено замечание, что вызов pytest.main несколько раз из одного и того же процесса не рекомендуется из-за кэширования импорта. (issue #3143)
Тривиальные/внутренние изменения¶
Показать простую и понятную ошибку, когда выражения с ключевыми словами вызывают синтаксическую ошибку (например,
"-k foo and import"
покажет ошибку, что нельзя использовать ключевое словоimport
в выражениях). (issue #2953)Измените параметризованную автоматическую генерацию идентификаторов тестов, чтобы использовать атрибут
__name__
функций вместо имени аргумента возврата плюс счетчик. (issue #2976)Замените py.std на импорт stdlib. (issue #3067)
Исправьте «you» на «your» в документации по ведению журнала. (issue #3129)
pytest 3.3.2 (2017-12-25)¶
Исправления ошибок¶
pytester: игнорировать файлы, используемые для получения метаданных текущего пользователя в детекторе утечек fd. (issue #2784)
Исправьте утечку памяти, когда объекты, возвращаемые фикстурами, никогда не уничтожались сборщиком мусора. (issue #2981)
Исправьте преобразование pyargs в имя файла, чтобы не преобразовывать симлинки на Python 2. (issue #2985).
PYTEST_DONT_REWRITE
теперь проверяется и для плагинов, а не только для тестовых модулей. (issue #2995)
Улучшенная документация¶
Добавьте уточняющее примечание о поведении нескольких параметризованных аргументов (issue #3001)
Тривиальные/внутренние изменения¶
Очистка кода. (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-lint
tox для запуска автоматических исправлений pep8 в коде. (issue #2582)Превращение предупреждений в ошибки в собственном тестовом наборе pytest для более оперативного выявления регрессий, связанных с депривацией. (issue #2588)
Показывать ссылки на несколько выпусков в записях CHANGELOG. (issue #2620)
pytest 3.1.3 (2017-07-03)¶
Исправления ошибок¶
Исправьте ошибку декодирования в Python 2 для доктестов в docstrings. (issue #2434)
Исключения, поднятые во время завершения работы финализаторами, теперь подавляются до тех пор, пока не будут вызваны все финализаторы, с повторным поднятием первоначального исключения. (issue #2440)
Исправление некорректного отчета «собранные элементы» при указании тестов в командной строке. (issue #2464)
deprecated_call
в форме контекст-менеджера теперь фиксирует предупреждения об устаревании, даже если такое же предупреждение уже было выдано. Кроме того,deprecated_call
всегда будет выдавать одно и то же сообщение об ошибке (ранее оно выдавало разные сообщения в режиме контекст-менеджера и в режиме вызова функции). (issue #2469)Исправление проблемы, когда пути, собираемые pytest, могли содержать тройные ведущие символы
/
. (issue #2475)Исправление внутренней ошибки при попытке определить начало рекурсивного возврата трассировки. (issue #2486)
Улучшенная документация¶
Явно укажите, для каких хуков вызовы прекращаются после первого результата не None. (issue #2493)
Тривиальные/внутренние изменения¶
Создайте задачи invoke для обновления вендорных пакетов. (issue #2474)
Обновите даты копирайта в LICENSE, README.rst и в документации. (issue #2499)
pytest 3.1.2 (2017-06-08)¶
Исправления ошибок¶
Необходимые опции, добавленные через
pytest_addoption
, больше не будут препятствовать использованию опции –help без их передачи. (#1999)Соблюдайте
python_files
при переписывании утверждений. (#2121)Исправьте обнаружение ошибок рекурсии, когда кадры в трассировке содержат объекты, которые нельзя сравнивать (например, массивы
numpy
). (#2459)UnicodeWarning
выдается из внутреннего плагина предупреждений pytest только в том случае, если сообщение содержит неаскриптивный юникод (только для Python 2). (#2463)Добавлено обходное решение для Python 3.6
WindowsConsoleIO
, ломающегося из-заFDCapture
в Pytests. Другой код, использующий консольные дескрипторы, все еще может быть затронут той же проблемой и может потребовать дополнительных обходных путей/исправлений, т.е.colorama
. (#2467)
Улучшенная документация¶
Исправьте внутренние ссылки API на объекты
pluggy
. (#2331)Уточните, что
pytest.xfail
останавливает выполнение теста в точке вызова, и улучшите общий поток документацииskipping
. (#810)
pytest 3.1.1 (2017-05-30)¶
Исправления ошибок¶
Перехват предупреждений pytest больше не переопределяет существующие фильтры предупреждений. Предыдущее поведение переопределяло все фильтры и вызывало регрессии в тестовых наборах, которые настраивают фильтры предупреждений в соответствии со своими потребностями. Обратите внимание, что как побочный эффект этого,
DeprecationWarning
иPendingDeprecationWarning
больше не отображаются по умолчанию. (#2430)Исправление проблемы с неаскриптивным содержимым в текстовых файлах doctest. (#2434)
Исправьте ошибки кодировки для предупреждений unicode в Python 2. (#2436).
pytest.deprecated_call
теперь захватываетPendingDeprecationWarning
в форме контекстного менеджера. (#2441)
Улучшенная документация¶
Добавление towncrier для управления журналом изменений. (#2390)
3.1.0 (2017-05-22)¶
Новые возможности¶
Плагин
pytest-warnings
был интегрирован в ядро, и теперьpytest
автоматически перехватывает и отображает предупреждения в конце сеанса тестирования.Предупреждение
Эта возможность может нарушить работу тестовых наборов, которые сами применяют и обрабатывают предупреждения, и может быть отключена в вашем
pytest.ini
:[pytest] addopts = -p no:warnings
Более подробную информацию см. в warnings documentation page.
Спасибо @nicoddemus за PR.
Добавлена опция
junit_suite_name
ini для указания имени корня<testsuite>
для XML-отчетов JUnit (issue #533).Добавлена опция ini
doctest_encoding
для указания кодировки, которую следует использовать для файлов doctest. Спасибо @wheerd за PR (pull request #2101).pytest.warns
теперь проверяются отношения подклассов, а не равенство классов. Спасибо @lesteve за PR (pull request #2166)pytest.raises
теперь утверждает, что сообщение об ошибке соответствует тексту или regex с аргументом ключевого словаmatch
. Спасибо @Kriechi за PR.pytest.param
можно использовать для объявления наборов тестовых параметров с метками и идентификаторами тестов. Спасибо @RonnyPfannschmidt за PR.
Изменения¶
удалить все внутренние использования хуков pytest_namespace, это необходимо для подготовки к удалению preloadconfig в pytest 4.0 Спасибо @RonnyPfannschmidt за PR.
pytest теперь предупреждает, когда в параметризованном тесте возникает callable ids. Спасибо @fogo за PR.
Теперь можно не собирать тестовые классы, установив атрибут
__test__
вFalse
в теле класса (issue #2007). Спасибо @syre за сообщение и @lwm за PR.Измените junitxml.py для создания отчетов, соответствующих схеме Junitxml. Если один и тот же тест завершается неудачей при вызове, а затем ошибкой при разрушении, мы разбиваем элемент testcase на два, один из которых содержит ошибку, а другой - неудачу. (issue #2228) Спасибо @kkoukiou за PR.
Отчеты о тестировании с атрибутом
url
теперь будут правильно записывать это в junitxml. Спасибо @fushi за PR (pull request #1874).Удалите общие элементы из вывода сравнения диктов при verbosity=1. Также обновите сообщение об усечении, чтобы было понятнее, что pytest усекает все сообщения об утверждениях, если verbosity < 2 (issue #1512). Спасибо @mattduck за PR
--pdbcls
больше не подразумевает--pdb
. Это делает возможным использованиеaddopts=--pdbcls=module.SomeClass
наpytest.ini
. Спасибо @davidszotten за PR (pull request #1952).исправить issue #2013: превратить RecordedWarning в
namedtuple
, чтобы придать ему понятный repr и в то же время предотвратить необоснованную модификацию.исправление issue #2208: обеспечить ограничение итераций для _pytest.compat.get_real_func. Спасибо @RonnyPfannschmidt за отчет и PR.
Теперь хуки проверяются после завершения сбора, а не сразу после загрузки установленных плагинов. Это упрощает написание хуков для плагинов, которые будут загружены во время сбора, например, используя специальную переменную
pytest_plugins
(issue #1821). Спасибо @nicoddemus за PR.Измените хук
pytest_make_parametrize_id()
, чтобы он принималargname
в качестве дополнительного параметра. Спасибо @unsignedint за PR.Добавьте
venv
к настройке по умолчаниюnorecursedirs
. Спасибо @The-Compiler за PR.PluginManager.import_plugin
теперь принимает юникодные имена плагинов в Python 2. Спасибо @reutsharabani за PR.исправить issue #2308: При использовании
--lf
и--ff
выполняются только последние неудачные тесты. Спасибо @ojii за PR.Замените номера версий на уровне миноров/патчей в документации заполнителями. Это значительно снижает шум от изменений, поскольку разные авторы перегенерируют документацию на разных платформах. Спасибо @RonnyPfannschmidt за PR.
исправление issue #2391: учитывать pytest_plugins для всех подключаемых модулей Спасибо @RonnyPfannschmidt за PR.
Исправления ошибок¶
Исправьте
AttributeError
наsys.stdout.buffer
/sys.stderr.buffer
при использовании приспособленияcapsys
в python 3. (issue #1407). Спасибо @asottile.Измените класс capture.py
DontReadFromInput
, чтобы он выбрасывалio.UnsupportedOperation
ошибки, а не ValueErrors в методеfileno
(issue #2276). Спасибо @metasyn и @vlad-dragos за PR.Исправьте форматирование исключений при импорте модулей, когда сообщение об исключении содержит неасксичные символы (issue #2336). Спасибо @fabioz за сообщение и @nicoddemus за PR.
Добавлена документация, связанная с проблемой (issue #1937) Спасибо @skylarjhdownes за PR.
Разрешить собирать файлы с любым расширением как модули Python (issue #2369). Спасибо @Kodiologist за PR.
Показывать корректное сообщение об ошибке при сборе функции «parametrize» с неправильными args (issue #2383). Спасибо @The-Compiler за сообщение и @robin0371 за PR.
3.0.7 (2017-03-14)¶
Исправление проблемы с нарушением перезаписи утверждений из-за того, что модули молча отбрасывали другие модули при неудачном импорте В частности, исправлен импорт модуля
anydbm
. (issue #2248). Спасибо @pfhayes за PR.junitxml: Исправление проблемного случая, когда тег system-out встречался дважды на элемент testcase в XML-отчете. Спасибо @kkoukiou за PR.
Исправлена регрессия, pytest теперь корректно пропускает unittest, если запущен с
--pdb
(issue #2137). Спасибо @gst за сообщение и @mbyt за PR.Игнорировать исключения, возникающие из дескрипторов (например, свойств) во время сбора тестов Python (issue #2234). Благодаря @bluetech.
--override-ini
теперь правильно переопределяет некоторые фундаментальные опции, такие какpython_files
(issue #2238). Спасибо @sirex за отчет и @nicoddemus за PR.Замените использование
raise StopIteration
в коде простымиreturns
для завершения генераторов, в соответствии с PEP 479 (issue #2160). Спасибо @nicoddemus за PR.Исправление внутренних ошибок, когда внутри теста возникает непечатаемая ошибка
AssertionError
. Спасибо @omerhadari за PR.Плагин Skipping теперь работает и с тестовыми элементами, сгенерированными пользовательскими коллекторами (issue #2231). Спасибо @vidartf.
Исправьте пробелы в выводе консоли, если не представлен файл .ini (issue #2281). Спасибо @fbjorn за PR.
Маркеры без условий
xfail
больше не зависят от того, является ли базовый элемент теста экземпляромPyobjMixin
, и поэтому могут применяться к тестам, не собираемым встроенным сборщиком тестов python. Спасибо @barneygale за PR.
3.0.6 (2017-01-22)¶
pytest больше не генерирует
PendingDeprecationWarning
из своих собственных операций, что было введено по ошибке в версии3.0.5
(issue #2118). Спасибо @nicoddemus за сообщение и @RonnyPfannschmidt за PR.pytest больше не распознает функции coroutine как тесты yield (issue #2129). Спасибо @malinoff за PR.
Плагины, загруженные переменной окружения
PYTEST_PLUGINS
, теперь автоматически учитываются при переписывании утверждений (issue #2185). Спасибо @nicoddemus за PR.Улучшено сообщение об ошибке при неудаче pytest.warns (issue #2150). В сообщение об ошибке добавляется тип(ы) ожидаемых предупреждений и список пойманных предупреждений. Спасибо @lesteve за PR.
Исправьте внутренний плагин
pytester
для корректной работы с последними версиямиzope.interface
(issue #1989). Спасибо @nicoddemus за PR.Утверждения утверждений плагина
pytester
снова выигрывают от перезаписи утверждений (issue #1920). Спасибо @RonnyPfannschmidt за сообщение и @nicoddemus за PR.Указание тестов с двоеточиями, например
test_foo.py::test_bar
, для тестов в подкаталогах с ini-файлами конфигурации теперь использует правильный ini-файл (issue #2148). Спасибо @pelme.Отказывать
testdir.runpytest().assert_outcomes()
явно, если вывод терминала pytest, на который он полагается, отсутствует. Спасибо @eli-b за PR.
3.0.5 (2016-12-05)¶
Добавьте предупреждение при неправильной передаче
option=value
в-o/--override-ini
(issue #2105). Также улучшена справочная документация. Спасибо @mbukatov за сообщение и @lwm за PR.Теперь
--confcutdir
и--junit-xml
правильно проверяются, если они являются каталогами и именами файлов, соответственно (issue #2089 и issue #2078). Спасибо @lwm за PR.Добавить в сообщение об ошибке подсказку о возможном отсутствии
__init__.py
(issue #478). Спасибо @DuncanBetts.Более точно опишите, когда происходит финализация приспособления в документации (issue #687). Спасибо @DuncanBetts.
Предоставьте
:ref:
цели дляrecwarn.rst
, чтобы мы могли использовать межсфинксовые ссылки. Спасибо @dupuy за отчет и @lwm за PR.В Python 2 в строковом представлении
+-
(напримерpytest.approx
) используется простая строка"4 +- 4.0e-06"
ASCII, поскольку внутренняя обработка этого в различных контекстах и представлениях в pytest является хрупкой, что может привести к ошибкам, таким как issue #2111. В Python 3 представление по-прежнему использует±
(например,4 ± 4.0e-06
). Спасибо @kerrick-lyft за сообщение и @nicoddemus за PR.Использование
item.Function
,item.Module
и т.д. теперь выдает предупреждения об устаревании, предпочитайтеpytest.Function
,pytest.Module
и т.д. вместо них (issue #2034). Спасибо @nmundar за PR.Исправьте сообщение об ошибке при использовании
approx
с комплексными числами (issue #2082). Спасибо @adler-j за отчет и @nicoddemus за PR.Исправлены предупреждения о ложных срабатываниях от assertion rewrite hook для модулей, импортированных более одного раза механизмом
pytest_plugins
. Спасибо @nicoddemus за PR.Удалите внутренний кэш, из-за которого хуки из
conftest.py
файлов в подкаталогах могли вызываться в других каталогах неправильно (issue #2016). Спасибо @d-b-w за сообщение и @nicoddemus за PR.Удалите внутренний код, предназначенный для поддержки более ранних версий Python 3, который создавал побочный эффект оставления
None
вsys.modules
, когда выражения оценивались pytest (например, передача условия в виде строки вpytest.mark.skipif
)(issue #2103). Спасибо @jaraco за отчет и @nicoddemus за PR.Изящно справляться с файлом .pyc без соответствующего файла .py (issue #2038). Спасибо @nedbat.
3.0.4 (2016-11-09)¶
Ошибки импорта при сборе тестовых модулей теперь отображают полный трассировочный откат (issue #1976). Спасибо @cwitty за отчет и @nicoddemus за PR.
Исправьте непонятное сообщение справки командной строки для пользовательских опций с двумя или более свойствами
metavar
(issue #2004). Спасибо @okulynyak и @davehunt за отчет и @nicoddemus за PR.При загрузке плагинов ошибки импорта, содержащие неаскриптивные сообщения, теперь правильно обрабатываются в Python 2 (issue #1998). Спасибо @nicoddemus за PR.
Исправлена циклическая ссылка, когда
pytest.raises
используется в форме контекст-менеджера (issue #1965). Также в результате этого исправленияsys.exc_info()
остается пустым как при использовании контекст-менеджера, так и при использовании вызова функции. Ранееsys.exc_info
содержал исключение, пойманное менеджером контекста, даже если произошло ожидаемое исключение. Спасибо @MSeifert04 за сообщение и PR.Исправлены предупреждения о ложных срабатываниях от assertion rewrite hook для модулей, которые были переписаны, но позже были помечены явно
pytest.register_assert_rewrite
или неявно как плагин (issue #2005). Спасибо @RonnyPfannschmidt за сообщение и @nicoddemus за PR.Сообщать о выходе разрыва при неудачном тестировании (issue #442). Спасибо @matclab за PR.
Исправьте сообщение об ошибке разрыва в сгенерированном xUnit XML. Спасибо @gdyuldin за PR.
Правильно обрабатывать исключения в задачах
multiprocessing
(issue #1984). Спасибо @adborden за сообщение и @nicoddemus за PR.Очистка объектов unittest TestCase после завершения тестов (issue #1649). Спасибо @d-b-w за отчет и PR.
3.0.3 (2016-09-28)¶
Аргумент
ids
вparametrize
снова принимает строкиunicode
в Python 2 (issue #1905). Спасибо @philpep за сообщение и @nicoddemus за PR.Утверждения теперь переписываются для плагинов в режиме разработки (
pip install -e
) (issue #1934). Спасибо @nicoddemus за PR.Исправьте ошибку импорта pkg_resources в проектах Jython (issue #1853). Спасибо @raquelalegre за PR.
Избавились от исключения
AttributeError: 'Module' object has no attribute '_obj'
в Python 3 (issue #1944). Спасибо @axil за PR.Объясните плохое значение области видимости, переданное в объявления
@fixture
или вызовMetaFunc.parametrize()
.Эта версия включает
pluggy-0.4.0
, который правильно обрабатываетVersionConflict
ошибки в плагинах (issue #704). Спасибо @nicoddemus за PR.
3.0.2 (2016-09-01)¶
Улучшите сообщение об ошибке при передаче нестроковых идентификаторов в
pytest.mark.parametrize
(issue #1857). Спасибо @okken за отчет и @nicoddemus за PR.Добавить атрибут
buffer
к классу stdin stubpytest.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_strict
ini, которую можно использовать для настройки по проекту. Спасибо @rabbbit за запрос и @nicoddemus за PR (pull request #1355).Parser.addini
теперь поддерживает опции типаbool
. Спасибо @nicoddemus за PR.Новая опция doctest
ALLOW_BYTES
. Она удаляет префиксыb
из байтовых строк в выводе doctest (аналогичноALLOW_UNICODE
). Спасибо @jaraco за запрос и @nicoddemus за PR (pull request #1287).Дайте подсказку на
KeyboardInterrupt
для использования опции--fulltrace
для показа ошибок. Исправляет issue #1366. Спасибо @hpk42 за отчет и @RonnyPfannschmidt за PR.Перехват исключений
IndexError
при получении местоположения источника исключения. Исправление внутренней ошибки pytest для динамически сгенерированного кода (фикстуры и тесты), в котором исходные строки являются фальшивыми по намерению.
Изменения
Важно: py.code был объединен в репозиторий
pytest
какpytest._code
. Это решение было принято потому, чтоpy.code
имел очень мало применений за пределамиpytest
и тот факт, что он находился в другом репозитории, затруднял своевременное исправление ошибок в его коде. Команда надеется, что с помощью этого изменения она сможет лучше рефакторить и улучшить этот код. Это изменение не должно повлиять на пользователей, но полезно сообщить пользователям, если они столкнутся с каким-либо странным поведением.Помните, что код для
pytest._code
является частным и экспериментальным, поэтому вы определенно не должны импортировать его явно!Обратите внимание, что оригинал
py.code
все еще доступен в pylib.pytest_enter_pdb
теперь опционально получает объект pytest config. Спасибо @nicoddemus за PR.Удален код и документация для Python 2.5 или более низких версий, включая удаление устаревшего модуля
_pytest.assertion.oldinterpret
. Спасибо @nicoddemus за PR (pull request #1226).Теперь сравнения всегда отображаются полностью, если в окружении найдено
CI
илиBUILD_NUMBER
, даже если-vv
не используется. Спасибо @The-Compiler за PR.--lf
и--ff
теперь поддерживают длинные имена:--last-failed
и--failed-first
соответственно. Спасибо @MichaelAquilina за PR.Добавлены ожидаемые исключения в сообщение об ошибке
pytest.raises
.Collection отображает прогресс («собирает X элементов») только в терминале. Это позволяет избежать загромождения вывода при использовании
--color=yes
для получения цветов в системах интеграции CI (issue #1397).
Устранение ошибок
Опции
-s
и-c
теперь должны работать подxdist
;Config.fromdictargs
теперь гораздо точнее представляет свои входные данные. Спасибо @bukzor за полный PR (issue #680).Исправление (issue #1290): поддержка оператора
@
в Python 3.5 при переписывании утверждений. Спасибо @Shinkenjoe за отчет с тестовым примером и @tomviner за PR.Исправьте форматирование utf-8 пояснительных сообщений (issue #1379). Спасибо @biern за PR.
Исправьте traceback style docs для описания всех доступных опций (auto/long/short/line/native/no), при этом
auto
будет использоваться по умолчанию с версии 2.6. Спасибо @hackebrot за PR.Исправление (issue #1422): junit record_xml_property не позволяет использовать несколько записей с одинаковым именем.
2.8.7 (2016-01-24)¶
исправление #1338: использовать предсказуемое разрешение объектов для monkeypatch
2.8.6 (2016-01-21)¶
исправление #1259: разрешить двойные nodeids в junitxml, это была регрессия, приводящая к сбоям в комбинациях плагинов, таких как pytest-pep8 + pytest-flakes
Обходное решение для исключения, возникающего в pyreadline при использовании
--pdb
при включенном стандартном захвате ввода-вывода. Спасибо Эрику М. Брэю за PR.исправление #900: Улучшено сообщение об ошибке в случае, если цель вызова
monkeypatch
вызываетImportError
.исправление #1292: вызовы monkeypatch (setattr, setenv и т.д.) теперь O(1). Спасибо David R. MacIver за сообщение и Bruno Oliveira за PR.
исправление #1223: захваченные stdout и stderr теперь правильно отображаются перед входом в pdb, когда используется
--pdb
, а не отбрасываются. Спасибо Кэлу Лимингу за PR.исправление #1305: предупреждения pytest, выдаваемые во время
pytest_terminal_summary
, теперь отображаются правильно. Спасибо Ionel Maries Cristian за сообщение и Bruno Oliveira за PR.исправление #628: исправлена внутренняя ошибка UnicodeDecodeError, когда доктесты содержат юникод. Спасибо Jason R. Coombs за сообщение и Bruno Oliveira за PR.
исправление #1334: Добавить захваченный stdout в jUnit XML отчет об ошибке настройки. Спасибо Георгию Дюльдину за PR.
2.8.5 (2015-12-11)¶
исправление #1243: исправлена проблема, когда атрибуты класса, внедренные во время сбора, могли нарушить pytest. PR Алексея Козленка, спасибо Ronny Pfannschmidt и Bruno Oliveira за рецензию и помощь.
исправление #1074: предварительное вычисление кусков junitxml вместо хранения всего дерева в объектах Спасибо Bruno Oliveira за отчет и Ronny Pfannschmidt за PR
исправление #1238: исправление
pytest.deprecated_call()
при получении нескольких аргументов (Регрессия внесена в 2.8.4). Спасибо Alex Gaynor за сообщение и Bruno Oliveira за PR.
2.8.4 (2015-12-06)¶
исправление #1190:
deprecated_call()
теперь работает, когда устаревшая функция уже была вызвана другим тестом в том же модуле. Спасибо Михаилу Черных за сообщение и Бруно Оливейре за PR.исправление #1198: Опция
--pastebin
теперь работает на Python 3. Спасибо Mehdy Khoshnoody за PR.исправление #1219:
--pastebin
теперь работает корректно, когда захваченный вывод содержит неасксичные символы. Спасибо Бруно Оливейра за PR.исправление #1204: еще одна ошибка при сборе с неприятным __getattr__(). Спасибо Флориану Брухину за PR.
исправить сводку, выводимую при отсутствии тестов. Спасибо Флориану Брухину за PR.
исправление #1185 - убедитесь, что MANIFEST.in точно соответствует тому, что должно попасть в sdist
ряд модернизаций документации в соответствии с передовым опытом. Спасибо Бруно Оливейра за PR.
2.8.3 (2015-11-18)¶
исправление #1169: добавьте атрибут __name__ к тесткейсам в TestCaseFunction для поддержки декоратора @unittest.skip для функций и методов. Спасибо Ли Каментски за PR.
исправление #1035: сбор тестов, если у obj уровня тестового модуля есть __getattr__(). Спасибо Suor за сообщение и Bruno Oliveira / Tom Viner за PR.
исправление #331: не собирайте тесты, если об их неудаче нельзя корректно сообщить, например, они являются вызываемым экземпляром класса.
исправление #1133: исправлена внутренняя ошибка при фильтрации трассировок, когда одна запись принадлежит файлу, который больше не доступен. Спасибо Бруно Оливейра за PR.
Улучшение сделано для выделения красным цветом имен неудачных тестов, чтобы они выделялись в выводе. Спасибо Габриэлю Рейсу за PR.
добавить в документацию больше разговоров
расширить документацию по опции –ignore cli
используйте pytest-runner для интеграции setuptools
мелкие исправления для взаимодействия с защитой целостности системы OS X El Capitan (спасибо Флориану)
2.8.2 (2015-10-07)¶
исправление #1085: правильная обработка ошибок кодировки при передаче закодированных байтовых строк в pytest.parametrize в Python 2. Спасибо Themanwithoutaplan за сообщение и Бруно Оливейра за PR.
исправление #1087: обработка SystemError при передаче пустых байтовых строк в pytest.parametrize в Python 3. Спасибо Paul Kehrer за сообщение и Bruno Oliveira за PR.
исправление #995: исправлена внутренняя ошибка при фильтрации трассировок, в которых одна запись была сгенерирована оператором exec(). Спасибо Daniel Hahler, Ashley C Straw, Philippe Gauthier и Pavel Savchenko за участие и Bruno Oliveira за PR.
исправление #1100 и #1057: ошибки при использовании модулей autouse fixtures и doctest. Спасибо Sergey B Kirpichev и Vital Kudzelka за участие и Bruno Oliveira за PR.
2.8.1 (2015-09-29)¶
исправление #1034: Добавить недостающий nodeid при вызове pytest_logwarning в addhook. Спасибо Саймону Гомизелю за PR.
„deprecated_call“ теперь удовлетворяется только при наличии DeprecationWarning или PendingDeprecationWarning. До версии 2.8.0 он принимал любое предупреждение, а в версии 2.8.0 он стал принимать только DeprecationWarning (но не PendingDeprecationWarning). Спасибо Alex Gaynor за проблему и Eric Hunsberger за PR.
исправление проблемы #1073: избегайте вызова __getattr__ на потенциальных объектах плагина. Это исправляет несовместимость с pytest-django. Спасибо Andreas Pelme, Bruno Oliveira и Ronny Pfannschmidt за участие и Holger Krekel за исправление.
Исправление проблемы #704: более изящно обрабатывать конфликт версий при загрузке плагина. Спасибо Бруно Оливейра за PR.
Исправление проблемы #1064: регрессия «»–junitxml» при использовании с плагином «pytest-xdist», в результате чего тестовые отчеты назначались на неправильные тесты. Спасибо Daniel Grunwald за сообщение и Bruno Oliveira за PR.
(экспериментально) адаптировали версионность в стиле SEMVER и изменили значение ветки master в git-репо: В ветке «master» теперь хранятся исправления ошибок и изменения, предназначенные для микро-релизов. Ветка «features» будет выпускаться только с минорными или крупными релизами pytest.
Исправьте проблему #766, удалив из документации ссылки на distutils. Спасибо Расселу Уиндеру.
Исправление проблемы #1030: теперь байт-строки экранируются для получения идентификаторов узлов элементов, чтобы сделать их всегда сериализуемыми. Спасибо Andy Freeland за отчет и Bruno Oliveira за PR.
Python 2: если параметризованные значения unicode преобразуются в ascii, их представление ascii используется для идентификатора узла.
Исправление проблемы #411: Добавьте метод __eq__ в пример сравнения утверждений. Спасибо Бену Веббу.
Исправление проблемы #653: deprecated_call может быть использован в качестве менеджера контекста.
исправление проблемы 877: правильно обрабатывать пояснения утверждений с неасксиальными repr Спасибо Матье Агопьяну за сообщение и Ронни Пфанншмидту за PR.
исправление проблемы 1029: ошибки преобразования при записи значений кэша в pytest-warnings
2.8.0 (2015-09-18)¶
новые опции
--lf
и-ff
для запуска только последних неудачных тестов или «сначала неудачные тесты» из последнего запуска. Эта функциональность обеспечивается за счет переноса ранее внешнего плагина pytest-cache в ядро pytest. ИСКЛЮЧЕНИЕ: если вы использовали функциональность pytest-cache для сохранения данных между запусками тестов, имейте в виду, что мы больше не сериализуем наборы. Спасибо Ronny Pfannschmidt за большую часть работы по объединению.Опция «-r» теперь принимает «a» для включения всех возможных отчетов, аналогично передаче «fEsxXw» явным образом (issue960). Спасибо Abhijeet Kasurde за PR.
избежать предупреждений об устаревании python3.5, внедрив помощники проверки для конкретной версии, спасибо Michael Droettboom.
исправление проблемы562: @nose.tools.istest теперь полностью соблюдается.
исправить issue934: когда сравнение строк не удается и разница слишком велика для отображения без передачи -vv, все равно показывается несколько строк разницы. Спасибо Florian Bruhin за сообщение и Bruno Oliveira за PR.
issue736: Исправление ошибки, при которой параметры приспособления отбрасывались при объединении с маркерами параметризации. Спасибо Маркусу Унтервадицеру за PR.
исправить issue710: ввести опцию ALLOW_UNICODE doctest: если опция включена, префикс
u
удаляется из юникодовых строк в ожидаемом выводе doctest. Это позволяет доктестам, использующим юникод, выполняться в Python 2 и 3 без изменений. Спасибо Jason R. Coombs за сообщение и Bruno Oliveira за PR.parametrize теперь также генерирует значимые идентификаторы тестов для объектов enum, regex и классов (в отличие от экземпляров классов). Спасибо Флориану Брухину за PR.
Добавьте „warns“, чтобы утверждать, что предупреждения отбрасываются (как и „raises“). Спасибо Эрику Хансбергеру за PR.
Исправьте проблему683: Не применять уже примененную метку. Спасибо ojake за PR.
Лучше справляться с ошибками перехвата, чтобы меньше исключений терялось в /dev/null. Спасибо Дэвиду Сзоттену за PR.
исправление issue730: устаревание и предупреждение об опции –genscript. Спасибо Ronny Pfannschmidt за сообщение и Christian Pommranz за PR.
исправление проблемы751: ошибка множественной параметризации с идентификаторами, если параметризуется класс с двумя или более тестовыми методами. Спасибо Сергею Чипиге за сообщение и Яну Беднарику за PR.
исправить issue82: по умолчанию избегать загрузки файлов conftest из файлов setup.cfg/pytest.ini/tox.ini и выше (–confcutdir все еще может быть установлен, чтобы отменить это). Спасибо Бруно Оливейра за PR.
исправление проблемы768: docstrings, найденные в модулях python, не устанавливали фикстуры сессии. Спасибо Jason R. Coombs за сообщение и Bruno Oliveira за PR.
добавлено
tmpdir_factory
, приспособление, скопированное на сессию, которое можно использовать для создания каталогов под базовым временным каталогом. Ранее этот объект устанавливался как атрибут_tmpdirhandler
объектаconfig
, но теперь он является частью официального API и использованиеconfig._tmpdirhandler
устарело. Спасибо Бруно Оливейра за PR.исправление issue808: внутренний хук перезаписи утверждений pytest теперь реализует необязательный API PEP 302 get_data, чтобы тесты могли обращаться к файлам данных рядом с ними. Спасибо xmo-odoo за запрос и пример и Бруно Оливейре за PR.
rootdir и inifile теперь отображаются при ошибках использования, чтобы помочь пользователям диагностировать такие проблемы, как неожиданные ini-файлы, которые добавляют неизвестные опции, подхватываемые pytest. Спасибо Павлу Савченко за привлечение внимания к проблеме в #821 и Бруно Оливейре за PR.
Сводная панель теперь окрашивается в желтый цвет для предупреждающих ситуаций, таких как: все тесты либо пропущены, либо xpass/xfail, либо тесты вообще не выполнялись (это частичное исправление проблемы 500).
исправление issue812: pytest теперь завершает работу с кодом состояния 5 в ситуациях, когда тесты не были запущены вообще, например, если каталог, указанный в командной строке, не содержит тестов или в результате того, что опция командной строки отфильтровывает все тесты (например, -k). Спасибо Eric Siegerman (issue812) и Bruno Oliveira за PR.
Сводная панель теперь окрашивается в желтый цвет для предупреждающих ситуаций, таких как: все тесты либо пропущены, либо xpass/xfailed, либо тесты вообще не выполнялись (связано с проблемой 500). Спасибо Эрику Зигерману.
Новая опция ini
testpaths
: список каталогов для поиска тестов при выполнении pytest из корневого каталога. Это может быть использовано для ускорения сбора тестов, когда в проекте есть хорошо заданные каталоги для тестов, что обычно более практично, чем настройка norecursedirs для всех каталогов, не содержащих тесты. Спасибо Adrian за идею (#694) и Bruno Oliveira за PR.исправление issue713: JUnit XML-отчеты для неудачных доктестов. Спасибо Punyashloka Biswal.
исправление issue970: внутренние предупреждения pytest теперь отображаются в терминале как «pytest-warnings» вместо «warnings», так что пользователям ясно, что эти предупреждения от pytest, а не от встроенного модуля «warnings». Спасибо Бруно Оливейра.
Включите установку и разрушение в длительность тестов junitxml. Спасибо Янне Ванхала.
исправление проблемы735: сбои утверждений в отладочных версиях Python 3.4+
новая опция
--import-mode
, позволяющая изменить поведение импорта тестовых модулей на добавление к sys.path вместо префиксации. Это позволяет запускать тестовые модули против установленных версий пакета, даже если тестируемый пакет имеет тот же корень импорта. В данном примере:testing/__init__.py testing/test_pkg_under_test.py pkg_under_test/
тесты будут работать с установленной версией pkg_under_test при использовании
--import-mode=append
, тогда как по умолчанию они всегда берут локальную версию. Спасибо Holger Krekel.pytester: добавьте метод
TmpTestdir.delete_loaded_modules()
и вызывайте его изinline_run()
, чтобы разрешить перезагрузку временных модулей. Спасибо Eduardo Schettino.внутренне рефакторить API и код pluginmanager так, чтобы было четкое различие между pytest-agnostic довольно простым pluginmanager и PytestPluginManager, который добавляет много поведения, среди которого обработка локальных файлов conftest. С точки зрения документированных методов это изменение обратно совместимо, но оно все еще может сломать сторонние плагины, которые полагаются на детали, например, API pluginmanager.add_shutdown(). Спасибо Хольгеру Крекелю.
pluginmanagement: ввести декораторы
pytest.hookimpl
иpytest.hookspec
для задания параметров, специфичных для impl/spec. Это заменяет предыдущее, ныне устаревшее использованиеpytest.mark
, которое предназначено только для маркеров тестовых функций.написать/доработать документацию по «написанию плагинов», которая теперь имеет свою собственную страницу и отделена от страницы «использование/установка плагинов».
исправление issue732: корректное снятие регистрации плагинов с любых вызывающих хук сайтов, позволяющее иметь временные плагины во время выполнения теста.
deprecate и предупреждать об аргументе
__multicall__
в реализации хуков. Вместо этого используйте механизмhookwrapper
, уже представленный в pytest-2.7.значительно ускорить собственный набор тестов pytest, используя по умолчанию тесты в процессе (testrun может быть модифицирован с помощью –runpytest=subprocess для создания подпроцессов во многих местах). Основными API для запуска pytest в тесте являются «runpytest()» или «runpytest_subprocess» и «runpytest_inprocess», если вам нужен определенный способ запуска теста. Во всех случаях вы получите результат RunResult, но в случае с inprocess он также будет содержать атрибут «reprec» с записанными событиями/отчетами.
исправьте monkeypatch.setattr(«x.y», raising=False), чтобы он действительно не выдавал ошибку, если «y» не является уже существующим атрибутом. Спасибо Флориану Брухину.
исправить issue741: сделать вывод результатов работы из testdir.run копируемым/вставляемым Спасибо Бруно Оливейра.
добавить новый аргумент
--noconftest
, который игнорирует все файлыconftest.py
.добавить атрибуты
file
иline
в вывод JUnit-XML.исправление issue890: изменено расширение всех файлов документации с
txt
наrst
. Спасибо Abhijeet за PR.исправить issue714: добавить возможность применять параметр indirect=True для определенных argnames. Спасибо Elizaveta239.
исправление issue890: изменено расширение всех файлов документации с
txt
наrst
. Спасибо Abhijeet за PR.исправление проблемы957: «# doctest: SKIP» теперь будет регистрировать доктесты как SKIPPED, а не PASSED. Спасибо Thomas Grainger за отчет и Bruno Oliveira за PR.
issue951: добавьте новое приспособление record_xml_property, которое поддерживает запись дополнительной информации в xml-вывод. Спасибо Дэвиду Диасу за PR.
issue949: пути после обычных опций (например,
-s
,-v
и т.д.) теперь правильно используются для обнаружения файловrootdir
иini
. Спасибо Peter Lauri за сообщение и Bruno Oliveira за PR.
2.7.3 (2015-09-15)¶
Разрешить „dev“, „rc“ или другие нецелые строки версий в
importorskip
. Спасибо Эрику Хансбергеру за PR.исправить issue856: учитывать параметр –color во всех выводах (например, –fixtures). Спасибо Barney Gale за сообщение и Bruno Oliveira за PR.
исправление issue855: передача объектов str в качестве аргумента
plugins
в pytest.main теперь интерпретируется как имя модуля, который должен быть импортирован и зарегистрирован как плагин, вместо того, чтобы молча не иметь никакого эффекта. Спасибо xmo-odoo за сообщение и Бруно Оливейре за PR.исправление issue744: исправление изменений ast.Call в Python 3.5+. Спасибо Guido van Rossum, Matthias Bussonnier, Stefan Zimmermann и Thomas Kluyver.
исправление проблемы 842: применение маркеров в классах больше не распространяло эти маркеры на суперклассы, которые также имеют маркеры. Спасибо xmo-odoo за сообщение и Бруно Оливейре за PR.
сохранять предупреждающие функции после вызова pytest.deprecated_call. Спасибо Pieter Mulder за PR.
исправление issue854: autouse yield_fixtures, определенные как члены класса подклассов unittest.TestCase, теперь работают как ожидалось. Спасибо xmo-odoo за сообщение и Бруно Оливейре за PR.
исправление issue833: –fixtures теперь показывает все фикстуры собранных тестовых файлов, а не только фикстуры, объявленные в первом из них. Спасибо Florian Bruhin за сообщение и Bruno Oliveira за PR.
исправление проблемы863: пропущенные тесты теперь сообщают правильную причину, когда выполняется условие пропуска/xfail при использовании нескольких маркеров. Спасибо Raphael Pierzina за сообщение и Bruno Oliveira за PR.
оптимизирована инициализация фикстуры tmpdir, что должно сделать тестовые сессии быстрее (особенно при использовании pytest-xdist). Единственный видимый эффект заключается в том, что теперь pytest использует подкаталог в каталоге $TEMP для всех каталогов, созданных этим приспособлением (по умолчанию $TEMP/pytest-$USER). Спасибо Бруно Оливейра за PR.
2.7.2 (2015-06-23)¶
исправление проблемы767: атрибут pytest.raises value не содержит экземпляр исключения на Python 2.6. Спасибо Eric Siegerman за предоставленный тестовый пример и Bruno Oliveira за PR.
Автоматическое создание каталога для junitxml и журнала результатов. Спасибо Арону Керзону.
исправление issue713: JUnit XML-отчеты для неудачных доктестов. Спасибо Punyashloka Biswal.
исправить issue735: assertion failures on debug versions of Python 3.4+ Спасибо Бенджамину Петерсону.
исправить проблему114: маркер skipif сообщает о внутреннем пропуске плагина; Спасибо Floris Bruynooghe за сообщение и Bruno Oliveira за PR.
исправление проблемы748: unittest.SkipTest сообщает о внутреннем плагине pytest unittest. Спасибо Thomas De Schampheleire за сообщение и Bruno Oliveira за PR.
исправить issue718: не удалось создать представление множеств, содержащих несортируемые элементы в python 2. Спасибо Edison Gustavo Muenz.
исправить issue756, исправить issue752 (и подобные проблемы): зависимость от py-1.4.29, который имеет уточненный алгоритм генерации трассировок.
2.7.1 (2015-05-19)¶
исправление issue731: не путайтесь в скобках, которые могут присутствовать и быть несбалансированными в repr объекта при сворачивании Ложных пояснений. Спасибо Карлу Мейеру за отчет и тестовый пример.
исправление проблемы 553: правильная обработка сбоев inspect.getsourcelines в FixtureLookupError, которые приводили к внутренней ошибке, скрывая исходную проблему. Спасибо talljosh за первоначальную диагностику/патч и Bruno Oliveira за финальный патч.
исправить issue660: правильно сообщать об ошибках scope-mismatch-access независимо от порядка аргументов приспособления. Также следует избегать внутренней трассировки pytest, которая не предоставляет информации пользователю. Спасибо Хольгеру Крекелю.
оптимизированный и документированный процесс выпуска. Также все версии (в setup.py и генерации документации) теперь считываются из _pytest/__init__.py. Спасибо Хольгеру Крекелю.
исправили документацию, чтобы убрать представление о том, что фиксы доходности являются экспериментальными. Они здесь и останутся :) Спасибо Бруно Оливейра.
Поддержка создания колес с помощью маркеров окружения для требований. Спасибо Ионелу Мариесу Кристиану.
исправлена регрессия до 2.6.4, которая проявлялась, например, в потере печати захвата stdout, когда тесты вызывали SystemExit. Спасибо Хольгеру Крекелю.
вновь введено крепление _pytest плагина pytester, которое используется по крайней мере pytest-xdist.
2.7.0 (2015-03-26)¶
исправить issue435: заставить reload() работать, когда активна перезапись утверждений. Спасибо Даниэлю Халеру.
исправление проблемы616: файлы conftest.py и содержащиеся в них фикстуры теперь правильно рассматриваются на предмет видимости, независимо от точного текущего рабочего каталога и используемых тестовых аргументов. Большое спасибо Эрику Зигерману и его PR235, который содержит систематические тесты на видимость conftest и теперь проходит. Это изменение также вводит понятие
rootdir
, которое выводится как новый заголовок pytest и документируется на веб-странице pytest customize.изменение отчетности о «перенаправленных» тестах, т.е. тестах, которые собраны в одном файле, но на самом деле приходят из другого (например, когда тесты в тестовом классе приходят из базового класса в другом файле). Теперь мы показываем nodeid и указываем через постфикс другой файл.
добавить возможность задавать опции командной строки переменной окружения PYTEST_ADDOPTS.
добавлена документация по новым командам pytest-dev на bitbucket и github. См. https://pytest.org/en/stable/contributing.html . Спасибо Анатолию за толчок и первоначальную работу над этим.
исправление issue650: новая опция
--docttest-ignore-import-errors
, которая будет превращать ошибки импорта в доктестах в пропуски. Спасибо Charles Cloud за полный PR.исправление проблемы655: работа над различными способами, которые приводят к тому, что python2/3 сливает информацию sys.exc_info в фикстуры/тесты, вызывая сбои в коде сторонних разработчиков
исправление проблемы615: при перезаписи утверждений неправильно экранировались знаки % при форматировании булевых операций, что приводило к ошибкам при смешивании булевых операций с операторами modulo. Спасибо Тому Винеру за сообщение, устранение проблемы и исправление.
реализовать issue351: добавить возможность указывать идентификаторы параметров в качестве вызываемого параметра для генерации пользовательских идентификаторов тестов. Спасибо Brianna Laugher за идею и реализацию.
ввести и документировать новый механизм hookwrapper, полезный для подключаемых модулей, которые хотят обернуть выполнение определенных хуков для своих целей. Он заменяет недокументированный протокол
__multicall__
, который используется самим pytest и некоторыми внешними плагинами. Обратите внимание, что в pytest-2.8 планируется отказаться от поддержки старого протокола__multicall__
и поддерживать только протокол hookwrapper.значительно ускорить вызов хуков плагинов
использовать механизм hookwrapper во встроенных плагинах pytest.
добавить опцию doctest ini для флагов doctest, спасибо Хольгеру Петерсу.
добавить примечание к документации, что если вы хотите пометить параметр, а параметр является вызываемым, вам также нужно передать причину, чтобы отделить его от случая «декоратора». Спасибо, Том Винер.
Опции «python_classes» и «python_functions» теперь поддерживают glob-шаблоны для обнаружения тестов, как обсуждалось в issue600. Спасибо Ldiary Translations.
позволяют переопределять параметризованные фиксы непараметризованными и наоборот (bubenkoff).
исправление проблемы463: повышение специфической ошибки для неправильного написания „parameterize“ (pfctdayelise).
При неудаче устанавливаются значения
sys.last_value
,sys.last_type
иsys.last_traceback
, чтобы пользователь мог проверить ошибку через посмертную отладку (almarklein).
2.6.4 (2014-10-24)¶
Улучшение отчетности об ошибках утверждений на итерациях с помощью ndiff и pprint.
удалена устаревшая японская документация из дерева исходников.
документации для хука «pytest_addhooks». Спасибо Бруно Оливейра.
обновлена документация по индексу плагина. Спасибо Бруно Оливейра.
исправление проблемы 557: с «-k» мы разрешаем только старый стиль «-» для отрицания в начале строк, и даже он устарел. Вместо этого используйте «not». Это позволит отбирать параметризованные тесты, в которых «-» встречается в параметре.
исправление проблемы604: Исключите символ % в сообщении об утверждении.
исправить проблему620: добавить объяснение в цель –genscript о том, что означает двоичный блоб. Спасибо Дину Герман.
исправление issue614: исправлена поддержка pastebin.
исправить проблему620: добавить объяснение в цель –genscript о том, что означает двоичный блоб. Спасибо Дину Герман.
исправление issue614: исправлена поддержка pastebin.
2.6.3 (2014-09-24)¶
исправление issue575: xunit-xml сообщал об ошибках коллекции как о сбоях вместо ошибок, спасибо Олегу Синявскому.
исправить issue582: исправить пример setuptools, спасибо Laszlo Papp и Ronny Pfannschmidt.
Исправление ошибки бесконечной рекурсии при пикировании capture.EncodedFile, спасибо Уве Шмитту.
исправление issue589: исправлено плохое взаимодействие с numpy и другими при отображении исключений. Проверка на точное исключение «превышение максимальной глубины рекурсии» вместо предположения, что любой RuntimeError является таковым (реализовано в py dep). Спасибо Charles Cloud за анализ проблемы.
исправить проблему видимости фикстур, связанную с conftest: при запуске с CWD вне тестового пакета pytest ошибался в обнаружении фикстур. Спасибо Вольфгангу Шнерингу за то, что он нашел воспроизводимый пример.
Внедрите хук pytest_enter_pdb (необходим, например, pytest_timeout для отмены таймаута при интерактивном входе в pdb). Спасибо Вольфгангу Шнерингу.
проверять xfail/skip также с элементами тестирования функций, не относящихся к Python. Спасибо Floris Bruynooghe.
2.6.2 (2014-09-05)¶
Добавлена функция pytest.freeze_includes(), которая упрощает встраивание pytest в исполняемые файлы с помощью инструментов типа cx_freeze. Примеры и обоснование смотрите в документации. Спасибо Бруно Оливейра.
Улучшение точности аннулирования кэша перезаписи утверждений.
исправлена проблема561: адаптация примера приспособления autouse для python3.
исправлена проблема453: проблема с перезаписью утверждений, когда __repr__ содержит «n{», «n}» и «n~».
исправление проблемы560: корректное отображение кода, если за утверждениями «else:» или «finally:» следуют утверждения в одной строке.
Исправьте пример в документации по monkeypatch, спасибо t-8ch.
исправление issue572: исправьте пример документа tmpdir для python3.
Не отмечать как универсальное колесо, поскольку Python 2.6 отличается от других сборок из-за дополнительной зависимости argparse. Исправляет проблему566. Спасибо sontek.
Реализация issue549: пользовательские сообщения об утверждениях теперь не заменяют сообщения интроспекции py.test, а показываются в дополнение к ним.
2.6.1 (2014-08-07)¶
Больше не показывает номера строк в выводе –verbose, теперь вывод осуществляется только по идентификатору узла. Номер строки по-прежнему отображается в отчетах о сбоях. Спасибо Floris Bruynooghe.
исправление проблемы437, когда перезапись утверждений могла привести к тому, что рабочие узлы pytest-xdist собирали разные тесты. Спасибо Бруно Оливейра.
исправить issue555: добавить атрибут «errors» к capture-streams, чтобы удовлетворить некоторые distutils и, возможно, другой код, обращающийся к sys.stdout.errors.
исправление проблемы547 capsys/capfd также работают при отключенном захвате вывода («-s»).
решить проблему170: разрешить pytest.mark.xfail(…) указывать ожидаемые исключения с помощью необязательного аргумента «raises=EXC», где EXC может быть одним исключением или кортежем классов исключений. Спасибо David Mohr за полный PR.
исправить интеграцию pytest с декоратором unittest.mock.patch, когда он использует аргумент «new». Спасибо Nicolas Delaby за тестирование и PR.
исправление проблемы с обнаружением файлов conftest, если аргументы содержат «::» спецификации id узла (скопировано из вывода «-v»)
исправить проблему544, удаляя «@NUM» только в конце разделенных «::» частей и если часть имеет расширение «.py»
не используйте помощника py.std import, лучше импортируйте вещи напрямую. Спасибо Бруно Оливейра.
2.6¶
Кэширование исключений из фикстур в соответствии с их областью применения (проблема 467).
исправить issue537: Избегать импорта старого кода переинтерпретации утверждений по умолчанию.
исправить issue364: сократить и расширить представление трассировок по умолчанию. Новая опция «–tb=auto» (по умолчанию) будет отображать длинные трассировки только для первой и последней записи. Вы можете получить старое поведение печати всех записей как длинных записей с помощью «–tb=long». Также короткие записи по умолчанию теперь печатаются аналогично «–tb=native».
исправить проблему514: переинтерпретация утверждений об атрибутах частных классов
изменить вывод -v для включения полных идентификаторов узлов тестов. Пользователи могут скопировать идентификатор узла из теста, включая номер строки, и использовать его в качестве позиционного аргумента, чтобы запустить только один тест.
исправление проблемы 475: ранняя и понятная ошибка при вызове pytest.raises с неправильным типом исключения.
исправить issue516: сообщить в get-started о текущих зависимостях.
немного почистить setup.py и указать поддерживаемые версии. Спасибо Jurko Gospodnetic за PR.
изменить цвет XPASS на желтый, а не красный, когда тесты запускаются с параметром -v.
исправление проблемы473: решение проблемы, связанной с помещением несвязанного метода в dict класса при двойном исправлении.
исправление проблемы498: если финализатор приспособления не работает, убедитесь, что приспособление все еще недействительно.
исправление проблемы453: результат работы хука pytest_assertrepr_compare теперь экранируется новыми строками, чтобы исключение format_exception не раздувалось.
внутренняя новая система предупреждений: pytest теперь будет выдавать предупреждения, когда обнаружит странности в коллекции или выполнении тестов. Предупреждения отправляются в новый хук pytest_logwarning, который в настоящее время реализован только в терминальном плагине, который отображает предупреждения в итоговой строке и показывает более подробную информацию, если указано -rw (отчет о предупреждениях).
изменение переходит к предупреждениям для тестовых классов с __init__ и callables в тестовых модулях, которые выглядят как тест, но не являются функциями.
исправление issue436: улучшено нахождение начальных файлов conftest из аргументов командной строки путем использования результата parse_known_args, а не прежней шаткой эвристики. Спасибо Марку Абрамовицу за тесты и первоначальные подходы к исправлению в этой области.
исправить проблему #479: правильно обрабатывать исключения nose/unittest(2) SkipTest во время сбора/загрузки тестовых модулей. Спасибо Марку Шлайху за полный PR.
исправить issue490: включить pytest_load_initial_conftests в документацию и улучшить docstring.
исправить issue472: уточнить, что
pytest.config.getvalue()
не может работать, если он запускается перед разбором командной строки.объединение PR123: улучшена интеграция с декоратором mock.patch в тестах.
исправление issue412: работа с потоками stdout/stderr FD-уровня теперь происходит без сбоев.
исправление проблемы483: trial/py33 теперь работает правильно. Спасибо Daniel Grana за PR.
улучшить пример интеграции pytest с «python setup.py test», который теперь имеет общую опцию «-a» или «–pytest-args», где вы можете передать дополнительные опции в виде строки с кавычками. Спасибо Тревору Беколаю.
упростил внутренний механизм захвата и сделал его более устойчивым к тестам или установкам, изменяющим FD1/FD2, также теперь он лучше интегрирован с pytest.pdb() в одиночных тестах.
улучшения в обнаружении утечек в собственном тестовом наборе pytest, благодаря PR от Марка Абрамовица
исправить issue492: избежать утечки в test_writeorg. Спасибо Марку Абрамовицу.
исправление проблемы493: не запускайте тесты в каталоге doc с
python setup.py test
(для этого используйте tox -e doctesting).исправление issue486: улучшение отчетности и обработки ранних сбоев загрузки conftest
некоторая очистка и упрощение внутренней обработки тестов.
работать немного усерднее для разрыва ссылочных циклов при перехвате исключений. Спасибо Jurko Gospodnetic.
исправить issue443: исправьте примеры пропуска, чтобы использовать правильное сравнение. Спасибо Алексу Гроенхольму.
поддерживать атрибут nose-style
__test__
на модулях, классах и функциях, включая классы в стиле unittest. Если установлено значение False, тест не будет собираться.исправить issue512: показывать «<notset>» для аргументов, которые могут быть не заданы в плагине monkeypatch. Улучшает вывод в документации.
2.5.2 (2014-01-29)¶
исправить issue409 - лучше взаимодействует с cx_freeze, не пытаясь импортировать из collections.abc, что вызывает проблемы для py27/cx_freeze. Спасибо Wolfgang L. за сообщение и отслеживание проблемы.
исправил документацию и код, чтобы почти везде использовать «pytest» вместо «py.test». Спасибо Jurko Gospodnetic за полный PR.
исправить issue425: упомянуть в конце «py.test -h», что –markers и –fixtures работают в соответствии с указанным путем к тесту (или текущим каталогом)
исправление issue413: исключения с атрибутами unicode теперь печатаются корректно также на python2 и при запуске pytest-xdist. (для исправления требуется py-1.4.20)
копирование, очистка и интеграция захвата py.io из pylib 1.4.20.dev2 (rev 13d9af95547e)
решить проблему416: уточнить в документации семантику загрузки conftest.py
исправление issue429: сравнение байтовых строк с неаскриптивными символами в выражениях assert теперь работает лучше. Спасибо Floris Bruynooghe.
сделать capfd/capsys.capture приватным, он не используется и не должен быть открыт
2.5.1 (2013-12-17)¶
объединить новую документацию по стилизации PR от Тобиаса Беника.
исправить проблему403: разрешить параметризацию нескольких одноименных функций в узле коллекции. Спасибо Andreas Kloeckner и Alex Gaynor за отчет и анализ.
Разрешите параметризованным фикстурам указывать ID параметров, добавляя аргумент ids в pytest.fixture() и pytest.yield_fixture(). Спасибо Floris Bruynooghe.
исправить проблему404, всегда используя двоичный xml escape в плагине junitxml. Спасибо Ronny Pfannschmidt.
исправление issue407: исправьте addoption docstring, чтобы она указывала на argparse вместо optparse. Спасибо Дэниелу Д. Райту.
2.5.0 (2013-12-12)¶
исключил python2.5 из автоматического тестирования релиза самим pytest, что означает, что он, вероятно, скоро сломается (но все еще работает с этим релизом, мы уверены).
упрощена и исправлена реализация вызова финализаторов, когда задействованы параметризованные фикстуры или аргументы функций. Финализация теперь лениво выполняется во время установки, а не в «фазе разрушения». Хотя сначала это может показаться странным, это помогает убедиться, что мы правильно обрабатываем установку/разрушение даже в сложном коде. Код на уровне пользователя не должен пострадать, если только он не реализует хук pytest_runtest_teardown и не ожидает, что определенные экземпляры фикстур будут снесены внутри (очень маловероятно и в любом случае было бы ненадежно).
PR90: добавьте опцию –color=yes|no|auto для принудительного выбора режима раскраски терминала («auto» используется по умолчанию). Спасибо Марку Абрамовицу.
исправить issue319 - правильно отображать юникод в ошибках утверждения. Большое спасибо Floris Bruynooghe за полный PR. Также это означает, что теперь мы зависим от py>=1.4.19.
исправление issue396 - корректная сортировка и финализация класс-скопированных параметризованных тестов независимо от количества методов в классе.
исправление проблемы323 в лучшую сторону – параметризация теперь никогда не должна вызывать ошибки Runtime Recursion, поскольку лежащий в основе алгоритм переупорядочивания тестов по областям/по приспособлениям больше не является рекурсивным (раньше он был рекурсивным по хвостовым вызовам, что могло привести к проблемам для более чем >966 нефункциональных скопированных параметров).
исправление проблемы290 - теперь есть предварительная поддержка параметризации с повторяющимися одинаковыми значениями (иногда полезно проверить, работает ли вызов во второй раз так же, как и в первый).
закрыть issue240 - документировать, как именно работает импорт модулей pytest, обсудить две распространенные схемы расположения тестовых каталогов, и как это взаимодействует с пакетами PEP 420-namespace.
исправить issue246 исправить порядок финализатора на LIFO для независимых фикстур, зависящих от параметризованной фикстуры с масштабированием выше функции. (это потребовало определенных усилий, поэтому, пожалуйста, отнеситесь к сложности этого предложения :) Спасибо Ralph Schmitt за точный пример отказа.
исправление проблемы 244 путем внедрения специального индекса для параметров, чтобы использовать индексы только для запароленных идентификаторов тестов
исправить проблему 287, запустив все финализаторы, но сохранив исключение из первого неудачного финализатора и повторно подняв его, так что снос все равно будет неудачным. Мы поднимаем первое неудачное исключение, потому что оно может быть причиной неудач других финализаторов.
исправить упорядочивание, когда mock.patch или другие стандартные декораторы-обертки используются с тестовыми методами. Это исправляет проблему346 и должно помочь со случайными сбоями при сборе «xdist». Спасибо Ronny Pfannschmidt и Donald Stufft за помощь в выявлении проблемы.
исправление issue357 - специальный случай выражения «-k», позволяющий фильтровать простые строки, которые не являются допустимыми выражениями python. Примеры: «-k 1.3» фильтрует все тесты с параметром 1.3. «-k None» фильтрует все тесты, в названии которых есть «None», и наоборот «-k „not None“». Ранее эти примеры приводили к синтаксическим ошибкам.
исправить проблему384, удалив код поддержки trial, поскольку улучшения в unittest compat позволяют trial обрабатывать ее самостоятельно
не скрывать ImportError, когда при импорте плагина возникает ошибка. исправление проблемы375.
исправление проблемы275 - разрешить использование светильников и светильников autouse для запуска текстовых файлов doctest.
исправить проблему380, заставив –resultlog полагаться только на longrepr вместо атрибута «reprcrash», который существует только иногда.
решить проблему122: разрешить @pytest.fixture(params=iterator) путем раннего разложения в список.
исправление совместимости pexpect-3.0 для собственных тестов pytest. (исправляет проблему 386)
разрешить вложенные маркеры параметризации-значения, спасибо Джеймсу Лану за PR.
исправить обработку юникода с помощью нового API monkeypatch.setattr(import_path, value). Спасибо Робу Деннису. Исправляет проблему371.
исправлена работа с юникодом в junitxml, исправлена проблема 368.
В режиме перезаписи утверждений на Python 2 исправьте обнаружение кодировочных файлов cookie. См. выпуск #330.
заставить «–runxfail» превратить императивные вызовы pytest.xfail в отсутствие операций (он уже нейтрализовал маркеры pytest.mark.xfail).
улучшите взаимодействие pytest / pkg_resources: AssertionRewritingHook PEP 302 совместимый загрузчик теперь правильно регистрируется в setuptools/pkg_resources, чтобы метод pkg_resources.resource_stream работал правильно. Исправляет проблему 366. Спасибо за расследование и полный PR Джейсону Р. Кумбсу.
фикс pytestconfig теперь является session-scoped, поскольку это один и тот же объект во время всего выполнения теста. Исправляет проблему370.
избежать одного удивительного случая неисправности/перепутывания маркеров:
@pytest.mark.some(lambda arg: ...) def test_function():
не будет работать корректно, потому что pytest предполагает, что @pytest.mark.some уже получает функцию для оформления. Теперь мы по крайней мере определяем, является ли этот arg лямбдой, и таким образом пример будет работать. Спасибо Алексу Гейнору за то, что напомнил об этом.
xfail тест на pypy, который проверяет неправильную кодировку/ascii (pypy не выдает ошибку). исправляет проблему 385.
внутренне заставить varnames() работать с __init__ классов, хотя сейчас это не нужно самому pytest. Также исправлено кэширование. Исправляет проблему 376.
исправить issue221 - правильно обрабатывать импорт namespace-пакета без __init__.py.
рефакторинг внутренней обработки FixtureRequest, чтобы избежать обезьяньих патчей. Одним из положительных эффектов для пользователя является то, что объект «request» теперь можно использовать в закрытиях.
исправлено сравнение версий в pytest.importskip(modname, minverstring)
исправить проблему377, уточнив в документации nose-compat, что pytest не дублирует unittest-API в «простое» пространство имен.
исправление подробного отчета для тестовых функций @mock’d
2.4.2 (2013-10-04)¶
для Windows требуется colorama и более новая lib py, чтобы py.io.TerminalWriter() теперь использовал colorama вместо своих собственных хаков ctypes. (исправляет проблему365) Спасибо Полу Муру за то, что напомнил об этом.
исправление «-k» сопоставления тестов, где «repr», «attr» и другие имена приводили к неправильному сопоставлению из-за причуды внутренней реализации (не спрашивайте), которая теперь реализована правильно. исправление проблемы345.
предотвращение создания слишком длинных имен файлов с помощью функции tmpdir, особенно при использовании параметризации (issue354)
исправить взаимодействия pytest-pep8 и pytest-flakes / pytest (имена коллекций в плагине mark предполагали, что элемент всегда имеет функцию, что не верно для этих плагинов и т.д.) Спасибо Andi Zeidler.
ввести API node.get_marker/node.add_marker для таких плагинов, как pytest-pep8 и pytest-flakes, чтобы избежать беспорядочных деталей псевдодиктов node.keywords. Адаптированная документация.
удалите попытку «дублирования» stdout при запуске, так как это некрасиво. обычное перехватывание должно отловить достаточно возможностей тестов, портящих стандартные FD.
добавьте pluginmanager.do_configure(config) как ссылку на config.do_configure() для совместимости с плагинами
2.4.1 (2013-10-02)¶
При использовании parser.addoption() аргументы unicode к ключевому слову «type» также должны быть преобразованы в соответствующие типы. спасибо Floris Bruynooghe, @dnozay. (исправление проблемы 360 и проблемы 362)
исправлено точечное завершение имен файлов при использовании argcomplete Спасибо Anthon van der Neuth. (исправляет проблему 361)
исправление регрессии, когда для указания параметризации использовался кортеж 1 («arg»,) (значения параметризации передавались вложенными в кортеж). Спасибо Дональду Стафту.
исправление опечаток в документе, спасибо Энди Дирнбергеру
2.4¶
известные несовместимости:
при вызове –genscript из python2.7 или выше, вы получите только автономный скрипт, который работает на python2.7 или выше. Используйте Python2.6, чтобы также получить версию, совместимую с python2.5.
все методы разрушения в стиле xunit (nose-style, pytest-style, unittest-style) не будут вызываться, если соответствующий метод установки не сработал, см. проблему322 ниже.
хук pytest_plugin_unregister никогда не вызывался должным образом, и его реализация неизвестна - поэтому он был удален.
pytest.fixture-декорированные функции больше не могут быть генераторами (т.е. использовать yield). Это изменение может быть отменено в версии 2.4.1, если оно вызовет непредвиденные проблемы в реальной жизни. Тем не менее, вы всегда можете написать и вернуть внутреннюю функцию/генератор и изменить потребитель приспособлений для итерации над возвращаемым генератором. Это изменение было сделано вместо нового декоратора
pytest.yield_fixture
, см. ниже.
новые возможности:
экспериментально ввести новый декоратор
pytest.yield_fixture
, который принимает те же параметры, что и pytest.fixture, но требует от функций фиксации оператораyield
вместоreturn statement
. Это позволяет напрямую интегрировать контекстные менеджеры «with-style» в фикстурные функции и в целом избежать регистрации обратных вызовов финализации в пользу обработки «after-yield» как кода разрыва. Спасибо Andreas Pelme, Vladimir Keleshev, Floris Bruynooghe, Ronny Pfannschmidt и многим другим за обсуждение.разрешать булевы выражения непосредственно с skipif/xfail, если также указана «причина». Переработайте документацию по пропуску, чтобы рекомендовать «условия как булевы», поскольку это предотвращает неожиданности при импорте маркеров между модулями. Указание условий в виде строк будет по-прежнему полностью поддерживаться.
отчетность: окрашивание последней строки в красный или зеленый цвет в зависимости от того, произошли ли сбои/ошибки или все прошло. спасибо Christian Theunert.
заставить «import pdb ; pdb.set_trace()» работать нативно в отношении захвата (больше не нужно «-s»), превращая
pytest.set_trace()
в простое сокращение.исправление issue181: –pdb теперь работает и при ошибках сбора (и при внутренних ошибках) . Это было реализовано путем небольшого внутреннего рефакторинга и введения нового хука
pytest_exception_interact
(см. следующий пункт).исправить issue341: ввести новый экспериментальный хук для IDE/терминалов для перехвата отладки:
pytest_exception_interact(node, call, report)
.новый вариант monkeypatch.setattr() для обеспечения более короткого вызова для исправления классов/функций из модулей:
monkeypatch.setattr(«requests.get», myfunc)
заменит функцию «get» модуля «requests» на
myfunc
.исправление проблемы322: tearDownClass не запускается, если setUpClass не удался. Спасибо Mathieu Agopian за первоначальное исправление. Также сделайте все финализаторы pytest/nose имитирующими одно и то же общее поведение: если setupX существует и не сработал, не запускайте teardownX. Это вводит новый метод-помощник «node.addfinalizer()», который может быть вызван только на этапе установки узла.
упростить подпись pytest.mark.parametrize(): разрешить передавать строку, разделенную CSV, для указания argnames. Например:
pytest.mark.parametrize("input,expected", [(1,2), (2,3)])
работает так же, как и предыдущий:pytest.mark.parametrize(("input", "expected"), ...)
.добавить поддержку определения setUpModule/tearDownModule, спасибо Брайану Оккену.
интегрировать завершение вкладок для опций через использование «argcomplete». Спасибо Антону ван дер Нойту за PR.
изменить имена опций на длинные опции, разделенные дефисом, но сохранить старое написание для обратной совместимости. py.test -h будет показывать только версию с дефисом, например, «–collect-only», но «–collectonly» также останется действительным (по причинам обратной совместимости). Большое спасибо Энтону ван дер Нойту за реализацию и Хинеку Шлаваку за то, что подтолкнул нас.
исправить проблему 308 - разрешить отмечать/xfail/skip отдельных наборов параметров при параметризации. Спасибо Брианне Лаугер.
вызвать новый экспериментальный хук pytest_load_initial_conftests, чтобы позволить сторонним плагинам делать что-то до загрузки conftest.
Исправление ошибок:
исправление проблемы358 - опции захвата теперь разбираются более корректно с помощью нового метода parser.parse_known_args.
pytest теперь использует argparse вместо optparse (спасибо Anthon), что означает, что «argparse» добавляется как зависимость при установке в окружение python2.6 или ниже.
исправление проблемы 333: исправление случая плохого взаимодействия хуков unittest/pytest.
PR27: правильно обрабатывать nose.SkipTest во время сбора. Спасибо Antonio Cuni, Ronny Pfannschmidt.
исправление проблемы355: junitxml помещает атрибут name=»pytest» в тег testsuite.
исправление проблемы336: фиксатор autouse в плагинах должен снова работать.
исправить issue279: улучшить сравнение объектов при отказе утверждения для стандартных типов данных и распознать collections.abc. Спасибо Brianna Laugher и Mathieu Agopian.
исправление проблемы317: поддержка перезаписи утверждений для метода is_package
исправление issue335: объект document py.code.ExceptionInfo() возвращался из pytest.raises(), спасибо Mathieu Agopian.
удалить неявную поддержку distribute_setup из setup.py.
исправление issue305: игнорировать любые проблемы при записи pyc-файлов.
SO-17664702: вызывать финализаторы приспособления, даже если функция приспособления частично завершилась (финализаторы не всегда вызывались раньше)
исправить issue320 - исправить область видимости класса для фикстур, когда они смешиваются с функциями уровня модуля. Спасибо Анатолию Бубенкову.
вы можете указать «-q» или «-qq» для получения различных уровней «более тихих» отчетов (спасибо Катажине Яхим).
исправить issue300 - Исправить порядок загрузки conftest при запуске py.test в подкаталоге.
исправление проблемы323 - сортировка многих параметризаций arg, скопированных в модуль
заставить хуки завершения сессии выполняться с тем же cwd-контекстом, что и при старте сессии (помогает исправить поведение плагинов, которые пишут выходные файлы с относительным путем, например, pytest-cov).
исправить проблему316 - правильно ссылаться на крючки коллекции в документации
исправление проблемы 306 - очистка опций -k/-m для соответствия только маркерам/именам тестов/ключевым словам соответственно. Спасибо Wouter van Ackooy.
улучшен подсчет доктестов в модулях python - файлы без элементов доктестов больше не отображаются, а примеры доктестов считаются как отдельные элементы теста. спасибо Danilo Bellini.
исправьте issue245 в зависимости от выпущенной версии py-1.4.14, которая исправляет py.io.dupfile для работы с файлами без режима. Спасибо Джейсону Р. Кумбсу.
исправлена генерация junitxml, когда тестовый вывод содержит управляющие символы, решение проблемы267, спасибо Jaap Broekhuizen
исправить issue338: использовать стиль –tb для ошибок setup/teardown также. Спасибо Махо.
исправить issue307 - использовать yaml.safe_load в примере, спасибо Марку Эйчину.
улучшить параметризацию сообщений об ошибках, спасибо Брианна Логер
Хуки pytest_terminal_summary(terminalreporter) теперь могут использовать методы «.section(title)» и «.line(msg)» для вывода дополнительной информации в конце выполнения теста.
2.3.5 (2013-04-30)¶
исправить проблему169: уважать –tb=style при ошибках setup/teardown.
никогда не рассматривайте функцию приспособления для сбора тестовых функций
разрешить повторный запуск элементов теста / помогает исправить плагин pytest-reruntests, а также помогает сохранить меньше ссылок на фикстуры/ресурсы живыми
помещать захваченный stdout/stderr в вывод junitxml даже при прохождении тестов (спасибо Adam Goucher)
Проблема 265 - интегрируйте настройку/снос носа с состоянием setupstate, чтобы он не пытался снести нос, если он не был настроен
проблема 271 - не пишите junitxml на рабочих узлах
Проблема 274 - не пытайтесь показать полный пример doctest, если doctest не знает местоположение примера
проблема 280 - отключение перезаписи утверждений на глючном CPython 2.6.0
внедрить помощник «getfixture()» для получения фикстур из доктестов, спасибо Андреасу Цайдлеру
проблема 259 - при переписывании утверждений соблюдайте кодировку источника по умолчанию ASCII в Python 2
проблема 251 - сообщайте о пропуске вместо игнорирования классов с init
выпуск250 смешение unicode/str в именах и значениях параметров теперь работает
issue257, assertion-triggered compilation of source ending in a comment line does not blow up in python2.5 (исправлено с помощью py>=1.4.13.dev6)
исправьте опцию –genscript для генерации автономных скриптов, которые также работают с python3.3 (упорядочивание импортера)
issue171 - при переписывании утверждений, покажите repr некоторых глобальных переменных
исправить справку о параметрах для «-k»
перенести длинное описание дистрибутива в файл README.rst
улучшите документацию для metafunc.parametrize()
исправление ошибки, при которой использование capsys с pytest.set_trace() в тестовой функции при просмотре capsys.readouterr() приводило к сбою.
разрешить указывать префиксы, начинающиеся с «_», при настройке обнаружения тестов python_функций. (спасибо Грэму Хорлеру)
улучшите вывод трассировки PYTEST_DEBUG, поместив дополнительные данные в новые строки с дополнительным отступом
убедиться, что исключения OutcomeExceptions типа skip/fail имеют инициализированные атрибуты исключения
проблема 260 - не используйте специальную настройку носа в обычных случаях unittest
исправление проблемы134 - печать ошибок сбора, которые препятствуют выполнению указанных элементов теста
исправить проблему266 - принимать юникод в выражениях MarkEvaluator
2.3.4 (2012-11-20)¶
у уступаемых тестовых функций теперь будет активен autouse-fixtures, но они не смогут принимать fixs в качестве funcargs - в любом случае рекомендуется использовать функции параметризации после версии 2.0 вместо yield, см.: http://pytest.org/en/stable/example/how-to/parametrize.html.
исправление проблемы с автодоводкой, когда автодоводчики не обнаруживались, если были определены в файле a/conftest.py и тесты в a/tests/test_some.py
исправление проблемы226 - заказ LIFO для списания приспособлений
исправление проблемы224 - вызовы с аргументами >256 символов теперь работают
исправить проблему91 - добавить/обсудить настройки уровня пакетов/директорий в примере
позволяет динамически определять маркеры через item.keywords[…]=назначение, интегрируя с опцией «-m»
сделать так, чтобы «-k» принимал выражения так же, как и «-m», чтобы можно было написать: -k «name1 или name2» и т.д. Это небольшая несовместимость, если вы использовали специальный синтаксис типа «TestClass.test_method», который теперь нужно писать как -k «TestClass и test_method», чтобы найти определенный метод в определенном тестовом классе.
2.3.3 (2012-11-06)¶
исправление issue214 - разбор модулей, содержащих специальные объекты, например, объект request в flask, который взрывается при обращении к getattr, если ни один запрос не активен. спасибо Thomas Waldmann.
исправить issue213 - разрешить параметризацию со значениями типа массивов numpy, которые не поддерживают оператор __eq__.
исправить проблему215 - разделить test_python.org на несколько файлов
исправление issue148 - @unittest.skip на классах теперь распознается и позволяет избежать вызова setUpClass/tearDownClass, спасибо Павел Репин
исправить issue209 - восстановить поддержку python2.4 в зависимости от более нового pylib, который повторно ввел поиск утверждений для интерпретаторов доAST
поддержка носа: вызывать setup только если это callable, спасибо Эндрю Таумоэфолау
исправить issue219 - добавить классификаторы py2.4-3.3 в список TROVE
в трассировках ,* значения аргументов теперь отображаются рядом с обычными аргументами (спасибо Мануэлю Якобу)
исправление issue217 - поддержка mock.patch с фикстурами pytest - обратите внимание, что вам нужен либо mock-1.0.1, либо встроенный в python3.3 unittest.mock.
исправить issue127 - улучшить документацию для pytest_addoption() и добавить вспомогательную функцию
config.getoption(name)
для согласованности.
2.3.2 (2012-10-25)¶
исправить проблему208 и исправить проблему29 использовать новую версию py, чтобы избежать длительных пауз при печати трассировок в длинных модулях
исправление issue205 - контесты в поддиректориях, настраивающих pytest_pycollect_makemodule и pytest_pycollect_makeitem, теперь работают правильно
исправить упорядочивание сноса для параметризованных установок
исправление issue127 - улучшение документации для pytest_addoption и связанных с ним объектов.
исправить поведение unittest: TestCase.runtest вызывается только в том случае, если определены методы тестирования
улучшить поддержку пробной версии: не собирать ее пустой метод unittest.TestCase.runTest()
«python setup.py test» теперь работает с самим pytest
исправление/улучшение внутренних/ связанных с упаковкой битов:
проверка сообщений об исключениях в test_nose.py теперь проходит и на python33
issue206 - исправление test_assertrewrite.py для работы при наличии глобального PYTHONDONTWRITEBYTECODE=1
добавить tox.ini в дистрибутив pytest, чтобы ignore-dirs и другие конфигурационные биты были правильно распределены для сопровождающих, запускающих собственные тесты pytest
2.3.1 (2012-10-20)¶
исправить issue202 - исправление регрессии: использование «self» из функций приспособления теперь работает как ожидалось (это тот же экземпляр «self», который видит тестовый метод, использующий приспособление)
пропускать pexpect при использовании тестов (в основном test_pdb.py) на системах freebsd* из-за того, что pexpect не поддерживает его должным образом (зависание)
ссылка на веб-страницы из вывода –markers, содержащие справку по использованию pytest.mark.*.
2.3.0 (2012-10-19)¶
исправление issue202 - улучшены автоматические имена для параметризованных тестовых функций
исправить проблему139 - ввести @pytest.fixture, который позволяет напрямую выбирать и параметризовать фабрики funcarg.
исправление проблемы198 - приспособления conftest не находились на windows32 в некоторых случаях с вложенными структурами каталогов из-за проблем с манипуляцией путями
исправить проблему193 пропускать тестовые функции, которые были параметризованы с пустыми наборами параметров
исправление совместимости с python3.3, в основном это касается битов, которые ранее зависели от упорядочивания диктов
ввести переупорядочивание тестов по ресурсам и параметризации, которое имеет приоритет перед обычным упорядочиванием по файлам
исправление проблемы185 monkeypatching time.time не приводит к сбою pytest
исправить проблему172 дублирующего вызова украшенных функций pytest.fixture setup_module
исправить построение junitxml=path так, чтобы если тесты меняют текущий рабочий каталог и путь является относительным, то он правильно строился из исходного текущего рабочего каталога.
исправьте пример «python setup.py test», чтобы он вызывал корректный возврат «errno»
исправить issue165 - исправить неработающие ссылки на документы и упомянуть stackoverflow для FAQ
перехватывать unicode-проблемы при записи представлений о сбоях в терминал, чтобы предотвратить крах всей сессии
исправьте путаницу xfail/skip: теперь отметка skip или императивный pytest.skip будут иметь приоритет перед xfail-маркерами, потому что мы не можем определить статус xfail/xpass в случае пропуска. см. также: http://stackoverflow.com/questions/11105828/in-py-test-when-i-explicitly-skip-a-test-that-is-marked-as-xfail-how-can-i-get.
всегда сообщать об установленных сторонних плагинах в заголовке тестового запуска
исправление проблемы160: о неудачной настройке тестов, помеченных xfail, следует сообщать как xfail (не xpass)
исправление проблемы128: показывать вывод захвата при использовании capsys/capfd
исправить проблему179: правильно отображать цепочку зависимостей фабрик
pluginmanager.register(…) теперь выдает ValueError, если плагин уже зарегистрирован или его имя занято
исправить issue159: улучшить https://docs.pytest.org/en/6.0.1/faq.html, особенно в отношении «волшебной» истории, также упомянуть pytest-django, пробную версию и интеграцию unittest.
сделать request.keywords и node.keywords доступными для записи. Все узлы коллекции-потомки будут видеть значения ключевых слов. Ключевые слова - это словари, содержащие маркеры и другую информацию.
исправление проблемы 178: бинарные экраны xml теперь обернуты в py.xml.raw
исправление проблемы 176: правильно перехватывать встроенный AssertionError, даже когда мы заменили AssertionError подклассом на уровне python
обнаружение фабрики больше не приводит к сбоям при использовании магических глобальных вызываемых объектов, которые не предоставляют вменяемого объекта __code__ (например, mock.call).
исправление проблемы 182: testdir.inprocess_run теперь учитывает переданные плагины
- исправление проблемы 188: убедитесь, что sys.exc_info чист на python2
перед вызовом в тест
исправить проблему 191: добавить поддержку метода unittest TestCase runTest
исправление проблемы 156: monkeypatch правильно обрабатывает дескрипторы уровня класса
уточнения отчетности:
pytest_report_header теперь получает «startdir», так что вы можете использовать startdir.bestrelpath(yourpath), чтобы показать хороший относительный путь
позволять плагинам реализовывать как pytest_report_header, так и pytest_sessionstart (sessionstart вызывается первым).
не показывать отмененную строку причины, если ее нет
py.test -vv покажет все сравнения утверждений вместо усечения
2.2.4 (2012-05-22)¶
исправление сообщения об ошибке для переписанных утверждений, включающих оператор %
исправление проблемы 126: корректное сопоставление всех недопустимых символов xml для бинарного экранирования junitxml
исправление проблемы с unittest: теперь маркеры @unittest.expectedFailure должны обрабатываться правильно (вы также можете использовать маркеры @pytest.markers).
интеграция документов с расширенными командами тестирования distribute/setuptools
исправить проблему 140: правильно получать реальные функции связанных classmethods для setup/teardown_class
исправление проблемы #141: переход с умершего paste.pocoo.org на bpaste.net
исправление проблемы #143: вызывать unconfigure/sessionfinish всегда, когда вызывается configure/sessionstart
исправление проблемы #144: лучше преобразовывать идентификаторы тестов в имена классов junitxml
обновить distribute_setup.py до версии 0.6.27
2.2.3 (2012-02-05)¶
исправление загружаемого пакета, чтобы он включал только необходимые файлы
2.2.2 (2012-02-05)¶
исправление issue101: неправильные args для тестовой функции unittest.TestCase теперь дают лучший результат
исправить issue102: сообщать более полезные ошибки и подсказки для случаев, когда тестовый каталог был переименован, а некоторые pyc/__pycache__ остались
исправить проблему106: разрешить применение параметризации несколько раз, например, из модуля, класса и на уровне функции.
исправить проблему107: действительно выполнять финализацию области видимости сессии
не проверяйте в parametrize, являются ли косвенные параметры именами funcarg
добавьте метод chdir к функции monkeypatch funcarg
исправление сбоя, возникающего при вызове отмены monkeypatch во второй раз
исправить проблему115: сделать –collectonly надежным против раннего отказа (отсутствующие файлы/каталоги)
«-qq –collectonly» теперь показывает только файлы и количество тестов в них
«-q –collectonly» теперь показывает идентификаторы тестов
позволяет добавлять атрибуты в тестовые отчеты так, чтобы это работало и при распределенном тестировании (обновление pytest-xdist не требуется).
2.2.1 (2011-12-16)¶
исправление issue99 (в pytest и py) внутренние ошибки с resultlog теперь дают лучший результат - исправлено путем нормализации входных аргументов pytest_internalerror.
исправить issue97 / проблемы с трассировкой (в pytest и py) улучшить вывод трассировок в сочетании с jinja2 и cython, которые взламывают трассировки
исправить issue93 (в pytest и pytest-xdist), чтобы избежать «отложенного завершения»: теперь последний тест в тестовом узле будет выполнять свое завершение непосредственно, а не ждать окончания сессии. Спасибо Дэйву Ханту за хорошую отчетность и обратную связь. Хуки pytest_runtest_protocol и pytest_runtest_teardown теперь имеют «nextitem», который будет None, указывающий на окончание выполнения теста.
исправление сбоя коллекции из-за собранных элементов с неизвестным источником, спасибо Ральфу Шмитту (исправлено путем зависимости от более нового pylib)
2.2.0 (2011-11-18)¶
исправить проблему90: ввести ускоренное сворачивание тестовых элементов, чтобы функция сворачивания вызывалась раньше.
добавить всемогущую функцию metafunc.parametrize, которая позволяет параметризовать аргументы тестовых функций в несколько этапов и, следовательно, из независимых плагинов и мест.
добавить помощник @pytest.mark.parametrize, который позволяет легко вызывать тестовую функцию с различными значениями аргументов
Добавьте примеры на страницу примеров «parametrize», включая быстрый перенос сценариев Test и новой функции parametrize и декоратора.
ввести регистрацию для помощников «pytest.mark.*» через ini-файлы или через хуки плагинов. Также введена опция «–strict», которая будет рассматривать незарегистрированные маркеры как ошибки, что позволит избежать опечаток и поддерживать хорошо описанный набор маркеров для вашего набора тестов. Смотрите примеры на http://pytest.org/en/stable/how-to/mark.html и по ссылкам.
issue50: ввести опцию «-m marker» для выбора тестов на основе маркеров (это более строгая и предсказуемая версия „-k“, поскольку «-m» соответствует только полным маркерам и имеет более очевидные правила для и/или семантики.
новая функция для оптимизации скорости ваших тестов: опция –durations=N для отображения N самых медленных вызовов теста и методов установки/выключения.
исправление проблемы87: –pastebin теперь работает с python3
исправление проблемы89: –pdb с неожиданными исключениями в doctest работает более осмысленно
исправление и очистка собственного набора тестов pytest для предотвращения утечки FD
исправление проблемы83: ссылка на сгенерированный список funcarg
исправление проблемы74: имена модулей pyarg теперь проверяются на предмет ложных срабатываний imp.find_module
исправление совместимости с вариантами использования twisted/trial-11.1.0
упростить Node.listchain
упростить код вывода junitxml, полагаясь на py.xml
добавить поддержку пропуска свойств для классов и функций unittest
2.1.3 (2011-10-18)¶
исправление проблемы79: при некоторых сравнениях в boolops перезапись утверждений не удавалась
корректно обрабатывать аргументы нулевой длины (как в pytest „“)
исправление issue67 / junitxml теперь содержит правильные длительности тестов, спасибо ronny
исправление проблемы75 / пропуск неудачного теста на jython
исправить issue77 / Разрешить применять хук assertrepr_compare к подмножеству тестов
2.1.2 (2011-09-24)¶
исправление перезаписи утверждений в файлах с новыми строками windows в некоторых версиях Python
уточнить обнаружение тестов по имени пакета/модуля (–pyargs), спасибо Флориану Майеру
исправление проблемы69 / переписывание утверждений исправлено для некоторых булевых операций
исправление проблемы68 / пакеты теперь работают с перезаписью утверждений
исправление проблемы66: использование различных кэшей перезаписи утверждений при передаче опции -O
не пытайтесь переписывать утверждения на Jython, используйте reinterp
2.1.1¶
исправить issue64 / pytest.set_trace теперь работает внутри хука pytest_generate_tests
исправить проблему60 / исправить ошибки, связанные с созданием __pycache__
исправление проблемы63 / перезапись утверждений при вставке строк, содержащих „%“
исправить переписывание утверждений в вызовах с аргументом **
не кэшировать переписанные модули, если генерация байткода отключена
исправление перезаписи утверждений в каталогах, доступных только для чтения
исправить проблему59: обеспечить теги system-out/err для вывода junitxml
исправление проблемы61: перезапись утверждений на булевых операциях с 3 или более операндами
теперь вы можете создать страницу руководства с помощью «cd doc ; make man».
2.1.0 (2011-07-09)¶
исправление проблемы53 вызов функций настройки стиля носа с правильным упорядочиванием
исправление проблемы 58 и проблемы 59: новые исправления кода утверждения
объединить ветку assertionrewrite Бенджамина: теперь утверждения для тестовых модулей на python 2.6 и выше выполняются путем переписывания AST и сохранения pyc-файла перед импортом тестового модуля. см. doc/assert.txt для получения дополнительной информации.
исправить проблему43: улучшить доктесты с улучшенным отчетом об отслеживании неожиданных исключений
исправление проблемы47: вывод времени в junitxml для тестовых примеров теперь корректен
исправление проблемы48: опечатка в MarkInfo repr приводила к исключению
исправить issue49: избежать путаницы при частичном сбое инициализации
исправление проблемы44: расширение env/username для пути к файлу junitxml
показывать информацию об уровне выпуска в тестовых запусках для pypy
переработаны страницы документов для лучшей навигации и создания PDF-файлов
сообщать о прерывании клавиатуры даже в случае прерывания во время запуска сессии
исправить проблему 35 - предоставить PDF-версию документа и ссылку на скачивание с индексной страницы
2.0.3 (2011-05-11)¶
исправление проблемы 38: более приятная трассировка вызовов хуков, особенно ранних конфигураций/запуска сессий
исправление отсутствующей информации о причине пропуска/меты в файлах junitxml, сообщено через http://lists.idyll.org/pipermail/testing-in-python/2011-March/003928.html.
исправление проблемы34: избежать сбоев в сборе с классами с префиксом «test», производными от object.
не требовать zlib (и другие библиотеки) для плагина genscript без фактического использования –genscript.
ускорить пропуски (не делая полного представления трассировки внутри)
исправление проблемы37: избегать недопустимых символов в выводе junitxml
2.0.2 (2011-03-09)¶
решить проблему32 - ускорить тестирование очень быстрых тестовых функций за счет снижения относительных накладных расходов
исправление issue30 - расширенная обработка xfail/skipif и улучшенные отчеты. Если в выражениях skip/xfail допущена синтаксическая ошибка, теперь вы получаете красивые отчеты об ошибках.
Также теперь вы можете обращаться к глобальным файлам модуля из выражений xfail/skipif, так что теперь работает, например, следующее:
import pytest import mymodule @pytest.mark.skipif("mymodule.__version__[0] == "1") def test_function(): pass
Это не приведет к запуску тестовой функции, если строка версии модуля не начинается с «1». Обратите внимание, что указание строки вместо булевых выражений позволяет py.test сообщать значимую информацию при подведении итогов выполнения теста о том, какие условия приводят к пропуску (или xfail-) тестов.
исправление проблемы28 - setup_method и pytest_generate_tests работают вместе Метод фикстуры setup_method теперь вызывается и для вызовов тестовых функций, сгенерированных хуком pytest_generate_tests.
исправление issue27 - collectonly и выбор ключевых слов (-k) теперь работают вместе Также, если вы сделаете «py.test –collectonly -q», вы получите плоский список идентификаторов тестов, который вы можете использовать для вставки в командную строку py.test, чтобы выполнить определенный тест.
исправление проблемы25 во избежание проблем с выводом –pdb и python3.2/encodings
исправление проблемы23 - аргумент tmpdir теперь работает на Python3.2 и WindowsXP Начиная с Python3.2 os.symlink может поддерживаться. Требуя более новую версию py lib, реализация py.path.local() признает это.
исправили опечатки в документации (спасибо Виктору Гарсия, Брианне Логер) и отдельное спасибо Лауре Крейтон, которая также просмотрела часть документации.
исправить немного неправильный вывод подробного отчета о ходе выполнения для классов (спасибо Amaury)
более точные (избегающие) предупреждения об устаревании для доступа к node.Class|Function
избегать вспомогательного кода std unittest assertion в трассировках (спасибо Ronny)
2.0.1 (2011-02-07)¶
уточнить и унифицировать начальный захват, чтобы он хорошо работал, даже если модуль протоколирования используется в рано загруженном файле conftest.py или плагине.
разрешить опускать «()» в идентификаторах тестов, чтобы обеспечить единообразие идентификаторов тестов, как это делает хороший плагин pytest.vim от Альфредо.
исправление проблемы12 - показывать версии плагинов с помощью «–version» и «–traceconfig», а также документировать, как добавить дополнительную информацию в заголовок теста отчетности
исправить проблему 17 (проблема с отчетностью import-* на python3), требуя py>1.4.0 (1.4.1 будет включать его)
исправление проблемы 10 (проверка истинности массивов numpy) путем уточнения интерпретации утверждений в py lib
исправить issue15: сделать тесты совместимости носа совместимыми с python3 (теперь, когда nose-1.0 поддерживает python3)
устранить несколько удивительное обнаружение «одинаковых conftest», поскольку он игнорирует conftest.py, когда они появляются в нескольких поддиректориях.
улучшить утверждения («не в»), спасибо Floris Bruynooghe
улучшить поведение/предупреждения при запуске поверх «python -OO» (assertions и docstrings отключены, что приводит к потенциальным ложным срабатываниям)
ввести хук pytest_cmdline_processargs(args) для динамического вычисления аргументов командной строки. Это исправляет регрессию, поскольку py.test до версии 2.0 позволял задавать параметры командной строки из файлов conftest.py, что до сих пор pytest-2.0 позволял делать только из ini-файлов.
исправление проблемы7: assert failures в модулях doctest. неожиданные отказы в doctest’ах, как правило, не будут отображаться более красиво, т.е. в контексте отказа doctest’а.
исправление проблемы9: функции setup/teardown для теста, помеченного xfail, будут сообщать о неудаче как xfail, но сообщать о нормальном прохождении (не xpassing) в случае успеха. Это справедливо только для «прямых» вызовов setup/teardown, потому что teardown_class/ teardown_module не могут быть тесно связаны с одним тестом.
исправление проблемы14: отсутствие ошибок протоколирования при завершении процесса
Уточнения для «сбора» вывода на не-ttys
уточнение внутренней регистрации плагинов и вывода –traceconfig
ввести механизм для предотвращения/отмены регистрации плагинов из командной строки, см. http://pytest.org/en/stable/how-to/plugins.html#cmdunregister
активировать плагин resultlog по умолчанию
исправление регрессии wrt приводило к появлению тестов, которые из-за семантики collection-before-running не настраивались, как в pytest 1.3.4. Заметим, однако, что рекомендуемым и гораздо более чистым способом параметризации тестов остается механизм «pytest_generate_tests», см. документацию.
2.0.0 (2010-11-25)¶
pytest-2.0 теперь является собственным пакетом и зависит от pylib-2.0
новая способность: python -m pytest / python -m pytest.main способность
новый вызов python: pytest.main(args, plugins) для ранней загрузки некоторых пользовательских плагинов.
стараться запускать наборы тестов unittest более совместимым образом, передавая семантику setup/teardown пакету unittest. также стараться запускать тесты twisted/trial и Django, которые теперь должны работать по умолчанию.
ввели новый способ задания параметров конфигурации через файлы ini-стиля, по умолчанию выполняется поиск в файлах setup.cfg и tox.ini. Старые способы (определенные переменные окружения, динамическое чтение conftest.py удалены).
добавить новую опцию «-q», которая уменьшает многословность и печатает вывод «точка» в стиле nose/unittest.
исправление проблемы135 - теперь метки работают и с тестовыми примерами unittest
исправить issue126 - ввести py.test.set_trace() для отслеживания выполнения через PDB во время выполнения тестов, даже если захват продолжается.
исправление проблемы123 - новый вызов «python -m py.test» для py.test (требуется Python 2.5 или выше)
исправить issue124 - повысить устойчивость отчетов к тестам, открывающим файлы на filedescriptor 1 (stdout).
исправление проблемы109 - файлы conftest.py братьев и сестер не будут загружаться. (и коллекторы директорий больше не могут быть настроены из conftest.py директории - это должно происходить как минимум на один уровень выше).
ввести (настраиваемые) представления сбоев утверждений и улучшить вывод информации о сбоях утверждений для сравнений и других случаев (Floris Bruynooghe)
nose-plugin: передавать ошибки подписи типов в функциях setup/teardown вместо того, чтобы не вызывать их (Ed Singleton)
удалить py.test.collect.Directory (следует из крупного рефакторинга и упрощения процесса сбора)
значительно сократить основной код py.test, перенести тестирование функций/питона в собственный плагин
исправление проблемы88 (поиск пользовательских тестовых узлов из аргумента командной строки)
уточнить создание „tmpdir“, теперь будут создаваться базовые имена, лучше связанные с именами тестов (спасибо Ronny)
Тесты «xpass» (неожиданный проход) не вызывают exitcode!=0
исправление проблемы131 / проблемы60 - импорт доктестов в файлы __init__, используемые в качестве пакетов пространства имен
исправление проблемы93 перехват stdout/stderr при импорте conftest.py
исправление ошибки: собранные функции unittest теперь также могут иметь «pytestmark» на уровне класса/модуля
добавить возможность использовать уровень «class» для помощника cached_setup
исправьте странность: объекты mark.* теперь неизменяемы, создавайте новые экземпляры
1.3.4 (2010-09-14)¶
исправить проблему111: улучшить документацию по установке для windows
исправление issue119: исправление возможности сбора __init__.py в качестве модуля
исправление проблемы116: –doctestmodules работает и с файлами __init__.py
исправление проблемы115: унификация пасстафинга внутренних исключений/catching/GeneratorExit
исправление issue118: новая –tb=native для представления стандартных исключений cpython
1.3.3 (2010-07-30)¶
исправление проблемы113: проблема представления утверждений для строк с тройными кавычками (и, возможно, в других случаях)
заставить загрузку conftest определять, что файл conftest с таким же содержимым уже был загружен, что позволяет избежать сюрпризов во вложенных структурах каталогов, которые могут быть созданы, например, Hudson. Вероятно, это устраняет необходимость использовать –confcutdir в большинстве случаев.
исправление раскраски терминала для win32 (спасибо Michael Foord за сообщение)
исправить странность: заставить определение ширины терминала работать на stdout, а не на stdin (спасибо Армину Ронахеру за сообщение)
удалить пробельные символы в конце всех файлов дистрибутива py/text
1.3.2 (2010-07-08)¶
Новые возможности
исправить issue103: представить py.test.raises в качестве менеджера контекста, примеры:
with py.test.raises(ZeroDivisionError): x = 0 1 / x with py.test.raises(RuntimeError) as excinfo: call_something() # you may do extra checks on excinfo.value|type|traceback here
(спасибо Ронни Пфанншмидту)
Фабрики Funcarg теперь могут динамически применять маркер к вызову теста. Это, например, полезно, если фабрика предоставляет тесту параметры, которые ожидаются к отказу:
def pytest_funcarg__arg(request): request.applymarker(py.test.mark.xfail(reason="flaky config")) ... def test_function(arg): ...
улучшен отчет об ошибках коллекции и импорта. Для этого используется более общий механизм, а именно: для пользовательских узлов test item/collect теперь единообразно вызывается
node.repr_failure(excinfo)
, так что вы можете переопределить его, чтобы вернуть выбранное вами строковое представление ошибки, которое будет сообщено в виде (красной) строки.ввести опцию „–junitprefix=STR“ для добавления префикса ко всем отчетам в файле junitxml.
Устранение ошибок
сделать тесты и, в частности, плагин
pytest_recwarn
полностью совместимыми с Python2.7 (если вы используетеrecwarn
, предупреждения funcarg будут включены, чтобы вы могли правильно проверить их существование в кросс-питоновской манере).refine –pdb: игнорировать xfailed тесты, унифицировать TB-отчетность и не показывать сбои в конце.
исправьте интерпретацию утверждений с помощью оператора ** (спасибо Бенджамину Петерсону)
исправление проблемы105 присваивания в той же строке, что и неудачное утверждение (спасибо Бенджамину Петерсону)
исправление проблемы104 правильного экранирования имен тестов в плагине junitxml (спасибо anonymous)
исправление проблемы57 -f|–looponfail для работы с тестами xpassing (спасибо Ronny)
исправление проблемы92 collectonly reporter и –pastebin (спасибо Бенджамину Петерсону)
исправьте py.code.compile(source) для создания уникальных имен файлов
устранить проблемы с повторным интерполированием утверждений на PyPy, отложив компиляцию кода в (переопределяемый) класс Frame.eval. (спасибо Amaury Forgeot)
исправьте py.path.local.pyimport() для работы с каталогами
оптимизировать реализацию и использование py.path.local.mkdtemp
не выводить пустые строки при отображении junitxml-filename
добавьте необязательный параметр boolean ignore_errors в py.path.local.remove
исправление записи терминала на win32/python2.4
py.process.cmdexec() теперь больше старается возвращать правильно закодированные объекты unicode на всех версиях python
установите обычные скрипты py.test/py.which также для Jython, это поможет получить канонические пути к скриптам в ситуациях с virtualenv
чтобы path.bestrelpath(path) возвращала «.», обратите внимание, что при вызове X.bestrelpath предполагается, что X - это каталог.
заставить начальное обнаружение conftest игнорировать аргументы с префиксом «–»
исправление плагина resultlog при использовании в ситуации multicpu/multihost xdist (спасибо Якубу Густаку)
выполнять отчетность, связанную с распределенным тестированием, в xdist-плагине, а не иметь код, связанный с распределенным тестированием, в общем дистрибутиве py.test
исправление обнаружения домашней папки в Windows
отправить distribute_setup.py версии 0.6.13
1.3.1 (2010-05-25)¶
Новые возможности
issue91: введен новый помощник py.test.xfail(reason) для императивной пометки теста как ожидаемо провального. Может использоваться из функций setup и test. Это особенно полезно для параметризованных тестов, когда определенные конфигурации ожидаются как неуспешные. В этом случае нельзя использовать декларативный подход с @py.test.mark.xfail, так как он пометит все конфигурации как xfail.
issue102: ввести новую опцию –maxfail=NUM для прекращения выполнения тестов после NUM неудач. Это обобщение опции „-x“ или „–exitfirst“, которая теперь эквивалентна „–maxfail=1“. И „-x“, и „–maxfail“ теперь будут также печатать строку в конце, указывающую на прерывание.
issue89: разрешить использование декораторов py.test.mark на классах (декораторы классов были введены в python2.6), а также разрешить применение нескольких маркеров на уровне класса/модуля путем указания списка.
улучшить и уточнить отчет о письмах в индикаторе выполнения: . пройден f провален тест s пропущенные тесты (напоминание: использовать только для несоответствия зависимостей/платформы) x xfailed test (тест, который ожидался как провальный) X xpassed test (тест, который ожидался как провальный, но прошел)
Вы можете использовать любую комбинацию „fsxX“ с опцией расширенной отчетности „-r“. Результаты xfail/xpass будут отображаться как пропущенные тесты в выводе junitxml - это также исправляет проблему 99.
сделать так, чтобы py.test.cmdline.main() возвращала exitstatus, а не вызывала SystemExit, а также позволяла вызывать ее несколько раз. Это, конечно, требует, чтобы ваше приложение и тесты были правильно свернуты и не имели глобального состояния.
Устранение ошибок
улучшено представление трассировок: - улучшено и унифицировано представление трассировок для опции «–tb=short» - ошибки при импорте тестовых модулей значительно короче, (используя стиль –tb=short) - raises показывает более короткие более релевантные трассировки - –fulltrace теперь более систематически делает трассировки длиннее / препятствует сокращению
улучшена поддержка raises и другого динамически компилируемого кода путем манипулирования linecache.cache в python вместо прежнего довольно хакерского способа создания пользовательских объектов кода. Это позволяет ему без проблем работать на Jython и PyPy, где раньше этого не было.
исправление проблемы96: сделать захват более устойчивым к прерываниям Control-C (потребовался несколько существенный рефакторинг базовой функциональности захвата, чтобы избежать условий гонки).
исправление цепочки условных декораторов skipif/xfail - теперь использование нескольких декораторов @py.test.mark.skipif(condition) работает, как и ожидалось, включая конкретные сообщения о том, какие из условий приводят к пропуску.
исправить issue95: поздно импортировать zlib, чтобы он не требовался для общего запуска py.test.
исправить проблему94: сделать отчетность более устойчивой к фальшивому исходному коду (и внутри быть более осторожной при представлении неожиданных последовательностей байтов)
1.3.0 (2010-05-05)¶
отменить опцию –report в пользу новой, более короткой и легко запоминающейся опции -r: она принимает строковый аргумент, состоящий из любой комбинации символов „xfsX“. Они относятся к одиночным символам, которые вы видите во время точечной печати прогресса, и будут печатать дополнительную строку для каждого теста в конце выполнения теста. Эта дополнительная строка указывает точную позицию или идентификатор теста, который вы непосредственно вставляете в командную строку py.test, чтобы повторно запустить конкретный тест.
позволяет внешним плагинам регистрировать новые хуки с помощью нового хука pytest_addhooks(pluginmanager). Новая версия плагина pytest-xdist для распределенного и looponfailing тестирования требует этой возможности.
добавить новый хук pytest_ignore_collect(path, config), чтобы позволить проектам и плагинам определять поведение исключения для своей структуры каталогов - например, вы можете определить в conftest.py такой метод:
def pytest_ignore_collect(path): return path.check(link=1)
чтобы предотвратить даже попытку сбора любых тестов в симлинкованных каталогах.
новый хук pytest_pycollect_makemodule(path, parent) для возможности настройки объекта коллекции Module для соответствующего тестового модуля.
расширение и уточнение механизма xfail:
@py.test.mark.xfail(run=False)
не запускать декорированный тест@py.test.mark.xfail(reason="...")
печатает строку причины в сводках xfail, указывая--runxfail
в командной строке, практически игнорирует маркеры xfailраскрывать (ранее внутренние) часто используемые методы: py.io.get_terminal_with() -> возвращать ширину терминала py.io.ansi_print(…) -> печатать цветной/жирный текст на linux/win32 py.io.saferepr(obj) -> возвращать строку ограниченного представления
раскрывать исключения, связанные с результатами тестирования, как py.test.skip.Exception, py.test.raises.Exception и т.д., полезные в основном для плагинов, выполняющих специальную интерпретацию/подстройку результатов тестирования
(issue85) исправление плагина junitxml для обработки тестов с неаскриптивным выводом
исправление/доработка совместимости с python3 (спасибо Бенджамину Петерсону)
исправления для обеспечения работы комбинации jython/win32, однако обратите внимание: jython2.5.1/win32 не предоставляет программу запуска из командной строки, см. https://bugs.jython.org/issue1491 . Как обойти эту проблему, смотрите в документации по установке pylib.
исправления для обработки значений исключений unicode и непечатаемых объектов
(issue87) исправление ошибки unboundlocal в коде assertionold
(issue86) улучшение документации для looponfailing
уточнение перехвата ввода-вывода: псевдофайл stdin-redirect теперь имеет метод NOP close()
отправить distribute_setup.py версии 0.6.10
добавлены ссылки на новые плагины capturelog и coverage
1.2.0 (2010-01-18)¶
уточненное использование и опции для «py.cleanup»:
py.cleanup # remove "*.pyc" and "*$py.class" (jython) files py.cleanup -e .swp -e .cache # also remove files with these extensions py.cleanup -s # remove "build" and "dist" directory next to setup.py files py.cleanup -d # also remove empty directories py.cleanup -a # synonym for "-s -d -e 'pip-log.txt'" py.cleanup -n # dry run, only show what would be removed
добавить новую опцию «py.test –funcargs», которая показывает доступные funcargs и их справочные строки (docstrings на соответствующую фабричную функцию) для заданного пути теста
выводить краткий и лаконичный traceback, если поиск funcarg завершился неудачно
ранняя загрузка файлов «conftest.py» в подкаталоги первого уровня без точки. позволяет удобно хранить и получать доступ к опциям, связанным с тестом, в подкаталоге
test
и при этом добавлять опции командной строки.исправление проблемы67: новая суперкороткая опция печати трассировки: «–tb=line» выводит одну строку для каждого неудачного теста (python) с указанием имени файла, длины строки и значения ошибки.
исправление issue78: всегда вызывать функции разрушения на уровне python, даже если соответствующая установка не удалась. Это включает усовершенствования для вызова функций setup_module/class, которые теперь будут вызываться только один раз вместо предыдущего поведения, когда они вызывались несколько раз, если они вызывали исключение (включая исключение Skipped). Любое исключение будет повторно записано и связано со всеми тестами в соответствующей области видимости модуля/класса.
исправление проблемы63: считать <40 колонок ошибочной шириной терминала, по умолчанию - 80
исправление отладки pdb для корректного фрейма при ошибках, связанных с повышениями
обновить apipkg.py для устранения проблемы, когда рекурсивный импорт мог излишне нарушить импортирование
исправить ссылки на плагины
1.1.1 (2009-11-24)¶
перенесли dist/looponfailing из ядра py.test в новый отдельно выпущенный плагин pytest-xdist.
новый плагин junitxml: –junitxml=path будет генерировать xml-файл в стиле junit, который может быть обработан, например, системой Hudson CI.
новая опция: –genscript=path будет генерировать отдельный скрипт py.test, который не требует установки библиотек. спасибо Ralf Schmitt.
новая опция: –ignore предотвращает указанный путь от сбора. Может быть указан несколько раз.
новая опция: –confcutdir=dir заставит py.test рассматривать только те файлы conftest, которые находятся относительно указанного dir.
new funcarg: «pytestconfig» - это объект конфигурации pytest для доступа к аргументам командной строки, который теперь можно легко использовать в тесте.
устанавливать
py.test
иpy.which
с суффиксом-$VERSION
, чтобы различать установленные версии Python3, python2.X, Jython и PyPy.новая функция «pytestconfig» позволяет получить доступ к тестовому объекту конфигурации
новый хук «pytest_report_header» может возвращать дополнительные строки для отображения в заголовке тестового прогона.
(экспериментально) разрешить «py.test path::name1::name2::…» для прямого указания на тест в коллекции тестов. Со временем это может стать полноценной заменой спецификаций «-k».
оптимизирована загрузка плагинов: порядок теперь соответствует документированному в customize.html: setuptools, ENV, commandline, conftest. также имена точек входа setuptools приведены к каноническим именам («pytest_*»).
автоматически пропускать тесты, в которых требуется „capfd“, но нет os.dup
разрешить определять pytest_generate_tests и в классах
отказаться от использования атрибута „disabled“ в пользу pytestmark
deprecate definition of Directory, Module, Class and Function nodes in conftest.py files. Вместо этого используйте хуки pytest collect.
хуки runtest/collect, специфичные для узла коллекции/элемента, вызываются только в совпадающих файлах conftest.py, т.е. в тех, которые находятся точно ниже пути к файловой системе элемента
изменение: первый хук pytest_collect_directory, который что-то вернул, теперь не позволит вызывать последующие хуки.
изменение: для запуска плагина figleaf теперь требуется –figleaf. Также измените его длинные параметры командной строки на более короткие (см. py.test -h).
изменение: плагин pytest doctest теперь включен по умолчанию и имеет новую опцию –doctest-glob для установки шаблона для совпадений файлов.
изменение: удалить внутренние вспомогательные переменные py._*, оставить только py._pydir
повысить надежность захвата для выживания, если пользовательский код pytest_runtest_setup не сработал и не позволил запустить код настройки захвата.
сделать помощники py.test.*, предоставляемые плагинами по умолчанию, видимыми раньше - работает прозрачно как для pydoc, так и для интерактивных сессий, которые будут регулярно видеть, например, py.test.mark и py.test.importorskip.
упростить внутренний механизм менеджера плагинов
упростить внутреннее дерево коллекций, введя узел RootCollector
исправить реинтерпретацию assert, которая видит вызов, содержащий «keyword=…».
исправить issue66: вызывать хуки pytest_sessionstart и pytest_sessionfinish на рабочих узлах во время dist-тестирования, корректно сообщать о хуках разрыва модуля/сессии.
исправление проблемы65: правильно обрабатывать дист-тестирование, если удаленно не установлена библиотека execnet/py.
пропускать некоторые тесты установки, если не доступен execnet
исправление документации, исправление внутренней генерации bin/скриптов
1.1.0 (2009-11-05)¶
ввести автоматическую регистрацию плагинов через точки входа „pytest11“ через setuptools“ pkg_resources.iter_entry_points
исправьте py.test dist-testing для работы с execnet >= 1.0.0b4
повторное внедрение py.test.cmdline.main() для лучшей обратной совместимости
svn paths: исправлена ошибка с path.check(versioned=True) для svn paths, разрешено использовать „%“ в svn paths, svnwc.update() по умолчанию работает в интерактивном режиме, как в 1.0.x, и добавлен svnwc.update(interactive=False) для запрета взаимодействия.
уточнить распространяемый tarball, чтобы он содержал тестовые и не содержал pyc-файлы
старайтесь, чтобы предупреждения об устаревании для доступа к py.compat.* сообщали о правильном местоположении
1.0.3¶
корректировать и улучшать документы
удалить инструмент py.rest и внутреннее пространство имен - он никогда особо не рекламировался и все еще может быть использован со старым релизом, если это необходимо. Если есть интерес, его можно возродить в виде собственного инструмента.
исправить проблему48 и проблему59: вызывать ошибку, если модуль из импортированного тестового файла не похож на модуль из пути к файлу - позволяет избежать «одноименной» путаницы, о которой неоднократно сообщалось
объединены хаки Ронни для совместимости с носом: теперь поддерживаются функции setup_module() и setup() в стиле носа
ввести обобщенную функцию маркировки py.test.mark
перетасовка / уточнение группировки командной строки
deprecate parser.addgroup в пользу getgroup, который создает группу опций
добавить опцию командной строки –report, которая позволяет управлять показом пропущенных/неудачных секций
generalized skipping: новый способ пометить функции python как skipif или xfail на уровне функций, классов и модулей на основе атрибутов платформы или sys-модуля.
расширить декоратор py.test.mark, чтобы разрешить позиционные аргументы
ввести и протестировать «py.cleanup -d» для удаления пустых каталогов
исправление проблемы #59 - усиление коллекции тестов unittest
заставить взаимодействие bpython/help работать, добавив атрибут __all__ к ApiModule, очистка initpkg
использовать лицензию MIT для pylib, добавить некоторых участников
удалить код py.execnet и заменить все использования на „execnet“.
исправление проблемы50 - cached_setup теперь кэширует больше в соответствии с ожиданиями для тестовых функций с несколькими аргументами.
объединить исправления Жарко, выпуск #45 и #46
добавить возможность указать путь для поиска в py.lookup
исправить ошибку funcarg cached_setup, возникающую, вероятно, только в распределенном тестировании и в области действия «модуля» с разрывом.
множество исправлений и изменений для обеспечения совместимости кодовой базы с python3, большое спасибо Бенджамину Петерсону за помощь в этом.
консолидировать реализацию builtins для совместимости с >=2.3, добавить помощников для облегчения сохранения кода, совместимого с 2 и 3k
deprecate py.compat.doctest|subprocess|textwrap|optparse
deprecate py.magic.autopath, удалите каталог py/magic
перенести обработку утверждений pytest в py/code и плагин pytest_assertion, добавить опцию «–no-assert», деприватизировать пространства имен py.magic в пользу (меньших) пространств имен py.code.
консолидация и очистка классов и файлов py/code
очистка py/misc, перемещение тестов в bin-for-dist
ввести методы delattr/delitem/delenv в py.test’s monkeypatch funcarg
консолидировать реализацию py.log, удалить старый подход.
ввести py.io.TextIO и py.io.BytesIO для различения текста/юникода и байтовых потоков (используется базовый стандарт lib io.*, если он доступен).
сделать доступным вспомогательный скрипт py.unittest_convert, который конвертирует файлы стиля «unittest.py» в более простой стиль assert/direct-test-classes py.test/nosetests. Сценарий был написан Лорой Крейтон.
упрощенная реализация внутреннего локального пути
1.0.2 (2009-08-27)¶
исправление проблем с упаковкой, вызванных упаковкой fedora redhat, также в tarball добавлены файлы doc, examples и contrib.
добавлена ссылка на документацию к новому плагину django.
1.0.1 (2009-08-19)¶
добавлен плагин „pytest_nose“, который обрабатывает nose.SkipTest, установку/удаление функций/методов/генераторов в стиле nose и пытается корректно сообщать о функциях.
Запись юникода или кодированных строк в sys.stdout/err работает лучше, также запись терминала была адаптирована и несколько унифицирована между windows и linux.
значительно улучшена компоновка и содержание документации
добавлена опция «–help-config» для отображения имен conftest.py / ENV-var для всех опций командной строки longopt и некоторых специальных переменных conftest.py. переименовали параметр conftest „conf_capture“ в „option_capture“ соответственно.
исправление проблемы #27: улучшение отчетности о не собираемых элементах, заданных в командной строке (например, pyc-файлы)
исправление проблемы #33: добавлен флаг –version (спасибо Бенджамину Петерсону)
исправление проблемы #32: добавление поддержки «неполных» путей в wcpath.status()
Классы с префиксом «Test» больше не собираются по умолчанию, если у них есть метод __init__
monkeypatch setenv() теперь принимает параметр «prepend»
улучшенная отчетность об отслеживании ошибок при сборе
упрощен механизм мультивызовов и архитектура плагинов, переименованы некоторые внутренние методы и имена argnames
1.0.0 (2009-08-04)¶
более краткие отчеты пытаются показать путь к файловой системе относительно текущего dir
немного улучшить вывод xfail
1.0.0b9 (2009-07-31)¶
чисто обрабатывать и сообщать об окончательном разборе испытательной установки
исправление проблемы совместимости с svn-1.6 в py.path.svnwc().versioned() (спасибо Wouter Vanden Hove)
проблемы с установкой/снятием или сбором теперь отображаются как ОШИБКИ или с большой буквой «E» в строках прогресса. они сообщаются и подсчитываются отдельно.
dist-testing: правильно обрабатывать тестовые элементы, которые собираются локально, но не могут быть собраны на удаленной стороне - часто из-за причин, связанных с платформой/зависимостью
упрощен API py.test.mark - см. документацию по плагину ключевых слов
лучшая интеграция с протоколированием: захват теперь по умолчанию фиксирует тестовые функции и их непосредственную настройку/отключение в одном потоке
Функарги capsys и capfd теперь имеют метод readouterr() и close() (в основе лежит использование объектов py.io.StdCapture/FD, которые также имеют метод readouterr() для возврата снимков захваченных out/err).
улучшить работу ассертивной интерпретации со сравнениями, не возвращающими bools (сообщено с numpy из благодарности maciej fijalkowski).
переработали захват вывода для каждого теста в плагин pytest_iocapture.py и таким образом удалили код захвата из объекта config
item.repr_failure(excinfo) вместо item.repr_failure(excinfo, outerr)
1.0.0b8 (2009-07-22)¶
pytest_unittest-plugin теперь включен по умолчанию
введен хук pytest_keyboardinterrupt и доработан хук pytest_sessionfinish, добавлены тесты.
обход ошибки взаимодействия модуля протоколирования («закрытие уже закрытых файлов»). Спасибо Шридхару Ратнакумару за инициативу.
если плагины используют «py.test.importorskip» для импорта зависимости, вместо завершения процесса тестирования будет выдано только предупреждение.
много улучшений в документации: - доработан документ funcargs, используется термин «фабрика» вместо «провайдер» - добавлена новая страница документа talk/tutorial - улучшена страница загрузки - улучшены докстринги плагинов - добавлена новая страница плагинов и скрипт автоматической генерации документов
исправлена проблема с разрывом, связанная с частично неудачными установками funcarg (спасибо MrTopf за сообщение), «pytest_runtest_teardown» теперь всегда вызывается, даже если «pytest_runtest_setup» не удался.
исправлен вывод doctest для docstrings в py модулях, спасибо Радомиру.
1.0.0b7¶
переименовали py.test.xfail обратно в py.test.mark.xfail, чтобы избежать двух способов оформления для xfail
добавили декоратор py.test.mark для задания ключевых слов для функций (на самом деле это было задокументировано, поэтому удалять его было некрасиво)
удалить scope-аргумент из request.addfinalizer(), потому что request.cached_setup имеет scope arg. TOOWTDI.
выполнить окончательную настройку до сообщения о сбоях
применять модифицированные исправления от Андреаса Клоекнера, чтобы тестовые функции не имели кода func_code (#22) и чтобы ключевые слова «-k» и function работали (#20)
примените исправление от Daniel Peolzleithner (выпуск #23)
решить проблему #18, столкновение multiprocessing.Manager() и перенаправления
сделать __name__ == «__channelexec__» для кода remote_exec
1.0.0b3 (2009-06-19)¶
классы плагинов удалены: теперь можно определять хуки непосредственно в conftest.py или глобальных файлах pytest_*.py.
добавлен новый хук pytest_namespace(config), который позволяет внедрять хелперы непосредственно в пространство имен py.test.*.
документировано и усовершенствовано множество крючков
добавлен новый стиль генеративных тестов через хук pytest_generate_tests, который хорошо интегрируется с аргументами функций.
1.0.0b1¶
введен новый метод настройки «funcarg», см. doc/test/funcarg.txt
введена архитектура плагинов и множество новых плагинов py.test, см. doc/test/plugins.txt
teardown_method теперь гарантированно вызывается после выполнения метода тестирования.
новый метод: py.test.importorskip(mod,minversion) будет либо импортировать, либо вызывать py.test.skip()
полностью пересмотрена внутренняя архитектура py.test
новый объект py.process.ForkedFunc, позволяющий перебрасывать выполнение функции на подпроцесс и получать результат обратно.
XXX здесь много чего не хватает XXX
0.9.2¶
уточнил установку и метаданные, создал новый setup.py, теперь основанный на setuptools/ez_setup (спасибо Ralf Schmitt за поддержку).
улучшен способ сделать скрипты py.* доступными в среде windows, теперь они добавляются в каталог Scripts как файлы «.cmd».
py.path.svnwc.status() теперь более полный и использует вывод xml из команды „svn“, если он доступен (Guido Wesdorp)
исправление для py.path.svn* для работы с svn 1.5 (Крис Ламб)
исправьте метод path.relto(otherpath) в windows, чтобы использовать normcase для проверки относительности пути.
Трассировка py.test лучше разбирается из редакторов (следует соглашению filenames:LINENO: MSG) (спасибо Осмо Саломаа)
исправление в генерации javascript, теперь «py.test –runbrowser» должен работать более надежно
удалены ранее случайно добавленные хелперы py.test.broken и py.test.notimplemented.
теперь есть атрибут py.__version__
0.9.1¶
Это достаточно полный список v0.9.1, который может служить справочником для разработчиков.
Разрешение знаков + в урлах py.path.svn [39106]
исправлена поддержка исключений Failed без excinfo в py.test [39340]
добавлена поддержка убийства процессов для Windows (а также платформ, поддерживающих os.kill) в py.misc.killproc [39655]
добавил setup/teardown для генеративных тестов в py.test [40702]
добавлено обнаружение FAILED TO LOAD MODULE в py.test [40703, 40738, 40739].
исправлена проблема с вызовом .remove() на wcpaths неверсированных файлов в py.path [44248]
исправлены некоторые проблемы импорта и наследования в py.test [41480, 44648, 44655]
не удается запустить тесты greenlet, когда pypy доступен, но без stackless [45294]
небольшие исправления в тестах rsession [45295]
исправлена проблема с представлениями типов 2.5 в py.test [45483, 45484]
сделано так, чтобы отображение внутренних проблем отчетности выполнялось атомарно в py.test [45518]
сделано так, чтобы несуществующие файлы игнорировались скриптом py.lookup [45519]
улучшено создание имени исключения в py.test [45535]
сделано так, чтобы в execnet использовалось меньше потоков [объединено в 45539].
удалена блокировка, необходимая для отображения проблемы атомарного отчета в py.test [45545]
удалены глобальные файлы из execnet [45541, 45547]
рефакторинг механики очистки, сделано так, что setDaemon имеет значение 1, чтобы atexit вызывался в 2.5 (py.execnet) [45548]
исправлена ошибка при объединении потоков в servemain py.execnet [45549]
рефакторинг тестов py.test.rsession, чтобы больше не полагаться на точный формат вывода [45646]
использование repr() для результатов тестирования [45647]
добавлены классы „Reason“ для py.test.skip() [45648, 45649]
убили ненужную проверку на вменяемость в py.test.collect [45655]
избегайте использования os.tmpfile() в py.io.fdcapture, поскольку в Windows его могут использовать только администраторы [45901]
добавлена поддержка блокировки и нерекурсивных коммитов в py.path.svnwc [45994]
блокировка файлов в py.execnet для предотвращения сбоев CPython [46010]
добавлен метод export() в py.path.svnurl
исправлено -d -x в py.test [47277]
исправлена проблема с конкатенацией аргументов в py.path.svnwc [49423]
восстановить поведение py.test, чтобы он выходил с кодом 1 при наличии сбоев [49974]
don’t fail on html files that don’t have a accompanying .txt file [50606]
исправлено „utestconvert.py < input“ [50645]
небольшое исправление для отступов кода в py.code.source [50755]
исправить сборку документации _docgen.py [51285]
улучшена проверка исходного представления блоков кода в py.test [51292]
добавлена поддержка передачи аутентификации в объекты py.path.svn* [52000, 52001]
удален вызов sorted() для тестов py.apigen в пользу [].sort() для поддержки Python 2.3 [52481]