github pytest-dev/pytest 7.1.0

latest releases: 8.2.1, 8.3.0.dev0, 8.2.0...
2 years ago

pytest 7.1.0 (2022-03-13)

Breaking Changes

  • #8838: As per our policy, the following features have been deprecated in the 6.X series and are now
    removed:

    • pytest._fillfuncargs function.
    • pytest_warning_captured hook - use pytest_warning_recorded instead.
    • -k -foobar syntax - use -k 'not foobar' instead.
    • -k foobar: syntax.
    • pytest.collect module - import from pytest directly.

    For more information consult
    Deprecations and Removals in the docs.

  • #9437: Dropped support for Python 3.6, which reached end-of-life at 2021-12-23.

Improvements

  • #5192: Fixed test output for some data types where -v would show less information.

    Also, when showing diffs for sequences, -q would produce full diffs instead of the expected diff.

  • #9362: pytest now avoids specialized assert formatting when it is detected that the default __eq__ is overridden in attrs or dataclasses.

  • #9536: When -vv is given on command line, show skipping and xfail reasons in full instead of truncating them to fit the terminal width.

  • #9644: More information about the location of resources that led Python to raise ResourceWarning{.interpreted-text role="class"} can now
    be obtained by enabling tracemalloc{.interpreted-text role="mod"}.

    See resource-warnings{.interpreted-text role="ref"} for more information.

  • #9678: More types are now accepted in the ids argument to @pytest.mark.parametrize.
    Previously only [str]{.title-ref}, [float]{.title-ref}, [int]{.title-ref} and [bool]{.title-ref} were accepted;
    now [bytes]{.title-ref}, [complex]{.title-ref}, [re.Pattern]{.title-ref}, [Enum]{.title-ref} and anything with a [__name__]{.title-ref} are also accepted.

  • #9692: pytest.approx{.interpreted-text role="func"} now raises a TypeError{.interpreted-text role="class"} when given an unordered sequence (such as set{.interpreted-text role="class"}).

    Note that this implies that custom classes which only implement __iter__ and __len__ are no longer supported as they don't guarantee order.

Bug Fixes

  • #8242: The deprecation of raising unittest.SkipTest{.interpreted-text role="class"} to skip collection of
    tests during the pytest collection phase is reverted - this is now a supported
    feature again.

  • #9493: Symbolic link components are no longer resolved in conftest paths.
    This means that if a conftest appears twice in collection tree, using symlinks, it will be executed twice.
    For example, given

    tests/real/conftest.py
    tests/real/test_it.py
    tests/link -> tests/real

    running pytest tests now imports the conftest twice, once as tests/real/conftest.py and once as tests/link/conftest.py.
    This is a fix to match a similar change made to test collection itself in pytest 6.0 (see 6523{.interpreted-text role="pull"} for details).

  • #9626: Fixed count of selected tests on terminal collection summary when there were errors or skipped modules.

    If there were errors or skipped modules on collection, pytest would mistakenly subtract those from the selected count.

  • #9645: Fixed regression where --import-mode=importlib used together with PYTHONPATH{.interpreted-text role="envvar"} or pythonpath{.interpreted-text role="confval"} would cause import errors in test suites.

  • #9708: pytester{.interpreted-text role="fixture"} now requests a monkeypatch{.interpreted-text role="fixture"} fixture instead of creating one internally. This solves some issues with tests that involve pytest environment variables.

  • #9730: Malformed pyproject.toml files now produce a clearer error message.

Don't miss a new pytest release

NewReleases is sending notifications on new releases.