pytest 7.2.0 (2022-10-23)
Deprecations
-
#10012: Update
pytest.PytestUnhandledCoroutineWarning
{.interpreted-text role="class"} to a deprecation; it will raise an error in pytest 8. -
#10396: pytest no longer depends on the
py
library.pytest
provides a vendored copy ofpy.error
andpy.path
modules but will use thepy
library if it is installed. If you need otherpy.*
modules, continue to install the deprecatedpy
library separately, otherwise it can usually be removed as a dependency. -
#4562: Deprecate configuring hook specs/impls using attributes/marks.
Instead use :py
pytest.hookimpl
{.interpreted-text role="func"} and :pypytest.hookspec
{.interpreted-text role="func"}.
For more details, see thedocs <legacy-path-hooks-deprecated>
{.interpreted-text role="ref"}. -
#9886: The functionality for running tests written for
nose
has been officially deprecated.This includes:
- Plain
setup
andteardown
functions and methods: this might catch users by surprise, assetup()
andteardown()
are not pytest idioms, but part of thenose
support. - Setup/teardown using the @with_setup decorator.
For more details, consult the
deprecation docs <nose-deprecation>
{.interpreted-text role="ref"}. - Plain
Features
- #9897: Added shell-style wildcard support to
testpaths
.
Improvements
-
#10218:
@pytest.mark.parametrize()
(and similar functions) now accepts anySequence[str]
for the argument names,
instead of justlist[str]
andtuple[str, ...]
.(Note that
str
, which is itself aSequence[str]
, is still treated as a
comma-delimited name list, as before). -
#10381: The
--no-showlocals
flag has been added. This can be passed directly to tests to override--showlocals
declared throughaddopts
. -
#3426: 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 expresed instead.
-
#7337: A warning is now emitted if a test function returns something other than [None]{.title-ref}. This prevents a common mistake among beginners that expect that returning a [bool]{.title-ref} (for example [return foo(a, b) == result]{.title-ref}) would cause a test to pass or fail, instead of using [assert]{.title-ref}.
-
#8508: Introduce multiline display for warning matching via :py
pytest.warns
{.interpreted-text role="func"} and
enhance match comparison for :py_pytest._code.ExceptionInfo.match
{.interpreted-text role="func"} as returned by :pypytest.raises
{.interpreted-text role="func"}. -
#8646: Improve :py
pytest.raises
{.interpreted-text role="func"}. Previously passing an empty tuple would give a confusing
error. We now raise immediately with a more helpful message. -
#9741: On Python 3.11, use the standard library's
tomllib
{.interpreted-text role="mod"} to parse TOML.tomli
{.interpreted-text role="mod"}` is no longer a dependency on Python 3.11. -
#9742: Display assertion message without escaped newline characters with
-vv
. -
#9823: Improved error message that is shown when no collector is found for a given file.
-
#9873: Some coloring has been added to the short test summary.
-
#9883: Normalize the help description of all command-line options.
-
#9920: Display full crash messages in
short test summary info
, when runng in a CI environment. -
#9987: Added support for hidden configuration file by allowing
.pytest.ini
as an alternative topytest.ini
.
Bug Fixes
-
#10150:
sys.stdin
{.interpreted-text role="data"} now contains all expected methods of a file-like object when capture is enabled. -
#10382: Do not break into pdb when
raise unittest.SkipTest()
appears top-level in a file. -
#7792: 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]{.title-ref} 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
{.interpreted-text role="func"} instead. -
#9159: 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 inExceptionGroups
. -
#9877: Ensure
caplog.get_records(when)
returns current/correct data after invokingcaplog.clear()
.
Improved Documentation
- #10344: Update information on writing plugins to use
pyproject.toml
instead ofsetup.py
. - #9248: The documentation is now built using Sphinx 5.x (up from 3.x previously).
- #9291: Update documentation on how
pytest.warns
{.interpreted-text role="func"} affectsDeprecationWarning
{.interpreted-text role="class"}.
Trivial/Internal Changes
- #10196:
~pytest.PytestReturnNotNoneWarning
{.interpreted-text role="class"} is now a subclass of~pytest.PytestRemovedIn8Warning
{.interpreted-text role="class"}: the plan is to make returning non-None
from tests an error in the future. - #10313: Made
_pytest.doctest.DoctestItem
exportpytest.DoctestItem
for
type check and runtime purposes. Made [_pytest.doctest]{.title-ref} use internal APIs
to avoid circular imports. - #9906: Made
_pytest.compat
re-exportimportlib_metadata
in the eyes of type checkers. - #9910: Fix default encoding warning (
EncodingWarning
) incacheprovider
- #9984: 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.