Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prepare release 8.1.0 #12054

Merged
merged 1 commit into from Mar 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 0 additions & 3 deletions changelog/10865.improvement.rst

This file was deleted.

4 changes: 0 additions & 4 deletions changelog/11311.improvement.rst

This file was deleted.

3 changes: 0 additions & 3 deletions changelog/11475.feature.rst

This file was deleted.

3 changes: 0 additions & 3 deletions changelog/11475.improvement.rst

This file was deleted.

2 changes: 0 additions & 2 deletions changelog/11653.feature.rst

This file was deleted.

7 changes: 0 additions & 7 deletions changelog/11785.trivial.rst

This file was deleted.

1 change: 0 additions & 1 deletion changelog/11790.doc.rst

This file was deleted.

2 changes: 0 additions & 2 deletions changelog/11801.improvement.rst

This file was deleted.

1 change: 0 additions & 1 deletion changelog/11850.improvement.rst

This file was deleted.

3 changes: 0 additions & 3 deletions changelog/11904.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion changelog/11962.improvement.rst

This file was deleted.

3 changes: 0 additions & 3 deletions changelog/11978.improvement.rst

This file was deleted.

1 change: 0 additions & 1 deletion changelog/12011.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion changelog/12014.bugfix.rst

This file was deleted.

1 change: 0 additions & 1 deletion changelog/12039.bugfix.rst

This file was deleted.

2 changes: 0 additions & 2 deletions changelog/12047.improvement.rst

This file was deleted.

1 change: 1 addition & 0 deletions doc/en/announce/index.rst
Expand Up @@ -6,6 +6,7 @@ Release announcements
:maxdepth: 2


release-8.1.0
release-8.0.2
release-8.0.1
release-8.0.0
Expand Down
54 changes: 54 additions & 0 deletions doc/en/announce/release-8.1.0.rst
@@ -0,0 +1,54 @@
pytest-8.1.0
=======================================

The pytest team is proud to announce the 8.1.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:

* Ben Brown
* Ben Leith
* Bruno Oliveira
* Clément Robert
* Dave Hall
* Dương Quốc Khánh
* Eero Vaher
* Eric Larson
* Fabian Sturm
* Faisal Fawad
* Florian Bruhin
* Franck Charras
* Joachim B Haga
* John Litborn
* Loïc Estève
* Marc Bresson
* Patrick Lannigan
* Pierre Sassoulas
* Ran Benita
* Reagan Lee
* Ronny Pfannschmidt
* Russell Martin
* clee2000
* donghui
* faph
* jakkdl
* mrbean-bremen
* robotherapist
* whysage
* woutdenolf


Happy testing,
The pytest Development Team
28 changes: 14 additions & 14 deletions doc/en/builtin.rst
Expand Up @@ -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.

capsysbinary -- .../_pytest/capture.py:1007
capsysbinary -- .../_pytest/capture.py:1008
Enable bytes capturing of writes to ``sys.stdout`` and ``sys.stderr``.

The captured output is made available via ``capsysbinary.readouterr()``
Expand All @@ -50,7 +50,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capsysbinary.readouterr()
assert captured.out == b"hello\n"

capfd -- .../_pytest/capture.py:1034
capfd -- .../_pytest/capture.py:1035
Enable text capturing of writes to file descriptors ``1`` and ``2``.

The captured output is made available via ``capfd.readouterr()`` method
Expand All @@ -67,7 +67,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capfd.readouterr()
assert captured.out == "hello\n"

capfdbinary -- .../_pytest/capture.py:1061
capfdbinary -- .../_pytest/capture.py:1062
Enable bytes capturing of writes to file descriptors ``1`` and ``2``.

The captured output is made available via ``capfd.readouterr()`` method
Expand All @@ -84,7 +84,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capfdbinary.readouterr()
assert captured.out == b"hello\n"

capsys -- .../_pytest/capture.py:980
capsys -- .../_pytest/capture.py:981
Enable text capturing of writes to ``sys.stdout`` and ``sys.stderr``.

The captured output is made available via ``capsys.readouterr()`` method
Expand All @@ -101,7 +101,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
captured = capsys.readouterr()
assert captured.out == "hello\n"

doctest_namespace [session scope] -- .../_pytest/doctest.py:745
doctest_namespace [session scope] -- .../_pytest/doctest.py:737
Fixture that returns a :py:class:`dict` that will be injected into the
namespace of doctests.

Expand All @@ -115,7 +115,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a

For more details: :ref:`doctest_namespace`.

pytestconfig [session scope] -- .../_pytest/fixtures.py:1354
pytestconfig [session scope] -- .../_pytest/fixtures.py:1346
Session-scoped fixture that returns the session's :class:`pytest.Config`
object.

Expand Down Expand Up @@ -170,18 +170,18 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
`pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
:issue:`7767` for details.

tmpdir_factory [session scope] -- .../_pytest/legacypath.py:302
tmpdir_factory [session scope] -- .../_pytest/legacypath.py:317
Return a :class:`pytest.TempdirFactory` instance for the test session.

tmpdir -- .../_pytest/legacypath.py:309
tmpdir -- .../_pytest/legacypath.py:324
Return a temporary directory path object which is unique to each test
function invocation, created as a sub directory of the base temporary
directory.

By default, a new base temporary directory is created each test session,
and old bases are removed after 3 sessions, to aid in debugging. If
``--basetemp`` is used then it is cleared each session. See :ref:`base
temporary directory`.
``--basetemp`` is used then it is cleared each session. See
:ref:`temporary directory location and retention`.

The returned object is a `legacy_path`_ object.

Expand All @@ -192,7 +192,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

caplog -- .../_pytest/logging.py:594
caplog -- .../_pytest/logging.py:601
Access and control log capturing.

Captured logs are available through the following properties/methods::
Expand Down Expand Up @@ -227,7 +227,7 @@ 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,
use :meth:`context() <pytest.MonkeyPatch.context>`.

recwarn -- .../_pytest/recwarn.py:32
recwarn -- .../_pytest/recwarn.py:31
Return a :class:`WarningsRecorder` instance that records all warnings emitted by test functions.

See https://docs.pytest.org/en/latest/how-to/capture-warnings.html for information
Expand All @@ -245,8 +245,8 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
and old bases are removed after 3 sessions, to aid in debugging.
This behavior can be configured with :confval:`tmp_path_retention_count` and
:confval:`tmp_path_retention_policy`.
If ``--basetemp`` is used then it is cleared each session. See :ref:`base
temporary directory`.
If ``--basetemp`` is used then it is cleared each session. See
:ref:`temporary directory location and retention`.

The returned object is a :class:`pathlib.Path` object.

Expand Down
92 changes: 92 additions & 0 deletions doc/en/changelog.rst
Expand Up @@ -28,6 +28,98 @@ with advance notice in the **Deprecations** section of releases.

.. towncrier release notes start

pytest 8.1.0 (2024-03-03)
=========================

Features
--------

- `#11475 <https://github.com/pytest-dev/pytest/issues/11475>`_: Added the new :confval:`consider_namespace_packages` configuration option, defaulting to ``False``.

If set to ``True``, pytest will attempt to identify modules that are part of `namespace packages <https://packaging.python.org/en/latest/guides/packaging-namespace-packages>`__ when importing modules.


- `#11653 <https://github.com/pytest-dev/pytest/issues/11653>`_: Added the new :confval:`verbosity_test_cases` configuration option for fine-grained control of test execution verbosity.
See :ref:`Fine-grained verbosity <pytest.fine_grained_verbosity>` for more details.



Improvements
------------

- `#10865 <https://github.com/pytest-dev/pytest/issues/10865>`_: :func:`pytest.warns` now validates that :func:`warnings.warn` was called with a `str` or a `Warning`.
Currently in Python it is possible to use other types, however this causes an exception when :func:`warnings.filterwarnings` is used to filter those warnings (see `CPython #103577 <https://github.com/python/cpython/issues/103577>`__ for a discussion).
While this can be considered a bug in CPython, we decided to put guards in pytest as the error message produced without this check in place is confusing.


- `#11311 <https://github.com/pytest-dev/pytest/issues/11311>`_: When using ``--override-ini`` for paths in invocations without a configuration file defined, the current working directory is used
as the relative directory.

Previoulsy this would raise an :class:`AssertionError`.


- `#11475 <https://github.com/pytest-dev/pytest/issues/11475>`_: :ref:`--import-mode=importlib <import-mode-importlib>` now tries to import modules using the standard import mechanism (but still without changing :py:data:`sys.path`), falling back to importing modules directly only if that fails.

This means that installed packages will be imported under their canonical name if possible first, for example ``app.core.models``, instead of having the module name always be derived from their path (for example ``.env310.lib.site_packages.app.core.models``).


- `#11801 <https://github.com/pytest-dev/pytest/issues/11801>`_: Added the :func:`iter_parents() <_pytest.nodes.Node.iter_parents>` helper method on nodes.
It is similar to :func:`listchain <_pytest.nodes.Node.listchain>`, but goes from bottom to top, and returns an iterator, not a list.


- `#11850 <https://github.com/pytest-dev/pytest/issues/11850>`_: Added support for :data:`sys.last_exc` for post-mortem debugging on Python>=3.12.


- `#11962 <https://github.com/pytest-dev/pytest/issues/11962>`_: In case no other suitable candidates for configuration file are found, a ``pyproject.toml`` (even without a ``[tool.pytest.ini_options]`` table) will be considered as the configuration file and define the ``rootdir``.


- `#11978 <https://github.com/pytest-dev/pytest/issues/11978>`_: Add ``--log-file-mode`` option to the logging plugin, enabling appending to log-files. This option accepts either ``"w"`` or ``"a"`` and defaults to ``"w"``.

Previously, the mode was hard-coded to be ``"w"`` which truncates the file before logging.


- `#12047 <https://github.com/pytest-dev/pytest/issues/12047>`_: When multiple finalizers of a fixture raise an exception, now all exceptions are reported as an exception group.
Previously, only the first exception was reported.



Bug Fixes
---------

- `#11904 <https://github.com/pytest-dev/pytest/issues/11904>`_: Fixed a regression in pytest 8.0.0 that would cause test collection to fail due to permission errors when using ``--pyargs``.

This change improves the collection tree for tests specified using ``--pyargs``, see :pull:`12043` for a comparison with pytest 8.0 and <8.


- `#12011 <https://github.com/pytest-dev/pytest/issues/12011>`_: Fixed a regression in 8.0.1 whereby ``setup_module`` xunit-style fixtures are not executed when ``--doctest-modules`` is passed.


- `#12014 <https://github.com/pytest-dev/pytest/issues/12014>`_: Fix the ``stacklevel`` used when warning about marks used on fixtures.


- `#12039 <https://github.com/pytest-dev/pytest/issues/12039>`_: Fixed a regression in ``8.0.2`` where tests created using :fixture:`tmp_path` have been collected multiple times in CI under Windows.



Improved Documentation
----------------------

- `#11790 <https://github.com/pytest-dev/pytest/issues/11790>`_: Documented the retention of temporary directories created using the ``tmp_path`` fixture in more detail.



Trivial/Internal Changes
------------------------

- `#11785 <https://github.com/pytest-dev/pytest/issues/11785>`_: Some changes were made to private functions which may affect plugins which access them:

- ``FixtureManager._getautousenames()`` now takes a ``Node`` itself instead of the nodeid.
- ``FixtureManager.getfixturedefs()`` now takes the ``Node`` itself instead of the nodeid.
- The ``_pytest.nodes.iterparentnodeids()`` function is removed without replacement.
Prefer to traverse the node hierarchy itself instead.
If you really need to, copy the function from the previous pytest release.


pytest 8.0.2 (2024-02-24)
=========================

Expand Down
6 changes: 3 additions & 3 deletions doc/en/example/parametrize.rst
Expand Up @@ -162,7 +162,7 @@ objects, they are still using the default pytest representation:
rootdir: /home/sweet/project
collected 8 items

<Dir parametrize.rst-194>
<Dir parametrize.rst-195>
<Module test_time.py>
<Function test_timedistance_v0[a0-b0-expected0]>
<Function test_timedistance_v0[a1-b1-expected1]>
Expand Down Expand Up @@ -239,7 +239,7 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia
rootdir: /home/sweet/project
collected 4 items

<Dir parametrize.rst-194>
<Dir parametrize.rst-195>
<Module test_scenarios.py>
<Class TestSampleWithScenarios>
<Function test_demo1[basic]>
Expand Down Expand Up @@ -318,7 +318,7 @@ Let's first see how it looks like at collection time:
rootdir: /home/sweet/project
collected 2 items

<Dir parametrize.rst-194>
<Dir parametrize.rst-195>
<Module test_backends.py>
<Function test_db_initialized[d1]>
<Function test_db_initialized[d2]>
Expand Down
4 changes: 2 additions & 2 deletions doc/en/example/pythoncollection.rst
Expand Up @@ -152,7 +152,7 @@ The test collection would look like this:
configfile: pytest.ini
collected 2 items

<Dir pythoncollection.rst-195>
<Dir pythoncollection.rst-196>
<Module check_myapp.py>
<Class CheckMyApp>
<Function simple_check>
Expand Down Expand Up @@ -215,7 +215,7 @@ You can always peek at the collection tree without running tests like this:
configfile: pytest.ini
collected 3 items

<Dir pythoncollection.rst-195>
<Dir pythoncollection.rst-196>
<Dir CWD>
<Module pythoncollection.py>
<Function test_function>
Expand Down
4 changes: 2 additions & 2 deletions doc/en/example/reportingdemo.rst
Expand Up @@ -445,7 +445,7 @@ Here is a nice run of several failures and how ``pytest`` presents things:
self = <failure_demo.TestRaises object at 0xdeadbeef0020>

def test_tupleerror(self):
> a, b = [1] # NOQA
> a, b = [1] # noqa: F841
E ValueError: not enough values to unpack (expected 2, got 1)

failure_demo.py:175: ValueError
Expand All @@ -467,7 +467,7 @@ Here is a nice run of several failures and how ``pytest`` presents things:
self = <failure_demo.TestRaises object at 0xdeadbeef0022>

def test_some_error(self):
> if namenotexi: # NOQA
> if namenotexi: # noqa: F821
E NameError: name 'namenotexi' is not defined

failure_demo.py:183: NameError
Expand Down
2 changes: 1 addition & 1 deletion doc/en/getting-started.rst
Expand Up @@ -22,7 +22,7 @@ Install ``pytest``
.. code-block:: bash

$ pytest --version
pytest 8.0.2
pytest 8.1.0

.. _`simpletest`:

Expand Down