You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There are new versions of pytest available from pypi.
3.0.0
Incompatible changes
A number of incompatible changes were made in this release, with the
intent of removing features deprecated for a long time or change
existing behaviors in order to make them less surprising/more useful.
Reinterpretation mode has now been removed. Only plain and rewrite
mode are available, consequently the --assert=reinterp option is
no longer available. This also means files imported from plugins or conftest.py will not benefit from improved assertions by default,
you should use pytest.register_assert_rewrite() to explicitly turn
on assertion rewriting for those files. Thanks flub for the PR.
The following deprecated commandline options were removed:
ImportErrors in plugins now are a fatal error instead of issuing a
pytest warning
(#1479). Thanks
to The-Compiler for the PR.
Removed support code for Python 3 versions < 3.3
(#1627).
Removed all py.test-X* entry points. The versioned, suffixed entry
points were never documented and a leftover from a pre-virtualenv
era. These entry points also created broken entry points in wheels,
so removing them also removes a source of confusion for users
(#1632). Thanks obestwalter for the PR.
pytest.skip() now raises an error when used to decorate a test
function, as opposed to its original intent (to imperatively skip a
test inside a test function). Previously this usage would cause the
entire module to be skipped
(#607). Thanks omarkohl for the complete PR
(#1519).
Exit tests if a collection error occurs. A poll indicated most users
will hit CTRL-C anyway as soon as they see collection errors, so
pytest might as well make that the default behavior
(#1421). A --continue-on-collection-errors option has been added to restore
the previous behaviour. Thanks olegpidsadnyi and omarkohl for the complete PR
(#1628).
Renamed the pytest pdb module (plugin) into debugging to avoid
clashes with the builtin pdb module.
Raise a helpful failure message when requesting a parametrized
fixture at runtime, e.g. with request.getfixturevalue. Previously
these parameters were simply never defined, so a fixture decorated
like @pytest.fixture(params=[0, 1, 2]) only ran once
(#460). Thanks to nikratio for the bug report, RedBeardCode and tomviner for the PR.
_pytest.monkeypatch.monkeypatch class has been renamed to _pytest.monkeypatch.MonkeyPatch so it doesn't conflict with the monkeypatch fixture.
--exitfirst / -x can now be overridden by a following --maxfail=N and is just a synonym for --maxfail=1.
New Features
Support nose-style __test__ attribute on methods of classes,
including unittest-style Classes. If set to False, the test will
not be collected.
New doctest_namespace fixture for injecting names into the
namespace in which doctests run. Thanks milliams for the complete PR
(#1428).
New --doctest-report option available to change the output format
of diffs when running (failing) doctests (implements #1749). Thanks hartym for the PR.
New name argument to pytest.fixture decorator which allows a
custom name for a fixture (to solve the funcarg-shadowing-fixture
problem). Thanks novas0x2a for the
complete PR
(#1444).
New approx() function for easily comparing floating-point numbers
in tests. Thanks kalekundert for
the complete PR
(#1441).
Ability to add global properties in the final xunit output file by
accessing the internal junitxml plugin (experimental). Thanks tareqalayan for the complete PR #1454).
New ExceptionInfo.match() method to match a regular expression on
the string representation of an exception
(#372). Thanks omarkohl for the complete PR
(#1502).
__tracebackhide__ can now also be set to a callable which then can
decide whether to filter the traceback based on the ExceptionInfo
object passed to it. Thanks The-Compiler for the complete PR
(#1526).
New pytest_make_parametrize_id(config, val) hook which can be used
by plugins to provide friendly strings for custom types. Thanks palaviv for the PR.
capsys and capfd now have a disabled() context-manager method,
which can be used to temporarily disable capture within a test.
Thanks nicoddemus for the PR.
New cli flag --fixtures-per-test: shows which fixtures are being
used for each selected test item. Features doc strings of fixtures
by default. Can also show where fixtures are defined if combined
with -v. Thanks hackebrot for the
PR.
Introduce pytest command as recommended entry point. Note that py.test still works and is not scheduled for removal. Closes
proposal #1629.
Thanks obestwalter and davehunt for the complete PR
(#1633).
New cli flags:
--setup-plan: performs normal collection and reports the
potential setup and teardown and does not execute any fixtures
and tests;
--setup-only: performs normal collection, executes setup and
teardown of fixtures and reports them;
--setup-show: performs normal test execution and additionally
shows setup and teardown of fixtures;
--keep-duplicates: py.test now ignores duplicated paths given
in the command line. To retain the previous behavior where the
same test could be run multiple times by specifying it in the
command-line multiple times, pass the --keep-duplicates
argument
(#1609);
Issue warnings for asserts whose test is a tuple literal. Such
asserts will never fail because tuples are always truthy and are
usually a mistake (see #1562). Thanks kvas-it, for the PR.
Allow passing a custom debugger class (e.g. --pdbcls=IPython.core.debugger:Pdb). Thanks to anntzer for the PR.
Changes
Plugins now benefit from assertion rewriting. Thanks sober7, nicoddemus and flub for the PR.
Change report.outcome for xpassed tests to "passed" in
non-strict mode and "failed" in strict mode. Thanks to hackebrot for the PR
(#1795) and gprasad84 for report
(#1546).
Tests marked with xfail(strict=False) (the default) now appear in
JUnitXML reports as passing tests instead of skipped. Thanks to hackebrot for the PR
(#1795).
Highlight path of the file location in the error report to make it
easier to copy/paste. Thanks suzaku
for the PR
(#1778).
Fixtures marked with @pytest.fixture can now use yield
statements exactly like those marked with the @pytest.yield_fixture decorator. This change renders @pytest.yield_fixture deprecated and makes @pytest.fixture with yield statements the preferred way to write teardown code
(#1461). Thanks csaftoiu for bringing this to
attention and nicoddemus for the
PR.
Explicitly passed parametrize ids do not get escaped to ascii
(#1351). Thanks ceridwen for the PR.
Fixtures are now sorted in the error message displayed when an
unknown fixture is declared in a test function. Thanks nicoddemus for the PR.
pytest_terminal_summary hook now receives the exitstatus of the
test session as argument. Thanks blueyed for the PR
(#1809).
Parametrize ids can accept None as specific test id, in which case
the automatically generated id for that argument will be used.
Thanks palaviv for the complete PR
(#1468).
The parameter to xunit-style setup/teardown methods (setup_method, setup_module, etc.) is now optional and may be omitted. Thanks okken for bringing this to attention
and nicoddemus for the PR.
Improved automatic id generation selection in case of duplicate ids
in parametrize. Thanks palaviv for
the complete PR
(#1474).
Now pytest warnings summary is shown up by default. Added a new flag --disable-pytest-warnings to explicitly disable the warnings
summary
(#1668).
Make ImportError during collection more explicit by reminding the
user to check the name of the test module/package(s)
(#1426). Thanks omarkohl for the complete PR
(#1520).
Add build/ and dist/ to the default --norecursedirs list.
Thanks mikofski for the report and tomviner for the PR
(#1544).
pytest.raises in the context manager form accepts a custom message to raise when no exception occurred. Thanks palaviv for the complete PR
(#1616).
conftest.py files now benefit from assertion rewriting; previously
it was only available for test modules. Thanks flub, sober7 and nicoddemus for the PR
(#1619).
Text documents without any doctests no longer appear as "skipped".
Thanks graingert for reporting and
providing a full PR
(#1580).
Ensure that a module within a namespace package can be found when it
is specified on the command line together with the --pyargs
option. Thanks to taschini for the
PR (#1597).
Always include full assertion explanation during assertion
rewriting. The previous behaviour was hiding sub-expressions that
happened to be False, assuming this was redundant information.
Thanks bagerard for reporting
(#1503). Thanks
to davehunt and tomviner for the PR.
OptionGroup.addoption() now checks if option names were already
added before, to make it easier to track down issues like #1618. Before,
you only got exceptions later from argparse library, giving no
clue about the actual reason for double-added options.
yield-based tests are considered deprecated and will be removed in
pytest-4.0. Thanks nicoddemus for
the PR.
[pytest] sections in setup.cfg files should now be named [tool:pytest] to avoid conflicts with other distutils commands
(see #567). [pytest] sections in pytest.ini or tox.ini files are supported
and unchanged. Thanks nicoddemus
for the PR.
Using pytest_funcarg__ prefix to declare fixtures is considered
deprecated and will be removed in pytest-4.0
(#1684). Thanks nicoddemus for the PR.
Passing a command-line string to pytest.main() is considered
deprecated and scheduled for removal in pytest-4.0. It is
recommended to pass a list of arguments instead
(#1723).
Rename getfuncargvalue to getfixturevalue. getfuncargvalue is
still present but is now considered deprecated. Thanks to RedBeardCode and tomviner for the PR
(#1626).
optparse type usage now triggers DeprecationWarnings
(#1740).
Refined logic for determining the rootdir, considering only valid
paths which fixes a number of issues: #1594, #1435 and #1471. Updated
the documentation according to current behavior. Thanks to blueyed, davehunt and matthiasha for the PR.
Always include full assertion explanation. The previous behaviour
was hiding sub-expressions that happened to be False, assuming this
was redundant information. Thanks bagerard for reporting
(#1503). Thanks
to davehunt and tomviner for PR.
Better message in case of not using parametrized variable (see #1539). Thanks
to tramwaj29 for the PR.
Updated docstrings with a more uniform style.
Add stderr write for pytest.exit(msg) during startup. Previously
the message was never shown. Thanks BeyondEvil for reporting #1210. Thanks
to JonathonSonesen and tomviner for the PR.
No longer display the incorrect test deselection reason
(#1372). Thanks ronnypfannschmidt for the
PR.
The --resultlog command line option has been deprecated: it is
little used and there are more modern and better alternatives (see #830). Thanks nicoddemus for the PR.
Improve error message with fixture lookup errors: add an 'E' to the
first line and '>' to the rest. Fixes #717. Thanks blueyed for reporting and a PR, eolo999 for the initial PR and tomviner for his guidance during
EuroPython2016 sprint.
Bug Fixes
Parametrize now correctly handles duplicated test ids.
Fix internal error issue when the method argument is missing for teardown_method()
(#1605).
Fix exception visualization in case the current working directory
(CWD) gets deleted during testing
(#1235). Thanks bukzor for reporting. PR by marscher.
Improve test output for logical expression with brackets
(#925). Thanks DRMacIver for reporting and RedBeardCode for the PR.
There are new versions of pytest available from pypi.
3.0.0
Incompatible changes
A number of incompatible changes were made in this release, with the
intent of removing features deprecated for a long time or change
existing behaviors in order to make them less surprising/more useful.
Reinterpretation mode has now been removed. Only plain and rewrite
mode are available, consequently the
--assert=reinterp
option isno longer available. This also means files imported from plugins or
conftest.py
will not benefit from improved assertions by default,you should use
pytest.register_assert_rewrite()
to explicitly turnon assertion rewriting for those files. Thanks
flub for the PR.
The following deprecated commandline options were removed:
--genscript
: no longer supported;--no-assert
: use--assert=plain
instead;--nomagic
: use--assert=plain
instead;--report
: use-r
instead;Thanks to RedBeardCode for the
PR (#1664).
ImportErrors in plugins now are a fatal error instead of issuing a
pytest warning
(#1479). Thanks
to The-Compiler for the PR.
Removed support code for Python 3 versions < 3.3
(#1627).
Removed all
py.test-X*
entry points. The versioned, suffixed entrypoints were never documented and a leftover from a pre-virtualenv
era. These entry points also created broken entry points in wheels,
so removing them also removes a source of confusion for users
(#1632). Thanks
obestwalter for the PR.
pytest.skip()
now raises an error when used to decorate a testfunction, as opposed to its original intent (to imperatively skip a
test inside a test function). Previously this usage would cause the
entire module to be skipped
(#607). Thanks
omarkohl for the complete PR
(#1519).
Exit tests if a collection error occurs. A poll indicated most users
will hit CTRL-C anyway as soon as they see collection errors, so
pytest might as well make that the default behavior
(#1421). A
--continue-on-collection-errors
option has been added to restorethe previous behaviour. Thanks
olegpidsadnyi and
omarkohl for the complete PR
(#1628).
Renamed the pytest
pdb
module (plugin) intodebugging
to avoidclashes with the builtin
pdb
module.Raise a helpful failure message when requesting a parametrized
fixture at runtime, e.g. with
request.getfixturevalue
. Previouslythese parameters were simply never defined, so a fixture decorated
like
@pytest.fixture(params=[0, 1, 2])
only ran once(#460). Thanks to
nikratio for the bug report,
RedBeardCode and
tomviner for the PR.
_pytest.monkeypatch.monkeypatch
class has been renamed to_pytest.monkeypatch.MonkeyPatch
so it doesn't conflict with themonkeypatch
fixture.--exitfirst / -x
can now be overridden by a following--maxfail=N
and is just a synonym for--maxfail=1
.New Features
Support nose-style
__test__
attribute on methods of classes,including unittest-style Classes. If set to
False
, the test willnot be collected.
New
doctest_namespace
fixture for injecting names into thenamespace in which doctests run. Thanks
milliams for the complete PR
(#1428).
New
--doctest-report
option available to change the output formatof diffs when running (failing) doctests (implements
#1749). Thanks
hartym for the PR.
New
name
argument topytest.fixture
decorator which allows acustom name for a fixture (to solve the funcarg-shadowing-fixture
problem). Thanks novas0x2a for the
complete PR
(#1444).
New
approx()
function for easily comparing floating-point numbersin tests. Thanks kalekundert for
the complete PR
(#1441).
Ability to add global properties in the final xunit output file by
accessing the internal
junitxml
plugin (experimental). Thankstareqalayan for the complete PR
#1454).
New
ExceptionInfo.match()
method to match a regular expression onthe string representation of an exception
(#372). Thanks
omarkohl for the complete PR
(#1502).
__tracebackhide__
can now also be set to a callable which then candecide whether to filter the traceback based on the
ExceptionInfo
object passed to it. Thanks
The-Compiler for the complete PR
(#1526).
New
pytest_make_parametrize_id(config, val)
hook which can be usedby plugins to provide friendly strings for custom types. Thanks
palaviv for the PR.
capsys
andcapfd
now have adisabled()
context-manager method,which can be used to temporarily disable capture within a test.
Thanks nicoddemus for the PR.
New cli flag
--fixtures-per-test
: shows which fixtures are beingused for each selected test item. Features doc strings of fixtures
by default. Can also show where fixtures are defined if combined
with
-v
. Thanks hackebrot for thePR.
Introduce
pytest
command as recommended entry point. Note thatpy.test
still works and is not scheduled for removal. Closesproposal #1629.
Thanks obestwalter and
davehunt for the complete PR
(#1633).
New cli flags:
--setup-plan
: performs normal collection and reports thepotential setup and teardown and does not execute any fixtures
and tests;
--setup-only
: performs normal collection, executes setup andteardown of fixtures and reports them;
--setup-show
: performs normal test execution and additionallyshows setup and teardown of fixtures;
--keep-duplicates
: py.test now ignores duplicated paths givenin the command line. To retain the previous behavior where the
same test could be run multiple times by specifying it in the
command-line multiple times, pass the
--keep-duplicates
argument
(#1609);
Thanks d6e,
kvas-it,
sallner,
ioggstream and
omarkohl for the PRs.
New CLI flag
--override-ini
/-o
: overrides values from the inifile. For example:
"-o xfail_strict=True"
'. Thanksblueyed and
fengxx for the PR.
New hooks:
pytest_fixture_setup(fixturedef, request)
: executes fixturesetup;
pytest_fixture_post_finalizer(fixturedef)
: called after thefixture's finalizer and has access to the fixture's result
cache.
Thanks d6e,
sallner.
Issue warnings for asserts whose test is a tuple literal. Such
asserts will never fail because tuples are always truthy and are
usually a mistake (see
#1562). Thanks
kvas-it, for the PR.
Allow passing a custom debugger class (e.g.
--pdbcls=IPython.core.debugger:Pdb
). Thanks toanntzer for the PR.
Changes
sober7,
nicoddemus and
flub for the PR.
report.outcome
forxpassed
tests to"passed"
innon-strict mode and
"failed"
in strict mode. Thanks tohackebrot for the PR
(#1795) and
gprasad84 for report
(#1546).
xfail(strict=False)
(the default) now appear inJUnitXML reports as passing tests instead of skipped. Thanks to
hackebrot for the PR
(#1795).
easier to copy/paste. Thanks suzaku
for the PR
(#1778).
@pytest.fixture
can now useyield
statements exactly like those marked with the
@pytest.yield_fixture
decorator. This change renders@pytest.yield_fixture
deprecated and makes@pytest.fixture
withyield
statements the preferred way to write teardown code(#1461). Thanks
csaftoiu for bringing this to
attention and nicoddemus for the
PR.
(#1351). Thanks
ceridwen for the PR.
unknown fixture is declared in a test function. Thanks
nicoddemus for the PR.
pytest_terminal_summary
hook now receives theexitstatus
of thetest session as argument. Thanks
blueyed for the PR
(#1809).
None
as specific test id, in which casethe automatically generated id for that argument will be used.
Thanks palaviv for the complete PR
(#1468).
setup_method
,setup_module
, etc.) is now optional and may be omitted. Thanksokken for bringing this to attention
and nicoddemus for the PR.
in parametrize. Thanks palaviv for
the complete PR
(#1474).
--disable-pytest-warnings
to explicitly disable the warningssummary
(#1668).
user to check the name of the test module/package(s)
(#1426). Thanks
omarkohl for the complete PR
(#1520).
build/
anddist/
to the default--norecursedirs
list.Thanks mikofski for the report and
tomviner for the PR
(#1544).
pytest.raises
in the context manager form accepts a custommessage
to raise when no exception occurred. Thankspalaviv for the complete PR
(#1616).
conftest.py
files now benefit from assertion rewriting; previouslyit was only available for test modules. Thanks
flub,
sober7 and
nicoddemus for the PR
(#1619).
Thanks graingert for reporting and
providing a full PR
(#1580).
is specified on the command line together with the
--pyargs
option. Thanks to taschini for the
PR (#1597).
rewriting. The previous behaviour was hiding sub-expressions that
happened to be
False
, assuming this was redundant information.Thanks bagerard for reporting
(#1503). Thanks
to davehunt and
tomviner for the PR.
OptionGroup.addoption()
now checks if option names were alreadyadded before, to make it easier to track down issues like
#1618. Before,
you only got exceptions later from
argparse
library, giving noclue about the actual reason for double-added options.
yield
-based tests are considered deprecated and will be removed inpytest-4.0. Thanks nicoddemus for
the PR.
[pytest]
sections insetup.cfg
files should now be named[tool:pytest]
to avoid conflicts with other distutils commands(see #567).
[pytest]
sections inpytest.ini
ortox.ini
files are supportedand unchanged. Thanks nicoddemus
for the PR.
pytest_funcarg__
prefix to declare fixtures is considereddeprecated and will be removed in pytest-4.0
(#1684). Thanks
nicoddemus for the PR.
pytest.main()
is considereddeprecated and scheduled for removal in pytest-4.0. It is
recommended to pass a list of arguments instead
(#1723).
getfuncargvalue
togetfixturevalue
.getfuncargvalue
isstill present but is now considered deprecated. Thanks to
RedBeardCode and
tomviner for the PR
(#1626).
optparse
type usage now triggers DeprecationWarnings(#1740).
optparse
backward compatibility supports float/complex types(#457).
rootdir
, considering only validpaths which fixes a number of issues:
#1594,
#1435 and
#1471. Updated
the documentation according to current behavior. Thanks to
blueyed,
davehunt and
matthiasha for the PR.
was hiding sub-expressions that happened to be False, assuming this
was redundant information. Thanks
bagerard for reporting
(#1503). Thanks
to davehunt and
tomviner for PR.
#1539). Thanks
to tramwaj29 for the PR.
pytest.exit(msg)
during startup. Previouslythe message was never shown. Thanks
BeyondEvil for reporting
#1210. Thanks
to JonathonSonesen and
tomviner for the PR.
(#1372). Thanks
ronnypfannschmidt for the
PR.
--resultlog
command line option has been deprecated: it islittle used and there are more modern and better alternatives (see
#830). Thanks
nicoddemus for the PR.
first line and '>' to the rest. Fixes
#717. Thanks
blueyed for reporting and a PR,
eolo999 for the initial PR and
tomviner for his guidance during
EuroPython2016 sprint.
Bug Fixes
method
argument is missing forteardown_method()
(#1605).
(CWD) gets deleted during testing
(#1235). Thanks
bukzor for reporting. PR by
marscher.
(#925). Thanks
DRMacIver for reporting and
RedBeardCode for the PR.
(#1553). Thanks
Vogtinator for reporting and
RedBeardCode and
tomviner for the PR.
ConftestImportFailure
now shows the traceback making it easier toidentify bugs in
conftest.py
files(#1516). Thanks
txomon for the PR.
Thanks graingert for reporting and
providing a full PR
(#1580).
__new__
method. Fixes#1579. Thanks
to Stranger6667 for the PR.
(#634). Thanks
to Stranger6667 for the PR.
(#1798). Thanks
to cryporchild for the PR.
request.node.warn
. Thanksto blueyed for the PR.
The text was updated successfully, but these errors were encountered: