Log message:
py-test: updated to 7.2.0
pytest 7.2.0 (2022-10-23)
Deprecations
* Update pytest.PytestUnhandledCoroutineWarning to a deprecation; it will raise \
an error in pytest 8.
* pytest no longer depends on the py library. pytest provides a vendored copy of \
py.error and py.path modules but will use the py library if it is installed. If \
you need other py.* modules, continue to install the deprecated py library \
separately, otherwise it can usually be removed as a dependency.
* Deprecate configuring hook specs/impls using attributes/marks.
Instead use pytest.hookimpl() and pytest.hookspec(). For more details, see the docs.
* The functionality for running tests written for nose has been officially \
deprecated.
This includes:
Plain setup and teardown functions and methods: this might catch users by \
surprise, as setup() and teardown() are not pytest idioms, but part of the nose \
support.
Setup/teardown using the @with_setup decorator.
For more details, consult the deprecation docs.
* A deprecation warning is now emitted if a test function returns something \
other than None. This prevents a common mistake among beginners that expect that \
returning a bool (for example return foo(a, b) == result) would cause a test to \
pass or fail, instead of using assert. The plan is to make returning non-None \
from tests an error in the future.
Features
* Added shell-style wildcard support to testpaths.
Improvements
* @pytest.mark.parametrize() (and similar functions) now accepts any \
Sequence[str] for the argument names, instead of just list[str] and tuple[str, \
...].
(Note that str, which is itself a Sequence[str], is still treated as a \
comma-delimited name list, as before).
* The --no-showlocals flag has been added. This can be passed directly to tests \
to override --showlocals declared through addopts.
* Assertion failures with strings in NFC and NFD forms that normalize to the \
same string now have a dedicated error message detailing the issue, and their \
utf-8 representation is expressed instead.
* Introduce multiline display for warning matching via pytest.warns() and \
enhance match comparison for _pytest._code.ExceptionInfo.match() as returned by \
pytest.raises().
* Improve pytest.raises(). Previously passing an empty tuple would give a \
confusing error. We now raise immediately with a more helpful message.
* On Python 3.11, use the standard library’s tomllib to parse TOML.
tomli is no longer a dependency on Python 3.11.
* Display assertion message without escaped newline characters with -vv.
* Improved error message that is shown when no collector is found for a given file.
* Some coloring has been added to the short test summary.
* Normalize the help description of all command-line options.
* Display full crash messages in short test summary info, when running in a CI \
environment.
* Added support for hidden configuration file by allowing .pytest.ini as an \
alternative to pytest.ini.
Bug Fixes
* sys.stdin now contains all expected methods of a file-like object when capture \
is enabled.
* Do not break into pdb when raise unittest.SkipTest() appears top-level in a file.
* Marks are now inherited according to the full MRO in test classes. Previously, \
if a test class inherited from two or more classes, only marks from the first \
super-class would apply.
When inheriting marks from super-classes, marks from the sub-classes are now \
ordered before marks from the super-classes, in MRO order. Previously it was the \
reverse.
When inheriting marks from super-classes, the pytestmark attribute of the \
sub-class now only contains the marks directly applied to it. Previously, it \
also contained marks from its super-classes. Please note that this attribute \
should not normally be accessed directly; use pytest.Node.iter_markers() \
instead.
* Showing inner exceptions by forcing native display in ExceptionGroups even \
when using display options other than --tb=native. A temporary step before full \
implementation of pytest-native display for inner exceptions in ExceptionGroups.
* Ensure caplog.get_records(when) returns current/correct data after invoking \
caplog.clear().
Improved Documentation
* Update information on writing plugins to use pyproject.toml instead of setup.py.
* The documentation is now built using Sphinx 5.x (up from 3.x previously).
* Update documentation on how pytest.warns() affects DeprecationWarning.
Trivial/Internal Changes
* Made _pytest.doctest.DoctestItem export pytest.DoctestItem for type check and \
runtime purposes. Made _pytest.doctest use internal APIs to avoid circular \
imports.
* Made _pytest.compat re-export importlib_metadata in the eyes of type checkers.
* Fix default encoding warning (EncodingWarning) in cacheprovider
* Improve the error message when we attempt to access a fixture that has been \
torn down. Add an additional sentence to the docstring explaining when it’s \
not a good idea to call getfixturevalue.
|
Log message:
py-test: updated to 7.1.1
pytest 7.1.1 (2022-03-17)
=========================
Bug Fixes
---------
- Fixed a regression in pytest 7.1.0 where some conftest.py files outside of the \
source tree (e.g. in the `site-packages` directory) were not picked up.
pytest 7.1.0 (2022-03-13)
=========================
Breaking Changes
----------------
- As per our policy, the following features have been deprecated in the 6.X \
series and are now
removed:
* ``pytest._fillfuncargs`` function.
* ``pytest_warning_captured`` hook - use ``pytest_warning_recorded`` instead.
* ``-k -foobar`` syntax - use ``-k 'not foobar'`` instead.
* ``-k foobar:`` syntax.
* ``pytest.collect`` module - import from ``pytest`` directly.
For more information consult
`Deprecations and Removals \
<https://docs.pytest.org/en/latest/deprecations.html>`__ in the docs.
- Dropped support for Python 3.6, which reached `end-of-life \
<https://devguide.python.org/#status-of-python-branches>`__ at 2021-12-23.
Improvements
------------
- Fixed test output for some data types where ``-v`` would show less information.
Also, when showing diffs for sequences, ``-q`` would produce full diffs \
instead of the expected diff.
- pytest now avoids specialized assert formatting when it is detected that the \
default ``__eq__`` is overridden in ``attrs`` or ``dataclasses``.
- When ``-vv`` is given on command line, show skipping and xfail reasons in full \
instead of truncating them to fit the terminal width.
- More information about the location of resources that led Python to raise \
:class:`ResourceWarning` can now
be obtained by enabling :mod:`tracemalloc`.
See :ref:`resource-warnings` for more information.
- More types are now accepted in the ``ids`` argument to \
``@pytest.mark.parametrize``.
Previously only `str`, `float`, `int` and `bool` were accepted;
now `bytes`, `complex`, `re.Pattern`, `Enum` and anything with a `__name__` \
are also accepted.
- :func:`pytest.approx` now raises a :class:`TypeError` when given an unordered \
sequence (such as :class:`set`).
Note that this implies that custom classes which only implement ``__iter__`` \
and ``__len__`` are no longer supported as they don't guarantee order.
Bug Fixes
---------
- The deprecation of raising :class:`unittest.SkipTest` to skip collection of
tests during the pytest collection phase is reverted - this is now a supported
feature again.
- Symbolic link components are no longer resolved in conftest paths.
This means that if a conftest appears twice in collection tree, using \
symlinks, it will be executed twice.
For example, given
tests/real/conftest.py
tests/real/test_it.py
tests/link -> tests/real
running ``pytest tests`` now imports the conftest twice, once as \
``tests/real/conftest.py`` and once as ``tests/link/conftest.py``.
This is a fix to match a similar change made to test collection itself in \
pytest 6.0 (see :pull:`6523` for details).
- Fixed count of selected tests on terminal collection summary when there were \
errors or skipped modules.
If there were errors or skipped modules on collection, pytest would mistakenly \
subtract those from the selected count.
- Fixed regression where ``--import-mode=importlib`` used together with \
:envvar:`PYTHONPATH` or :confval:`pythonpath` would cause import errors in test \
suites.
- :fixture:`pytester` now requests a :fixture:`monkeypatch` fixture instead of \
creating one internally. This solves some issues with tests that involve pytest \
environment variables.
- Malformed ``pyproject.toml`` files now produce a clearer error message.
|
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.
|