Path to this page:
Subject: CVS commit: pkgsrc/devel/py-test
From: Thomas Klausner
Date: 2022-02-15 17:05:42
Message id: 20220215160542.9F614FB24@cvs.NetBSD.org
Log Message:
py-test: update to 7.0.1.
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.
Files: