a8ece7e9f3
pytest 7.0.1 (2022-02-11) Bug Fixes #9608: Fix invalid importing of importlib.readers in Python 3.9. #9610: Restore UnitTestFunction.obj to return unbound rather than bound method. Fixes a crash during a failed teardown in unittest TestCases with non-default __init__. Regressed in pytest 7.0.0. #9636: The pythonpath plugin was renamed to python_path. This avoids a conflict with the pytest-pythonpath plugin. #9642: Fix running tests by id with :: in the parametrize portion. #9643: Delay issuing a PytestWarning about diamond inheritance involving Item and Collector so it can be filtered using standard warning filters. pytest 7.0.0 (2022-02-03) (Please see the full set of changes for this release also in the 7.0.0rc1 notes below) Deprecations #9488: If custom subclasses of nodes like pytest.Item override the __init__ method, they should take **kwargs. See Constructors of custom pytest.Node subclasses should take **kwargs for details. Note that a deprection warning is only emitted when there is a conflict in the arguments pytest expected to pass. This deprecation was already part of pytest 7.0.0rc1 but wasn’t documented. Bug Fixes #9355: Fixed error message prints function decorators when using assert in Python 3.8 and above. #9396: Ensure pytest.Config.inifile is available during the pytest_cmdline_main hook (regression during 7.0.0rc1). Improved Documentation #9404: Added extra documentation on alternatives to common misuses of pytest.warns(None) ahead of its deprecation. #9505: Clarify where the configuration files are located. To avoid confusions documentation mentions that configuration file is located in the root of the repository. pytest 7.0.0rc1 (2021-12-06) Breaking Changes #7259: The Node.reportinfo() function first return value type has been expanded from py.path.local | str to os.PathLike[str] | str. Most plugins which refer to reportinfo() only define it as part of a custom pytest.Item implementation. Since py.path.local is a os.PathLike[str], these plugins are unaffacted. Plugins and users which call reportinfo(), use the first return value and interact with it as a py.path.local, would need to adjust by calling py.path.local(fspath). Although preferably, avoid the legacy py.path.local and use pathlib.Path, or use item.location or item.path, instead. Note: pytest was not able to provide a deprecation period for this change. #8246: --version now writes version information to stdout rather than stderr. #8733: Drop a workaround for pyreadline that made it work with --pdb. The workaround was introduced in #1281 in 2015, however since then pyreadline seems to have gone unmaintained, is generating warnings, and will stop working on Python 3.10. #9061: Using pytest.approx() in a boolean context now raises an error hinting at the proper usage. It is apparently common for users to mistakenly use pytest.approx like this: assert pytest.approx(actual, expected) While the correct usage is: assert actual == pytest.approx(expected) The new error message helps catch those mistakes. #9277: The pytest.Instance collector type has been removed. Importing pytest.Instance or _pytest.python.Instance returns a dummy type and emits a deprecation warning. See The pytest.Instance collector for details. #9308: PytestRemovedIn7Warning deprecation warnings are now errors by default. Following our plan to remove deprecated features with as little disruption as possible, all warnings of type PytestRemovedIn7Warning now generate errors instead of warning messages by default. The affected features will be effectively removed in pytest 7.1, so please consult the Deprecations and Removals section in the docs for directions on how to update existing code. In the pytest 7.0.X series, it is possible to change the errors back into warnings as a stopgap measure by adding this to your pytest.ini file: [pytest] filterwarnings = ignore::pytest.PytestRemovedIn7Warning But this will stop working when pytest 7.1 is released. If you have concerns about the removal of a specific feature, please add a comment to issue #9308. Deprecations #7259: py.path.local arguments for hooks have been deprecated. See the deprecation note for full details. py.path.local arguments to Node constructors have been deprecated. See the deprecation note for full details. Note The name of the Node arguments and attributes (the new attribute being path) is the opposite of the situation for hooks (the old argument being path). This is an unfortunate artifact due to historical reasons, which should be resolved in future versions as we slowly get rid of the py dependency (see issue #9283 for a longer discussion). #7469: Directly constructing the following classes is now deprecated: _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 These constructors have always been considered private, but now issue a deprecation warning, which may become a hard error in pytest 8. #8242: Raising unittest.SkipTest to skip collection of tests during the pytest collection phase is deprecated. Use pytest.skip() instead. Note: This deprecation only relates to using unittest.SkipTest during test collection. You are probably not doing that. Ordinary usage of unittest.SkipTest / unittest.TestCase.skipTest() / unittest.skip() in unittest test cases is fully supported. #8315: Several behaviors of Parser.addoption are now scheduled for removal in pytest 8 (deprecated since pytest 2.4.0): parser.addoption(..., help=".. %default ..") - use %(default)s instead. parser.addoption(..., type="int/string/float/complex") - use type=int etc. instead. #8447: Defining a custom pytest node type which is both an pytest.Item and a pytest.Collector (e.g. pytest.File) now issues a warning. It was never sanely supported and triggers hard to debug errors. See the deprecation note for full details. #8592: pytest_cmdline_preparse has been officially deprecated. It will be removed in a future release. Use pytest_load_initial_conftests instead. See the deprecation note for full details. #8645: pytest.warns(None) is now deprecated because many people used it to mean “this code does not emit warnings”, but it actually had the effect of checking that the code emits at least one warning of any type - like pytest.warns() or pytest.warns(Warning). #8948: pytest.skip(msg=...), pytest.fail(msg=...) and pytest.exit(msg=...) signatures now accept a reason argument instead of msg. Using msg still works, but is deprecated and will be removed in a future release. This was changed for consistency with pytest.mark.skip and pytest.mark.xfail which both accept reason as an argument. #8174: The following changes have been made to types reachable through pytest.ExceptionInfo.traceback: The path property of _pytest.code.Code returns Path instead of py.path.local. The path property of _pytest.code.TracebackEntry returns Path instead of py.path.local. There was no deprecation period for this change (sorry!). Features #5196: Tests are now ordered by definition order in more cases. In a class hierarchy, tests from base classes are now consistently ordered before tests defined on their subclasses (reverse MRO order). #7132: Added two environment variables PYTEST_THEME and PYTEST_THEME_MODE to let the users customize the pygments theme used. #7259: Added cache.mkdir(), which is similar to the existing cache.makedir(), but returns a pathlib.Path instead of a legacy py.path.local. Added a paths type to parser.addini(), as in parser.addini("mypaths", "my paths", type="paths"), which is similar to the existing pathlist, but returns a list of pathlib.Path instead of legacy py.path.local. #7469: The types of objects used in pytest’s API are now exported so they may be used in type annotations. The newly-exported types are: pytest.Config for Config. pytest.Mark for marks. pytest.MarkDecorator for mark decorators. pytest.MarkGenerator for the pytest.mark singleton. pytest.Metafunc for the metafunc argument to the pytest_generate_tests hook. pytest.CallInfo for the CallInfo type passed to various hooks. pytest.PytestPluginManager for PytestPluginManager. pytest.ExceptionInfo for the ExceptionInfo type returned from pytest.raises() and passed to various hooks. pytest.Parser for the Parser type passed to the pytest_addoption hook. pytest.OptionGroup for the OptionGroup type returned from the parser.addgroup method. pytest.HookRecorder for the HookRecorder type returned from Pytester. pytest.RecordedHookCall for the RecordedHookCall type returned from HookRecorder. pytest.RunResult for the RunResult type returned from Pytester. pytest.LineMatcher for the LineMatcher type used in RunResult and others. pytest.TestReport for the TestReport type used in various hooks. pytest.CollectReport for the CollectReport type used in various hooks. Constructing most of them directly is not supported; they are only meant for use in type annotations. Doing so will emit a deprecation warning, and may become a hard-error in pytest 8.0. Subclassing them is also not supported. This is not currently enforced at runtime, but is detected by type-checkers such as mypy. #7856: –import-mode=importlib now works with features that depend on modules being on sys.modules, such as pickle and dataclasses. #8144: The following hooks now receive an additional pathlib.Path argument, equivalent to an existing py.path.local argument: pytest_ignore_collect - The collection_path parameter (equivalent to existing path parameter). pytest_collect_file - The file_path parameter (equivalent to existing path parameter). pytest_pycollect_makemodule - The module_path parameter (equivalent to existing path parameter). pytest_report_header - The start_path parameter (equivalent to existing startdir parameter). pytest_report_collectionfinish - The start_path parameter (equivalent to existing startdir parameter). Note The name of the Node arguments and attributes (the new attribute being path) is the opposite of the situation for hooks (the old argument being path). This is an unfortunate artifact due to historical reasons, which should be resolved in future versions as we slowly get rid of the py dependency (see issue #9283 for a longer discussion). #8251: Implement Node.path as a pathlib.Path. Both the old fspath and this new attribute gets set no matter whether path or fspath (deprecated) is passed to the constructor. It is a replacement for the fspath attribute (which represents the same path as py.path.local). While fspath is not deprecated yet due to the ongoing migration of methods like reportinfo(), we expect to deprecate it in a future release. Note The name of the Node arguments and attributes (the new attribute being path) is the opposite of the situation for hooks (the old argument being path). This is an unfortunate artifact due to historical reasons, which should be resolved in future versions as we slowly get rid of the py dependency (see issue #9283 for a longer discussion). #8421: pytest.approx() now works on Decimal within mappings/dicts and sequences/lists. #8606: pytest invocations with --fixtures-per-test and --fixtures have been enriched with: Fixture location path printed with the fixture name. First section of the fixture’s docstring printed under the fixture name. Whole of fixture’s docstring printed under the fixture name using --verbose option. #8761: New pytest.version_tuple attribute, which makes it simpler for users to do something depending on the pytest version (such as declaring hooks which are introduced in later versions). #8789: Switch TOML parser from toml to tomli for TOML v1.0.0 support in pyproject.toml. #8920: Added pytest.Stash, a facility for plugins to store their data on Config and Nodes in a type-safe and conflict-free manner. See Storing data on items across hook functions for details. #8953: RunResult method assert_outcomes now accepts a warnings argument to assert the total number of warnings captured. #8954: --debug flag now accepts a str file to route debug logs into, remains defaulted to pytestdebug.log. #9023: Full diffs are now always shown for equality assertions of iterables when CI or BUILD_NUMBER is found in the environment, even when -v isn’t used. #9113: RunResult method assert_outcomes now accepts a deselected argument to assert the total number of deselected tests. #9114: Added pythonpath setting that adds listed paths to sys.path for the duration of the test session. If you currently use the pytest-pythonpath or pytest-srcpaths plugins, you should be able to replace them with built-in pythonpath setting. Improvements #7480: A deprecation scheduled to be removed in a major version X (e.g. pytest 7, 8, 9, …) now uses warning category PytestRemovedInXWarning, a subclass of PytestDeprecationWarning, instead of PytestDeprecationWarning directly. See Backwards Compatibility Policy for more details. #7864: Improved error messages when parsing warning filters. Previously pytest would show an internal traceback, which besides being ugly sometimes would hide the cause of the problem (for example an ImportError while importing a specific warning type). #8335: Improved pytest.approx() assertion messages for sequences of numbers. The assertion messages now dumps a table with the index and the error of each diff. Example: > 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: By default, pytest will truncate long strings in assert errors so they don’t clutter the output too much, currently at 240 characters by default. However, in some cases the longer output helps, or is even crucial, to diagnose a failure. Using -v will now increase the truncation threshold to 2400 characters, and -vv or higher will disable truncation entirely. #8509: Fixed issue where unittest.TestCase.setUpClass() is not called when a test has / in its name since pytest 6.2.0. This refers to the path part in pytest node IDs, e.g. TestClass::test_it in the node ID tests/test_file.py::TestClass::test_it. Now, instead of assuming that the test name does not contain /, it is assumed that test path does not contain ::. We plan to hopefully make both of these work in the future. #8803: It is now possible to add colors to custom log levels on cli log. By using add_color_level from a pytest_configure hook, colors can be added: 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') See Customizing Colors for more information. #8822: When showing fixture paths in --fixtures or --fixtures-by-test, fixtures coming from pytest itself now display an elided path, rather than the full path to the file in the site-packages directory. #8898: Complex numbers are now treated like floats and integers when generating parameterization IDs. #9062: --stepwise-skip now implicitly enables --stepwise and can be used on its own. #9205: pytest.Cache.set() now preserves key order when saving dicts. |
||
---|---|---|
.. | ||
ALTERNATIVES | ||
DESCR | ||
distinfo | ||
Makefile | ||
PLIST |