Merge pull request #10412 from pytest-dev/release-7.2.0 (#10419)

Prepare release 7.2.0

(cherry picked from commit ac4e3cced9fb1df60df271cce308f07713764857)
This commit is contained in:
Ronny Pfannschmidt 2022-10-25 13:12:55 +02:00 committed by GitHub
parent c1d2168df6
commit 5a040aef97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 302 additions and 122 deletions

View File

@ -1 +0,0 @@
Update :class:`pytest.PytestUnhandledCoroutineWarning` to a deprecation; it will raise an error in pytest 8.

View File

@ -1 +0,0 @@
:data:`sys.stdin` now contains all expected methods of a file-like object when capture is enabled.

View File

@ -1 +0,0 @@
:class:`~pytest.PytestReturnNotNoneWarning` is now a subclass of :class:`~pytest.PytestRemovedIn8Warning`: the plan is to make returning non-``None`` from tests an error in the future.

View File

@ -1,5 +0,0 @@
``@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).

View File

@ -1,3 +0,0 @@
Made ``_pytest.doctest.DoctestItem`` export ``pytest.DoctestItem`` for
type check and runtime purposes. Made `_pytest.doctest` use internal APIs
to avoid circular imports.

View File

@ -1 +0,0 @@
Update information on writing plugins to use ``pyproject.toml`` instead of ``setup.py``.

View File

@ -1 +0,0 @@
The ``--no-showlocals`` flag has been added. This can be passed directly to tests to override ``--showlocals`` declared through ``addopts``.

View File

@ -1 +0,0 @@
Do not break into pdb when ``raise unittest.SkipTest()`` appears top-level in a file.

View File

@ -1 +0,0 @@
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.

View File

@ -1 +0,0 @@
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.

View File

@ -1,4 +0,0 @@
Deprecate configuring hook specs/impls using attributes/marks.
Instead use :py:func:`pytest.hookimpl` and :py:func:`pytest.hookspec`.
For more details, see the :ref:`docs <legacy-path-hooks-deprecated>`.

View File

@ -1 +0,0 @@
A 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`.

View File

@ -1,5 +0,0 @@
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 :func:`pytest.Node.iter_markers` instead.

View File

@ -1,2 +0,0 @@
Introduce multiline display for warning matching via :py:func:`pytest.warns` and
enhance match comparison for :py:func:`_pytest._code.ExceptionInfo.match` as returned by :py:func:`pytest.raises`.

View File

@ -1,2 +0,0 @@
Improve :py:func:`pytest.raises`. Previously passing an empty tuple would give a confusing
error. We now raise immediately with a more helpful message.

View File

@ -1 +0,0 @@
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``.

View File

@ -1 +0,0 @@
The documentation is now built using Sphinx 5.x (up from 3.x previously).

View File

@ -1 +0,0 @@
Update documentation on how :func:`pytest.warns` affects :class:`DeprecationWarning`.

View File

@ -1,3 +0,0 @@
On Python 3.11, use the standard library's :mod:`tomllib` to parse TOML.
:mod:`tomli`` is no longer a dependency on Python 3.11.

View File

@ -1 +0,0 @@
Display assertion message without escaped newline characters with ``-vv``.

View File

@ -1 +0,0 @@
Improved error message that is shown when no collector is found for a given file.

View File

@ -1 +0,0 @@
Some coloring has been added to the short test summary.

View File

@ -1 +0,0 @@
Ensure ``caplog.get_records(when)`` returns current/correct data after invoking ``caplog.clear()``.

View File

@ -1 +0,0 @@
Normalize the help description of all command-line options.

View File

@ -1,10 +0,0 @@
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 <with-setup-nose>`_ decorator.
For more details, consult the :ref:`deprecation docs <nose-deprecation>`.
.. _`with-setup-nose`: https://nose.readthedocs.io/en/latest/testing_tools.html?highlight=with_setup#nose.tools.with_setup

View File

@ -1 +0,0 @@
Added shell-style wildcard support to ``testpaths``.

View File

@ -1 +0,0 @@
Made ``_pytest.compat`` re-export ``importlib_metadata`` in the eyes of type checkers.

View File

@ -1 +0,0 @@
Fix default encoding warning (``EncodingWarning``) in ``cacheprovider``

View File

@ -1 +0,0 @@
Display full crash messages in ``short test summary info``, when runng in a CI environment.

View File

@ -1,4 +0,0 @@
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.

View File

@ -1 +0,0 @@
Added support for hidden configuration file by allowing ``.pytest.ini`` as an alternative to ``pytest.ini``.

View File

@ -6,6 +6,7 @@ Release announcements
:maxdepth: 2 :maxdepth: 2
release-7.2.0
release-7.1.3 release-7.1.3
release-7.1.2 release-7.1.2
release-7.1.1 release-7.1.1

View File

@ -0,0 +1,93 @@
pytest-7.2.0
=======================================
The pytest team is proud to announce the 7.2.0 release!
This release contains new features, improvements, and bug fixes,
the full list of changes is available in the changelog:
https://docs.pytest.org/en/stable/changelog.html
For complete documentation, please visit:
https://docs.pytest.org/en/stable/
As usual, you can upgrade from PyPI via:
pip install -U pytest
Thanks to all of the contributors to this release:
* Aaron Berdy
* Adam Turner
* Albert Villanova del Moral
* Alice Purcell
* Anthony Sottile
* Anton Yakutovich
* Babak Keyvani
* Brandon Chinn
* Bruno Oliveira
* Chanvin Xiao
* Cheuk Ting Ho
* Chris Wheeler
* EmptyRabbit
* Ezio Melotti
* Florian Best
* Florian Bruhin
* Fredrik Berndtsson
* Gabriel Landau
* Gergely Kalmár
* Hugo van Kemenade
* James Gerity
* John Litborn
* Jon Parise
* Kevin C
* Kian Eliasi
* MatthewFlamm
* Miro Hrončok
* Nate Meyvis
* Neil Girdhar
* Nhieuvu1802
* Nipunn Koorapati
* Ofek Lev
* Paul Müller
* Paul Reece
* Pax
* Pete Baughman
* Peyman Salehi
* Philipp A
* Ran Benita
* Robert O'Shea
* Ronny Pfannschmidt
* Rowin
* Ruth Comer
* Samuel Colvin
* Samuel Gaist
* Sandro Tosi
* Shantanu
* Simon K
* Stephen Rosen
* Sviatoslav Sydorenko
* Tatiana Ovary
* Thierry Moisan
* Thomas Grainger
* Tim Hoffmann
* Tobias Diez
* Tony Narlock
* Vivaan Verma
* Wolfremium
* Zac Hatfield-Dodds
* Zach OBrien
* aizpurua23a
* gresm
* holesch
* itxasos23
* johnkangw
* skhomuti
* sommersoft
* wodny
* zx.qiu
Happy testing,
The pytest Development Team

View File

@ -33,7 +33,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
Values can be any object handled by the json stdlib module. Values can be any object handled by the json stdlib module.
capsys -- .../_pytest/capture.py:878 capsys -- .../_pytest/capture.py:905
Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``. Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``.
The captured output is made available via ``capsys.readouterr()`` method The captured output is made available via ``capsys.readouterr()`` method
@ -51,7 +51,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capsys.readouterr() captured = capsys.readouterr()
assert captured.out == "hello\n" assert captured.out == "hello\n"
capsysbinary -- .../_pytest/capture.py:906 capsysbinary -- .../_pytest/capture.py:933
Enable bytes capturing of writes to ``sys.stdout`` and ``sys.stderr``. Enable bytes capturing of writes to ``sys.stdout`` and ``sys.stderr``.
The captured output is made available via ``capsysbinary.readouterr()`` The captured output is made available via ``capsysbinary.readouterr()``
@ -69,7 +69,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capsysbinary.readouterr() captured = capsysbinary.readouterr()
assert captured.out == b"hello\n" assert captured.out == b"hello\n"
capfd -- .../_pytest/capture.py:934 capfd -- .../_pytest/capture.py:961
Enable text capturing of writes to file descriptors ``1`` and ``2``. Enable text capturing of writes to file descriptors ``1`` and ``2``.
The captured output is made available via ``capfd.readouterr()`` method The captured output is made available via ``capfd.readouterr()`` method
@ -87,7 +87,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capfd.readouterr() captured = capfd.readouterr()
assert captured.out == "hello\n" assert captured.out == "hello\n"
capfdbinary -- .../_pytest/capture.py:962 capfdbinary -- .../_pytest/capture.py:989
Enable bytes capturing of writes to file descriptors ``1`` and ``2``. Enable bytes capturing of writes to file descriptors ``1`` and ``2``.
The captured output is made available via ``capfd.readouterr()`` method The captured output is made available via ``capfd.readouterr()`` method
@ -105,7 +105,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capfdbinary.readouterr() captured = capfdbinary.readouterr()
assert captured.out == b"hello\n" assert captured.out == b"hello\n"
doctest_namespace [session scope] -- .../_pytest/doctest.py:735 doctest_namespace [session scope] -- .../_pytest/doctest.py:738
Fixture that returns a :py:class:`dict` that will be injected into the Fixture that returns a :py:class:`dict` that will be injected into the
namespace of doctests. namespace of doctests.
@ -119,7 +119,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
For more details: :ref:`doctest_namespace`. For more details: :ref:`doctest_namespace`.
pytestconfig [session scope] -- .../_pytest/fixtures.py:1344 pytestconfig [session scope] -- .../_pytest/fixtures.py:1351
Session-scoped fixture that returns the session's :class:`pytest.Config` Session-scoped fixture that returns the session's :class:`pytest.Config`
object. object.
@ -163,7 +163,10 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
record_testsuite_property("ARCH", "PPC") record_testsuite_property("ARCH", "PPC")
record_testsuite_property("STORAGE_TYPE", "CEPH") record_testsuite_property("STORAGE_TYPE", "CEPH")
``name`` must be a string, ``value`` will be converted to a string and properly xml-escaped. :param name:
The property name.
:param value:
The property value. Will be converted to a string.
.. warning:: .. warning::
@ -193,7 +196,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
.. _legacy_path: https://py.readthedocs.io/en/latest/path.html .. _legacy_path: https://py.readthedocs.io/en/latest/path.html
caplog -- .../_pytest/logging.py:487 caplog -- .../_pytest/logging.py:491
Access and control log capturing. Access and control log capturing.
Captured logs are available through the following properties/methods:: Captured logs are available through the following properties/methods::
@ -228,16 +231,16 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
To undo modifications done by the fixture in a contained scope, To undo modifications done by the fixture in a contained scope,
use :meth:`context() <pytest.MonkeyPatch.context>`. use :meth:`context() <pytest.MonkeyPatch.context>`.
recwarn -- .../_pytest/recwarn.py:29 recwarn -- .../_pytest/recwarn.py:30
Return a :class:`WarningsRecorder` instance that records all warnings emitted by test functions. Return a :class:`WarningsRecorder` instance that records all warnings emitted by test functions.
See https://docs.python.org/library/how-to/capture-warnings.html for information See https://docs.pytest.org/en/latest/how-to/capture-warnings.html for information
on warning categories. on warning categories.
tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:184 tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:188
Return a :class:`pytest.TempPathFactory` instance for the test session. Return a :class:`pytest.TempPathFactory` instance for the test session.
tmp_path -- .../_pytest/tmpdir.py:199 tmp_path -- .../_pytest/tmpdir.py:203
Return a temporary directory path object which is unique to each test Return a temporary directory path object which is unique to each test
function invocation, created as a sub directory of the base temporary function invocation, created as a sub directory of the base temporary
directory. directory.

View File

@ -28,6 +28,154 @@ with advance notice in the **Deprecations** section of releases.
.. towncrier release notes start .. towncrier release notes start
pytest 7.2.0 (2022-10-23)
=========================
Deprecations
------------
- `#10012 <https://github.com/pytest-dev/pytest/issues/10012>`_: Update :class:`pytest.PytestUnhandledCoroutineWarning` to a deprecation; it will raise an error in pytest 8.
- `#10396 <https://github.com/pytest-dev/pytest/issues/10396>`_: 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.
- `#4562 <https://github.com/pytest-dev/pytest/issues/4562>`_: Deprecate configuring hook specs/impls using attributes/marks.
Instead use :py:func:`pytest.hookimpl` and :py:func:`pytest.hookspec`.
For more details, see the :ref:`docs <legacy-path-hooks-deprecated>`.
- `#9886 <https://github.com/pytest-dev/pytest/issues/9886>`_: 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 <with-setup-nose>`_ decorator.
For more details, consult the :ref:`deprecation docs <nose-deprecation>`.
.. _`with-setup-nose`: https://nose.readthedocs.io/en/latest/testing_tools.html?highlight=with_setup#nose.tools.with_setup
Features
--------
- `#9897 <https://github.com/pytest-dev/pytest/issues/9897>`_: Added shell-style wildcard support to ``testpaths``.
Improvements
------------
- `#10218 <https://github.com/pytest-dev/pytest/issues/10218>`_: ``@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).
- `#10381 <https://github.com/pytest-dev/pytest/issues/10381>`_: The ``--no-showlocals`` flag has been added. This can be passed directly to tests to override ``--showlocals`` declared through ``addopts``.
- `#3426 <https://github.com/pytest-dev/pytest/issues/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 <https://github.com/pytest-dev/pytest/issues/7337>`_: A 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`.
- `#8508 <https://github.com/pytest-dev/pytest/issues/8508>`_: Introduce multiline display for warning matching via :py:func:`pytest.warns` and
enhance match comparison for :py:func:`_pytest._code.ExceptionInfo.match` as returned by :py:func:`pytest.raises`.
- `#8646 <https://github.com/pytest-dev/pytest/issues/8646>`_: Improve :py:func:`pytest.raises`. Previously passing an empty tuple would give a confusing
error. We now raise immediately with a more helpful message.
- `#9741 <https://github.com/pytest-dev/pytest/issues/9741>`_: On Python 3.11, use the standard library's :mod:`tomllib` to parse TOML.
:mod:`tomli`` is no longer a dependency on Python 3.11.
- `#9742 <https://github.com/pytest-dev/pytest/issues/9742>`_: Display assertion message without escaped newline characters with ``-vv``.
- `#9823 <https://github.com/pytest-dev/pytest/issues/9823>`_: Improved error message that is shown when no collector is found for a given file.
- `#9873 <https://github.com/pytest-dev/pytest/issues/9873>`_: Some coloring has been added to the short test summary.
- `#9883 <https://github.com/pytest-dev/pytest/issues/9883>`_: Normalize the help description of all command-line options.
- `#9920 <https://github.com/pytest-dev/pytest/issues/9920>`_: Display full crash messages in ``short test summary info``, when runng in a CI environment.
- `#9987 <https://github.com/pytest-dev/pytest/issues/9987>`_: Added support for hidden configuration file by allowing ``.pytest.ini`` as an alternative to ``pytest.ini``.
Bug Fixes
---------
- `#10150 <https://github.com/pytest-dev/pytest/issues/10150>`_: :data:`sys.stdin` now contains all expected methods of a file-like object when capture is enabled.
- `#10382 <https://github.com/pytest-dev/pytest/issues/10382>`_: Do not break into pdb when ``raise unittest.SkipTest()`` appears top-level in a file.
- `#7792 <https://github.com/pytest-dev/pytest/issues/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` 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 :func:`pytest.Node.iter_markers` instead.
- `#9159 <https://github.com/pytest-dev/pytest/issues/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 in ``ExceptionGroups``.
- `#9877 <https://github.com/pytest-dev/pytest/issues/9877>`_: Ensure ``caplog.get_records(when)`` returns current/correct data after invoking ``caplog.clear()``.
Improved Documentation
----------------------
- `#10344 <https://github.com/pytest-dev/pytest/issues/10344>`_: Update information on writing plugins to use ``pyproject.toml`` instead of ``setup.py``.
- `#9248 <https://github.com/pytest-dev/pytest/issues/9248>`_: The documentation is now built using Sphinx 5.x (up from 3.x previously).
- `#9291 <https://github.com/pytest-dev/pytest/issues/9291>`_: Update documentation on how :func:`pytest.warns` affects :class:`DeprecationWarning`.
Trivial/Internal Changes
------------------------
- `#10196 <https://github.com/pytest-dev/pytest/issues/10196>`_: :class:`~pytest.PytestReturnNotNoneWarning` is now a subclass of :class:`~pytest.PytestRemovedIn8Warning`: the plan is to make returning non-``None`` from tests an error in the future.
- `#10313 <https://github.com/pytest-dev/pytest/issues/10313>`_: Made ``_pytest.doctest.DoctestItem`` export ``pytest.DoctestItem`` for
type check and runtime purposes. Made `_pytest.doctest` use internal APIs
to avoid circular imports.
- `#9906 <https://github.com/pytest-dev/pytest/issues/9906>`_: Made ``_pytest.compat`` re-export ``importlib_metadata`` in the eyes of type checkers.
- `#9910 <https://github.com/pytest-dev/pytest/issues/9910>`_: Fix default encoding warning (``EncodingWarning``) in ``cacheprovider``
- `#9984 <https://github.com/pytest-dev/pytest/issues/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.
pytest 7.1.3 (2022-08-31) pytest 7.1.3 (2022-08-31)
========================= =========================

View File

@ -246,9 +246,9 @@ You can ask which markers exist for your test suite - the list includes our just
@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures @pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures
@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. @pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. DEPRECATED, use @pytest.hookimpl(tryfirst=True) instead.
@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. @pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. DEPRECATED, use @pytest.hookimpl(trylast=True) instead.
For an example on how to add and work with markers from a plugin, see For an example on how to add and work with markers from a plugin, see
@ -438,9 +438,9 @@ The ``--markers`` option always gives you a list of available markers:
@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures @pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures
@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. @pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. DEPRECATED, use @pytest.hookimpl(tryfirst=True) instead.
@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. @pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. DEPRECATED, use @pytest.hookimpl(trylast=True) instead.
.. _`passing callables to custom markers`: .. _`passing callables to custom markers`:
@ -611,7 +611,7 @@ then you will see two tests skipped and two executed tests as expected:
test_plat.py s.s. [100%] test_plat.py s.s. [100%]
========================= short test summary info ========================== ========================= short test summary info ==========================
SKIPPED [2] conftest.py:12: cannot run on platform linux SKIPPED [2] conftest.py:13: cannot run on platform linux
======================= 2 passed, 2 skipped in 0.12s ======================= ======================= 2 passed, 2 skipped in 0.12s =======================
Note that if you specify a platform via the marker-command line option like this: Note that if you specify a platform via the marker-command line option like this:

View File

@ -661,8 +661,7 @@ If we run this:
test_step.py:11: AssertionError test_step.py:11: AssertionError
========================= short test summary info ========================== ========================= short test summary info ==========================
XFAIL test_step.py::TestUserHandling::test_deletion XFAIL test_step.py::TestUserHandling::test_deletion - reason: previous test failed (test_modification)
reason: previous test failed (test_modification)
================== 1 failed, 2 passed, 1 xfailed in 0.12s ================== ================== 1 failed, 2 passed, 1 xfailed in 0.12s ==================
We'll see that ``test_deletion`` was not executed because ``test_modification`` We'll see that ``test_deletion`` was not executed because ``test_modification``

View File

@ -22,7 +22,7 @@ Install ``pytest``
.. code-block:: bash .. code-block:: bash
$ pytest --version $ pytest --version
pytest 7.1.3 pytest 7.2.0
.. _`simpletest`: .. _`simpletest`:

View File

@ -233,7 +233,7 @@ If you run this command for the first time, you can see the print statement:
> assert mydata == 23 > assert mydata == 23
E assert 42 == 23 E assert 42 == 23
test_caching.py:20: AssertionError test_caching.py:19: AssertionError
-------------------------- Captured stdout setup --------------------------- -------------------------- Captured stdout setup ---------------------------
running expensive computation... running expensive computation...
========================= short test summary info ========================== ========================= short test summary info ==========================
@ -256,7 +256,7 @@ the cache and nothing will be printed:
> assert mydata == 23 > assert mydata == 23
E assert 42 == 23 E assert 42 == 23
test_caching.py:20: AssertionError test_caching.py:19: AssertionError
========================= short test summary info ========================== ========================= short test summary info ==========================
FAILED test_caching.py::test_function - assert 42 == 23 FAILED test_caching.py::test_function - assert 42 == 23
1 failed in 0.12s 1 failed in 0.12s

View File

@ -349,8 +349,7 @@ Example:
test_example.py:14: AssertionError test_example.py:14: AssertionError
========================= short test summary info ========================== ========================= short test summary info ==========================
SKIPPED [1] test_example.py:22: skipping this test SKIPPED [1] test_example.py:22: skipping this test
XFAIL test_example.py::test_xfail XFAIL test_example.py::test_xfail - reason: xfailing this test
reason: xfailing this test
XPASS test_example.py::test_xpass always xfail XPASS test_example.py::test_xpass always xfail
ERROR test_example.py::test_error - assert 0 ERROR test_example.py::test_error - assert 0
FAILED test_example.py::test_fail - assert 0 FAILED test_example.py::test_fail - assert 0

View File

@ -157,7 +157,7 @@ the ``self.db`` values in the traceback:
E AssertionError: <conftest.db_class.<locals>.DummyDB object at 0xdeadbeef0001> E AssertionError: <conftest.db_class.<locals>.DummyDB object at 0xdeadbeef0001>
E assert 0 E assert 0
test_unittest_db.py:10: AssertionError test_unittest_db.py:11: AssertionError
___________________________ MyTest.test_method2 ____________________________ ___________________________ MyTest.test_method2 ____________________________
self = <test_unittest_db.MyTest testMethod=test_method2> self = <test_unittest_db.MyTest testMethod=test_method2>
@ -167,7 +167,7 @@ the ``self.db`` values in the traceback:
E AssertionError: <conftest.db_class.<locals>.DummyDB object at 0xdeadbeef0001> E AssertionError: <conftest.db_class.<locals>.DummyDB object at 0xdeadbeef0001>
E assert 0 E assert 0
test_unittest_db.py:13: AssertionError test_unittest_db.py:14: AssertionError
========================= short test summary info ========================== ========================= short test summary info ==========================
FAILED test_unittest_db.py::MyTest::test_method1 - AssertionError: <conft... FAILED test_unittest_db.py::MyTest::test_method1 - AssertionError: <conft...
FAILED test_unittest_db.py::MyTest::test_method2 - AssertionError: <conft... FAILED test_unittest_db.py::MyTest::test_method2 - AssertionError: <conft...

View File

@ -1759,12 +1759,12 @@ All the command-line flags can be obtained by running ``pytest --help``::
$ pytest --help $ pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...] usage: pytest [options] [file_or_dir] [file_or_dir] [...]
Positional arguments: positional arguments:
file_or_dir file_or_dir
General: general:
-k EXPRESSION Only run tests which match the given substring -k EXPRESSION Only run tests which match the given substring
expression. An expression is a python evaluatable expression. An expression is a Python evaluatable
expression where all names are substring-matched expression where all names are substring-matched
against test names and their parent classes. against test names and their parent classes.
Example: -k 'test_method or test_other' matches all Example: -k 'test_method or test_other' matches all
@ -1778,9 +1778,9 @@ All the command-line flags can be obtained by running ``pytest --help``::
'extra_keyword_matches' set, as well as functions 'extra_keyword_matches' set, as well as functions
which have names assigned directly to them. The which have names assigned directly to them. The
matching is case-insensitive. matching is case-insensitive.
-m MARKEXPR Only run tests matching given mark expression. -m MARKEXPR Only run tests matching given mark expression. For
For example: -m 'mark1 and not mark2'. example: -m 'mark1 and not mark2'.
--markers Show markers (builtin, plugin and per-project ones) --markers show markers (builtin, plugin and per-project ones).
-x, --exitfirst Exit instantly on first error or failed test -x, --exitfirst Exit instantly on first error or failed test
--fixtures, --funcargs --fixtures, --funcargs
Show available fixtures, sorted by plugin appearance Show available fixtures, sorted by plugin appearance
@ -1790,18 +1790,18 @@ All the command-line flags can be obtained by running ``pytest --help``::
KeyboardInterrupt KeyboardInterrupt
--pdbcls=modulename:classname --pdbcls=modulename:classname
Specify a custom interactive Python debugger for use Specify a custom interactive Python debugger for use
with --pdb. For example: with --pdb.For example:
--pdbcls=IPython.terminal.debugger:TerminalPdb --pdbcls=IPython.terminal.debugger:TerminalPdb
--trace Immediately break when running each test --trace Immediately break when running each test
--capture=method Per-test capturing method: one of fd|sys|no|tee-sys. --capture=method Per-test capturing method: one of fd|sys|no|tee-sys
-s Shortcut for --capture=no. -s Shortcut for --capture=no
--runxfail Report the results of xfail tests as if they were --runxfail Report the results of xfail tests as if they were
not marked not marked
--lf, --last-failed Rerun only the tests that failed at the last run (or --lf, --last-failed Rerun only the tests that failed at the last run (or
all if none failed) all if none failed)
--ff, --failed-first Run all tests, but run the last failures first --ff, --failed-first Run all tests, but run the last failures first. This
This may re-order tests and thus lead to repeated may re-order tests and thus lead to repeated fixture
fixture setup/teardown setup/teardown.
--nf, --new-first Run tests from new files first, then the rest of the --nf, --new-first Run tests from new files first, then the rest of the
tests sorted by file mtime tests sorted by file mtime
--cache-show=[CACHESHOW] --cache-show=[CACHESHOW]
@ -1815,11 +1815,10 @@ All the command-line flags can be obtained by running ``pytest --help``::
test next time test next time
--sw-skip, --stepwise-skip --sw-skip, --stepwise-skip
Ignore the first failing test but stop on the next Ignore the first failing test but stop on the next
failing test. failing test. Implicitly enables --stepwise.
implicitly enables --stepwise.
Reporting: Reporting:
--durations=N show N slowest setup/test durations (N=0 for all) --durations=N Show N slowest setup/test durations (N=0 for all)
--durations-min=N Minimal duration in seconds for inclusion in slowest --durations-min=N Minimal duration in seconds for inclusion in slowest
list. Default: 0.005. list. Default: 0.005.
-v, --verbose Increase verbosity -v, --verbose Increase verbosity
@ -1836,8 +1835,10 @@ All the command-line flags can be obtained by running ``pytest --help``::
--disable-warnings, --disable-pytest-warnings --disable-warnings, --disable-pytest-warnings
Disable warnings summary Disable warnings summary
-l, --showlocals Show locals in tracebacks (disabled by default) -l, --showlocals Show locals in tracebacks (disabled by default)
--no-showlocals Hide locals in tracebacks (negate --showlocals
passed through addopts)
--tb=style Traceback print mode --tb=style Traceback print mode
(auto/long/short/line/native/no). (auto/long/short/line/native/no)
--show-capture={no,stdout,stderr,log,all} --show-capture={no,stdout,stderr,log,all}
Controls how captured stdout/stderr/log is shown on Controls how captured stdout/stderr/log is shown on
failed tests. Default: all. failed tests. Default: all.
@ -1863,15 +1864,14 @@ All the command-line flags can be obtained by running ``pytest --help``::
-c file Load configuration from `file` instead of trying to -c file Load configuration from `file` instead of trying to
locate one of the implicit configuration files locate one of the implicit configuration files
--continue-on-collection-errors --continue-on-collection-errors
Force test execution even if collection errors Force test execution even if collection errors occur
occur
--rootdir=ROOTDIR Define root directory for tests. Can be relative --rootdir=ROOTDIR Define root directory for tests. Can be relative
path: 'root_dir', './root_dir', path: 'root_dir', './root_dir',
'root_dir/another_dir/'; absolute path: 'root_dir/another_dir/'; absolute path:
'/home/user/root_dir'; path with variables: '/home/user/root_dir'; path with variables:
'$HOME/root_dir'. '$HOME/root_dir'.
Collection: collection:
--collect-only, --co Only collect tests, don't execute them --collect-only, --co Only collect tests, don't execute them
--pyargs Try to interpret all arguments as Python packages --pyargs Try to interpret all arguments as Python packages
--ignore=path Ignore path during collection (multi-allowed) --ignore=path Ignore path during collection (multi-allowed)
@ -1899,27 +1899,24 @@ All the command-line flags can be obtained by running ``pytest --help``::
For a given doctest, continue to run after the first For a given doctest, continue to run after the first
failure failure
Test session debugging and configuration: test session debugging and configuration:
--basetemp=dir Base temporary directory for this test run. (Warning: --basetemp=dir Base temporary directory for this test run.
this directory is removed if it exists.) (Warning: this directory is removed if it exists.)
-V, --version Display pytest version and information about -V, --version Display pytest version and information about
plugins. When given twice, also display information plugins. When given twice, also display information
about plugins. about plugins.
-h, --help Show help message and configuration info -h, --help Show help message and configuration info
-p name Early-load given plugin module name or entry point -p name Early-load given plugin module name or entry point
(multi-allowed) (multi-allowed). To avoid loading of plugins, use
To avoid loading of plugins, use the `no:` prefix, the `no:` prefix, e.g. `no:doctest`.
e.g. `no:doctest`
--trace-config Trace considerations of conftest.py files --trace-config Trace considerations of conftest.py files
--debug=[DEBUG_FILE_NAME] --debug=[DEBUG_FILE_NAME]
Store internal tracing debug information in this log Store internal tracing debug information in this log
file. file. This file is opened with 'w' and truncated as
This file is opened with 'w' and truncated as a a result, care advised. Default: pytestdebug.log.
result, care advised.
Default: pytestdebug.log.
-o OVERRIDE_INI, --override-ini=OVERRIDE_INI -o OVERRIDE_INI, --override-ini=OVERRIDE_INI
Override ini option with "option=value" style, e.g. Override ini option with "option=value" style, e.g.
`-o xfail_strict=True -o cache_dir=cache` `-o xfail_strict=True -o cache_dir=cache`.
--assert=MODE Control assertion debugging tools. --assert=MODE Control assertion debugging tools.
'plain' performs no assertion debugging. 'plain' performs no assertion debugging.
'rewrite' (the default) rewrites assert statements 'rewrite' (the default) rewrites assert statements
@ -1930,11 +1927,11 @@ All the command-line flags can be obtained by running ``pytest --help``::
--setup-plan Show what fixtures and tests would be executed but --setup-plan Show what fixtures and tests would be executed but
don't execute anything don't execute anything
Logging: logging:
--log-level=LEVEL Level of messages to catch/display. --log-level=LEVEL Level of messages to catch/display. Not set by
Not set by default, so it depends on the root/parent default, so it depends on the root/parent log
log handler's effective level, where it is "WARNING" handler's effective level, where it is "WARNING" by
by default. default.
--log-format=LOG_FORMAT --log-format=LOG_FORMAT
Log format used by the logging module Log format used by the logging module
--log-date-format=LOG_DATE_FORMAT --log-date-format=LOG_DATE_FORMAT
@ -1963,7 +1960,7 @@ All the command-line flags can be obtained by running ``pytest --help``::
Default marker for empty parametersets Default marker for empty parametersets
norecursedirs (args): Directory patterns to avoid for recursion norecursedirs (args): Directory patterns to avoid for recursion
testpaths (args): Directories to search for tests when no files or testpaths (args): Directories to search for tests when no files or
directories are given in the command line directories are given on the command line
filterwarnings (linelist): filterwarnings (linelist):
Each line specifies a pattern for Each line specifies a pattern for
warnings.filterwarnings. Processed after warnings.filterwarnings. Processed after