5.3.0
pytest 5.3.0 (2019-11-19)
Deprecations
-
#6179: The
default value ofjunit_family
option will change toxunit2
in
pytest 6.0, given that this is the version supported by default in
modern tools that manipulate this type of file.In order to smooth the transition, pytest will issue a warning in
case the--junitxml
option is given in the command line but
junit_family
is not explicitly configured inpytest.ini
.For more information, see the
docs.
Features
-
#4488: The
pytest team has created the
pytest-reportlog
plugin, which provides a new--report-log=FILE
option that writes
report logs into a file as the test session executes.Each line of the report log contains a self contained JSON object
corresponding to a testing event, such as a collection or a test
result report. The file is guaranteed to be flushed after writing
each line, so systems can read and process events in real-time.The plugin is meant to replace the
--resultlog
option, which is
deprecated and meant to be removed in a future release. If you use
--resultlog
, please try outpytest-reportlog
and
provide feedback. -
#4730: When
sys.pycache_prefix
(Python 3.8+) is set, it will be used by pytest
to cache test files changed by the assertion rewriting mechanism.This makes it easier to benefit of cached
.pyc
files even on file
systems without permissions. -
#5515: Allow
selective auto-indentation of multiline log messages.Adds command line option
--log-auto-indent
, config option
log_auto_indent
and support for per-entry configuration of
indentation behavior on calls tologging.log()
.Alters the default for auto-indention from
on
tooff
. This
restores the older behavior that existed prior to v4.6.0. This
reversion to earlier behavior was done because it is better to
activate new features that may lead to broken tests explicitly
rather than implicitly. -
#5914:
pytester
learned two new functions,
no_fnmatch_line
and
no_re_match_line.The functions are used to ensure the captured text does not match
the given pattern.The previous idiom was to use
re.match
:assert re.match(pat, result.stdout.str()) is None
Or the
in
operator:assert text in result.stdout.str()
But the new functions produce best output on failure.
-
#6057: Added
tolerances to complex values when printingpytest.approx
.For example,
repr(pytest.approx(3+4j))
returns
(3+4j) ± 5e-06 ∠ ±180°
. This is polar notation indicating a circle
around the expected value, with a radius of 5e-06. Forapprox
comparisons to returnTrue
, the actual value should fall within
this circle. -
#6061: Added
the pluginmanager as an argument topytest_addoption
so that hooks
can be invoked when setting up command line options. This is useful
for having one plugin communicate things to another plugin, such as
default values or which set of command line options to add.
Improvements
-
#5061: Use
multiple colors with terminal summary statistics. -
#5630: Quitting
from debuggers is now properly handled indoctest
items. -
#5924: Improved
verbose diff output with sequences.Before:
E AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...] E Right contains 3 more items, first extra item: ' ' E Full diff: E - ['version', 'version_info', 'sys.version', 'sys.version_info'] E + ['version', E + 'version_info', E + 'sys.version', E + 'sys.version_info', E + ' ', E + 'sys.version', E + 'sys.version_info']
After:
E AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...] E Right contains 3 more items, first extra item: ' ' E Full diff: E [ E 'version', E 'version_info', E 'sys.version', E 'sys.version_info', E + ' ', E + 'sys.version', E + 'sys.version_info', E ]
-
#5936: Display
untruncated assertion message with-vv
. -
#5990: Fixed
plurality mismatch in test summary (e.g. display "1 error" instead
of "1 errors"). -
#6008:
Config.InvocationParams.args
is now always atuple
to better
convey that it should be immutable and avoid
accidental modifications. -
#6023:
pytest.main
now returns apytest.ExitCode
instance now, except
for when custom exit codes are used (where it returnsint
then still). -
#6026: Align
prefixes in output of pytester'sLineMatcher
. -
#6059:
Collection errors are reported as errors (and not failures
like before) in the terminal's short test summary. -
#6069:
pytester.spawn
does not skip/xfail tests on FreeBSD
anymore unconditionally. -
#6097: The
"[XXX%]" indicator in the test summary is now colored according to
the final (new) multi-colored line's main color. -
#6116: Added
--co
as a synonym to--collect-only
. -
#6148:
atomicwrites
is now only used on Windows, fixing a performance
regression with assertion rewriting on Unix. -
#6152: Now
parametrization will use the__name__
attribute of any object for
the id, if present. Previously it would only use__name__
for
functions and classes. -
#6176: Improved
failure reporting with pytester'sHookrecorder.assertoutcome
. -
#6181: The
reason for a stopped session, e.g. with--maxfail
/-x
, now gets
reported in the test summary. -
#6206: Improved
cache.set
robustness and performance.
Bug Fixes
-
#2049: Fixed
--setup-plan
showing inaccurate information about
fixture lifetimes. -
#2548: Fixed
line offset mismatch of skipped tests in terminal summary. -
#6039: The
PytestDoctestRunner
is now properly invalidated when unconfiguring
the doctest plugin.This is important when used with
pytester
'srunpytest_inprocess
. -
#6047:
BaseExceptions are now handled insaferepr
, which includes
pytest.fail.Exception
etc. -
#6074:
pytester: fixed order of arguments inrm_rf
warning when cleaning
up temporary directories, and do not emit warnings for errors with
os.open
. -
#6189: Fixed
result ofgetmodpath
method.
Trivial/Internal Changes
- #4901:
RunResult
frompytester
now displays the mnemonic of theret
attribute when it is a validpytest.ExitCode
value.