pytest v5.4.0 Release Notes
Release Date: 2020-03-12 // about 4 years ago-
๐ฅ Breaking Changes
โ #6316: Matching of
-k EXPRESSION
to test names is now case-insensitive.#6443: Plugins specified with
-p
are now loaded after internal plugins, which results in their hooks being called before the internal ones.โ This makes the
-p
behavior consistent withPYTEST_PLUGINS
.๐ #6637: Removed the long-deprecated
pytest_itemstart
hook.โ This hook has been marked as deprecated and not been even called by pytest for over 10 years now.
โ #6673: Reversed / fix meaning of "+/-" in error diffs. "-" means that sth. expected is missing in the result and "+" means that there are unexpected extras in the result.
โ #6737: The
cached_result
attribute ofFixtureDef
is now set toNone
when
the result is unavailable, instead of being deleted.๐ If your plugin performs checks like
hasattr(fixturedef, 'cached_result')
,
๐ for example in apytest_fixture_post_finalizer
hook implementation, replace
it withfixturedef.cached_result is not None
. If youdel
the attribute,
set it toNone
instead.๐ Deprecations
๐ #3238: Option
--no-print-logs
is deprecated and meant to be removed in a future release. If you use--no-print-logs
, please try out--show-capture
and
provide feedback.โ
--show-capture
command-line option was added inpytest 3.5.0
and allows to specify how to
โ display captured output when tests fail:no
,stdout
,stderr
,log
orall
(the default).#571: Deprecate the unused/broken [pytest_collect_directory]{.title-ref} hook.
It was misaligned since the removal of theDirectory
collector in 2010
โ and incorrect/unusable as soon as collection was split from test execution.โ #5975: Deprecate using direct constructors for
Nodes
.Instead they are new constructed via
Node.from_parent
.This transitional mechanism enables us to detangle the very intensely
entangledNode
relationships by enforcing more controlled creation/configruation patterns.As part of that session/config are already disallowed parameters and as we work on the details we might need disallow a few more as well.
Subclasses are expected to use [super().from_parent]{.title-ref} if they intend to expand the creation of [Nodes]{.title-ref}.
โ #6779: The
TerminalReporter.writer
attribute has been deprecated and should no longer be used. This
๐ was inadvertently exposed as part of the public API of that plugin and ties it too much
withpy.io.TerminalWriter
.๐ Features
- โ
#4597: New
--capture=tee-sys <capture-method>
{.interpreted-text role="ref"} option to allow both live printing and capturing of test output. - โ
#5712: Now all arguments to
@pytest.mark.parametrize
need to be explicitly declared in the function signature or viaindirect
.
Previously it was possible to omit an argument if a fixture with the same name existed, which was just an accident of implementation and was not meant to be a part of the API. - #6454: Changed default for [-r]{.title-ref} to [fE]{.title-ref}, which displays failures and errors in the
short test summary <pytest.detailed_failed_tests_usage>
{.interpreted-text role="ref"}. [-rN]{.title-ref} can be used to disable it (the old behavior). - โ
#6469: New options have been added to the
junit_logging
{.interpreted-text role="confval"} option:log
,out-err
, andall
. - โ #6834: Excess warning summaries are now collapsed per file to ensure readable display of warning summaries.
๐ Improvements
โ #1857:
pytest.mark.parametrize
accepts integers forids
again, converting it to strings.โ #449: Use "yellow" main color with any XPASSED tests.
โช #4639: Revert "A warning is now issued when assertions are made for
None
".โ The warning proved to be less useful than initially expected and had quite a
few false positive cases.โ #5686:
tmpdir_factory.mktemp
now fails when given absolute and non-normalized paths.โ #5984: The
pytest_warning_captured
hook now receives alocation
parameter with the code location that generated the warning.โ #6213: pytester: the
testdir
fixture respects environment settings from themonkeypatch
fixture for inner runs.โ #6247:
--fulltrace
is honored with collection errors.โ #6384: Make [--showlocals]{.title-ref} work also with [--tb=short]{.title-ref}.
โ #6653: Add support for matching lines consecutively with
LineMatcher <_pytest.pytester.LineMatcher>
{.interpreted-text role="attr"}'s~_pytest.pytester.LineMatcher.fnmatch_lines
{.interpreted-text role="func"} and~_pytest.pytester.LineMatcher.re_match_lines
{.interpreted-text role="func"}.โ #6658: Code is now highlighted in tracebacks when
pygments
is installed.๐ Users are encouraged to install
pygments
into their environment and provide feedback, because
the plan is to makepygments
a regular dependency in the future.โ #6795: Import usage error message with invalid [-o]{.title-ref} option.
โ #759:
pytest.mark.parametrize
supports iterators and generators forids
.๐ Bug Fixes
โ #310: Add support for calling [pytest.xfail()]{.title-ref} and [pytest.importorskip()]{.title-ref} with doctests.
โ #3823:
--trace
now works with unittests.โ #4445: Fixed some warning reports produced by pytest to point to the correct location of the warning in the user's code.
โ #5301: Fix
--last-failed
to collect new tests from files with known failures.โ #5928: Report
PytestUnknownMarkWarning
at the level of the user's code, notpytest
's.โ #5991: Fix interaction with
--pdb
and unittests: do not use unittest'sTestCase.debug()
.โ #6334: Fix summary entries appearing twice when
f/F
ands/S
report chars were used at the same time in the-r
command-line option (for example-rFf
).The upper case variants were never documented and the preferred form should be the lower case.
โ #6409: Fallback to green (instead of yellow) for non-last items without previous passes with colored terminal progress indicator.
โ #6454: [--disable-warnings]{.title-ref} is honored with [-ra]{.title-ref} and [-rA]{.title-ref}.
โ #6497: Fix bug in the comparison of request key with cached key in fixture.
A construct
if key == cached_key:
can fail either because==
is explicitly disallowed, or for, e.g., NumPy arrays, where the result ofa == b
cannot generally be converted to [bool]{.title-ref}.
The implemented fix replaces [==]{.title-ref} withis
.โ #6557: Make capture output streams
.write()
method return the same return value from original streams.โ #6566: Fix
EncodedFile.writelines
to call the underlying buffer'swritelines
method.โ #6575: Fix internal crash when
faulthandler
starts initialized
(for example withPYTHONFAULTHANDLER=1
environment variable set) andfaulthandler_timeout
defined
๐ง in the configuration file.โ #6597: Fix node ids which contain a parametrized empty-string variable.
โ #6646: Assertion rewriting hooks are (re)stored for the current item, which fixes them being still used after e.g. pytester's
testdir.runpytest <_pytest.pytester.Testdir.runpytest>
{.interpreted-text role="func"} etc.โ #6660:
pytest.exit() <_pytest.outcomes.exit>
{.interpreted-text role="func"} is handled when emitted from thepytest_sessionfinish <_pytest.hookspec.pytest_sessionfinish>
{.interpreted-text role="func"} hook. This includes quitting from a debugger.โ #6752: When :py
pytest.raises
{.interpreted-text role="func"} is used as a function (as opposed to a context manager),
โ a [match]{.title-ref} keyword argument is now passed through to the tested function. Previously
โ it was swallowed and ignored (regression in pytest 5.1.0).โ #6801: Do not display empty lines inbetween traceback for unexpected exceptions with doctests.
โ #6802: The
testdir fixture <testdir>
{.interpreted-text role="fixture"} works within doctests now.๐ Improved Documentation
- โ #6696: Add list of fixtures to start of fixture chapter.
- โ #6742: Expand first sentence on fixtures into a paragraph.
Trivial/Internal Changes
- ๐ #6404: Remove usage of
parser
module, deprecated in Python 3.9.
- โ
#4597: New