From 7ef189757eb0cc9a99b9dc79727f66f1e3c1d5c7 Mon Sep 17 00:00:00 2001 From: isra17 Date: Sun, 12 May 2024 16:49:39 -0400 Subject: [PATCH 001/307] pathlib: Fix module path used when using importlib with namespaces --- src/_pytest/pathlib.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index e14c2acd328..d09aab61428 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -540,7 +540,7 @@ def import_path( # Try to import this module using the standard import mechanisms, but # without touching sys.path. try: - pkg_root, module_name = resolve_pkg_root_and_module_name( + _, module_name = resolve_pkg_root_and_module_name( path, consider_namespace_packages=consider_namespace_packages ) except CouldNotResolvePathError: @@ -551,7 +551,7 @@ def import_path( return sys.modules[module_name] mod = _import_module_using_spec( - module_name, path, pkg_root, insert_modules=False + module_name, path, path.parent, insert_modules=False ) if mod is not None: return mod From e6c0d1fff36a2314432a2cf60b3fe4214d793bfa Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 4 Nov 2025 23:36:52 +0200 Subject: [PATCH 002/307] testing: remove deprecated `mktemp` fallback in py.path.local tests It's deprecated in typeshed, the fallback is probably not needed these days. --- testing/_py/test_local.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/testing/_py/test_local.py b/testing/_py/test_local.py index 592058a54a5..6b7d756a45c 100644 --- a/testing/_py/test_local.py +++ b/testing/_py/test_local.py @@ -734,12 +734,8 @@ def test_dump(self, tmpdir, bin): def test_setmtime(self): import tempfile - try: - fd, name = tempfile.mkstemp() - os.close(fd) - except AttributeError: - name = tempfile.mktemp() - open(name, "w").close() + fd, name = tempfile.mkstemp() + os.close(fd) try: # Do not use _pytest.timing here, as we do not want time mocking to affect this test. mtime = int(time.time()) - 100 From 213ae308051d8c0bbdc1c394bbb166c067122e1d Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 4 Nov 2025 23:27:30 +0200 Subject: [PATCH 003/307] Enable mypy `@deprecated` decorator warnings Currently it's not enabled by default. See: https://mypy.readthedocs.io/en/stable/changelog.html#support-for-deprecated-decorator-pep-702 --- pyproject.toml | 1 + src/_pytest/logging.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f57d7e8e85b..1f5835254da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -532,6 +532,7 @@ warn_unreachable = true warn_unused_configs = true no_implicit_reexport = true warn_unused_ignores = true +enable_error_code = [ "deprecated" ] [tool.pyright] include = [ diff --git a/src/_pytest/logging.py b/src/_pytest/logging.py index e4fed579d21..6f34c1b93fd 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -513,7 +513,7 @@ def _force_enable_logging( if isinstance(level, str): # Try to translate the level string to an int for `logging.disable()` - level = logging.getLevelName(level) + level = logging.getLevelName(level) # type: ignore[deprecated] if not isinstance(level, int): # The level provided was not valid, so just un-disable all logging. From 7d9375781c694577219bec435ad3c37c52e00d03 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 5 Nov 2025 17:01:40 +0200 Subject: [PATCH 004/307] compat: add compat for `@warnings.deprecated` We intend to start using it. --- src/_pytest/compat.py | 15 +++++++++++++++ testing/test_compat.py | 20 +++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/_pytest/compat.py b/src/_pytest/compat.py index 2f5a4c863f9..316d2fbd42b 100644 --- a/src/_pytest/compat.py +++ b/src/_pytest/compat.py @@ -15,6 +15,7 @@ from typing import Any from typing import Final from typing import NoReturn +from typing import TYPE_CHECKING import py @@ -311,3 +312,17 @@ def running_on_ci() -> bool: # Only enable CI mode if one of these env variables is defined and non-empty. env_vars = ["CI", "BUILD_NUMBER"] return any(os.environ.get(var) for var in env_vars) + + +if sys.version_info >= (3, 13): + from warnings import deprecated as deprecated +else: + if TYPE_CHECKING: + from typing_extensions import deprecated as deprecated + else: + + def deprecated(msg, /, *, category=None, stacklevel=1): + def decorator(func): + return func + + return decorator diff --git a/testing/test_compat.py b/testing/test_compat.py index fa9e259647f..2c86f06c9dd 100644 --- a/testing/test_compat.py +++ b/testing/test_compat.py @@ -5,9 +5,11 @@ from functools import cached_property from functools import partial from functools import wraps -from typing import TYPE_CHECKING +from typing import Literal +import warnings from _pytest.compat import assert_never +from _pytest.compat import deprecated from _pytest.compat import get_real_func from _pytest.compat import safe_getattr from _pytest.compat import safe_isclass @@ -15,10 +17,6 @@ import pytest -if TYPE_CHECKING: - from typing import Literal - - def test_real_func_loop_limit() -> None: class Evil: def __init__(self): @@ -192,3 +190,15 @@ def test_assert_never_literal() -> None: pass else: assert_never(x) + + +def test_deprecated() -> None: + # This test is mostly for coverage. + + @deprecated("This is deprecated!") + def old_way() -> str: + return "human intelligence" + + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + assert old_way() == "human intelligence" # type: ignore[deprecated] From dd47a89d6eb03e7d18e2fea4fd0a198b1ec5f4a5 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 4 Nov 2025 21:21:30 +0200 Subject: [PATCH 005/307] Deprecate passing iterator argvalues to parametrize Fix #13409. --- changelog/13409.deprecation.rst | 8 ++++ doc/en/deprecations.rst | 61 ++++++++++++++++++++++++++ src/_pytest/deprecated.py | 8 ++++ src/_pytest/mark/structures.py | 31 ++++++++++++- src/_pytest/python.py | 6 +++ testing/python/metafunc.py | 77 +++++++++++++++++++++++++++++++++ testing/typing_checks.py | 7 +++ 7 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 changelog/13409.deprecation.rst diff --git a/changelog/13409.deprecation.rst b/changelog/13409.deprecation.rst new file mode 100644 index 00000000000..d4fcf2c8a5a --- /dev/null +++ b/changelog/13409.deprecation.rst @@ -0,0 +1,8 @@ +Using non-:class:`~collections.abc.Collection` iterables (such as generators, iterators, or custom iterable objects) for the ``argvalues`` parameter in :ref:`@pytest.mark.parametrize ` and :meth:`metafunc.parametrize ` is now deprecated. + +These iterables get exhausted after the first iteration, +leading to tests getting unexpectedly skipped in cases such as running :func:`pytest.main()` multiple times, +using class-level parametrize decorators, +or collecting tests multiple times. + +See :ref:`parametrize-iterators` for details and suggestions. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 65a05823517..f2a665a6267 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -15,6 +15,67 @@ Below is a complete list of all pytest features which are considered deprecated. :class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters `. +.. _parametrize-iterators: + +Non-Collection iterables in ``@pytest.mark.parametrize`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 9.1 + +Using non-:class:`~collections.abc.Collection` iterables (such as generators, iterators, or custom iterable objects) +for the ``argvalues`` parameter in :ref:`@pytest.mark.parametrize ` +and :meth:`metafunc.parametrize ` is deprecated. + +These iterables get exhausted after the first iteration, leading to tests getting unexpectedly skipped in cases such as: + +* Running :func:`pytest.main()` multiple times in the same process +* Using class-level parametrize decorators where the same mark is applied to multiple test methods +* Collecting tests multiple times + +Example of problematic code: + +.. code-block:: python + + import pytest + + + def data_generator(): + yield 1 + yield 2 + + + @pytest.mark.parametrize("n", data_generator()) + class Test: + def test_1(self, n): + pass + + # test_2 will be skipped because data_generator() is exhausted. + def test_2(self, n): + pass + +You can fix it by convert generators and iterators to lists or tuples: + +.. code-block:: python + + import pytest + + + def data_generator(): + yield 1 + yield 2 + + + @pytest.mark.parametrize("n", list(data_generator())) + class Test: + def test_1(self, n): + pass + + def test_2(self, n): + pass + +Note that :class:`range` objects are ``Collection`` and are not affected by this deprecation. + + .. _monkeypatch-fixup-namespace-packages: ``monkeypatch.syspath_prepend`` with legacy namespace packages diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index cb5d2e93e93..a8be4881433 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -75,6 +75,14 @@ "See https://docs.pytest.org/en/stable/deprecations.html#monkeypatch-fixup-namespace-packages" ) +PARAMETRIZE_NON_COLLECTION_ITERABLE = UnformattedWarning( + PytestRemovedIn10Warning, + "Passing a non-Collection iterable to parametrize is deprecated.\n" + "Test: {nodeid}, argvalues type: {type_name}\n" + "Please convert to a list or tuple.\n" + "See https://docs.pytest.org/en/stable/deprecations.html#parametrize-iterators", +) + # You want to make some `__init__` or function "private". # # def my_private_function(some, args): diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 16bb6d81119..9f2f6279158 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -21,11 +21,13 @@ import warnings from .._code import getfslineno +from ..compat import deprecated from ..compat import NOTSET from ..compat import NotSetType from _pytest.config import Config from _pytest.deprecated import check_ispytest from _pytest.deprecated import MARKED_FIXTURE +from _pytest.deprecated import PARAMETRIZE_NON_COLLECTION_ITERABLE from _pytest.outcomes import fail from _pytest.raises import AbstractRaises from _pytest.scope import _ScopeName @@ -193,6 +195,15 @@ def _for_parametrize( config: Config, nodeid: str, ) -> tuple[Sequence[str], list[ParameterSet]]: + if not isinstance(argvalues, Collection): + warnings.warn( + PARAMETRIZE_NON_COLLECTION_ITERABLE.format( + nodeid=nodeid, + type_name=type(argvalues).__name__, + ), + stacklevel=3, + ) + argnames, force_tuple = cls._parse_parametrize_args(argnames, argvalues) parameters = cls._parse_parametrize_parameters(argvalues, force_tuple) del argvalues @@ -508,7 +519,25 @@ def __call__( ) -> MarkDecorator: ... class _ParametrizeMarkDecorator(MarkDecorator): - def __call__( # type: ignore[override] + @overload # type: ignore[override,no-overload-impl] + def __call__( + self, + argnames: str | Sequence[str], + argvalues: Collection[ParameterSet | Sequence[object] | object], + *, + indirect: bool | Sequence[str] = ..., + ids: Iterable[None | str | float | int | bool] + | Callable[[Any], object | None] + | None = ..., + scope: _ScopeName | None = ..., + ) -> MarkDecorator: ... + + @overload + @deprecated( + "Passing a non-Collection iterable to the 'argvalues' parameter of @pytest.mark.parametrize is deprecated. " + "Convert argvalues to a list or tuple.", + ) + def __call__( self, argnames: str | Sequence[str], argvalues: Iterable[ParameterSet | Sequence[object] | object], diff --git a/src/_pytest/python.py b/src/_pytest/python.py index e63751877a4..257dd78f462 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -1247,6 +1247,12 @@ def parametrize( N-tuples, where each tuple-element specifies a value for its respective argname. + .. versionchanged:: 9.1 + + Passing a non-:class:`~collections.abc.Collection` iterable + (such as a generator or iterator) is deprecated. See + :ref:`parametrize-iterators` for details. + :param indirect: A list of arguments' names (subset of argnames) or a boolean. If True the list contains all names from the argnames. Each diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index 20ccacf4b73..82a5509c49a 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -1123,6 +1123,24 @@ def test_3(self, arg, arg2): """ ) + def test_parametrize_iterator_deprecation(self) -> None: + """Test that using iterators for argvalues raises a deprecation warning.""" + + def func(x: int) -> None: + raise NotImplementedError() + + def data_generator() -> Iterator[int]: + yield 1 + yield 2 + + metafunc = self.Metafunc(func) + + with pytest.warns( + pytest.PytestRemovedIn10Warning, + match=r"Passing a non-Collection iterable to parametrize is deprecated", + ): + metafunc.parametrize("x", data_generator()) + class TestMetafuncFunctional: def test_attributes(self, pytester: Pytester) -> None: @@ -1682,6 +1700,65 @@ def test_3(self, fixture): ] ) + def test_parametrize_generator_multiple_runs(self, pytester: Pytester) -> None: + """Test that generators in parametrize work with multiple pytest.main() (deprecated).""" + testfile = pytester.makepyfile( + """ + import pytest + + def data_generator(): + yield 1 + yield 2 + + @pytest.mark.parametrize("bar", data_generator()) + def test_foo(bar): + pass + + if __name__ == '__main__': + args = ["-q", "--collect-only"] + pytest.main(args) # First run - should work with warning + pytest.main(args) # Second run - should also work with warning + """ + ) + result = pytester.run(sys.executable, "-Wdefault", testfile) + # Should see the deprecation warnings. + result.stdout.fnmatch_lines( + [ + "*PytestRemovedIn10Warning: Passing a non-Collection iterable*", + "*PytestRemovedIn10Warning: Passing a non-Collection iterable*", + ] + ) + + def test_parametrize_iterator_class_multiple_tests( + self, pytester: Pytester + ) -> None: + """Test that iterators in parametrize on a class get exhausted (deprecated).""" + pytester.makepyfile( + """ + import pytest + + @pytest.mark.parametrize("n", iter(range(2))) + class Test: + def test_1(self, n): + pass + + def test_2(self, n): + pass + """ + ) + result = pytester.runpytest("-v", "-Wdefault") + # Iterator gets exhausted after first test, second test gets no parameters. + # This is deprecated. + result.assert_outcomes(passed=2, skipped=1) + result.stdout.fnmatch_lines( + [ + "*test_parametrize_iterator_class_multiple_tests.py::Test::test_1[[]0] PASSED*", + "*test_parametrize_iterator_class_multiple_tests.py::Test::test_1[[]1] PASSED*", + "*test_parametrize_iterator_class_multiple_tests.py::Test::test_2[[]NOTSET] SKIPPED*", + "*PytestRemovedIn10Warning: Passing a non-Collection iterable*", + ] + ) + class TestMetafuncFunctionalAuto: """Tests related to automatically find out the correct scope for diff --git a/testing/typing_checks.py b/testing/typing_checks.py index 3ee2dfb3019..ff1c0e60cd9 100644 --- a/testing/typing_checks.py +++ b/testing/typing_checks.py @@ -58,3 +58,10 @@ def check_raises_is_a_context_manager(val: bool) -> None: def check_testreport_attributes(report: TestReport) -> None: assert_type(report.when, Literal["setup", "call", "teardown"]) assert_type(report.location, tuple[str, int | None, str]) + + +# Test @pytest.mark.parametrize iterator argvalues deprecation. +# Will be complain about unused type ignore if doesn't work. +@pytest.mark.parametrize("x", iter(range(10))) # type: ignore[deprecated] +def test_it(x: int) -> None: + pass From 3acb2c5c45e7296e22c6adb8b2777899bcdb0f9a Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 8 Nov 2025 19:28:30 +0200 Subject: [PATCH 006/307] Merge pull request #13878 from pytest-dev/release-9.0.0 Release 9.0.0 (cherry picked from commit 7b896113864d0069571214a10e699aafb7865ec3) --- changelog/12083.breaking.rst | 9 - changelog/12244.contrib.rst | 1 - changelog/12474.contrib.rst | 1 - changelog/13072.feature.rst | 8 - changelog/13330.improvement.rst | 3 - changelog/13445.bugfix.rst | 1 - changelog/13522.bugfix.rst | 5 - changelog/13537.bugfix.rst | 1 - changelog/13574.improvement.rst | 7 - changelog/13598.bugfix.rst | 1 - changelog/13621.contrib.rst | 1 - changelog/13625.doc.rst | 1 - changelog/13638.contrib.rst | 2 - changelog/1367.feature.rst | 28 --- changelog/13678.feature.rst | 3 - changelog/13695.contrib.rst | 1 - changelog/13700.improvement.rst | 1 - changelog/13716.bugfix.rst | 1 - changelog/13719.breaking.rst | 1 - changelog/13722.bugfix.rst | 1 - changelog/13732.improvement.rst | 1 - changelog/13737.feature.rst | 4 - changelog/13743.feature.rst | 37 ---- changelog/13766.breaking.rst | 2 - changelog/13771.contrib.rst | 1 - changelog/13773.bugfix.rst | 1 - changelog/13779.breaking.rst | 22 -- changelog/13791.packaging.rst | 2 - changelog/13807.deprecation.rst | 3 - changelog/13816.bugfix.rst | 1 - changelog/13823.feature.rst | 18 -- changelog/13823.improvement.rst | 4 - changelog/13829.feature.rst | 5 - changelog/13830.misc.rst | 1 - changelog/13841.contrib.rst | 1 - changelog/13849.bugfix.rst | 2 - changelog/13859.improvement.rst | 1 - changelog/13861.improvement.rst | 1 - changelog/13865.bugfix.rst | 1 - changelog/478.feature.rst | 3 - doc/en/announce/index.rst | 1 + doc/en/announce/release-9.0.0.rst | 69 +++++++ doc/en/builtin.rst | 11 +- doc/en/changelog.rst | 301 ++++++++++++++++++++++++++++ doc/en/example/markers.rst | 4 +- doc/en/example/nonpython.rst | 4 +- doc/en/example/parametrize.rst | 14 +- doc/en/example/pythoncollection.rst | 10 +- doc/en/example/simple.rst | 4 +- doc/en/getting-started.rst | 2 +- doc/en/how-to/fixtures.rst | 2 +- doc/en/how-to/subtests.rst | 32 ++- doc/en/how-to/writing_plugins.rst | 2 +- doc/en/reference/reference.rst | 38 +++- doc/en/requirements.txt | 2 +- 55 files changed, 459 insertions(+), 225 deletions(-) delete mode 100644 changelog/12083.breaking.rst delete mode 100644 changelog/12244.contrib.rst delete mode 100644 changelog/12474.contrib.rst delete mode 100644 changelog/13072.feature.rst delete mode 100644 changelog/13330.improvement.rst delete mode 100644 changelog/13445.bugfix.rst delete mode 100644 changelog/13522.bugfix.rst delete mode 100644 changelog/13537.bugfix.rst delete mode 100644 changelog/13574.improvement.rst delete mode 100644 changelog/13598.bugfix.rst delete mode 100644 changelog/13621.contrib.rst delete mode 100644 changelog/13625.doc.rst delete mode 100644 changelog/13638.contrib.rst delete mode 100644 changelog/1367.feature.rst delete mode 100644 changelog/13678.feature.rst delete mode 100644 changelog/13695.contrib.rst delete mode 100644 changelog/13700.improvement.rst delete mode 100644 changelog/13716.bugfix.rst delete mode 100644 changelog/13719.breaking.rst delete mode 100644 changelog/13722.bugfix.rst delete mode 100644 changelog/13732.improvement.rst delete mode 100644 changelog/13737.feature.rst delete mode 100644 changelog/13743.feature.rst delete mode 100644 changelog/13766.breaking.rst delete mode 100644 changelog/13771.contrib.rst delete mode 100644 changelog/13773.bugfix.rst delete mode 100644 changelog/13779.breaking.rst delete mode 100644 changelog/13791.packaging.rst delete mode 100644 changelog/13807.deprecation.rst delete mode 100644 changelog/13816.bugfix.rst delete mode 100644 changelog/13823.feature.rst delete mode 100644 changelog/13823.improvement.rst delete mode 100644 changelog/13829.feature.rst delete mode 100644 changelog/13830.misc.rst delete mode 100644 changelog/13841.contrib.rst delete mode 100644 changelog/13849.bugfix.rst delete mode 100644 changelog/13859.improvement.rst delete mode 100644 changelog/13861.improvement.rst delete mode 100644 changelog/13865.bugfix.rst delete mode 100644 changelog/478.feature.rst create mode 100644 doc/en/announce/release-9.0.0.rst diff --git a/changelog/12083.breaking.rst b/changelog/12083.breaking.rst deleted file mode 100644 index 53a8393dfb4..00000000000 --- a/changelog/12083.breaking.rst +++ /dev/null @@ -1,9 +0,0 @@ -Fixed a bug where an invocation such as `pytest a/ a/b` would cause only tests from `a/b` to run, and not other tests under `a/`. - -The fix entails a few breaking changes to how such overlapping arguments and duplicates are handled: - -1. `pytest a/b a/` or `pytest a/ a/b` are equivalent to `pytest a`; if an argument overlaps another arguments, only the prefix remains. - -2. `pytest x.py x.py` is equivalent to `pytest x.py`; previously such an invocation was taken as an explicit request to run the tests from the file twice. - -If you rely on these behaviors, consider using :ref:`--keep-duplicates `, which retains its existing behavior (including the bug). diff --git a/changelog/12244.contrib.rst b/changelog/12244.contrib.rst deleted file mode 100644 index e39dad1cfbf..00000000000 --- a/changelog/12244.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed self-test failures when `TERM=dumb`. diff --git a/changelog/12474.contrib.rst b/changelog/12474.contrib.rst deleted file mode 100644 index bb668fd66c5..00000000000 --- a/changelog/12474.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -Added scheduled GitHub Action Workflow to run Sphinx linkchecks in repo documentation. diff --git a/changelog/13072.feature.rst b/changelog/13072.feature.rst deleted file mode 100644 index 6f9fd11e540..00000000000 --- a/changelog/13072.feature.rst +++ /dev/null @@ -1,8 +0,0 @@ -Added support for displaying test session progress in the terminal tab using the `OSC 9;4; `_ ANSI sequence. -When pytest runs in a supported terminal emulator like ConEmu, Gnome Terminal, Ptyxis, Windows Terminal, Kitty or Ghostty, -you'll see the progress in the terminal tab or window, -allowing you to monitor pytest's progress at a glance. - -This feature is automatically enabled when running in a TTY. It is implemented as an internal plugin. If needed, it can be disabled as follows: -- On a user level, using ``-p no:terminalprogress`` on the command line or via an environment variable ``PYTEST_ADDOPTS='-p no:terminalprogress'``. -- On a project configuration level, using ``addopts = "-p no:terminalprogress"``. diff --git a/changelog/13330.improvement.rst b/changelog/13330.improvement.rst deleted file mode 100644 index 58350ea30ef..00000000000 --- a/changelog/13330.improvement.rst +++ /dev/null @@ -1,3 +0,0 @@ -Having pytest configuration spread over more than one file (for example having both a ``pytest.ini`` file and ``pyproject.toml`` with a ``[tool.pytest.ini_options]`` table) will now print a warning to make it clearer to the user that only one of them is actually used. - --- by :user:`sgaist` diff --git a/changelog/13445.bugfix.rst b/changelog/13445.bugfix.rst deleted file mode 100644 index 1c601a1045e..00000000000 --- a/changelog/13445.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Made the type annotations of :func:`pytest.skip` and friends more spec-complaint to have them work across more type checkers. diff --git a/changelog/13522.bugfix.rst b/changelog/13522.bugfix.rst deleted file mode 100644 index 683304251aa..00000000000 --- a/changelog/13522.bugfix.rst +++ /dev/null @@ -1,5 +0,0 @@ -Fixed :fixture:`pytester` in subprocess mode ignored all :attr`pytester.plugins ` except the first. - -Fixed :fixture:`pytester` in subprocess mode silently ignored non-str :attr:`pytester.plugins `. -Now it errors instead. -If you are affected by this, specify the plugin by name, or switch the affected tests to use :func:`pytester.runpytest_inprocess ` explicitly instead. diff --git a/changelog/13537.bugfix.rst b/changelog/13537.bugfix.rst deleted file mode 100644 index 47743b24f05..00000000000 --- a/changelog/13537.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fix bug in which ExceptionGroup with only Skipped exceptions in teardown was not handled correctly and showed as error. diff --git a/changelog/13574.improvement.rst b/changelog/13574.improvement.rst deleted file mode 100644 index 7820cd03fac..00000000000 --- a/changelog/13574.improvement.rst +++ /dev/null @@ -1,7 +0,0 @@ -The single argument ``--version`` no longer loads the entire plugin infrastructure, making it faster and more reliable when displaying only the pytest version. - -Passing ``--version`` twice (e.g., ``pytest --version --version``) retains the original behavior, showing both the pytest version and plugin information. - -.. note:: - - Since ``--version`` is now processed early, it only takes effect when passed directly via the command line. It will not work if set through other mechanisms, such as :envvar:`PYTEST_ADDOPTS` or :confval:`addopts`. diff --git a/changelog/13598.bugfix.rst b/changelog/13598.bugfix.rst deleted file mode 100644 index dd195112eb8..00000000000 --- a/changelog/13598.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed possible collection confusion on Windows when short paths and symlinks are involved. diff --git a/changelog/13621.contrib.rst b/changelog/13621.contrib.rst deleted file mode 100644 index c5e622b7619..00000000000 --- a/changelog/13621.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -pytest's own testsuite now handles the ``lsof`` command hanging (e.g. due to unreachable network filesystems), with the affected selftests being skipped after 10 seconds. diff --git a/changelog/13625.doc.rst b/changelog/13625.doc.rst deleted file mode 100644 index 850c81583b6..00000000000 --- a/changelog/13625.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Added missing docstrings to ``pytest_addoption()``, ``pytest_configure()``, and ``cacheshow()`` functions in ``cacheprovider.py``. diff --git a/changelog/13638.contrib.rst b/changelog/13638.contrib.rst deleted file mode 100644 index 8eb06298c77..00000000000 --- a/changelog/13638.contrib.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed deprecated :command:`gh pr new` command in :file:`scripts/prepare-release-pr.py`. -The script now uses :command:`gh pr create` which is compatible with GitHub CLI v2.0+. diff --git a/changelog/1367.feature.rst b/changelog/1367.feature.rst deleted file mode 100644 index b88480338b5..00000000000 --- a/changelog/1367.feature.rst +++ /dev/null @@ -1,28 +0,0 @@ -**Support for subtests** has been added. - -:ref:`subtests ` are an alternative to parametrization, useful in situations where the parametrization values are not all known at collection time. - -**Example** - -.. code-block:: python - - def contains_docstring(p: Path) -> bool: - """Return True if the given Python file contains a top-level docstring.""" - ... - - - def test_py_files_contain_docstring(subtests: pytest.Subtests) -> None: - for path in Path.cwd().glob("*.py"): - with subtests.test(path=str(path)): - assert contains_docstring(path) - - -Each assert failure or error is caught by the context manager and reported individually, giving a clear picture of all files that are missing a docstring. - -In addition, :meth:`unittest.TestCase.subTest` is now also supported. - -This feature was originally implemented as a separate plugin in `pytest-subtests `__, but since then has been merged into the core. - -.. note:: - - This feature is experimental and will likely evolve in future releases. By that we mean that we might change how subtests are reported on failure, but the functionality and how to use it are stable. diff --git a/changelog/13678.feature.rst b/changelog/13678.feature.rst deleted file mode 100644 index 63c7dfa399f..00000000000 --- a/changelog/13678.feature.rst +++ /dev/null @@ -1,3 +0,0 @@ -Added a new `faulthandler_exit_on_timeout` ini option set to "false" by default to let `faulthandler` interrupt the `pytest` process after a timeout in case of deadlock -- by :user:`ogrisel`. - -Previously, a `faulthandler` timeout would only dump the traceback of all threads to stderr, but would not interrupt the `pytest` process. diff --git a/changelog/13695.contrib.rst b/changelog/13695.contrib.rst deleted file mode 100644 index 675e1fc96a0..00000000000 --- a/changelog/13695.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -Flush `stdout` and `stderr` in `Pytester.run` to avoid truncated outputs in `test_faulthandler.py::test_timeout` on CI -- by :user:`ogrisel`. diff --git a/changelog/13700.improvement.rst b/changelog/13700.improvement.rst deleted file mode 100644 index 40753ae5d5f..00000000000 --- a/changelog/13700.improvement.rst +++ /dev/null @@ -1 +0,0 @@ -`--junitxml` no longer prints the `generated xml file` summary at the end of the pytest session when `--quiet` is given. diff --git a/changelog/13716.bugfix.rst b/changelog/13716.bugfix.rst deleted file mode 100644 index 5eeef4b7624..00000000000 --- a/changelog/13716.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed a bug where a nonsensical invocation like ``pytest x.py[a]`` (a file cannot be parametrized) was silently treated as ``pytest x.py``. This is now a usage error. diff --git a/changelog/13719.breaking.rst b/changelog/13719.breaking.rst deleted file mode 100644 index 328c7dfcf2b..00000000000 --- a/changelog/13719.breaking.rst +++ /dev/null @@ -1 +0,0 @@ -Support for Python 3.9 is dropped following its end of life. diff --git a/changelog/13722.bugfix.rst b/changelog/13722.bugfix.rst deleted file mode 100644 index ec36f466815..00000000000 --- a/changelog/13722.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed a misleading assertion failure message when using :func:`pytest.approx` on mappings with differing lengths. diff --git a/changelog/13732.improvement.rst b/changelog/13732.improvement.rst deleted file mode 100644 index 07b3d620cf6..00000000000 --- a/changelog/13732.improvement.rst +++ /dev/null @@ -1 +0,0 @@ -Previously, when filtering warnings, pytest would fail if the filter referenced a class that could not be imported. Now, this only outputs a message indicating the problem. diff --git a/changelog/13737.feature.rst b/changelog/13737.feature.rst deleted file mode 100644 index e7fe7fd3ab7..00000000000 --- a/changelog/13737.feature.rst +++ /dev/null @@ -1,4 +0,0 @@ -Added the :confval:`strict_parametrization_ids` configuration option. - -When set, pytest emits an error if it detects non-unique parameter set IDs, -rather than automatically making the IDs unique by adding `0`, `1`, ... to them. diff --git a/changelog/13743.feature.rst b/changelog/13743.feature.rst deleted file mode 100644 index b36782487f5..00000000000 --- a/changelog/13743.feature.rst +++ /dev/null @@ -1,37 +0,0 @@ -Added support for native TOML configuration files. - -While pytest, since version 6, supports configuration in ``pyproject.toml`` files under ``[tool.pytest.ini_options]``, -it does so in an "INI compatibility mode", where all configuration values are treated as strings or list of strings. -Now, pytest supports the native TOML data model. - -In ``pyproject.toml``, the native TOML configuration is under the ``[tool.pytest]`` table. - -.. code-block:: toml - - # pyproject.toml - [tool.pytest] - minversion = "9.0" - addopts = ["-ra", "-q"] - testpaths = [ - "tests", - "integration", - ] - -The ``[tool.pytest.ini_options]`` table remains supported, but both tables cannot be used at the same time. - -If you prefer to use a separate configuration file, or don't use ``pyproject.toml``, you can use ``pytest.toml`` or ``.pytest.toml``: - -.. code-block:: toml - - # pytest.toml or .pytest.toml - [pytest] - minversion = "9.0" - addopts = ["-ra", "-q"] - testpaths = [ - "tests", - "integration", - ] - -The documentation now shows configuration snippets in both TOML and INI formats, in a tabbed interface. - -See :ref:`config file formats` for full details. diff --git a/changelog/13766.breaking.rst b/changelog/13766.breaking.rst deleted file mode 100644 index d7bd5a9a0ee..00000000000 --- a/changelog/13766.breaking.rst +++ /dev/null @@ -1,2 +0,0 @@ -Previously, pytest would assume it was running in a CI/CD environment if either of the environment variables `$CI` or `$BUILD_NUMBER` was defined; -now, CI mode is only activated if at least one of those variables is defined and set to a *non-empty* value. diff --git a/changelog/13771.contrib.rst b/changelog/13771.contrib.rst deleted file mode 100644 index fa5cc8afee5..00000000000 --- a/changelog/13771.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -Skip `test_do_not_collect_symlink_siblings` on Windows environments without symlink support to avoid false negatives. diff --git a/changelog/13773.bugfix.rst b/changelog/13773.bugfix.rst deleted file mode 100644 index e3a9ff4b7a1..00000000000 --- a/changelog/13773.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the static fixture closure calculation to properly consider transitive dependencies requested by overridden fixtures. diff --git a/changelog/13779.breaking.rst b/changelog/13779.breaking.rst deleted file mode 100644 index f7e44c27dfa..00000000000 --- a/changelog/13779.breaking.rst +++ /dev/null @@ -1,22 +0,0 @@ -**PytestRemovedIn9Warning deprecation warnings are now errors by default.** - -Following our plan to remove deprecated features with as little disruption as -possible, all warnings of type ``PytestRemovedIn9Warning`` now generate errors -instead of warning messages by default. - -**The affected features will be effectively removed in pytest 9.1**, so please consult the -:ref:`deprecations` section in the docs for directions on how to update existing code. - -In the pytest ``9.0.X`` series, it is possible to change the errors back into warnings as a -stopgap measure by adding this to your ``pytest.ini`` file: - -.. code-block:: ini - - [pytest] - filterwarnings = - ignore::pytest.PytestRemovedIn9Warning - -But this will stop working when pytest ``9.1`` is released. - -**If you have concerns** about the removal of a specific feature, please add a -comment to :issue:`13779`. diff --git a/changelog/13791.packaging.rst b/changelog/13791.packaging.rst deleted file mode 100644 index d16065e85a5..00000000000 --- a/changelog/13791.packaging.rst +++ /dev/null @@ -1,2 +0,0 @@ -Minimum requirements on ``iniconfig`` and ``packaging`` were bumped -to ``1.0.1`` and ``22.0.0``, respectively. diff --git a/changelog/13807.deprecation.rst b/changelog/13807.deprecation.rst deleted file mode 100644 index 59bd62214e1..00000000000 --- a/changelog/13807.deprecation.rst +++ /dev/null @@ -1,3 +0,0 @@ -:meth:`monkeypatch.syspath_prepend() ` now issues a deprecation warning when the prepended path contains legacy namespace packages (those using ``pkg_resources.declare_namespace()``). -Users should migrate to native namespace packages (:pep:`420`). -See :ref:`monkeypatch-fixup-namespace-packages` for details. diff --git a/changelog/13816.bugfix.rst b/changelog/13816.bugfix.rst deleted file mode 100644 index 432fc519ed5..00000000000 --- a/changelog/13816.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed :func:`pytest.approx` which now returns a clearer error message when comparing mappings with different keys. diff --git a/changelog/13823.feature.rst b/changelog/13823.feature.rst deleted file mode 100644 index b6152ff50ea..00000000000 --- a/changelog/13823.feature.rst +++ /dev/null @@ -1,18 +0,0 @@ -Added a :confval:`strict` configuration option to enable all strictness-related options. - -When set to ``true``, the :confval:`strict` option currently enables - -* :confval:`strict_config` -* :confval:`strict_markers` -* :confval:`strict_parametrization_ids` -* :confval:`strict_xfail` - -The individual strictness options can be explicitly set to override the global :confval:`strict` setting. - -The previously-deprecated ``--strict`` command-line flag now enables strict mode. - -If pytest adds new strictness options in the future, they will also be enabled in strict mode. -Therefore, you should only enable strict mode if you use a pinned/locked version of pytest, -or if you want to proactively adopt new strictness options as they are added. - -See :ref:`strict mode` for more details. diff --git a/changelog/13823.improvement.rst b/changelog/13823.improvement.rst deleted file mode 100644 index 4346d702c8c..00000000000 --- a/changelog/13823.improvement.rst +++ /dev/null @@ -1,4 +0,0 @@ -Added :confval:`strict_xfail` as an alias to the ``xfail_strict`` option, -:confval:`strict_config` as an alias to the ``--strict-config`` flag, -and :confval:`strict_markers` as an alias to the ``--strict-markers`` flag. -This makes all strictness options consistently have configuration options with the prefix ``strict_``. diff --git a/changelog/13829.feature.rst b/changelog/13829.feature.rst deleted file mode 100644 index 5f80ca5ac2f..00000000000 --- a/changelog/13829.feature.rst +++ /dev/null @@ -1,5 +0,0 @@ -Added support for ini option aliases via the ``aliases`` parameter in :meth:`Parser.addini() `. - -Plugins can now register alternative names for ini options, -allowing for more flexibility in configuration naming and supporting backward compatibility when renaming options. -The canonical name always takes precedence if both the canonical name and an alias are specified in the configuration file. diff --git a/changelog/13830.misc.rst b/changelog/13830.misc.rst deleted file mode 100644 index 0d81ce2f14f..00000000000 --- a/changelog/13830.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Configuration overrides (``-o``/``--override-ini``) are now processed during startup rather than during :func:`config.getini() `. diff --git a/changelog/13841.contrib.rst b/changelog/13841.contrib.rst deleted file mode 100644 index e5672634700..00000000000 --- a/changelog/13841.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -``tox>=4`` is now required when contributing to pytest. diff --git a/changelog/13849.bugfix.rst b/changelog/13849.bugfix.rst deleted file mode 100644 index cdcc7b83591..00000000000 --- a/changelog/13849.bugfix.rst +++ /dev/null @@ -1,2 +0,0 @@ -Hidden ``.pytest.ini`` files are now picked up as the config file even if empty. -This was an inconsistency with non-hidden ``pytest.ini``. diff --git a/changelog/13859.improvement.rst b/changelog/13859.improvement.rst deleted file mode 100644 index b785381fd68..00000000000 --- a/changelog/13859.improvement.rst +++ /dev/null @@ -1 +0,0 @@ -Clarify the error message for `pytest.raises()` when a regex `match` fails. diff --git a/changelog/13861.improvement.rst b/changelog/13861.improvement.rst deleted file mode 100644 index 2f062404e1c..00000000000 --- a/changelog/13861.improvement.rst +++ /dev/null @@ -1 +0,0 @@ -Better sentence structure in a test's expected error message. Previously, the error message would be "expected exception must be , but got ". Now, it is "Expected , but got ". diff --git a/changelog/13865.bugfix.rst b/changelog/13865.bugfix.rst deleted file mode 100644 index f7cd94c2a30..00000000000 --- a/changelog/13865.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed `--show-capture` with `--tb=line`. diff --git a/changelog/478.feature.rst b/changelog/478.feature.rst deleted file mode 100644 index cd13ddd9733..00000000000 --- a/changelog/478.feature.rst +++ /dev/null @@ -1,3 +0,0 @@ -Support PEP420 (implicit namespace packages) as `--pyargs` target when :confval:`consider_namespace_packages` is `true` in the config. - -Previously, this option only impacted package names, now it also impacts tests discovery. diff --git a/doc/en/announce/index.rst b/doc/en/announce/index.rst index 1cc8fbaf7c0..f5e00d34cdb 100644 --- a/doc/en/announce/index.rst +++ b/doc/en/announce/index.rst @@ -6,6 +6,7 @@ Release announcements :maxdepth: 2 + release-9.0.0 release-8.4.2 release-8.4.1 release-8.4.0 diff --git a/doc/en/announce/release-9.0.0.rst b/doc/en/announce/release-9.0.0.rst new file mode 100644 index 00000000000..86dd828f045 --- /dev/null +++ b/doc/en/announce/release-9.0.0.rst @@ -0,0 +1,69 @@ +pytest-9.0.0 +======================================= + +The pytest team is proud to announce the 9.0.0 release! + +This release contains new features, improvements, bug fixes, and breaking changes, so users +are encouraged to take a look at the CHANGELOG carefully: + + 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: + +* AD +* Aditi De +* Ali Nazzal +* Bruno Oliveira +* Charles-Meldhine Madi Mnemoi +* Clément Robert +* CoretexShadow +* Cornelius Roemer +* Eero Vaher +* Florian Bruhin +* Harsha Sai +* Hossein +* Israël Hallé +* Iwithyou2025 +* James Addison +* John Litborn +* Jordan Macdonald +* Kieran Ryan +* Liam DeVoe +* Marc Mueller +* Marcos Boger +* Michał Górny +* Mulat Mekonen +* NayeemJohn +* Olivier Grisel +* Omri Golan +* Pierre Sassoulas +* Praise Tompane +* Ran Benita +* Reilly Brogan +* Samuel Gaist +* SarahPythonista +* Sorin Sbarnea +* Stu-ops +* Tanuj Rai +* bengartner +* dariomesic +* jakkdl +* karlicoss +* popododo0720 +* sazsu +* slackline +* vyuroshchin +* zapl +* 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) + + +Happy testing, +The pytest Development Team diff --git a/doc/en/builtin.rst b/doc/en/builtin.rst index ca350c5f3dd..a7b0ff2e5c8 100644 --- a/doc/en/builtin.rst +++ b/doc/en/builtin.rst @@ -22,7 +22,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a cachedir: .pytest_cache rootdir: /home/sweet/project collected 0 items - cache -- .../_pytest/cacheprovider.py:555 + cache -- .../_pytest/cacheprovider.py:566 Return a cache object that can persist state between testing sessions. cache.get(key, default) @@ -128,7 +128,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a captured = capfdbinary.readouterr() assert captured.out == b"hello\n" - doctest_namespace [session scope] -- .../_pytest/doctest.py:740 + doctest_namespace [session scope] -- .../_pytest/doctest.py:722 Fixture that returns a :py:class:`dict` that will be injected into the namespace of doctests. @@ -142,7 +142,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:1425 + pytestconfig [session scope] -- .../_pytest/fixtures.py:1431 Session-scoped fixture that returns the session's :class:`pytest.Config` object. @@ -225,7 +225,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a * caplog.record_tuples -> list of (logger_name, level, message) tuples * caplog.clear() -> clear captured records and formatted log output string - monkeypatch -- .../_pytest/monkeypatch.py:31 + monkeypatch -- .../_pytest/monkeypatch.py:33 A convenient fixture for monkey-patching. The fixture provides these methods to modify objects, dictionaries, or @@ -254,6 +254,9 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a See :ref:`warnings` for information on warning categories. + subtests -- .../_pytest/subtests.py:129 + Provides subtests functionality. + tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:240 Return a :class:`pytest.TempPathFactory` instance for the test session. diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index 89f1c4e61b3..5220afc46e3 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -31,6 +31,307 @@ with advance notice in the **Deprecations** section of releases. .. towncrier release notes start +pytest 9.0.0 (2025-11-05) +========================= + +New features +------------ + + +- `#1367 `_: **Support for subtests** has been added. + + :ref:`subtests ` are an alternative to parametrization, useful in situations where the parametrization values are not all known at collection time. + + Example: + + .. code-block:: python + + def contains_docstring(p: Path) -> bool: + """Return True if the given Python file contains a top-level docstring.""" + ... + + + def test_py_files_contain_docstring(subtests: pytest.Subtests) -> None: + for path in Path.cwd().glob("*.py"): + with subtests.test(path=str(path)): + assert contains_docstring(path) + + + Each assert failure or error is caught by the context manager and reported individually, giving a clear picture of all files that are missing a docstring. + + In addition, :meth:`unittest.TestCase.subTest` is now also supported. + + This feature was originally implemented as a separate plugin in `pytest-subtests `__, but since then has been merged into the core. + + .. note:: + + This feature is experimental and will likely evolve in future releases. By that we mean that we might change how subtests are reported on failure, but the functionality and how to use it are stable. + + +- `#13743 `_: Added support for **native TOML configuration files**. + + While pytest, since version 6, supports configuration in ``pyproject.toml`` files under ``[tool.pytest.ini_options]``, + it does so in an "INI compatibility mode", where all configuration values are treated as strings or list of strings. + Now, pytest supports the native TOML data model. + + In ``pyproject.toml``, the native TOML configuration is under the ``[tool.pytest]`` table. + + .. code-block:: toml + + # pyproject.toml + [tool.pytest] + minversion = "9.0" + addopts = ["-ra", "-q"] + testpaths = [ + "tests", + "integration", + ] + + The ``[tool.pytest.ini_options]`` table remains supported, but both tables cannot be used at the same time. + + If you prefer to use a separate configuration file, or don't use ``pyproject.toml``, you can use ``pytest.toml`` or ``.pytest.toml``: + + .. code-block:: toml + + # pytest.toml or .pytest.toml + [pytest] + minversion = "9.0" + addopts = ["-ra", "-q"] + testpaths = [ + "tests", + "integration", + ] + + The documentation now (sometimes) shows configuration snippets in both TOML and INI formats, in a tabbed interface. + + See :ref:`config file formats` for full details. + + +- `#13823 `_: Added a **"strict mode"** enabled by the :confval:`strict` configuration option. + + When set to ``true``, the :confval:`strict` option currently enables + + * :confval:`strict_config` + * :confval:`strict_markers` + * :confval:`strict_parametrization_ids` + * :confval:`strict_xfail` + + The individual strictness options can be explicitly set to override the global :confval:`strict` setting. + + The previously-deprecated ``--strict`` command-line flag now enables strict mode. + + If pytest adds new strictness options in the future, they will also be enabled in strict mode. + Therefore, you should only enable strict mode if you use a pinned/locked version of pytest, + or if you want to proactively adopt new strictness options as they are added. + + See :ref:`strict mode` for more details. + + +- `#13737 `_: Added the :confval:`strict_parametrization_ids` configuration option. + + When set, pytest emits an error if it detects non-unique parameter set IDs, + rather than automatically making the IDs unique by adding `0`, `1`, ... to them. + This can be particularly useful for catching unintended duplicates. + + +- `#13072 `_: Added support for displaying test session **progress in the terminal tab** using the `OSC 9;4; `_ ANSI sequence. + When pytest runs in a supported terminal emulator like ConEmu, Gnome Terminal, Ptyxis, Windows Terminal, Kitty or Ghostty, + you'll see the progress in the terminal tab or window, + allowing you to monitor pytest's progress at a glance. + + This feature is automatically enabled when running in a TTY. It is implemented as an internal plugin. If needed, it can be disabled as follows: + - On a user level, using ``-p no:terminalprogress`` on the command line or via an environment variable ``PYTEST_ADDOPTS='-p no:terminalprogress'``. + - On a project configuration level, using ``addopts = "-p no:terminalprogress"``. + + +- `#478 `_: Support PEP420 (implicit namespace packages) as `--pyargs` target when :confval:`consider_namespace_packages` is `true` in the config. + + Previously, this option only impacted package imports, now it also impacts tests discovery. + + +- `#13678 `_: Added a new :confval:`faulthandler_exit_on_timeout` configuration option set to "false" by default to let `faulthandler` interrupt the `pytest` process after a timeout in case of deadlock. + + Previously, a `faulthandler` timeout would only dump the traceback of all threads to stderr, but would not interrupt the `pytest` process. + + -- by :user:`ogrisel`. + + +- `#13829 `_: Added support for configuration option aliases via the ``aliases`` parameter in :meth:`Parser.addini() `. + + Plugins can now register alternative names for configuration options, + allowing for more flexibility in configuration naming and supporting backward compatibility when renaming options. + The canonical name always takes precedence if both the canonical name and an alias are specified in the configuration file. + + + +Improvements in existing functionality +-------------------------------------- + +- `#13330 `_: Having pytest configuration spread over more than one file (for example having both a ``pytest.ini`` file and ``pyproject.toml`` with a ``[tool.pytest.ini_options]`` table) will now print a warning to make it clearer to the user that only one of them is actually used. + + -- by :user:`sgaist` + + +- `#13574 `_: The single argument ``--version`` no longer loads the entire plugin infrastructure, making it faster and more reliable when displaying only the pytest version. + + Passing ``--version`` twice (e.g., ``pytest --version --version``) retains the original behavior, showing both the pytest version and plugin information. + + .. note:: + + Since ``--version`` is now processed early, it only takes effect when passed directly via the command line. It will not work if set through other mechanisms, such as :envvar:`PYTEST_ADDOPTS` or :confval:`addopts`. + + +- `#13823 `_: Added :confval:`strict_xfail` as an alias to the ``xfail_strict`` option, + :confval:`strict_config` as an alias to the ``--strict-config`` flag, + and :confval:`strict_markers` as an alias to the ``--strict-markers`` flag. + This makes all strictness options consistently have configuration options with the prefix ``strict_``. + +- `#13700 `_: `--junitxml` no longer prints the `generated xml file` summary at the end of the pytest session when `--quiet` is given. + + +- `#13732 `_: Previously, when filtering warnings, pytest would fail if the filter referenced a class that could not be imported. Now, this only outputs a message indicating the problem. + + +- `#13859 `_: Clarify the error message for `pytest.raises()` when a regex `match` fails. + + +- `#13861 `_: Better sentence structure in a test's expected error message. Previously, the error message would be "expected exception must be , but got ". Now, it is "Expected , but got ". + + +Removals and backward incompatible breaking changes +--------------------------------------------------- + +- `#12083 `_: Fixed a bug where an invocation such as `pytest a/ a/b` would cause only tests from `a/b` to run, and not other tests under `a/`. + + The fix entails a few breaking changes to how such overlapping arguments and duplicates are handled: + + 1. `pytest a/b a/` or `pytest a/ a/b` are equivalent to `pytest a`; if an argument overlaps another arguments, only the prefix remains. + + 2. `pytest x.py x.py` is equivalent to `pytest x.py`; previously such an invocation was taken as an explicit request to run the tests from the file twice. + + If you rely on these behaviors, consider using :ref:`--keep-duplicates `, which retains its existing behavior (including the bug). + + +- `#13719 `_: Support for Python 3.9 is dropped following its end of life. + + +- `#13766 `_: Previously, pytest would assume it was running in a CI/CD environment if either of the environment variables `$CI` or `$BUILD_NUMBER` was defined; + now, CI mode is only activated if at least one of those variables is defined and set to a *non-empty* value. + + +- `#13779 `_: **PytestRemovedIn9Warning deprecation warnings are now errors by default.** + + Following our plan to remove deprecated features with as little disruption as + possible, all warnings of type ``PytestRemovedIn9Warning`` now generate errors + instead of warning messages by default. + + **The affected features will be effectively removed in pytest 9.1**, so please consult the + :ref:`deprecations` section in the docs for directions on how to update existing code. + + In the pytest ``9.0.X`` series, it is possible to change the errors back into warnings as a + stopgap measure by adding this to your ``pytest.ini`` file: + + .. code-block:: ini + + [pytest] + filterwarnings = + ignore::pytest.PytestRemovedIn9Warning + + But this will stop working when pytest ``9.1`` is released. + + **If you have concerns** about the removal of a specific feature, please add a + comment to :issue:`13779`. + + + +Deprecations (removal in next major release) +-------------------------------------------- + +- `#13807 `_: :meth:`monkeypatch.syspath_prepend() ` now issues a deprecation warning when the prepended path contains legacy namespace packages (those using ``pkg_resources.declare_namespace()``). + Users should migrate to native namespace packages (:pep:`420`). + See :ref:`monkeypatch-fixup-namespace-packages` for details. + + +Bug fixes +--------- + +- `#13445 `_: Made the type annotations of :func:`pytest.skip` and friends more spec-complaint to have them work across more type checkers. + + +- `#13537 `_: Fixed a bug in which :class:`ExceptionGroup` with only ``Skipped`` exceptions in teardown was not handled correctly and showed as error. + + +- `#13598 `_: Fixed possible collection confusion on Windows when short paths and symlinks are involved. + + +- `#13716 `_: Fixed a bug where a nonsensical invocation like ``pytest x.py[a]`` (a file cannot be parametrized) was silently treated as ``pytest x.py``. This is now a usage error. + + +- `#13722 `_: Fixed a misleading assertion failure message when using :func:`pytest.approx` on mappings with differing lengths. + + +- `#13773 `_: Fixed the static fixture closure calculation to properly consider transitive dependencies requested by overridden fixtures. + + +- `#13816 `_: Fixed :func:`pytest.approx` which now returns a clearer error message when comparing mappings with different keys. + + +- `#13849 `_: Hidden ``.pytest.ini`` files are now picked up as the config file even if empty. + This was an inconsistency with non-hidden ``pytest.ini``. + + +- `#13865 `_: Fixed `--show-capture` with `--tb=line`. + + +- `#13522 `_: Fixed :fixture:`pytester` in subprocess mode ignored all :attr`pytester.plugins ` except the first. + + Fixed :fixture:`pytester` in subprocess mode silently ignored non-str :attr:`pytester.plugins `. + Now it errors instead. + If you are affected by this, specify the plugin by name, or switch the affected tests to use :func:`pytester.runpytest_inprocess ` explicitly instead. + + + +Packaging updates and notes for downstreams +------------------------------------------- + +- `#13791 `_: Minimum requirements on ``iniconfig`` and ``packaging`` were bumped to ``1.0.1`` and ``22.0.0``, respectively. + + + +Contributor-facing changes +-------------------------- + +- `#12244 `_: Fixed self-test failures when `TERM=dumb`. + + +- `#12474 `_: Added scheduled GitHub Action Workflow to run Sphinx linkchecks in repo documentation. + + +- `#13621 `_: pytest's own testsuite now handles the ``lsof`` command hanging (e.g. due to unreachable network filesystems), with the affected selftests being skipped after 10 seconds. + + +- `#13638 `_: Fixed deprecated :command:`gh pr new` command in :file:`scripts/prepare-release-pr.py`. + The script now uses :command:`gh pr create` which is compatible with GitHub CLI v2.0+. + + +- `#13695 `_: Flush `stdout` and `stderr` in `Pytester.run` to avoid truncated outputs in `test_faulthandler.py::test_timeout` on CI -- by :user:`ogrisel`. + + +- `#13771 `_: Skip `test_do_not_collect_symlink_siblings` on Windows environments without symlink support to avoid false negatives. + + +- `#13841 `_: ``tox>=4`` is now required when contributing to pytest. + +- `#13625 `_: Added missing docstrings to ``pytest_addoption()``, ``pytest_configure()``, and ``cacheshow()`` functions in ``cacheprovider.py``. + + + +Miscellaneous internal changes +------------------------------ + +- `#13830 `_: Configuration overrides (``-o``/``--override-ini``) are now processed during startup rather than during :func:`config.getini() `. + + pytest 8.4.2 (2025-09-03) ========================= diff --git a/doc/en/example/markers.rst b/doc/en/example/markers.rst index c8f7c8c2fa2..afb1ece0fe8 100644 --- a/doc/en/example/markers.rst +++ b/doc/en/example/markers.rst @@ -262,7 +262,7 @@ You can ask which markers exist for your test suite - the list includes our just @pytest.mark.skipif(condition, ..., *, reason=...): skip the given test function if any of the conditions evaluate to True. Example: skipif(sys.platform == 'win32') skips the test if we are on the win32 platform. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-skipif - @pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=xfail_strict): mark the test function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-xfail + @pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=strict_xfail): mark the test function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-xfail @pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see https://docs.pytest.org/en/stable/how-to/parametrize.html for more info and examples. @@ -453,7 +453,7 @@ The ``--markers`` option always gives you a list of available markers: @pytest.mark.skipif(condition, ..., *, reason=...): skip the given test function if any of the conditions evaluate to True. Example: skipif(sys.platform == 'win32') skips the test if we are on the win32 platform. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-skipif - @pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=xfail_strict): mark the test function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-xfail + @pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=strict_xfail): mark the test function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-xfail @pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see https://docs.pytest.org/en/stable/how-to/parametrize.html for more info and examples. diff --git a/doc/en/example/nonpython.rst b/doc/en/example/nonpython.rst index aa463e2416b..a8d172937c5 100644 --- a/doc/en/example/nonpython.rst +++ b/doc/en/example/nonpython.rst @@ -40,7 +40,7 @@ now execute the test specification: spec failed: 'some': 'other' no further details known at this point. ========================= short test summary info ========================== - FAILED test_simple.yaml::hello + FAILED test_simple.yaml::hello - usecase execution failed ======================= 1 failed, 1 passed in 0.12s ======================== .. regendoc:wipe @@ -78,7 +78,7 @@ consulted when reporting in ``verbose`` mode: spec failed: 'some': 'other' no further details known at this point. ========================= short test summary info ========================== - FAILED test_simple.yaml::hello + FAILED test_simple.yaml::hello - usecase execution failed ======================= 1 failed, 1 passed in 0.12s ======================== .. regendoc:wipe diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index 6374e0edb3d..b27dae18c32 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -162,7 +162,7 @@ objects, they are still using the default pytest representation: rootdir: /home/sweet/project collected 8 items - + @@ -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 - + @@ -318,7 +318,7 @@ Let's first see how it looks like at collection time: rootdir: /home/sweet/project collected 2 items - + @@ -503,12 +503,10 @@ Running it results in some skips if we don't have all the python interpreters in .. code-block:: pytest . $ pytest -rs -q multipython.py - sssssssssssssssssssssssssss [100%] + ssssssssssss......sss...... [100%] ========================= short test summary info ========================== - SKIPPED [9] multipython.py:67: 'python3.9' not found - SKIPPED [9] multipython.py:67: 'python3.10' not found - SKIPPED [9] multipython.py:67: 'python3.11' not found - 27 skipped in 0.12s + SKIPPED [15] multipython.py:67: 'python3.11' not found + 12 passed, 15 skipped in 0.12s Parametrization of optional implementations/imports --------------------------------------------------- diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index 46d15557fa8..09489418773 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -139,10 +139,10 @@ The test collection would look like this: =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y rootdir: /home/sweet/project - configfile: pytest.ini + configfile: pytest.toml collected 2 items - + @@ -202,10 +202,10 @@ You can always peek at the collection tree without running tests like this: =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y rootdir: /home/sweet/project - configfile: pytest.ini + configfile: pytest.toml collected 3 items - + @@ -286,7 +286,7 @@ file will be left out: =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y rootdir: /home/sweet/project - configfile: pytest.ini + configfile: pytest.toml collected 0 items ======================= no tests collected in 0.12s ======================== diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index 928dcddae74..e150e7ca00b 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -166,6 +166,8 @@ Now we'll get feedback on a bad argument: $ pytest -q --cmdopt=type3 ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...] pytest: error: argument --cmdopt: invalid choice: 'type3' (choose from type1, type2) + inifile: None + rootdir: /home/sweet/project If you need to provide more detailed error messages, you can use the @@ -726,7 +728,7 @@ We can run this: file /home/sweet/project/b/test_error.py, line 1 def test_root(db): # no db here, will error out E fixture 'db' not found - > available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory + > available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory > use 'pytest --fixtures [testpath]' for help on them. /home/sweet/project/b/test_error.py:1 diff --git a/doc/en/getting-started.rst b/doc/en/getting-started.rst index 24501f53a69..ec1ef60a605 100644 --- a/doc/en/getting-started.rst +++ b/doc/en/getting-started.rst @@ -20,7 +20,7 @@ Install ``pytest`` .. code-block:: bash $ pytest --version - pytest 8.4.2 + pytest 9.0.0 .. _`simpletest`: diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 73a3eeb15c1..0c4ddb8b4dc 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1423,7 +1423,7 @@ Running the above tests results in the following test IDs being used: rootdir: /home/sweet/project collected 12 items - + diff --git a/doc/en/how-to/subtests.rst b/doc/en/how-to/subtests.rst index 956405bc7cf..c8d9461c983 100644 --- a/doc/en/how-to/subtests.rst +++ b/doc/en/how-to/subtests.rst @@ -29,7 +29,37 @@ Each assertion failure or error is caught by the context manager and reported in .. code-block:: pytest $ pytest -q test_subtest.py - + uuuuuF [100%] + ================================= FAILURES ================================= + _______________________ test [custom message] (i=1) ________________________ + + subtests = <_pytest.subtests.Subtests object at 0xdeadbeef0001> + + def test(subtests): + for i in range(5): + with subtests.test(msg="custom message", i=i): + > assert i % 2 == 0 + E assert (1 % 2) == 0 + + test_subtest.py:6: AssertionError + _______________________ test [custom message] (i=3) ________________________ + + subtests = <_pytest.subtests.Subtests object at 0xdeadbeef0001> + + def test(subtests): + for i in range(5): + with subtests.test(msg="custom message", i=i): + > assert i % 2 == 0 + E assert (3 % 2) == 0 + + test_subtest.py:6: AssertionError + ___________________________________ test ___________________________________ + contains 2 failed subtests + ========================= short test summary info ========================== + SUBFAILED[custom message] (i=1) test_subtest.py::test - assert (1 % 2) == 0 + SUBFAILED[custom message] (i=3) test_subtest.py::test - assert (3 % 2) == 0 + FAILED test_subtest.py::test - contains 2 failed subtests + 3 failed, 3 subtests passed in 0.12s In the output above: diff --git a/doc/en/how-to/writing_plugins.rst b/doc/en/how-to/writing_plugins.rst index 3cf49ebb0c6..6382edc4797 100644 --- a/doc/en/how-to/writing_plugins.rst +++ b/doc/en/how-to/writing_plugins.rst @@ -448,7 +448,7 @@ in our configuration file to tell pytest where to look for example files. =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y rootdir: /home/sweet/project - configfile: pytest.ini + configfile: pytest.toml collected 2 items test_example.py .. [100%] diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 108ad660af3..1c51b712ee1 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -2692,11 +2692,9 @@ All the command-line flags can be obtained by running ``pytest --help``:: --markers show markers (builtin, plugin and per-project ones). -x, --exitfirst Exit instantly on first error or failed test --maxfail=num Exit after first num failures or errors - --strict-config Any warnings encountered while parsing the `pytest` - section of the configuration file raise errors - --strict-markers Markers not registered in the `markers` section of - the configuration file raise errors - --strict (Deprecated) alias to --strict-markers + --strict-config Enables the strict_config option + --strict-markers Enables the strict_markers option + --strict Enables the strict option --fixtures, --funcargs Show available fixtures, sorted by plugin appearance (fixtures with leading '_' are only shown with '-v') @@ -2845,8 +2843,9 @@ All the command-line flags can be obtained by running ``pytest --help``:: file. This file is opened with 'w' and truncated as a result, care advised. Default: pytestdebug.log. -o, --override-ini OVERRIDE_INI - Override ini option with "option=value" style, e.g. - `-o xfail_strict=True -o cache_dir=cache`. + Override configuration option with "option=value" + style, e.g. `-o strict_xfail=True -o + cache_dir=cache`. --assert=MODE Control assertion debugging tools. 'plain' performs no assertion debugging. 'rewrite' (the default) rewrites assert statements @@ -2888,11 +2887,19 @@ All the command-line flags can be obtained by running ``pytest --help``:: Disable a logger by name. Can be passed multiple times. - [pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg|pyproject.toml file found: + [pytest] configuration options in the first pytest.toml|pytest.ini|tox.ini|setup.cfg|pyproject.toml file found: markers (linelist): Register new markers for test functions empty_parameter_set_mark (string): Default marker for empty parametersets + strict_config (bool): Any warnings encountered while parsing the `pytest` + section of the configuration file raise errors + strict_markers (bool): + Markers not registered in the `markers` section of + the configuration file raise errors + strict (bool): Enables all strictness options, currently: + strict_config, strict_markers, strict_xfail, + strict_parametrization_ids filterwarnings (linelist): Each line specifies a pattern for warnings.filterwarnings. Processed after @@ -2919,6 +2926,9 @@ All the command-line flags can be obtained by running ``pytest --help``:: disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool): Disable string escape non-ASCII characters, might cause unwanted side effects(use at your own risk) + strict_parametrization_ids (bool): + Emit an error if non-unique parameter set IDs are + detected console_output_style (string): Console output: "classic", or with additional progress information ("progress" (percentage) | @@ -2929,8 +2939,9 @@ All the command-line flags can be obtained by running ``pytest --help``:: overriding the main level. Higher levels will provide more detailed information about each test case executed. - xfail_strict (bool): Default for the strict parameter of xfail markers - when not given explicitly (default: False) + strict_xfail (bool): Default for the strict parameter of xfail markers + when not given explicitly (default: False) (alias: + xfail_strict) tmp_path_retention_count (string): How many sessions should we keep the `tmp_path` directories, according to @@ -2998,6 +3009,10 @@ All the command-line flags can be obtained by running ``pytest --help``:: faulthandler_exit_on_timeout (bool): Exit the test process if a test takes more than faulthandler_timeout seconds to finish + verbosity_subtests (string): + Specify verbosity level for subtests. Higher levels + will generate output for passed subtests. Failed + subtests are always reported. addopts (args): Extra command line options minversion (string): Minimally required pytest version pythonpath (paths): Add paths to sys.path @@ -3011,6 +3026,9 @@ All the command-line flags can be obtained by running ``pytest --help``:: PYTEST_PLUGINS Comma-separated plugins to load during startup PYTEST_DISABLE_PLUGIN_AUTOLOAD Set to disable plugin auto-loading PYTEST_DEBUG Set to enable debug tracing of pytest's internals + PYTEST_DEBUG_TEMPROOT Override the system temporary directory + PYTEST_THEME The Pygments style to use for code output + PYTEST_THEME_MODE Set the PYTEST_THEME to be either 'dark' or 'light' to see available markers type: pytest --markers diff --git a/doc/en/requirements.txt b/doc/en/requirements.txt index 5483bb46063..fcaaee695c9 100644 --- a/doc/en/requirements.txt +++ b/doc/en/requirements.txt @@ -1,6 +1,6 @@ -c broken-dep-constraints.txt pluggy>=1.5.0 -pygments-pytest>=2.3.0 +pygments-pytest>=2.5.0 sphinx-removed-in>=0.2.0 sphinx>=7 sphinxcontrib-trio From 2af72934b8234dc26833c8e71c8325ece369c265 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 8 Nov 2025 19:46:09 +0200 Subject: [PATCH 007/307] ci: `gh release create` needs a checkout Not sure why, but it failed without one in CI: ``` $ gh release create --notes-file gh-release-notes.md --verify-tag "$VERSION" dist/* failed to run git: fatal: not a git repository (or any of the parent directories): .git ``` --- .github/workflows/deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 176daa1b4d7..ad7cc029c5e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -120,6 +120,11 @@ jobs: permissions: contents: write steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + persist-credentials: true + - name: Download Package uses: actions/download-artifact@v6 with: From 041aacad506b6c6891f2898f2bd378e0896e8b86 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 8 Nov 2025 20:43:38 +0200 Subject: [PATCH 008/307] testing: temporarily disable pytest-asyncio integration test Currently doesn't support pytest 9 (has a <9 bound). Should be reverted once the bound is increased. --- testing/plugins_integration/pytest.ini | 3 ++- testing/plugins_integration/requirements.txt | 3 ++- tox.ini | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/testing/plugins_integration/pytest.ini b/testing/plugins_integration/pytest.ini index b0eb9c3806f..258b4143177 100644 --- a/testing/plugins_integration/pytest.ini +++ b/testing/plugins_integration/pytest.ini @@ -1,6 +1,7 @@ [pytest] strict_markers = True -asyncio_mode = strict +; Temporarily disabled until adds support for pytest 9. +; asyncio_mode = strict filterwarnings = error::pytest.PytestWarning ignore:usefixtures.* without arguments has no effect:pytest.PytestWarning diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index 22d13f87b96..d62f25743f0 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,6 +1,7 @@ anyio[trio]==4.11.0 django==5.2.8 -pytest-asyncio==1.2.0 +# Temporarily disabled until adds support for pytest 9. +#pytest-asyncio==1.2.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 pytest-django==4.11.1 diff --git a/tox.ini b/tox.ini index b6fcecc886a..bbd62b7e7c5 100644 --- a/tox.ini +++ b/tox.ini @@ -175,7 +175,8 @@ commands = pytest --html=simple.html simple_integration.py pytest --reruns 5 simple_integration.py pytest_rerunfailures_integration.py pytest pytest_anyio_integration.py - pytest pytest_asyncio_integration.py + # Temporarily disabled until adds support for pytest 9. + # pytest pytest_asyncio_integration.py pytest pytest_mock_integration.py pytest pytest_trio_integration.py pytest pytest_twisted_integration.py From c37e687774d050e96102f936dbc38a839b58c9f9 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 9 Nov 2025 00:30:37 +0200 Subject: [PATCH 009/307] terminal: disable terminal progress plugin on iTerm2 Fix #13896 --- changelog/13896.bugfix.rst | 1 + src/_pytest/terminal.py | 12 ++++++++++-- testing/test_terminal.py | 11 +++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 changelog/13896.bugfix.rst diff --git a/changelog/13896.bugfix.rst b/changelog/13896.bugfix.rst new file mode 100644 index 00000000000..821af0c96b4 --- /dev/null +++ b/changelog/13896.bugfix.rst @@ -0,0 +1 @@ +The terminal progress plugin added in pytest 9.0 is now automatically disabled when iTerm2 is detected, it generated desktop notifications instead of the desired functionality. diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 158558b4571..4517b05bdee 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -16,6 +16,7 @@ import datetime from functools import partial import inspect +import os from pathlib import Path import platform import sys @@ -299,8 +300,15 @@ def mywriter(tags, args): config.trace.root.setprocessor("pytest:config", mywriter) if reporter.isatty(): - plugin = TerminalProgressPlugin(reporter) - config.pluginmanager.register(plugin, "terminalprogress") + # Some terminals interpret OSC 9;4 as desktop notification, + # skip on those we know (#13896). + should_skip_terminal_progress = ( + # iTerm2 (reported on version 3.6.5). + "ITERM_SESSION_ID" in os.environ + ) + if not should_skip_terminal_progress: + plugin = TerminalProgressPlugin(reporter) + config.pluginmanager.register(plugin, "terminalprogress") def getreportopt(config: Config) -> str: diff --git a/testing/test_terminal.py b/testing/test_terminal.py index ee540b65135..a981e14f0a2 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -3443,6 +3443,17 @@ def test_disabled_for_non_tty(self, pytester: pytest.Pytester) -> None: plugin = config.pluginmanager.get_plugin("terminalprogress") assert plugin is None + def test_disabled_for_iterm2(self, pytester: pytest.Pytester, monkeypatch) -> None: + """Should not register the plugin on iTerm2 terminal since it interprets + OSC 9;4 as desktop notifications, not progress (#13896).""" + monkeypatch.setenv( + "ITERM_SESSION_ID", "w0t1p0:3DB6DF06-FE11-40C3-9A66-9E10A193A632" + ) + with patch.object(sys.stdout, "isatty", return_value=True): + config = pytester.parseconfigure() + plugin = config.pluginmanager.get_plugin("terminalprogress") + assert plugin is None + @pytest.mark.parametrize( ["state", "progress", "expected"], [ From 6eb7609c7d738da904de5c8b0b7c9c2a80ddf3e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 9 Nov 2025 06:18:19 +0000 Subject: [PATCH 010/307] [automated] Update plugin list (#13900) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 174 +++++++++++++++++-------------- 1 file changed, 95 insertions(+), 79 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index c13600133f6..62735e439a6 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A - :pypi:`pytest-aio` Pytest plugin for testing async python code Jul 31, 2024 5 - Production/Stable pytest + :pypi:`pytest-aio` Pytest plugin for testing async python code Nov 06, 2025 5 - Production/Stable pytest :pypi:`pytest-aioboto3` Aioboto3 Pytest with Moto Jan 17, 2025 N/A N/A :pypi:`pytest-aiofiles` pytest fixtures for writing aiofiles tests with pyfakefs May 14, 2017 5 - Production/Stable N/A :pypi:`pytest-aiogram` May 06, 2023 N/A N/A @@ -71,7 +71,7 @@ This list contains 1745 plugins. :pypi:`pytest-allure-adaptor2` Plugin for py.test to generate allure xml reports Oct 14, 2020 N/A pytest (>=2.7.3) :pypi:`pytest-allure-collection` pytest plugin to collect allure markers without running any tests Apr 13, 2023 N/A pytest :pypi:`pytest-allure-dsl` pytest plugin to test case doc string dls instructions Oct 25, 2020 4 - Beta pytest - :pypi:`pytest-allure-host` Publish Allure static reports to private S3 behind CloudFront with history preservation Oct 21, 2025 3 - Alpha N/A + :pypi:`pytest-allure-host` Publish Allure static reports to private S3 behind CloudFront with history preservation Nov 03, 2025 3 - Alpha N/A :pypi:`pytest-allure-id2history` Overwrite allure history id with testcase full name and testcase id if testcase has id, exclude parameters. May 14, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-allure-intersection` Oct 27, 2022 N/A pytest (<5) :pypi:`pytest-allure-spec-coverage` The pytest plugin aimed to display test coverage of the specs(requirements) in Allure Oct 26, 2021 N/A pytest @@ -101,7 +101,7 @@ This list contains 1745 plugins. :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Oct 27, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Nov 06, 2025 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 @@ -181,7 +181,7 @@ This list contains 1745 plugins. :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A - :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Oct 30, 2025 5 - Production/Stable pytest>=8.1 + :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 07, 2025 5 - Production/Stable pytest>=8.1 :pypi:`pytest-better-datadir` A small example package Mar 13, 2023 N/A N/A :pypi:`pytest-better-parametrize` Better description of parametrized test cases Mar 05, 2024 4 - Beta pytest >=6.2.0 :pypi:`pytest-bg-process` Pytest plugin to initialize background process Jan 24, 2022 4 - Beta pytest (>=3.5.0) @@ -396,9 +396,9 @@ This list contains 1745 plugins. :pypi:`pytest-dbus-notification` D-BUS notifications for pytest results. Mar 05, 2014 5 - Production/Stable N/A :pypi:`pytest-dbx` Pytest plugin to run unit tests for dbx (Databricks CLI extensions) related code Nov 29, 2022 N/A pytest (>=7.1.3,<8.0.0) :pypi:`pytest-dc` Manages Docker containers during your integration tests Aug 16, 2023 5 - Production/Stable pytest >=3.3 - :pypi:`pytest-deadfixtures` A simple plugin to list unused fixtures in pytest Jul 23, 2020 5 - Production/Stable N/A + :pypi:`pytest-deadfixtures` A simple plugin to list unused fixtures in pytest Nov 08, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-deduplicate` Identifies duplicate unit tests Aug 12, 2023 4 - Beta pytest - :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Sep 02, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Oct 27, 2025 4 - Beta pytest>=7.0 @@ -498,7 +498,7 @@ This list contains 1745 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Oct 31, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Nov 07, 2025 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest @@ -523,15 +523,15 @@ This list contains 1745 plugins. :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest - :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Oct 27, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Oct 27, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Oct 27, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Nov 06, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Nov 06, 2025 5 - Production/Stable N/A :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) @@ -638,7 +638,7 @@ This list contains 1745 plugins. :pypi:`pytest-fixture-remover` A LibCST codemod to remove pytest fixtures applied via the usefixtures decorator, as well as its parametrizations. Feb 14, 2024 5 - Production/Stable N/A :pypi:`pytest-fixture-rtttg` Warn or fail on fixture name clash Feb 23, 2022 N/A pytest (>=7.0.1,<8.0.0) :pypi:`pytest-fixtures` Common fixtures for pytest May 01, 2019 5 - Production/Stable N/A - :pypi:`pytest-fixtures-fixtures` Handy fixtues to access your fixtures from your _pytest tests. Sep 14, 2025 4 - Beta pytest>=8.4.1 + :pypi:`pytest-fixtures-fixtures` Handy fixtues to access your fixtures from your _pytest tests. Nov 06, 2025 4 - Beta pytest>=8.4.1 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 @@ -689,7 +689,7 @@ This list contains 1745 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Sep 30, 2025 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Nov 06, 2025 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Oct 12, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -716,6 +716,7 @@ This list contains 1745 plugins. :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A :pypi:`pytest-greener` Pytest plugin for Greener Oct 18, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A @@ -740,7 +741,7 @@ This list contains 1745 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Oct 31, 2025 3 - Alpha pytest==8.4.2 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Nov 08, 2025 3 - Alpha pytest==8.4.2 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -754,7 +755,7 @@ This list contains 1745 plugins. :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A - :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Sep 05, 2025 N/A N/A + :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A :pypi:`pytest-html-plus` Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. Oct 30, 2025 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) @@ -782,7 +783,7 @@ This list contains 1745 plugins. :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A - :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Jul 25, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Oct 21, 2025 4 - Beta pytest :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest :pypi:`pytest-idapro` A pytest plugin for idapython. Allows a pytest setup to run tests outside and inside IDA in an automated manner by runnig pytest inside IDA and by mocking idapython api Nov 03, 2018 N/A N/A @@ -807,7 +808,7 @@ This list contains 1745 plugins. :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Apr 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-inmanta-extensions` Inmanta tests package Jul 04, 2025 5 - Production/Stable N/A + :pypi:`pytest-inmanta-extensions` Inmanta tests package Nov 04, 2025 5 - Production/Stable N/A :pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Aug 26, 2025 5 - Production/Stable N/A :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest @@ -855,7 +856,7 @@ This list contains 1745 plugins. :pypi:`pytest-jsonlint` UNKNOWN Aug 04, 2016 N/A N/A :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 - :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Apr 20, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Sep 13, 2025 N/A pytest :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 :pypi:`pytest-jubilant` Add your description here Jul 28, 2025 N/A pytest>=8.3.5 @@ -969,7 +970,7 @@ This list contains 1745 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Oct 23, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 06, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1038,11 +1039,12 @@ This list contains 1745 plugins. :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output. Mar 04, 2024 N/A pytest>=7,<9 :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 + :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Nov 05, 2025 2 - Pre-Alpha pytest>=8.3.2; extra == "dev" :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) :pypi:`pytest-neos` Pytest plugin for neos Sep 10, 2024 5 - Production/Stable pytest<8.0,>=7.2; extra == "dev" - :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Jan 06, 2025 N/A N/A + :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Nov 03, 2025 N/A N/A :pypi:`pytest-netdut` "Automated software testing for switches using pytest" Oct 09, 2025 N/A pytest>=3.5.0 :pypi:`pytest-network` A simple plugin to disable network on socket level. May 07, 2020 N/A N/A :pypi:`pytest-network-endpoints` Network endpoints plugin for pytest Mar 06, 2022 N/A pytest @@ -1070,7 +1072,7 @@ This list contains 1745 plugins. :pypi:`pytest-notion` A PyTest Reporter to send test runs to Notion.so Aug 07, 2019 N/A N/A :pypi:`pytest-nunit` A pytest plugin for generating NUnit3 test result XML output Feb 26, 2024 5 - Production/Stable N/A :pypi:`pytest-oar` PyTest plugin for the OAR testing framework May 12, 2025 N/A pytest>=6.0.1 - :pypi:`pytest-oarepo` Oct 23, 2025 N/A pytest>=7.1.2; extra == "dev" + :pypi:`pytest-oarepo` Nov 07, 2025 N/A pytest>=7.1.2; extra == "dev" :pypi:`pytest-object-getter` Import any object from a 3rd party module while mocking its namespace on demand. Jul 31, 2022 5 - Production/Stable pytest :pypi:`pytest-ochrus` pytest results data-base and HTML reporter Feb 21, 2018 4 - Beta N/A :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) @@ -1164,8 +1166,8 @@ This list contains 1745 plugins. :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A - :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Jul 02, 2025 N/A N/A - :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 01, 2025 3 - Alpha pytest + :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Nov 04, 2025 N/A N/A + :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 03, 2025 3 - Alpha pytest :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) @@ -1315,7 +1317,7 @@ This list contains 1745 plugins. :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Jul 08, 2025 N/A pytest>=4.6.10 :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A - :pypi:`pytest-req` pytest requests plugin Sep 08, 2025 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-req` pytest requests plugin Nov 04, 2025 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-reqcov` A pytest plugin for requirement coverage tracking Jul 04, 2025 3 - Alpha pytest>=6.0 :pypi:`pytest-reqs` pytest plugin to check pinned requirements May 12, 2019 N/A pytest (>=2.4.2) :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) @@ -1331,7 +1333,7 @@ This list contains 1745 plugins. :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 22, 2024 4 - Beta pytest - :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Jul 29, 2025 N/A pytest~=7.0 + :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 07, 2025 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-resource-usage` Pytest plugin for reporting running time and peak memory usage Nov 06, 2022 5 - Production/Stable pytest>=7.0.0 @@ -1364,7 +1366,7 @@ This list contains 1745 plugins. :pypi:`pytest-rmysql` This is a plugin which is able to connet MySQL easyly. Aug 17, 2025 N/A pytest>=8.4.1 :pypi:`pytest-rng` Fixtures for seeding tests and making randomness reproducible Aug 08, 2019 5 - Production/Stable pytest :pypi:`pytest-roast` pytest plugin for ROAST configuration override and fixtures Nov 09, 2022 5 - Production/Stable pytest - :pypi:`pytest-robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Oct 06, 2025 N/A pytest<9,>=7 + :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Nov 08, 2025 N/A pytest<9,>=7 :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) @@ -1391,7 +1393,7 @@ This list contains 1745 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 01, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 08, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Oct 29, 2025 N/A N/A @@ -1404,7 +1406,7 @@ This list contains 1745 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 01, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 08, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1575,7 +1577,7 @@ This list contains 1745 plugins. :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testit-parametrize` A pytest plugin for uploading parameterized tests parameters into TMS TestIT Dec 04, 2024 4 - Beta pytest>=8.3.3 :pypi:`pytest-testlink-adaptor` pytest reporting plugin for testlink Dec 20, 2018 4 - Beta pytest (>=2.6) - :pypi:`pytest-testmon` selects tests affected by changed files and methods Dec 22, 2024 4 - Beta pytest<9,>=5 + :pypi:`pytest-testmon` selects tests affected by changed files and methods Nov 07, 2025 4 - Beta pytest<9,>=5 :pypi:`pytest-testmon-dev` selects tests affected by changed files and methods Mar 30, 2023 4 - Beta pytest (<8,>=5) :pypi:`pytest-testmon-oc` nOly selects tests affected by changed files and methods Jun 01, 2022 4 - Beta pytest (<8,>=5) :pypi:`pytest-testmon-skip-libraries` selects tests affected by changed files and methods Mar 03, 2023 4 - Beta pytest (<8,>=5) @@ -1653,7 +1655,7 @@ This list contains 1745 plugins. :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A - :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Oct 23, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Nov 02, 2025 N/A pytest>=8.3.5 :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A @@ -1674,7 +1676,7 @@ This list contains 1745 plugins. :pypi:`pytest-uncollect-if` A plugin to uncollect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-unflakable` Unflakable plugin for PyTest Apr 30, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-unhandled-exception-exit-code` Plugin for py.test set a different exit code on uncaught exceptions Jun 22, 2020 5 - Production/Stable pytest (>=2.3) - :pypi:`pytest-unique` Pytest fixture to generate unique values. Jun 10, 2025 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-unique` Pytest fixture to generate unique values. Nov 03, 2025 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-unittest-filter` A pytest plugin for filtering unittest-based test classes Jan 12, 2019 4 - Beta pytest (>=3.1.0) :pypi:`pytest-unittest-id-runner` A pytest plugin to run tests using unittest-style test IDs Feb 09, 2025 N/A pytest>=6.0.0 :pypi:`pytest-unmagic` Pytest fixtures with conventional import semantics Jul 14, 2025 5 - Production/Stable pytest @@ -1778,7 +1780,7 @@ This list contains 1745 plugins. :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 - :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. May 05, 2025 4 - Beta pytest>=8.3.5 + :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Nov 05, 2025 5 - Production/Stable pytest>=8.3.5 =============================================== ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ .. only:: latex @@ -1911,7 +1913,7 @@ This list contains 1745 plugins. pytest plugin for connecting to ai1899 smart system stack :pypi:`pytest-aio` - *last release*: Jul 31, 2024, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -2044,7 +2046,7 @@ This list contains 1745 plugins. pytest plugin to test case doc string dls instructions :pypi:`pytest-allure-host` - *last release*: Oct 21, 2025, + *last release*: Nov 03, 2025, *status*: 3 - Alpha, *requires*: N/A @@ -2254,7 +2256,7 @@ This list contains 1745 plugins. Pytest plugin for appium :pypi:`pytest-approval` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: N/A, *requires*: pytest>=8.3.5 @@ -2814,7 +2816,7 @@ This list contains 1745 plugins. Benchmark utility that plugs into pytest. :pypi:`pytest-benchmark` - *last release*: Oct 30, 2025, + *last release*: Nov 07, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=8.1 @@ -4319,9 +4321,9 @@ This list contains 1745 plugins. Manages Docker containers during your integration tests :pypi:`pytest-deadfixtures` - *last release*: Jul 23, 2020, + *last release*: Nov 08, 2025, *status*: 5 - Production/Stable, - *requires*: N/A + *requires*: pytest>=7.0.0 A simple plugin to list unused fixtures in pytest @@ -4333,7 +4335,7 @@ This list contains 1745 plugins. Identifies duplicate unit tests :pypi:`pytest-deepassert` - *last release*: Sep 02, 2025, + *last release*: Nov 04, 2025, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -5033,7 +5035,7 @@ This list contains 1745 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Oct 31, 2025, + *last release*: Nov 07, 2025, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5208,63 +5210,63 @@ This list contains 1745 plugins. Send execution result email :pypi:`pytest-embedded` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A pytest plugin that designed for embedded testing. :pypi:`pytest-embedded-arduino` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-idf` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with ESP-IDF. :pypi:`pytest-embedded-jtag` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with JTAG. :pypi:`pytest-embedded-nuttx` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with NuttX. :pypi:`pytest-embedded-qemu` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with QEMU. :pypi:`pytest-embedded-serial` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Serial. :pypi:`pytest-embedded-serial-esp` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Espressif target boards. :pypi:`pytest-embedded-wokwi` - *last release*: Oct 27, 2025, + *last release*: Nov 06, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -6013,7 +6015,7 @@ This list contains 1745 plugins. Common fixtures for pytest :pypi:`pytest-fixtures-fixtures` - *last release*: Sep 14, 2025, + *last release*: Nov 06, 2025, *status*: 4 - Beta, *requires*: pytest>=8.4.1 @@ -6370,7 +6372,7 @@ This list contains 1745 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Sep 30, 2025, + *last release*: Nov 06, 2025, *status*: N/A, *requires*: pytest>=3.6 @@ -6558,6 +6560,13 @@ This list contains 1745 plugins. Pytest plugin for Greener + :pypi:`pytest-green-light` + *last release*: Nov 03, 2025, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors + :pypi:`pytest-greet` *last release*: Oct 21, 2025, *status*: N/A, @@ -6727,7 +6736,7 @@ This list contains 1745 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Oct 31, 2025, + *last release*: Nov 08, 2025, *status*: 3 - Alpha, *requires*: pytest==8.4.2 @@ -6825,7 +6834,7 @@ This list contains 1745 plugins. Pytest HTML reports merging utility :pypi:`pytest-html-nova-act` - *last release*: Sep 05, 2025, + *last release*: Nov 05, 2025, *status*: N/A, *requires*: N/A @@ -7021,7 +7030,7 @@ This list contains 1745 plugins. help hypo module for pytest :pypi:`pytest-iam` - *last release*: Jul 25, 2025, + *last release*: Nov 02, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -7196,7 +7205,7 @@ This list contains 1745 plugins. A py.test plugin providing fixtures to simplify inmanta modules testing. :pypi:`pytest-inmanta-extensions` - *last release*: Jul 04, 2025, + *last release*: Nov 04, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -7532,8 +7541,8 @@ This list contains 1745 plugins. A pytest plugin to report test results as JSON files :pypi:`pytest-jsonschema` - *last release*: Apr 20, 2025, - *status*: 4 - Beta, + *last release*: Nov 07, 2025, + *status*: 5 - Production/Stable, *requires*: pytest>=6.2.0 A pytest plugin to perform JSONSchema validations @@ -8330,7 +8339,7 @@ This list contains 1745 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Oct 23, 2025, + *last release*: Nov 06, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -8812,6 +8821,13 @@ This list contains 1745 plugins. Seedable Jupyter Notebook testing tool + :pypi:`pytest-nbgrader` + *last release*: Nov 05, 2025, + *status*: 2 - Pre-Alpha, + *requires*: pytest>=8.3.2; extra == "dev" + + Pytest plugin for using with nbgrader and generating test cases. + :pypi:`pytest-ndb` *last release*: Apr 28, 2024, *status*: N/A, @@ -8841,7 +8857,7 @@ This list contains 1745 plugins. Pytest plugin for neos :pypi:`pytest-netconf` - *last release*: Jan 06, 2025, + *last release*: Nov 03, 2025, *status*: N/A, *requires*: N/A @@ -9037,7 +9053,7 @@ This list contains 1745 plugins. PyTest plugin for the OAR testing framework :pypi:`pytest-oarepo` - *last release*: Oct 23, 2025, + *last release*: Nov 07, 2025, *status*: N/A, *requires*: pytest>=7.1.2; extra == "dev" @@ -9695,14 +9711,14 @@ This list contains 1745 plugins. A pytest fixture for visual testing with Playwright :pypi:`pytest-playwright-visual-snapshot` - *last release*: Jul 02, 2025, + *last release*: Nov 04, 2025, *status*: N/A, *requires*: N/A Easy pytest visual regression testing using playwright :pypi:`pytest-pl-grader` - *last release*: Nov 01, 2025, + *last release*: Nov 03, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -10752,7 +10768,7 @@ This list contains 1745 plugins. Pytest Repo Structure :pypi:`pytest-req` - *last release*: Sep 08, 2025, + *last release*: Nov 04, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -10864,7 +10880,7 @@ This list contains 1745 plugins. Pytest fixture for recording and replaying serial port traffic. :pypi:`pytest-resilient-circuits` - *last release*: Jul 29, 2025, + *last release*: Nov 07, 2025, *status*: N/A, *requires*: pytest~=7.0 @@ -11094,8 +11110,8 @@ This list contains 1745 plugins. pytest plugin for ROAST configuration override and fixtures - :pypi:`pytest-robotframework` - *last release*: Oct 06, 2025, + :pypi:`pytest_robotframework` + *last release*: Nov 08, 2025, *status*: N/A, *requires*: pytest<9,>=7 @@ -11284,7 +11300,7 @@ This list contains 1745 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Nov 01, 2025, + *last release*: Nov 08, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11375,7 +11391,7 @@ This list contains 1745 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Nov 01, 2025, + *last release*: Nov 08, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -12572,7 +12588,7 @@ This list contains 1745 plugins. pytest reporting plugin for testlink :pypi:`pytest-testmon` - *last release*: Dec 22, 2024, + *last release*: Nov 07, 2025, *status*: 4 - Beta, *requires*: pytest<9,>=5 @@ -13118,7 +13134,7 @@ This list contains 1745 plugins. Text User Interface (TUI) and HTML report for Pytest test runs :pypi:`pytest-tui-runner` - *last release*: Oct 23, 2025, + *last release*: Nov 02, 2025, *status*: N/A, *requires*: pytest>=8.3.5 @@ -13265,7 +13281,7 @@ This list contains 1745 plugins. Plugin for py.test set a different exit code on uncaught exceptions :pypi:`pytest-unique` - *last release*: Jun 10, 2025, + *last release*: Nov 03, 2025, *status*: N/A, *requires*: pytest<9.0.0,>=8.0.0 @@ -13993,8 +14009,8 @@ This list contains 1745 plugins. 接口自动化测试框架 :pypi:`tursu` - *last release*: May 05, 2025, - *status*: 4 - Beta, + *last release*: Nov 05, 2025, + *status*: 5 - Production/Stable, *requires*: pytest>=8.3.5 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. From 500146b930d465215c6a56c32af38cc482e8686b Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 9 Nov 2025 16:30:10 +0200 Subject: [PATCH 011/307] doc: fix toml type of verbosity options in API reference Fix #13904. --- changelog/13904.bugfix.rst | 1 + doc/en/reference/reference.rst | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 changelog/13904.bugfix.rst diff --git a/changelog/13904.bugfix.rst b/changelog/13904.bugfix.rst new file mode 100644 index 00000000000..739c16e12bd --- /dev/null +++ b/changelog/13904.bugfix.rst @@ -0,0 +1 @@ +Fixed the TOML type of the verbosity settings in the API reference from number to string. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 1c51b712ee1..139140afdfa 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -2596,7 +2596,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. code-block:: toml [pytest] - verbosity_assertions = 2 + verbosity_assertions = "2" .. tab:: ini @@ -2618,7 +2618,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. code-block:: toml [pytest] - verbosity_subtests = 1 + verbosity_subtests = "1" .. tab:: ini @@ -2645,7 +2645,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. code-block:: toml [pytest] - verbosity_test_cases = 2 + verbosity_test_cases = "2" .. tab:: ini From bd654fee40f2c34f1ed0b888c0dbc5e41ffe8560 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 13:54:50 -0300 Subject: [PATCH 012/307] build(deps): Bump actions/upload-artifact from 4 to 5 (#13908) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ad7cc029c5e..ed7de4cc0c5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -64,7 +64,7 @@ jobs: tox -e generate-gh-release-notes -- "$VERSION" gh-release-notes.md - name: Upload release notes - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: release-notes path: gh-release-notes.md From 6a47389c7813ec7ed395c0279c4b7685fde9f95a Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Mon, 10 Nov 2025 14:50:26 -0300 Subject: [PATCH 013/307] Restore skipping tests via `raise unittest.SkipTest` (#13912) Revert "Remove unused code related to `nose` (#13528)" This reverts commit a620d24376eb2c4bc964f2b6efcc694a4adbbe21 and modifies it adding tests and docs. Fixes #13895 --- changelog/13895.bugfix.rst | 1 + src/_pytest/unittest.py | 8 +++++++ testing/test_unittest.py | 43 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 changelog/13895.bugfix.rst diff --git a/changelog/13895.bugfix.rst b/changelog/13895.bugfix.rst new file mode 100644 index 00000000000..5acd47cff38 --- /dev/null +++ b/changelog/13895.bugfix.rst @@ -0,0 +1 @@ +Restore support for skipping tests via ``raise unittest.SkipTest``. diff --git a/src/_pytest/unittest.py b/src/_pytest/unittest.py index 64321050853..7498f1b0002 100644 --- a/src/_pytest/unittest.py +++ b/src/_pytest/unittest.py @@ -476,6 +476,14 @@ def pytest_runtest_makereport(item: Item, call: CallInfo[None]) -> None: except AttributeError: pass + # Convert unittest.SkipTest to pytest.skip. + # This covers explicit `raise unittest.SkipTest`. + unittest = sys.modules.get("unittest") + if unittest and call.excinfo and isinstance(call.excinfo.value, unittest.SkipTest): + excinfo = call.excinfo + call2 = CallInfo[None].from_call(lambda: skip(str(excinfo.value)), call.when) + call.excinfo = call2.excinfo + def _is_skipped(obj) -> bool: """Return True if the given object has been marked with @unittest.skip.""" diff --git a/testing/test_unittest.py b/testing/test_unittest.py index d6757077847..395c9fe647e 100644 --- a/testing/test_unittest.py +++ b/testing/test_unittest.py @@ -1094,6 +1094,49 @@ def test_two(self): result.assert_outcomes(passed=2) +def test_skip_setup_class(pytester: Pytester) -> None: + """Skipping tests in a class by raising unittest.SkipTest in `setUpClass` (#13985).""" + pytester.makepyfile( + """ + import unittest + + class Test(unittest.TestCase): + + @classmethod + def setUpClass(cls): + raise unittest.SkipTest('Skipping setupclass') + + def test_foo(self): + assert False + + def test_bar(self): + assert False + """ + ) + result = pytester.runpytest() + result.assert_outcomes(skipped=2) + + +def test_unittest_skip_function(pytester: Pytester) -> None: + """ + Ensure raising an explicit unittest.SkipTest skips standard pytest functions. + + Support for this is debatable -- technically we only support unittest.SkipTest in TestCase subclasses, + but stating this support here in this test because users currently expect this to work, + so if we ever break it we at least know we are breaking this use case (#13985). + """ + pytester.makepyfile( + """ + import unittest + + def test_foo(): + raise unittest.SkipTest('Skipping test_foo') + """ + ) + result = pytester.runpytest() + result.assert_outcomes(skipped=1) + + def test_testcase_handles_init_exceptions(pytester: Pytester) -> None: """ Regression test to make sure exceptions in the __init__ method are bubbled up correctly. From a6b07436eec53c358e770f442c3c11e87403768e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 10 Nov 2025 20:01:57 +0200 Subject: [PATCH 014/307] Revert "testing: temporarily disable pytest-asyncio integration test" This reverts commit 041aacad506b6c6891f2898f2bd378e0896e8b86. Latest version has added support for pytest 9. --- testing/plugins_integration/pytest.ini | 3 +-- testing/plugins_integration/requirements.txt | 3 +-- tox.ini | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/testing/plugins_integration/pytest.ini b/testing/plugins_integration/pytest.ini index 258b4143177..b0eb9c3806f 100644 --- a/testing/plugins_integration/pytest.ini +++ b/testing/plugins_integration/pytest.ini @@ -1,7 +1,6 @@ [pytest] strict_markers = True -; Temporarily disabled until adds support for pytest 9. -; asyncio_mode = strict +asyncio_mode = strict filterwarnings = error::pytest.PytestWarning ignore:usefixtures.* without arguments has no effect:pytest.PytestWarning diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index d62f25743f0..f33ac01f848 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,7 +1,6 @@ anyio[trio]==4.11.0 django==5.2.8 -# Temporarily disabled until adds support for pytest 9. -#pytest-asyncio==1.2.0 +pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 pytest-django==4.11.1 diff --git a/tox.ini b/tox.ini index bbd62b7e7c5..b6fcecc886a 100644 --- a/tox.ini +++ b/tox.ini @@ -175,8 +175,7 @@ commands = pytest --html=simple.html simple_integration.py pytest --reruns 5 simple_integration.py pytest_rerunfailures_integration.py pytest pytest_anyio_integration.py - # Temporarily disabled until adds support for pytest 9. - # pytest pytest_asyncio_integration.py + pytest pytest_asyncio_integration.py pytest pytest_mock_integration.py pytest pytest_trio_integration.py pytest pytest_twisted_integration.py From bbc3e1947eb9d0bdabbab2e4833fb39f22f6dbea Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 10 Nov 2025 23:25:53 +0200 Subject: [PATCH 015/307] config: fix `UserWarning: Do not expect file_or_dir` on some Python 3.12 and 3.13 point versions Fix #13910. --- changelog/13910.bugfix.rst | 1 + src/_pytest/config/argparsing.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelog/13910.bugfix.rst diff --git a/changelog/13910.bugfix.rst b/changelog/13910.bugfix.rst new file mode 100644 index 00000000000..f399f95b375 --- /dev/null +++ b/changelog/13910.bugfix.rst @@ -0,0 +1 @@ +Fixed `UserWarning: Do not expect file_or_dir` on some earlier Python 3.12 and 3.13 point versions. diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 995408800a8..8216ad8b226 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -170,7 +170,7 @@ def parse_known_and_unknown_args( arguments, and a list of unknown flag arguments. """ strargs = [os.fspath(x) for x in args] - if sys.version_info < (3, 12): + if sys.version_info < (3, 12, 8) or (3, 13) <= sys.version_info < (3, 13, 1): # Older argparse have a bugged parse_known_intermixed_args. namespace, unknown = self.optparser.parse_known_args(strargs, namespace) assert namespace is not None From d6aa7eed390b99edccfa14f549a9ec97a54f5406 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 10 Nov 2025 22:31:54 +0200 Subject: [PATCH 016/307] doc: fix mis-rendered tabs --- doc/en/explanation/goodpractices.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/en/explanation/goodpractices.rst b/doc/en/explanation/goodpractices.rst index d97dda06417..4920309b9d6 100644 --- a/doc/en/explanation/goodpractices.rst +++ b/doc/en/explanation/goodpractices.rst @@ -354,7 +354,7 @@ See the :confval:`strict` documentation for the options it enables and their eff If pytest adds new strictness options in the future, they will also be enabled in strict mode. Therefore, you should only enable strict mode if you use a pinned/locked version of pytest, or if you want to proactively adopt new strictness options as they are added. -If you don't want to automatically pick up new options, you can enable options individually:: +If you don't want to automatically pick up new options, you can enable options individually: .. tab:: toml @@ -376,7 +376,7 @@ If you don't want to automatically pick up new options, you can enable options i strict_parametrization_ids = true strict_xfail = true -If you want to use strict mode but having trouble with a specific option, you can turn it off individually:: +If you want to use strict mode but having trouble with a specific option, you can turn it off individually: .. tab:: toml From 9a5e82efabd0bcf5fe0d9938f22778a2835338c2 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 10 Nov 2025 22:34:51 +0200 Subject: [PATCH 017/307] doc: update RTD/tox to Python 3.13 I have some unexplained issue with Python 3.12, updating fixes it. --- .readthedocs.yaml | 2 +- tox.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f7370f1bb98..6380b34adec 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -17,7 +17,7 @@ build: os: ubuntu-24.04 tools: python: >- - 3.12 + 3.13 apt_packages: - inkscape jobs: diff --git a/tox.ini b/tox.ini index b6fcecc886a..5c2106ee5b4 100644 --- a/tox.ini +++ b/tox.ini @@ -111,7 +111,7 @@ setenv = description = build the documentation site under \ `{toxinidir}{/}doc{/}en{/}_build{/}html` with `{basepython}` -basepython = python3.12 # sync with rtd to get errors +basepython = python3.13 # Sync with .readthedocs.yaml to get errors. usedevelop = True deps = -r{toxinidir}/doc/en/requirements.txt From 3dc7d3807bdf556ed26f7393cffc2d46c8a0b0cc Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 10 Nov 2025 23:35:30 +0200 Subject: [PATCH 018/307] debugging: import unittest lazily Fix #13917 --- src/_pytest/debugging.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_pytest/debugging.py b/src/_pytest/debugging.py index de1b2688f76..75a37a867cb 100644 --- a/src/_pytest/debugging.py +++ b/src/_pytest/debugging.py @@ -11,7 +11,6 @@ import sys import types from typing import Any -import unittest from _pytest import outcomes from _pytest._code import ExceptionInfo @@ -296,7 +295,8 @@ def pytest_exception_interact( sys.stdout.write(err) assert call.excinfo is not None - if not isinstance(call.excinfo.value, unittest.SkipTest): + unittest = sys.modules.get("unittest") + if unittest is None or not isinstance(call.excinfo.value, unittest.SkipTest): _enter_pdb(node, call.excinfo, report) def pytest_internalerror(self, excinfo: ExceptionInfo[BaseException]) -> None: From 15ab2c7940f0d22d2a3f48146b55547a6979e6e7 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 10 Nov 2025 23:41:33 +0200 Subject: [PATCH 019/307] runner: don't treat `unittest.SkipTest` as an interactive exception Instead of special casing in the debugging plugin, it seems more correct to just not treat `unittest.SkipTest` as an interactive exception, similarly to pytest's own `Skipped`. The `pytest_make_collect_report` hook in runner.py already treats them the same. This fixes the issue more generally. --- changelog/13917.bugfix.rst | 1 + src/_pytest/debugging.py | 5 +---- src/_pytest/runner.py | 5 ++++- 3 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 changelog/13917.bugfix.rst diff --git a/changelog/13917.bugfix.rst b/changelog/13917.bugfix.rst new file mode 100644 index 00000000000..d2cf90c2894 --- /dev/null +++ b/changelog/13917.bugfix.rst @@ -0,0 +1 @@ +:class:`unittest.SkipTest` is no longer considered an interactive exception, i.e. :hook:`pytest_exception_interact` is no longer called for it. diff --git a/src/_pytest/debugging.py b/src/_pytest/debugging.py index 75a37a867cb..2ee540cc996 100644 --- a/src/_pytest/debugging.py +++ b/src/_pytest/debugging.py @@ -294,10 +294,7 @@ def pytest_exception_interact( sys.stdout.write(out) sys.stdout.write(err) assert call.excinfo is not None - - unittest = sys.modules.get("unittest") - if unittest is None or not isinstance(call.excinfo.value, unittest.SkipTest): - _enter_pdb(node, call.excinfo, report) + _enter_pdb(node, call.excinfo, report) def pytest_internalerror(self, excinfo: ExceptionInfo[BaseException]) -> None: exc_or_tb = _postmortem_exc_or_tb(excinfo) diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py index 9c20ff9e638..d1090aace89 100644 --- a/src/_pytest/runner.py +++ b/src/_pytest/runner.py @@ -271,7 +271,10 @@ def check_interactive_exception(call: CallInfo[object], report: BaseReport) -> b if hasattr(report, "wasxfail"): # Exception was expected. return False - if isinstance(call.excinfo.value, Skipped | bdb.BdbQuit): + unittest = sys.modules.get("unittest") + if isinstance(call.excinfo.value, Skipped | bdb.BdbQuit) or ( + unittest is not None and isinstance(call.excinfo.value, unittest.SkipTest) + ): # Special control flow exception. return False return True From 962a344ad8edb8b8abb12935d6b2c0c4a3b72ecc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 06:50:18 +0100 Subject: [PATCH 020/307] [pre-commit.ci] pre-commit autoupdate (#13923) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.3 → v0.14.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.3...v0.14.4) - [github.com/woodruffw/zizmor-pre-commit: v1.16.2 → v1.16.3](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.16.2...v1.16.3) - [github.com/tox-dev/pyproject-fmt: v2.11.0 → v2.11.1](https://github.com/tox-dev/pyproject-fmt/compare/v2.11.0...v2.11.1) - [github.com/asottile/pyupgrade: v3.21.0 → v3.21.1](https://github.com/asottile/pyupgrade/compare/v3.21.0...v3.21.1) * Enable autofix for zizmor pre-commit hook --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Bruno Oliveira --- .github/dependabot.yml | 4 ++++ .pre-commit-config.yaml | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 294b13743e2..ef52314264e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,9 +9,13 @@ updates: allow: - dependency-type: direct - dependency-type: indirect + cooldown: + default-days: 7 - package-ecosystem: github-actions directory: / schedule: interval: weekly time: "03:00" open-pull-requests-limit: 10 + cooldown: + default-days: 7 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a4af51ee0f2..0e82c4f7426 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.3" + rev: "v0.14.4" hooks: - id: ruff-check args: ["--fix"] @@ -12,9 +12,10 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.16.2 + rev: v1.16.3 hooks: - id: zizmor + args: ["--fix"] - repo: https://github.com/adamchainz/blacken-docs rev: 1.20.0 hooks: @@ -66,13 +67,13 @@ repos: # Manual because passing pyright is a work in progress. stages: [manual] - repo: https://github.com/tox-dev/pyproject-fmt - rev: "v2.11.0" + rev: "v2.11.1" hooks: - id: pyproject-fmt # https://pyproject-fmt.readthedocs.io/en/latest/#calculating-max-supported-python-version additional_dependencies: ["tox>=4.9"] - repo: https://github.com/asottile/pyupgrade - rev: v3.21.0 + rev: v3.21.1 hooks: - id: pyupgrade args: From bc0db40cbb4d4dfcd04c0fc65d3075562b9815ed Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 11 Nov 2025 19:28:23 +0100 Subject: [PATCH 021/307] =?UTF-8?q?=F0=9F=93=A6=20Pass=20desired=20release?= =?UTF-8?q?=20to=20PEP=20517=20tox=20env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch fixes passing the release version string from the release automation script to the tox's PEP 517 frontend, so that the backend machinery bits (namely, `setuptools-scm`) could access the environment variable; as indentified in the attempt to release pytest v9.0.1 [[1]]. The solution uses the `[pkgenv]` section of `tox.ini` that corresponds to the PEP 517 build env tox manages internally. [1]: https://github.com/pytest-dev/pytest/pull/13928/files#r2514197778 --- tox.ini | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tox.ini b/tox.ini index 5c2106ee5b4..2e91ddcb2d6 100644 --- a/tox.ini +++ b/tox.ini @@ -23,6 +23,26 @@ envlist = +[pkgenv] +# NOTE: This section tweaks how Tox manages the PEP 517 build +# NOTE: environment where it assembles wheels (editable and regular) +# NOTE: for further installing them into regular testenvs. +# +# NOTE: `[testenv:.pkg]` does not work due to a regression in tox v4.14.1 +# NOTE: so `[pkgenv]` is being used in place of it. +# Refs: +# * https://github.com/tox-dev/tox/pull/3237 +# * https://github.com/tox-dev/tox/issues/3238 +# * https://github.com/tox-dev/tox/issues/3292 +# * https://hynek.me/articles/turbo-charge-tox/ +# +# NOTE: The `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST` environment +# NOTE: variable allows enforcing a pre-determined version for use in +# NOTE: the wheel being installed into usual testenvs. +pass_env = + SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST + + [testenv] description = run the tests @@ -49,7 +69,6 @@ passenv = COVERAGE_* PYTEST_ADDOPTS TERM - SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST CI setenv = _PYTEST_TOX_DEFAULT_POSARGS={env:_PYTEST_TOX_POSARGS_DOCTESTING:} {env:_PYTEST_TOX_POSARGS_LSOF:} {env:_PYTEST_TOX_POSARGS_XDIST:} {env:_PYTEST_FILES:} @@ -141,8 +160,6 @@ setenv = description = regenerate documentation examples under `{basepython}` changedir = doc/en -passenv = - SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST deps = PyYAML regendoc>=0.8.1 From 7df3b1bfa9d1d083ec9ba124236d0ea21e5cd7c2 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 11 Nov 2025 19:43:11 +0100 Subject: [PATCH 022/307] =?UTF-8?q?=F0=9F=93=9D=20Add=20a=20change=20note?= =?UTF-8?q?=20for=20PR=20#13933?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog/13933.contrib.rst | 4 ++++ changelog/13933.packaging.rst | 1 + 2 files changed, 5 insertions(+) create mode 100644 changelog/13933.contrib.rst create mode 120000 changelog/13933.packaging.rst diff --git a/changelog/13933.contrib.rst b/changelog/13933.contrib.rst new file mode 100644 index 00000000000..feab3e0dc03 --- /dev/null +++ b/changelog/13933.contrib.rst @@ -0,0 +1,4 @@ +The tox configuration has been adjusted to make sure the desired +version string can be passed into its :ref:`package_env` through +the ``SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST`` environment +variable as a part of the release process -- by :user:`webknjaz`. diff --git a/changelog/13933.packaging.rst b/changelog/13933.packaging.rst new file mode 120000 index 00000000000..79139f98eed --- /dev/null +++ b/changelog/13933.packaging.rst @@ -0,0 +1 @@ +13933.contrib.rst \ No newline at end of file From 5726a0c1420f49bf6a8a597992afac5263e5b3f3 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 11 Nov 2025 21:07:27 +0200 Subject: [PATCH 023/307] Convert coverage configuration to TOML --- .coveragerc | 35 ----------------------------------- pyproject.toml | 38 ++++++++++++++++++++++++++++++++++++++ tox.ini | 2 +- 3 files changed, 39 insertions(+), 36 deletions(-) delete mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 4eab3e33381..00000000000 --- a/.coveragerc +++ /dev/null @@ -1,35 +0,0 @@ -[run] -include = - src/* - testing/* - */lib/python*/site-packages/_pytest/* - */lib/python*/site-packages/pytest.py - */pypy*/site-packages/_pytest/* - */pypy*/site-packages/pytest.py - *\Lib\site-packages\_pytest\* - *\Lib\site-packages\pytest.py -parallel = 1 -branch = 1 - -[paths] -source = src/ - */lib/python*/site-packages/ - */pypy*/site-packages/ - *\Lib\site-packages\ - -[report] -skip_covered = True -show_missing = True -exclude_lines = - \#\s*pragma: no cover - ^\s*raise NotImplementedError\b - ^\s*return NotImplemented\b - ^\s*assert False(,|$) - ^\s*case unreachable: - ^\s*assert_never\( - - ^\s*if TYPE_CHECKING: - ^\s*@overload( |$) - ^\s*def .+: \.\.\.$ - - ^\s*@pytest\.mark\.xfail diff --git a/pyproject.toml b/pyproject.toml index 1f5835254da..d8879d6aed7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -432,6 +432,44 @@ markers = [ "keep_ci_var", ] +[tool.coverage.run] +include = [ + 'src/*', + 'testing/*', + '*/lib/python*/site-packages/_pytest/*', + '*/lib/python*/site-packages/pytest.py', + '*/pypy*/site-packages/_pytest/*', + '*/pypy*/site-packages/pytest.py', + '*\Lib\site-packages\_pytest\*', + '*\Lib\site-packages\pytest.py', +] +parallel = true +branch = true + +[tool.coverage.paths] +source = [ + 'src/', + '*/lib/python*/site-packages/', + '*/pypy*/site-packages/', + '*\Lib\site-packages\', +] + +[tool.coverage.report] +skip_covered = true +show_missing = true +exclude_lines = [ + '\#\s*pragma: no cover', + '^\s*raise NotImplementedError\b', + '^\s*return NotImplemented\b', + '^\s*assert False(,|$)', + '^\s*case unreachable:', + '^\s*assert_never\(', + '^\s*if TYPE_CHECKING:', + '^\s*@overload( |$)', + '^\s*def .+: \.\.\.$', + '^\s*@pytest\.mark\.xfail', +] + [tool.towncrier] package = "pytest" package_dir = "src" diff --git a/tox.ini b/tox.ini index 2e91ddcb2d6..392ee5ff644 100644 --- a/tox.ini +++ b/tox.ini @@ -83,7 +83,7 @@ setenv = coverage: _PYTEST_TOX_COVERAGE_RUN=coverage run -m coverage: _PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess coverage: COVERAGE_FILE={toxinidir}/.coverage - coverage: COVERAGE_PROCESS_START={toxinidir}/.coveragerc + coverage: COVERAGE_PROCESS_START={toxinidir}/pyproject.toml doctesting: _PYTEST_TOX_POSARGS_DOCTESTING=doc/en From 79b21040bc2f20f70a5015cc07f3964420d55b0e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 11 Nov 2025 21:38:35 +0200 Subject: [PATCH 024/307] Use coverage built-in subprocess support instead of `coverage-enable-subprocess` See https://coverage.readthedocs.io/en/latest/subprocess.html --- pyproject.toml | 1 + tox.ini | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d8879d6aed7..b250edc0220 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -445,6 +445,7 @@ include = [ ] parallel = true branch = true +patch = [ "subprocess" ] [tool.coverage.paths] source = [ diff --git a/tox.ini b/tox.ini index 392ee5ff644..8e760e9e2e2 100644 --- a/tox.ini +++ b/tox.ini @@ -81,9 +81,6 @@ setenv = # Configuration to run with coverage similar to CI, e.g. # "tox -e py313-coverage". coverage: _PYTEST_TOX_COVERAGE_RUN=coverage run -m - coverage: _PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess - coverage: COVERAGE_FILE={toxinidir}/.coverage - coverage: COVERAGE_PROCESS_START={toxinidir}/pyproject.toml doctesting: _PYTEST_TOX_POSARGS_DOCTESTING=doc/en @@ -100,6 +97,7 @@ setenv = xdist: _PYTEST_TOX_POSARGS_XDIST=-n auto extras = dev deps = + coverage: coverage>=7.10 doctesting: PyYAML exceptiongroup: exceptiongroup>=1.0.0rc8 numpy: numpy>=1.19.4 @@ -111,7 +109,6 @@ deps = asynctest: asynctest xdist: pytest-xdist>=2.1.0 xdist: -e . - {env:_PYTEST_TOX_EXTRA_DEP:} # Can use the same wheel for all environments. package = wheel wheel_build_env = .pkg From e563b9a637892021a2bcd3d1e7ef14cf9d9de117 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 11 Nov 2025 21:17:03 +0200 Subject: [PATCH 025/307] pyproject.toml: use raw TOML strings for `filterwarnings` to avoid unreadable double escaping --- pyproject.toml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1f5835254da..58d17a42b6a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -380,39 +380,39 @@ norecursedirs = [ ] strict = true filterwarnings = [ - "error", - "default:Using or importing the ABCs:DeprecationWarning:unittest2.*", + 'error', + 'default:Using or importing the ABCs:DeprecationWarning:unittest2.*', # produced by older pyparsing<=2.2.0. - "default:Using or importing the ABCs:DeprecationWarning:pyparsing.*", - "default:the imp module is deprecated in favour of importlib:DeprecationWarning:nose.*", + 'default:Using or importing the ABCs:DeprecationWarning:pyparsing.*', + 'default:the imp module is deprecated in favour of importlib:DeprecationWarning:nose.*', # distutils is deprecated in 3.10, scheduled for removal in 3.12 - "ignore:The distutils package is deprecated:DeprecationWarning", + 'ignore:The distutils package is deprecated:DeprecationWarning', # produced by pytest-xdist - "ignore:.*type argument to addoption.*:DeprecationWarning", + 'ignore:.*type argument to addoption.*:DeprecationWarning', # produced on execnet (pytest-xdist) - "ignore:.*inspect.getargspec.*deprecated, use inspect.signature.*:DeprecationWarning", + 'ignore:.*inspect.getargspec.*deprecated, use inspect.signature.*:DeprecationWarning', # pytest's own futurewarnings - "ignore::pytest.PytestExperimentalApiWarning", + 'ignore::pytest.PytestExperimentalApiWarning', # Do not cause SyntaxError for invalid escape sequences in py37. # Those are caught/handled by pyupgrade, and not easy to filter with the # module being the filename (with .py removed). - "default:invalid escape sequence:DeprecationWarning", + 'default:invalid escape sequence:DeprecationWarning', # ignore not yet fixed warnings for hook markers - "default:.*not marked using pytest.hook.*", - "ignore:.*not marked using pytest.hook.*::xdist.*", + 'default:.*not marked using pytest.hook.*', + 'ignore:.*not marked using pytest.hook.*::xdist.*', # ignore use of unregistered marks, because we use many to test the implementation - "ignore::_pytest.warning_types.PytestUnknownMarkWarning", + 'ignore::_pytest.warning_types.PytestUnknownMarkWarning', # https://github.com/benjaminp/six/issues/341 - "ignore:_SixMetaPathImporter\\.exec_module\\(\\) not found; falling back to load_module\\(\\):ImportWarning", + 'ignore:_SixMetaPathImporter\.exec_module\(\) not found; falling back to load_module\(\):ImportWarning', # https://github.com/benjaminp/six/pull/352 - "ignore:_SixMetaPathImporter\\.find_spec\\(\\) not found; falling back to find_module\\(\\):ImportWarning", + 'ignore:_SixMetaPathImporter\.find_spec\(\) not found; falling back to find_module\(\):ImportWarning', # https://github.com/pypa/setuptools/pull/2517 - "ignore:VendorImporter\\.find_spec\\(\\) not found; falling back to find_module\\(\\):ImportWarning", + 'ignore:VendorImporter\.find_spec\(\) not found; falling back to find_module\(\):ImportWarning', # https://github.com/pytest-dev/execnet/pull/127 - "ignore:isSet\\(\\) is deprecated, use is_set\\(\\) instead:DeprecationWarning", + 'ignore:isSet\(\) is deprecated, use is_set\(\) instead:DeprecationWarning', # https://github.com/pytest-dev/pytest/issues/2366 # https://github.com/pytest-dev/pytest/pull/13057 - "default::pytest.PytestFDWarning", + 'default::pytest.PytestFDWarning', ] pytester_example_dir = "testing/example_scripts" markers = [ From 4ae47b736dd91ea0b53056aa933d743028e14173 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 11 Nov 2025 21:23:25 +0200 Subject: [PATCH 026/307] doc: always use raw TOML strings in `filterwarnings` examples When regexes are involved they're the better choice. --- doc/en/how-to/capture-warnings.rst | 6 +++--- doc/en/reference/reference.rst | 13 +++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index 8ed546bedf7..2bf42adc0f7 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -91,9 +91,9 @@ all other warnings into errors. [pytest] filterwarnings = [ - "error", - "ignore::UserWarning", - # note the use of single quote below to denote "raw" strings in TOML + 'error', + 'ignore::UserWarning', + # Note the use of single quote below to denote "raw" strings in TOML. 'ignore:function ham\(\) is deprecated:DeprecationWarning', ] diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 139140afdfa..4b3c939bccb 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -186,7 +186,7 @@ Add warning filters to marked test items. .. code-block:: python - @pytest.mark.filterwarnings("ignore:.*usage will be deprecated.*:DeprecationWarning") + @pytest.mark.filterwarnings(r"ignore:.*usage will be deprecated.*:DeprecationWarning") def test_foo(): ... @@ -1587,9 +1587,8 @@ passed multiple times. The expected format is ``name=value``. For example:: For more information please refer to :ref:`faulthandler`. For more information please refer to :ref:`faulthandler`. -.. confval:: filterwarnings - +.. confval:: filterwarnings Sets a list of filters and actions that should be taken for matched warnings. By default all warnings emitted during the test session @@ -1600,7 +1599,12 @@ passed multiple times. The expected format is ``name=value``. For example:: .. code-block:: toml [pytest] - filterwarnings = ["error", "ignore::DeprecationWarning"] + filterwarnings = [ + 'error', + 'ignore::DeprecationWarning', + # Note the use of single quote below to denote "raw" strings in TOML. + 'ignore:function ham\(\) should not be used:UserWarning', + ] .. tab:: ini @@ -1610,6 +1614,7 @@ passed multiple times. The expected format is ``name=value``. For example:: filterwarnings = error ignore::DeprecationWarning + ignore:function ham\(\) should not be used:UserWarning This tells pytest to ignore deprecation warnings and turn all other warnings into errors. For more information please refer to :ref:`warnings`. From 9d804003dc7c862230a090d83ac131c0ea43c241 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Tue, 11 Nov 2025 19:44:52 -0300 Subject: [PATCH 027/307] pre-commit: `language: system` is deprecated in favor of `language: unsupported` As per the pre-commit changelog: https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md#440---2025-11-08 --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0e82c4f7426..f1a1636b2d6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -86,7 +86,7 @@ repos: - id: pylint name: pylint entry: pylint - language: system + language: unsupported types: [python] args: ["-rn", "-sn", "--fail-on=I", "--enable-all-extentions"] require_serial: true From ceddd22e274b18ee7c0e11e972eadfb6dc840c7d Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Tue, 11 Nov 2025 21:34:30 -0300 Subject: [PATCH 028/307] Add minimum-pre-commit-version In https://github.com/pytest-dev/pytest/pull/13939 we are using the new `language: unsupported` setting, which was introduced in pre-commit 4.4.0. Configure minimum pre-commit version to ensure the installed pre-commit supports it (https://github.com/pytest-dev/pytest/pull/13938#issuecomment-3519164822). --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f1a1636b2d6..efbe635b401 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,3 +1,4 @@ +minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: "v0.14.4" From 74d49d2912df6a1b0c579f5e56656cbcd4c4990d Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 11:01:03 +0200 Subject: [PATCH 029/307] tox: remove unneeded `xdist: -e .` No reason for it that I can see. --- tox.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/tox.ini b/tox.ini index 8e760e9e2e2..78024db28c3 100644 --- a/tox.ini +++ b/tox.ini @@ -108,7 +108,6 @@ deps = twisted25: twisted>=25 asynctest: asynctest xdist: pytest-xdist>=2.1.0 - xdist: -e . # Can use the same wheel for all environments. package = wheel wheel_build_env = .pkg From 7c581d557afca6c65c4a81db56adb131d9d27e41 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 11:02:26 +0200 Subject: [PATCH 030/307] tox: remove no longer needed `pip` download=True Whatever pip is used almost certainly has the new resolver by now. --- tox.ini | 3 --- 1 file changed, 3 deletions(-) diff --git a/tox.ini b/tox.ini index 78024db28c3..d143334072a 100644 --- a/tox.ini +++ b/tox.ini @@ -173,9 +173,6 @@ description = run reverse dependency testing against pytest plugins under `{basepython}` # use latest versions of all plugins, including pre-releases pip_pre=true -# use latest pip to get new dependency resolver (#7783) -download=true -install_command=python -m pip install {opts} {packages} changedir = testing/plugins_integration deps = -rtesting/plugins_integration/requirements.txt setenv = From 21ad5c65c979dfd2352784b3e074cd34f208dfdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=87=BA=F0=9F=87=A6=20Sviatoslav=20Sydorenko=20=28?= =?UTF-8?q?=D0=A1=D0=B2=D1=8F=D1=82=D0=BE=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A1?= =?UTF-8?q?=D0=B8=D0=B4=D0=BE=D1=80=D0=B5=D0=BD=D0=BA=D0=BE=29?= Date: Wed, 12 Nov 2025 10:58:35 +0100 Subject: [PATCH 031/307] =?UTF-8?q?=F0=9F=A7=AA=20Run=20`gh=20release`=20w?= =?UTF-8?q?/o=20Git=20in=20CI/CD=20(#13942)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🧪 Run `gh release` w/o Git in CI/CD It is possible to use `gh release create --repo=` [[1]] so that GH CLI does not need to infer the repository information from the Git repository. GH CLI supports passing such options via environment values [[2]], which is what this patch makes use of. It's a follow-up for #13891. [1]: https://cli.github.com/manual/gh_release_create [2]: https://cli.github.com/manual/gh_help_environment * 📝 Add a change note for PRs #13942 and #13891 --- .github/workflows/deploy.yml | 6 +----- changelog/13891.contrib.rst | 1 + changelog/13942.contrib.rst | 3 +++ 3 files changed, 5 insertions(+), 5 deletions(-) create mode 120000 changelog/13891.contrib.rst create mode 100644 changelog/13942.contrib.rst diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ed7de4cc0c5..ca6f75d8e05 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -120,11 +120,6 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v5 - with: - fetch-depth: 0 - persist-credentials: true - - name: Download Package uses: actions/download-artifact@v6 with: @@ -140,6 +135,7 @@ jobs: - name: Publish GitHub Release env: VERSION: ${{ github.event.inputs.version }} + GH_REPO: ${{ github.repository }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release create --notes-file gh-release-notes.md --verify-tag "$VERSION" dist/* diff --git a/changelog/13891.contrib.rst b/changelog/13891.contrib.rst new file mode 120000 index 00000000000..b5cf5102ff8 --- /dev/null +++ b/changelog/13891.contrib.rst @@ -0,0 +1 @@ +13942.contrib.rst \ No newline at end of file diff --git a/changelog/13942.contrib.rst b/changelog/13942.contrib.rst new file mode 100644 index 00000000000..cdf23e68455 --- /dev/null +++ b/changelog/13942.contrib.rst @@ -0,0 +1,3 @@ +The CI/CD part of the release automation is now capable of +creating GitHub Releases without having a Git checkout on +disk -- by :user:`bluetech` and :user:`webknjaz`. From bb20945c4503f0508534955897391318eaabad50 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 11:32:14 +0200 Subject: [PATCH 032/307] ci,tox: generate coverage xml in tox, not in CI This way CI doesn't need to install coverage on its own just to run the `coverage report xml` command, instead it goes through tox. --- .github/workflows/test.yml | 6 +----- tox.ini | 2 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fbee593f7c2..a3e1eaac993 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -271,7 +271,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install tox coverage + pip install tox - name: Test without coverage if: "! matrix.use_coverage" @@ -283,10 +283,6 @@ jobs: shell: bash run: tox run -e ${{ matrix.tox_env }}-coverage --installpkg `find dist/*.tar.gz` - - name: Generate coverage report - if: "matrix.use_coverage" - run: python -m coverage xml - - name: Upload coverage to Codecov if: "matrix.use_coverage" uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 diff --git a/tox.ini b/tox.ini index d143334072a..2ad59f8225e 100644 --- a/tox.ini +++ b/tox.ini @@ -65,6 +65,8 @@ commands = doctesting: {env:_PYTEST_TOX_COVERAGE_RUN:} pytest --doctest-modules --pyargs _pytest coverage: coverage combine coverage: coverage report -m + # Run `coverage xml` only on CI. + coverage: python -c 'import os; os.environ.get("CI") and os.execlp("coverage", "coverage", "xml")' passenv = COVERAGE_* PYTEST_ADDOPTS From 1afe0ae7e0e1713fd2c141bb03bb4b812299db84 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 12:15:49 +0200 Subject: [PATCH 033/307] ci: remove unneeded `setuptools` install I don't think it's needed. --- .github/workflows/prepare-release-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-release-pr.yml b/.github/workflows/prepare-release-pr.yml index 9dcfea7bae5..879596ca7d7 100644 --- a/.github/workflows/prepare-release-pr.yml +++ b/.github/workflows/prepare-release-pr.yml @@ -41,7 +41,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install --upgrade setuptools tox + pip install --upgrade tox - name: Prepare release PR (minor/patch release) if: github.event.inputs.major == 'no' From 5bc8de265c047c56e5cd0e9345f316ec9326b77a Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 12:14:44 +0200 Subject: [PATCH 034/307] ci: be consistent in how we install tox No need to upgrade when it's not already installed. --- .github/workflows/deploy.yml | 2 +- .github/workflows/doc-check-links.yml | 2 +- .github/workflows/prepare-release-pr.yml | 4 ++-- .github/workflows/test.yml | 2 +- .github/workflows/update-plugin-list.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ed7de4cc0c5..1a4426af702 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -55,7 +55,7 @@ jobs: - name: Install tox run: | python -m pip install --upgrade pip - pip install --upgrade tox + pip install tox - name: Generate release notes env: diff --git a/.github/workflows/doc-check-links.yml b/.github/workflows/doc-check-links.yml index 497ec73500a..9de20b37cc3 100644 --- a/.github/workflows/doc-check-links.yml +++ b/.github/workflows/doc-check-links.yml @@ -28,7 +28,7 @@ jobs: python-version: "3.13" cache: pip - - name: Install dependencies + - name: Install tox run: | python -m pip install --upgrade pip pip install tox diff --git a/.github/workflows/prepare-release-pr.yml b/.github/workflows/prepare-release-pr.yml index 879596ca7d7..94b3dfc7710 100644 --- a/.github/workflows/prepare-release-pr.yml +++ b/.github/workflows/prepare-release-pr.yml @@ -38,10 +38,10 @@ jobs: with: python-version: "3.13" - - name: Install dependencies + - name: Install tox run: | python -m pip install --upgrade pip - pip install --upgrade tox + pip install tox - name: Prepare release PR (minor/patch release) if: github.event.inputs.major == 'no' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a3e1eaac993..443a1723a0c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -268,7 +268,7 @@ jobs: check-latest: true allow-prereleases: true - - name: Install dependencies + - name: Install tox run: | python -m pip install --upgrade pip pip install tox diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index b396d6e19d4..c4d3087f285 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -40,7 +40,7 @@ jobs: - name: Install tox run: | python -m pip install --upgrade pip - pip install --upgrade tox + pip install tox - name: Update Plugin List run: tox -e update-plugin-list From 665363abc0624b861a7257df7d9eaab5eb0b018a Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 12:18:25 +0200 Subject: [PATCH 035/307] ci: replace SETUPTOOLS_SCM_PRETEND_VERSION -> FOR_PYTEST This way it can only affect pytest. Don't think it matters here but only for consistency. --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1a4426af702..f24a1eec200 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -16,7 +16,7 @@ jobs: package: runs-on: ubuntu-latest env: - SETUPTOOLS_SCM_PRETEND_VERSION: ${{ github.event.inputs.version }} + SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST: ${{ github.event.inputs.version }} timeout-minutes: 10 # Required by attest-build-provenance-github. From f837d25750a4ffb257167931a68590a94b402ad7 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 13:50:44 +0200 Subject: [PATCH 036/307] RELEASING: add step to update ReadTheDocs (#13949) Refs #13921 --- RELEASING.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RELEASING.rst b/RELEASING.rst index 79b4e2f764d..5723fe197c2 100644 --- a/RELEASING.rst +++ b/RELEASING.rst @@ -146,6 +146,10 @@ Both automatic and manual processes described above follow the same steps from t #. Merge the PR. **Make sure it's not squash-merged**, so that the tagged commit ends up in the main branch. +#. For major and minor releases (or the first prerelease of it), + in the `ReadTheDocs admin page `__, click "Add Version" on the top right, + choose the new branch, then set the new version as active. + #. Cherry-pick the CHANGELOG / announce files to the ``main`` branch:: git fetch upstream From 82e9b97caf576de2144b414c58edc87fed5873e7 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 12 Nov 2025 09:15:21 -0300 Subject: [PATCH 037/307] regendoc: remove CI environment variables (#13950) pytest auto-detects and uses more verbose output when running in CI. Change tox:regendoc to remove those environment variables, because we do not want extra verbose output in the user documentation. See #13938 (comment). --- src/_pytest/compat.py | 1 + tox.ini | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/_pytest/compat.py b/src/_pytest/compat.py index 316d2fbd42b..d3b2a469693 100644 --- a/src/_pytest/compat.py +++ b/src/_pytest/compat.py @@ -310,6 +310,7 @@ def __call__(self) -> bool: def running_on_ci() -> bool: """Check if we're currently running on a CI system.""" # Only enable CI mode if one of these env variables is defined and non-empty. + # Note: review `regendoc` tox env in case this list is changed. env_vars = ["CI", "BUILD_NUMBER"] return any(os.environ.get(var) for var in env_vars) diff --git a/tox.ini b/tox.ini index 8e760e9e2e2..c2db030f0c0 100644 --- a/tox.ini +++ b/tox.ini @@ -168,6 +168,10 @@ commands = setenv = # We don't want this warning to reach regen output. PYTHONWARNDEFAULTENCODING= + # Remove CI markers: pytest auto-detects those and uses more verbose output, which is undesirable + # for the example documentation. + CI= + BUILD_NUMBER= [testenv:plugins] description = From f2ecbe35d57f1e0729c61fd214a9c8fcabd76206 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 1 Nov 2025 23:44:57 +0200 Subject: [PATCH 038/307] config: don't lazy import textwrap Already imported from a bunch of places. --- src/_pytest/config/argparsing.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 8216ad8b226..19532cd460f 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -7,6 +7,7 @@ from collections.abc import Sequence import os import sys +import textwrap from typing import Any from typing import final from typing import Literal @@ -533,8 +534,6 @@ def _split_lines(self, text, width): This allows to have explicit line breaks in the help text. """ - import textwrap - lines = [] for line in text.splitlines(): lines.extend(textwrap.wrap(line.strip(), width)) From 5768d27e2023cebd490a787fb6958ceaa0e23d28 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 1 Nov 2025 22:15:50 +0200 Subject: [PATCH 039/307] config,mark,monkeypatch: use common `NOTSET` from `compat` --- src/_pytest/config/__init__.py | 13 +++-------- src/_pytest/config/argparsing.py | 13 +++-------- src/_pytest/mark/__init__.py | 4 ++-- src/_pytest/monkeypatch.py | 38 ++++++++++++++------------------ 4 files changed, 24 insertions(+), 44 deletions(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 9b2afe3e8b4..b0a37e4a197 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -55,6 +55,7 @@ from _pytest._code.code import TracebackStyle from _pytest._io import TerminalWriter from _pytest.compat import assert_never +from _pytest.compat import NOTSET from _pytest.config.argparsing import Argument from _pytest.config.argparsing import FILE_OR_DIR from _pytest.config.argparsing import Parser @@ -907,14 +908,6 @@ def _get_plugin_specs_as_list( ) -class Notset: - def __repr__(self): - return "" - - -notset = Notset() - - def _iter_rewritable_modules(package_files: Iterable[str]) -> Iterator[str]: """Given an iterable of file names in a source distribution, return the "names" that should be marked for assertion rewrite. @@ -1840,7 +1833,7 @@ def _getconftest_pathlist( values.append(relroot) return values - def getoption(self, name: str, default: Any = notset, skip: bool = False): + def getoption(self, name: str, default: Any = NOTSET, skip: bool = False): """Return command line option value. :param name: Name of the option. You may also specify @@ -1857,7 +1850,7 @@ def getoption(self, name: str, default: Any = notset, skip: bool = False): raise AttributeError(name) return val except AttributeError as e: - if default is not notset: + if default is not NOTSET: return default if skip: import pytest diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 19532cd460f..7d8ffe37ec9 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -15,20 +15,13 @@ from .exceptions import UsageError import _pytest._io +from _pytest.compat import NOTSET from _pytest.deprecated import check_ispytest FILE_OR_DIR = "file_or_dir" -class NotSet: - def __repr__(self) -> str: - return "" - - -NOT_SET = NotSet() - - @final class Parser: """Parser for command line arguments and config-file values. @@ -191,7 +184,7 @@ def addini( "string", "paths", "pathlist", "args", "linelist", "bool", "int", "float" ] | None = None, - default: Any = NOT_SET, + default: Any = NOTSET, *, aliases: Sequence[str] = (), ) -> None: @@ -251,7 +244,7 @@ def addini( ) if type is None: type = "string" - if default is NOT_SET: + if default is NOTSET: default = get_ini_default_for_type(type) self._inidict[name] = (help, type, default) diff --git a/src/_pytest/mark/__init__.py b/src/_pytest/mark/__init__.py index 841d7811fdd..56c407ab371 100644 --- a/src/_pytest/mark/__init__.py +++ b/src/_pytest/mark/__init__.py @@ -19,11 +19,11 @@ from .structures import MarkDecorator from .structures import MarkGenerator from .structures import ParameterSet +from _pytest.compat import NOTSET from _pytest.config import Config from _pytest.config import ExitCode from _pytest.config import hookimpl from _pytest.config import UsageError -from _pytest.config.argparsing import NOT_SET from _pytest.config.argparsing import Parser from _pytest.stash import StashKey @@ -247,7 +247,7 @@ def __call__(self, name: str, /, **kwargs: str | int | bool | None) -> bool: return False for mark in matches: # pylint: disable=consider-using-any-or-all - if all(mark.kwargs.get(k, NOT_SET) == v for k, v in kwargs.items()): + if all(mark.kwargs.get(k, NOTSET) == v for k, v in kwargs.items()): return True return False diff --git a/src/_pytest/monkeypatch.py b/src/_pytest/monkeypatch.py index 07cc3fc4b0f..0cdfaec2dde 100644 --- a/src/_pytest/monkeypatch.py +++ b/src/_pytest/monkeypatch.py @@ -17,6 +17,8 @@ from typing import TypeVar import warnings +from _pytest.compat import NOTSET +from _pytest.compat import NotSetType from _pytest.deprecated import MONKEYPATCH_LEGACY_NAMESPACE_PACKAGES from _pytest.fixtures import fixture from _pytest.warning_types import PytestWarning @@ -107,14 +109,6 @@ def derive_importpath(import_path: str, raising: bool) -> tuple[str, object]: return attr, target -class Notset: - def __repr__(self) -> str: - return "" - - -notset = Notset() - - @final class MonkeyPatch: """Helper to conveniently monkeypatch attributes/items/environment @@ -167,7 +161,7 @@ def setattr( self, target: str, name: object, - value: Notset = ..., + value: NotSetType = ..., raising: bool = ..., ) -> None: ... @@ -184,7 +178,7 @@ def setattr( self, target: str | object, name: object | str, - value: object = notset, + value: object = NOTSET, raising: bool = True, ) -> None: """ @@ -225,7 +219,7 @@ def setattr( __tracebackhide__ = True import inspect - if isinstance(value, Notset): + if value is NOTSET: if not isinstance(target, str): raise TypeError( "use setattr(target, name, value) or " @@ -242,20 +236,20 @@ def setattr( "import string" ) - oldval = getattr(target, name, notset) - if raising and oldval is notset: + oldval = getattr(target, name, NOTSET) + if raising and oldval is NOTSET: raise AttributeError(f"{target!r} has no attribute {name!r}") # avoid class descriptors like staticmethod/classmethod if inspect.isclass(target): - oldval = target.__dict__.get(name, notset) + oldval = target.__dict__.get(name, NOTSET) self._setattr.append((target, name, oldval)) setattr(target, name, value) def delattr( self, target: object | str, - name: str | Notset = notset, + name: str | NotSetType = NOTSET, raising: bool = True, ) -> None: """Delete attribute ``name`` from ``target``. @@ -270,7 +264,7 @@ def delattr( __tracebackhide__ = True import inspect - if isinstance(name, Notset): + if name is NOTSET: if not isinstance(target, str): raise TypeError( "use delattr(target, name) or " @@ -283,16 +277,16 @@ def delattr( if raising: raise AttributeError(name) else: - oldval = getattr(target, name, notset) + oldval = getattr(target, name, NOTSET) # Avoid class descriptors like staticmethod/classmethod. if inspect.isclass(target): - oldval = target.__dict__.get(name, notset) + oldval = target.__dict__.get(name, NOTSET) self._setattr.append((target, name, oldval)) delattr(target, name) def setitem(self, dic: Mapping[K, V], name: K, value: V) -> None: """Set dictionary entry ``name`` to value.""" - self._setitem.append((dic, name, dic.get(name, notset))) + self._setitem.append((dic, name, dic.get(name, NOTSET))) # Not all Mapping types support indexing, but MutableMapping doesn't support TypedDict dic[name] = value # type: ignore[index] @@ -306,7 +300,7 @@ def delitem(self, dic: Mapping[K, V], name: K, raising: bool = True) -> None: if raising: raise KeyError(name) else: - self._setitem.append((dic, name, dic.get(name, notset))) + self._setitem.append((dic, name, dic.get(name, NOTSET))) # Not all Mapping types support indexing, but MutableMapping doesn't support TypedDict del dic[name] # type: ignore[attr-defined] @@ -410,13 +404,13 @@ def undo(self) -> None: Prefer to use :meth:`context() ` instead. """ for obj, name, value in reversed(self._setattr): - if value is not notset: + if value is not NOTSET: setattr(obj, name, value) else: delattr(obj, name) self._setattr[:] = [] for dictionary, key, value in reversed(self._setitem): - if value is notset: + if value is NOTSET: try: # Not all Mapping types support indexing, but MutableMapping doesn't support TypedDict del dictionary[key] # type: ignore[attr-defined] From 6e5ef3f8ab531709acabd6ce2936c03167311a9d Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 1 Nov 2025 22:11:59 +0200 Subject: [PATCH 040/307] config: remove unnecessary code from `Argument` The `processopt` callback currently doesn't update any fields, so this code is not needed. And since we definitely do not want to extend the use of `processopt`, it's fine to remove. --- src/_pytest/config/argparsing.py | 6 ------ testing/test_parseopt.py | 26 -------------------------- 2 files changed, 32 deletions(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 7d8ffe37ec9..d9099ac30b7 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -335,12 +335,6 @@ def names(self) -> list[str]: return self._short_opts + self._long_opts def attrs(self) -> Mapping[str, Any]: - # Update any attributes set by processopt. - for attr in ("default", "dest", "help", self.dest): - try: - self._attrs[attr] = getattr(self, attr) - except AttributeError: - pass return self._attrs def _set_opt_strings(self, opts: Sequence[str]) -> None: diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py index 30370d3d673..7b31abdf934 100644 --- a/testing/test_parseopt.py +++ b/testing/test_parseopt.py @@ -63,14 +63,6 @@ def test_argument_type(self) -> None: ) assert argument.type is str - def test_argument_processopt(self) -> None: - argument = parseopt.Argument("-t", type=int) - argument.default = 42 - argument.dest = "abc" - res = argument.attrs() - assert res["default"] == 42 - assert res["dest"] == "abc" - def test_group_add_and_get(self, parser: parseopt.Parser) -> None: group = parser.getgroup("hello") assert group.name == "hello" @@ -191,24 +183,6 @@ def test_parse_split_positional_arguments(self, parser: parseopt.Parser) -> None assert args.R is True assert args.S is False - def test_parse_defaultgetter(self) -> None: - def defaultget(option): - if not hasattr(option, "type"): - return - if option.type is int: - option.default = 42 - elif option.type is str: - option.default = "world" - - parser = parseopt.Parser(processopt=defaultget, _ispytest=True) - parser.addoption("--this", dest="this", type=int, action="store") - parser.addoption("--hello", dest="hello", type=str, action="store") - parser.addoption("--no", dest="no", action="store_true") - option = parser.parse([]) - assert option.hello == "world" - assert option.this == 42 - assert option.no is False - def test_drop_short_helper(self) -> None: parser = argparse.ArgumentParser( formatter_class=parseopt.DropShorterLongHelpFormatter, allow_abbrev=False From c47d63e933f96adf53a225da5fe0a79a126b9bb8 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 1 Nov 2025 22:42:10 +0200 Subject: [PATCH 041/307] config: make `Argument` a wrapper around `argparse.Action` Same as in `OptionGroup`, this continues making our Parser code just a simple wrapper around argparse. --- src/_pytest/config/__init__.py | 7 +- src/_pytest/config/argparsing.py | 139 ++++++++----------------------- src/_pytest/helpconfig.py | 2 +- testing/test_parseopt.py | 50 ++++++----- 4 files changed, 71 insertions(+), 127 deletions(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index b0a37e4a197..2ec3488327e 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -1208,12 +1208,11 @@ def fromdictargs(cls, option_dict: Mapping[str, Any], args: list[str]) -> Config return config def _processopt(self, opt: Argument) -> None: - for name in opt._short_opts + opt._long_opts: + for name in opt.names(): self._opt2dest[name] = opt.dest - if hasattr(opt, "default"): - if not hasattr(self.option, opt.dest): - setattr(self.option, opt.dest, opt.default) + if not hasattr(self.option, opt.dest): + setattr(self.option, opt.dest, opt.default) @hookimpl(trylast=True) def pytest_load_initial_conftests(self, early_config: Config) -> None: diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index d9099ac30b7..77d3be505b2 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -3,7 +3,6 @@ import argparse from collections.abc import Callable -from collections.abc import Mapping from collections.abc import Sequence import os import sys @@ -280,103 +279,37 @@ def get_ini_default_for_type( return "" -class ArgumentError(Exception): - """Raised if an Argument instance is created with invalid or - inconsistent arguments.""" - - def __init__(self, msg: str, option: Argument | str) -> None: - self.msg = msg - self.option_id = str(option) - - def __str__(self) -> str: - if self.option_id: - return f"option {self.option_id}: {self.msg}" - else: - return self.msg - - class Argument: - """Class that mimics the necessary behaviour of optparse.Option. + """An option defined in an OptionGroup.""" - It's currently a least effort implementation and ignoring choices - and integer prefixes. + def __init__(self, action: argparse.Action) -> None: + self._action = action - https://docs.python.org/3/library/optparse.html#optparse-standard-option-types - """ + def attrs(self) -> dict[str, Any]: + return self._action.__dict__ - def __init__(self, *names: str, **attrs: Any) -> None: - """Store params in private vars for use in add_argument.""" - self._attrs = attrs - self._short_opts: list[str] = [] - self._long_opts: list[str] = [] - try: - self.type = attrs["type"] - except KeyError: - pass - try: - # Attribute existence is tested in Config._processopt. - self.default = attrs["default"] - except KeyError: - pass - self._set_opt_strings(names) - dest: str | None = attrs.get("dest") - if dest: - self.dest = dest - elif self._long_opts: - self.dest = self._long_opts[0][2:].replace("-", "_") - else: - try: - self.dest = self._short_opts[0][1:] - except IndexError as e: - self.dest = "???" # Needed for the error repr. - raise ArgumentError("need a long or short option", self) from e + def names(self) -> Sequence[str]: + return self._action.option_strings - def names(self) -> list[str]: - return self._short_opts + self._long_opts - - def attrs(self) -> Mapping[str, Any]: - return self._attrs + @property + def dest(self) -> str: + return self._action.dest - def _set_opt_strings(self, opts: Sequence[str]) -> None: - """Directly from optparse. + @property + def default(self) -> Any: + return self._action.default - Might not be necessary as this is passed to argparse later on. - """ - for opt in opts: - if len(opt) < 2: - raise ArgumentError( - f"invalid option string {opt!r}: " - "must be at least two characters long", - self, - ) - elif len(opt) == 2: - if not (opt[0] == "-" and opt[1] != "-"): - raise ArgumentError( - f"invalid short option string {opt!r}: " - "must be of the form -x, (x any non-dash char)", - self, - ) - self._short_opts.append(opt) - else: - if not (opt[0:2] == "--" and opt[2] != "-"): - raise ArgumentError( - f"invalid long option string {opt!r}: " - "must start with --, followed by non-dash", - self, - ) - self._long_opts.append(opt) + @property + def type(self) -> Any | None: + return self._action.type def __repr__(self) -> str: args: list[str] = [] - if self._short_opts: - args += ["_short_opts: " + repr(self._short_opts)] - if self._long_opts: - args += ["_long_opts: " + repr(self._long_opts)] + args += ["opts: " + repr(self.names())] args += ["dest: " + repr(self.dest)] - if hasattr(self, "type"): + if self._action.type: args += ["type: " + repr(self.type)] - if hasattr(self, "default"): - args += ["default: " + repr(self.default)] + args += ["default: " + repr(self.default)] return "Argument({})".format(", ".join(args)) @@ -406,6 +339,7 @@ def addoption(self, *opts: str, **attrs: Any) -> None: :param opts: Option names, can be short or long options. + Note that lower-case short options (e.g. `-x`) are reserved. :param attrs: Same attributes as the argparse library's :meth:`add_argument() ` function accepts. @@ -415,25 +349,27 @@ def addoption(self, *opts: str, **attrs: Any) -> None: ) if conflict: raise ValueError(f"option names {conflict} already added") - option = Argument(*opts, **attrs) - self._addoption_instance(option, shortupper=False) + self._addoption_inner(opts, attrs, allow_reserved=False) def _addoption(self, *opts: str, **attrs: Any) -> None: - option = Argument(*opts, **attrs) - self._addoption_instance(option, shortupper=True) + """Like addoption(), but also allows registering short lower case options (e.g. -x), + which are reserved for pytest core.""" + self._addoption_inner(opts, attrs, allow_reserved=True) - def _addoption_instance(self, option: Argument, shortupper: bool = False) -> None: - if not shortupper: - for opt in option._short_opts: - if opt[0] == "-" and opt[1].islower(): - raise ValueError("lowercase shortoptions reserved") + def _addoption_inner( + self, opts: tuple[str, ...], attrs: dict[str, Any], allow_reserved: bool + ) -> None: + if not allow_reserved: + for opt in opts: + if len(opt) >= 2 and opt[0] == "-" and opt[1].islower(): + raise ValueError("lowercase short options are reserved") + action = self._arggroup.add_argument(*opts, **attrs) + option = Argument(action) + self.options.append(option) if self.parser: self.parser.processoption(option) - self._arggroup.add_argument(*option.names(), **option.attrs()) - self.options.append(option) - class PytestArgumentParser(argparse.ArgumentParser): def __init__( @@ -495,10 +431,9 @@ def _format_action_invocation(self, action: argparse.Action) -> str: for option in options: if len(option) == 2 or option[2] == " ": continue - if not option.startswith("--"): - raise ArgumentError( - f'long optional argument without "--": [{option}]', option - ) + assert option.startswith("--"), ( + f'long optional argument without "--": [{option}]' + ) xxoption = option[2:] shortened = xxoption.replace("-", "") if shortened not in short_long or len(short_long[shortened]) < len( diff --git a/src/_pytest/helpconfig.py b/src/_pytest/helpconfig.py index 6a22c9f58ac..fdba02b35f4 100644 --- a/src/_pytest/helpconfig.py +++ b/src/_pytest/helpconfig.py @@ -59,8 +59,8 @@ def __call__( def pytest_addoption(parser: Parser) -> None: group = parser.getgroup("debugconfig") group.addoption( - "--version", "-V", + "--version", action="count", default=0, dest="version", diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py index 7b31abdf934..4b721cb96f6 100644 --- a/testing/test_parseopt.py +++ b/testing/test_parseopt.py @@ -34,33 +34,43 @@ def test_custom_prog(self, parser: parseopt.Parser) -> None: assert parser.optparser.prog == "custom-prog" def test_argument(self) -> None: - with pytest.raises(parseopt.ArgumentError): - # need a short or long option - argument = parseopt.Argument() - argument = parseopt.Argument("-t") - assert argument._short_opts == ["-t"] - assert argument._long_opts == [] - assert argument.dest == "t" - argument = parseopt.Argument("-t", "--test") - assert argument._short_opts == ["-t"] - assert argument._long_opts == ["--test"] - assert argument.dest == "test" - argument = parseopt.Argument("-t", "--test", dest="abc") + parser = argparse.ArgumentParser() + + action = parser.add_argument("-a") + argument = parseopt.Argument(action) + assert argument.names() == ["-a"] + assert argument.dest == "a" + + action = parser.add_argument("-b", "--boop") + argument = parseopt.Argument(action) + assert argument.names() == ["-b", "--boop"] + assert argument.dest == "boop" + + action = parser.add_argument("-c", "--coop", dest="abc") + argument = parseopt.Argument(action) assert argument.dest == "abc" - assert str(argument) == ( - "Argument(_short_opts: ['-t'], _long_opts: ['--test'], dest: 'abc')" + assert ( + str(argument) + == "Argument(opts: ['-c', '--coop'], dest: 'abc', default: None)" ) def test_argument_type(self) -> None: - argument = parseopt.Argument("-t", dest="abc", type=int) + parser = argparse.ArgumentParser() + + action = parser.add_argument("-a", dest="aa", type=int) + argument = parseopt.Argument(action) assert argument.type is int - argument = parseopt.Argument("-t", dest="abc", type=str) + + action = parser.add_argument("-b", dest="bb", type=str) + argument = parseopt.Argument(action) assert argument.type is str - argument = parseopt.Argument("-t", dest="abc", type=float) + + action = parser.add_argument("-c", dest="cc", type=float) + argument = parseopt.Argument(action) assert argument.type is float - argument = parseopt.Argument( - "-t", dest="abc", type=str, choices=["red", "blue"] - ) + + action = parser.add_argument("-d", dest="dd", type=str, choices=["red", "blue"]) + argument = parseopt.Argument(action) assert argument.type is str def test_group_add_and_get(self, parser: parseopt.Parser) -> None: From 5aa63a4d4621710cd5b70fd55dfb75b88e6da171 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 1 Nov 2025 23:30:10 +0200 Subject: [PATCH 042/307] config: move `_opt2dest` maintenance to `Parser` It's a low-level concern so low level should handle it. And one less thing in the `_processopt` callback which hopefully we can eventually remove. --- src/_pytest/config/__init__.py | 6 +----- src/_pytest/config/argparsing.py | 4 ++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 2ec3488327e..ac52d992d51 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -1083,7 +1083,6 @@ def __init__( self.trace = self.pluginmanager.trace.root.get("config") self.hook: pluggy.HookRelay = PathAwareHookProxy(self.pluginmanager.hook) # type: ignore[assignment] self._inicache: dict[str, Any] = {} - self._opt2dest: dict[str, str] = {} self._cleanup_stack = contextlib.ExitStack() self.pluginmanager.register(self, "pytestconfig") self._configured = False @@ -1208,9 +1207,6 @@ def fromdictargs(cls, option_dict: Mapping[str, Any], args: list[str]) -> Config return config def _processopt(self, opt: Argument) -> None: - for name in opt.names(): - self._opt2dest[name] = opt.dest - if not hasattr(self.option, opt.dest): setattr(self.option, opt.dest, opt.default) @@ -1842,7 +1838,7 @@ def getoption(self, name: str, default: Any = NOTSET, skip: bool = False): :param skip: If ``True``, raise :func:`pytest.skip` if option is undeclared or has a ``None`` value. Note that even if ``True``, if a default was specified it will be returned instead of a skip. """ - name = self._opt2dest.get(name, name) + name = self._parser._opt2dest.get(name, name) try: val = getattr(self.option, name) if val is None and skip: diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 77d3be505b2..b7f65890e89 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -48,6 +48,8 @@ def __init__( anonymous_arggroup, "_anonymous", self, _ispytest=True ) self._groups = [self._anonymous] + # Maps option strings -> dest, e.g. "-V" and "--version" to "version". + self._opt2dest: dict[str, str] = {} file_or_dir_arg = self.optparser.add_argument(FILE_OR_DIR, nargs="*") file_or_dir_arg.completer = filescompleter # type: ignore @@ -368,6 +370,8 @@ def _addoption_inner( option = Argument(action) self.options.append(option) if self.parser: + for name in option.names(): + self.parser._opt2dest[name] = option.dest self.parser.processoption(option) From 91cfa28769be0093e2098398f2696032718aee8a Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 2 Nov 2025 09:30:09 +0200 Subject: [PATCH 043/307] Use `importlib.import_module` instead of `__import__` As recommended by Python's documentation for `__import__`. --- src/_pytest/config/__init__.py | 12 +++++++++--- src/_pytest/debugging.py | 4 ++-- src/_pytest/monkeypatch.py | 5 +++-- src/_pytest/outcomes.py | 3 ++- testing/acceptance_test.py | 4 ++-- testing/test_config.py | 3 +-- testing/test_pathlib.py | 2 +- 7 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index ac52d992d51..f4f4a7b5083 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -18,6 +18,7 @@ import enum from functools import lru_cache import glob +import importlib import importlib.metadata import inspect import os @@ -874,7 +875,13 @@ def import_plugin(self, modname: str, consider_entry_points: bool = False) -> No return try: - __import__(importspec) + if sys.version_info >= (3, 11): + mod = importlib.import_module(importspec) + else: + # On Python 3.10, import_module breaks + # testing/test_config.py::test_disable_plugin_autoload. + __import__(importspec) + mod = sys.modules[importspec] except ImportError as e: raise ImportError( f'Error importing plugin "{modname}": {e.args[0]}' @@ -883,7 +890,6 @@ def import_plugin(self, modname: str, consider_entry_points: bool = False) -> No except Skipped as e: self.skipped_plugins.append((modname, e.msg or "")) else: - mod = sys.modules[importspec] self.register(mod, modname) @@ -2122,7 +2128,7 @@ def _resolve_warning_category(category: str) -> type[Warning]: klass = category else: module, _, klass = category.rpartition(".") - m = __import__(module, None, None, [klass]) + m = importlib.import_module(module) cat = getattr(m, klass) if not issubclass(cat, Warning): raise UsageError(f"{cat} is not a Warning subclass") diff --git a/src/_pytest/debugging.py b/src/_pytest/debugging.py index 2ee540cc996..b256f83c8bf 100644 --- a/src/_pytest/debugging.py +++ b/src/_pytest/debugging.py @@ -8,6 +8,7 @@ from collections.abc import Callable from collections.abc import Generator import functools +import importlib import sys import types from typing import Any @@ -122,8 +123,7 @@ def _import_pdb_cls(cls, capman: CaptureManager | None): modname, classname = usepdb_cls try: - __import__(modname) - mod = sys.modules[modname] + mod = importlib.import_module(modname) # Handle --pdbcls=pdb:pdb.Pdb (useful e.g. with pdbpp). parts = classname.split(".") diff --git a/src/_pytest/monkeypatch.py b/src/_pytest/monkeypatch.py index 0cdfaec2dde..6c033f36fda 100644 --- a/src/_pytest/monkeypatch.py +++ b/src/_pytest/monkeypatch.py @@ -7,6 +7,7 @@ from collections.abc import Mapping from collections.abc import MutableMapping from contextlib import contextmanager +import importlib import os from pathlib import Path import re @@ -66,7 +67,7 @@ def resolve(name: str) -> object: parts = name.split(".") used = parts.pop(0) - found: object = __import__(used) + found: object = importlib.import_module(used) for part in parts: used += "." + part try: @@ -78,7 +79,7 @@ def resolve(name: str) -> object: # We use explicit un-nesting of the handling block in order # to avoid nested exceptions. try: - __import__(used) + importlib.import_module(used) except ImportError as ex: expected = str(ex).split()[-1] if expected == used: diff --git a/src/_pytest/outcomes.py b/src/_pytest/outcomes.py index 766be95c0f7..09d0a6eccea 100644 --- a/src/_pytest/outcomes.py +++ b/src/_pytest/outcomes.py @@ -3,6 +3,7 @@ from __future__ import annotations +import importlib import sys from typing import Any from typing import ClassVar @@ -268,7 +269,7 @@ def importorskip( warnings.simplefilter("ignore") try: - __import__(modname) + importlib.import_module(modname) except exc_type as exc: # Do not raise or issue warnings inside the catch_warnings() block. if reason is None: diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index b9384008483..11cc8a7217f 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -129,9 +129,9 @@ class DummyEntryPoint: group: str = "pytest11" def load(self): - __import__(self.module) + mod = importlib.import_module(self.module) loaded.append(self.name) - return sys.modules[self.module] + return mod entry_points = [ DummyEntryPoint("myplugin1", "mytestplugin1_module"), diff --git a/testing/test_config.py b/testing/test_config.py index 98555e04452..65bf94ae19b 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -600,8 +600,7 @@ class DummyEntryPoint: group: str = "pytest11" def load(self): - __import__(self.module) - return sys.modules[self.module] + return importlib.import_module(self.module) entry_points = [ DummyEntryPoint("myplugin1", "myplugin1_module"), diff --git a/testing/test_pathlib.py b/testing/test_pathlib.py index 0880c355557..1dec3c6ec78 100644 --- a/testing/test_pathlib.py +++ b/testing/test_pathlib.py @@ -964,7 +964,7 @@ def test_demo(): ) # unit test - __import__(name) # import standard library + importlib.import_module(name) # import standard library import_path( # import user files file_path, From 51a7a21659b3121a5689d31cddf38ab42188d411 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 2 Nov 2025 11:34:23 +0200 Subject: [PATCH 044/307] config: remove passing `parser` on `PytestArgumentParser` No longer needed, forgot to remove it. --- src/_pytest/config/argparsing.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index b7f65890e89..fbbff26b2b9 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -42,7 +42,7 @@ def __init__( self._processopt = processopt self.extra_info: dict[str, Any] = {} - self.optparser = PytestArgumentParser(self, usage, self.extra_info) + self.optparser = PytestArgumentParser(usage, self.extra_info) anonymous_arggroup = self.optparser.add_argument_group("Custom options") self._anonymous = OptionGroup( anonymous_arggroup, "_anonymous", self, _ispytest=True @@ -378,11 +378,9 @@ def _addoption_inner( class PytestArgumentParser(argparse.ArgumentParser): def __init__( self, - parser: Parser, usage: str | None, extra_info: dict[str, str], ) -> None: - self._parser = parser super().__init__( usage=usage, add_help=False, From 5f59c809b3fbc49425a4c066382967c5eae603c3 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 5 Nov 2025 16:51:18 +0200 Subject: [PATCH 045/307] config: add comment about future possibility --- src/_pytest/config/argparsing.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index fbbff26b2b9..03015d1e34a 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -394,6 +394,8 @@ def __init__( def error(self, message: str) -> NoReturn: """Transform argparse error message into UsageError.""" + # TODO(py313): Replace with `exit_on_error=False`. Note that while it + # was added in Python 3.9, it was broken until 3.13 (cpython#121018). msg = f"{self.prog}: error: {message}" if self.extra_info: msg += "\n" + "\n".join( From 4b1aa0613352aa4a637db2d9ada4848a5755678d Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 2 Nov 2025 14:17:09 +0200 Subject: [PATCH 046/307] config: drop caching from `DropShorterLongHelpFormatter` Unlike what the comment says, it is not called multiple times when `--help` is used (it is not used at all when not). --- src/_pytest/config/argparsing.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 03015d1e34a..d62d5454169 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -409,7 +409,6 @@ class DropShorterLongHelpFormatter(argparse.HelpFormatter): - Collapse **long** options that are the same except for extra hyphens. - Shortcut if there are only two options and one of them is a short one. - - Cache result on the action object as this is called at least 2 times. """ def __init__(self, *args: Any, **kwargs: Any) -> None: @@ -422,13 +421,9 @@ def _format_action_invocation(self, action: argparse.Action) -> str: orgstr = super()._format_action_invocation(action) if orgstr and orgstr[0] != "-": # only optional arguments return orgstr - res: str | None = getattr(action, "_formatted_action_invocation", None) - if res: - return res options = orgstr.split(", ") if len(options) == 2 and (len(options[0]) == 2 or len(options[1]) == 2): # a shortcut for '-h, --help' or '--abc', '-a' - action._formatted_action_invocation = orgstr # type: ignore return orgstr return_list = [] short_long: dict[str, str] = {} @@ -451,9 +446,7 @@ def _format_action_invocation(self, action: argparse.Action) -> str: return_list.append(option) if option[2:] == short_long.get(option.replace("-", "")): return_list.append(option.replace(" ", "=", 1)) - formatted_action_invocation = ", ".join(return_list) - action._formatted_action_invocation = formatted_action_invocation # type: ignore - return formatted_action_invocation + return ", ".join(return_list) def _split_lines(self, text, width): """Wrap lines after splitting on original newlines. From 05646c20968351ccdf1d2ac2228d366477a9709f Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 2 Nov 2025 14:26:12 +0200 Subject: [PATCH 047/307] config: add a type annotation --- src/_pytest/config/argparsing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index d62d5454169..4536709134b 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -448,7 +448,7 @@ def _format_action_invocation(self, action: argparse.Action) -> str: return_list.append(option.replace(" ", "=", 1)) return ", ".join(return_list) - def _split_lines(self, text, width): + def _split_lines(self, text: str, width: int) -> list[str]: """Wrap lines after splitting on original newlines. This allows to have explicit line breaks in the help text. From e3d43101ee0ed52499dbd03bb61a957bf1468e10 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 2 Nov 2025 14:37:09 +0200 Subject: [PATCH 048/307] config: avoid direct access to `inicfg` No apparent need for it. --- src/_pytest/config/__init__.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index f4f4a7b5083..812daed88f2 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -1370,17 +1370,11 @@ def pytest_collection(self) -> Generator[None, object, object]: def _checkversion(self) -> None: import pytest - minver_ini_value = self.inicfg.get("minversion", None) - minver = minver_ini_value.value if minver_ini_value is not None else None + minver = self.getini("minversion") if minver: # Imported lazily to improve start-up time. from packaging.version import Version - if not isinstance(minver, str): - raise pytest.UsageError( - f"{self.inipath}: 'minversion' must be a single value" - ) - if Version(minver) > Version(pytest.__version__): raise pytest.UsageError( f"{self.inipath}: 'minversion' requires pytest-{minver}, actual pytest-{pytest.__version__}'" From e4df84170844318ceaef7650ce45deeb6f882396 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 12 Nov 2025 10:44:40 -0300 Subject: [PATCH 049/307] Merge pull request #13953 from nicoddemus/cherry-pick-release Cherry-pick release 9.0.1 --- changelog/13891.contrib.rst | 1 - changelog/13895.bugfix.rst | 1 - changelog/13896.bugfix.rst | 1 - changelog/13904.bugfix.rst | 1 - changelog/13910.bugfix.rst | 1 - changelog/13933.contrib.rst | 4 --- changelog/13933.packaging.rst | 1 - changelog/13942.contrib.rst | 3 -- doc/en/announce/index.rst | 1 + doc/en/announce/release-9.0.1.rst | 18 +++++++++++ doc/en/builtin.rst | 2 +- doc/en/changelog.rst | 43 +++++++++++++++++++++++++ doc/en/example/customdirectory.rst | 4 +-- doc/en/example/markers.rst | 30 ++++++++--------- doc/en/example/nonpython.rst | 6 ++-- doc/en/example/parametrize.rst | 20 ++++++------ doc/en/example/pythoncollection.rst | 10 +++--- doc/en/example/reportingdemo.rst | 2 +- doc/en/example/simple.rst | 22 ++++++------- doc/en/getting-started.rst | 4 +-- doc/en/how-to/assert.rst | 4 +-- doc/en/how-to/cache.rst | 8 ++--- doc/en/how-to/capture-stdout-stderr.rst | 2 +- doc/en/how-to/capture-warnings.rst | 2 +- doc/en/how-to/doctest.rst | 4 +-- doc/en/how-to/fixtures.rst | 16 ++++----- doc/en/how-to/output.rst | 6 ++-- doc/en/how-to/parametrize.rst | 4 +-- doc/en/how-to/tmp_path.rst | 2 +- doc/en/how-to/unittest.rst | 2 +- doc/en/how-to/writing_plugins.rst | 2 +- doc/en/index.rst | 2 +- 32 files changed, 139 insertions(+), 90 deletions(-) delete mode 120000 changelog/13891.contrib.rst delete mode 100644 changelog/13895.bugfix.rst delete mode 100644 changelog/13896.bugfix.rst delete mode 100644 changelog/13904.bugfix.rst delete mode 100644 changelog/13910.bugfix.rst delete mode 100644 changelog/13933.contrib.rst delete mode 120000 changelog/13933.packaging.rst delete mode 100644 changelog/13942.contrib.rst create mode 100644 doc/en/announce/release-9.0.1.rst diff --git a/changelog/13891.contrib.rst b/changelog/13891.contrib.rst deleted file mode 120000 index b5cf5102ff8..00000000000 --- a/changelog/13891.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -13942.contrib.rst \ No newline at end of file diff --git a/changelog/13895.bugfix.rst b/changelog/13895.bugfix.rst deleted file mode 100644 index 5acd47cff38..00000000000 --- a/changelog/13895.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Restore support for skipping tests via ``raise unittest.SkipTest``. diff --git a/changelog/13896.bugfix.rst b/changelog/13896.bugfix.rst deleted file mode 100644 index 821af0c96b4..00000000000 --- a/changelog/13896.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -The terminal progress plugin added in pytest 9.0 is now automatically disabled when iTerm2 is detected, it generated desktop notifications instead of the desired functionality. diff --git a/changelog/13904.bugfix.rst b/changelog/13904.bugfix.rst deleted file mode 100644 index 739c16e12bd..00000000000 --- a/changelog/13904.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the TOML type of the verbosity settings in the API reference from number to string. diff --git a/changelog/13910.bugfix.rst b/changelog/13910.bugfix.rst deleted file mode 100644 index f399f95b375..00000000000 --- a/changelog/13910.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed `UserWarning: Do not expect file_or_dir` on some earlier Python 3.12 and 3.13 point versions. diff --git a/changelog/13933.contrib.rst b/changelog/13933.contrib.rst deleted file mode 100644 index feab3e0dc03..00000000000 --- a/changelog/13933.contrib.rst +++ /dev/null @@ -1,4 +0,0 @@ -The tox configuration has been adjusted to make sure the desired -version string can be passed into its :ref:`package_env` through -the ``SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST`` environment -variable as a part of the release process -- by :user:`webknjaz`. diff --git a/changelog/13933.packaging.rst b/changelog/13933.packaging.rst deleted file mode 120000 index 79139f98eed..00000000000 --- a/changelog/13933.packaging.rst +++ /dev/null @@ -1 +0,0 @@ -13933.contrib.rst \ No newline at end of file diff --git a/changelog/13942.contrib.rst b/changelog/13942.contrib.rst deleted file mode 100644 index cdf23e68455..00000000000 --- a/changelog/13942.contrib.rst +++ /dev/null @@ -1,3 +0,0 @@ -The CI/CD part of the release automation is now capable of -creating GitHub Releases without having a Git checkout on -disk -- by :user:`bluetech` and :user:`webknjaz`. diff --git a/doc/en/announce/index.rst b/doc/en/announce/index.rst index f5e00d34cdb..2859e6210ff 100644 --- a/doc/en/announce/index.rst +++ b/doc/en/announce/index.rst @@ -6,6 +6,7 @@ Release announcements :maxdepth: 2 + release-9.0.1 release-9.0.0 release-8.4.2 release-8.4.1 diff --git a/doc/en/announce/release-9.0.1.rst b/doc/en/announce/release-9.0.1.rst new file mode 100644 index 00000000000..46af130e03c --- /dev/null +++ b/doc/en/announce/release-9.0.1.rst @@ -0,0 +1,18 @@ +pytest-9.0.1 +======================================= + +pytest 9.0.1 has just been released to PyPI. + +This is a bug-fix release, being a drop-in replacement. + +The full changelog is available at https://docs.pytest.org/en/stable/changelog.html. + +Thanks to all of the contributors to this release: + +* Bruno Oliveira +* Ran Benita +* 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) + + +Happy testing, +The pytest Development Team diff --git a/doc/en/builtin.rst b/doc/en/builtin.rst index a7b0ff2e5c8..5b66626fd20 100644 --- a/doc/en/builtin.rst +++ b/doc/en/builtin.rst @@ -18,7 +18,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a $ pytest --fixtures -v =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collected 0 items diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index 5220afc46e3..85a509dff3f 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -31,6 +31,49 @@ with advance notice in the **Deprecations** section of releases. .. towncrier release notes start +pytest 9.0.1 (2025-11-12) +========================= + +Bug fixes +--------- + +- `#13895 `_: Restore support for skipping tests via ``raise unittest.SkipTest``. + + +- `#13896 `_: The terminal progress plugin added in pytest 9.0 is now automatically disabled when iTerm2 is detected, it generated desktop notifications instead of the desired functionality. + + +- `#13904 `_: Fixed the TOML type of the verbosity settings in the API reference from number to string. + + +- `#13910 `_: Fixed `UserWarning: Do not expect file_or_dir` on some earlier Python 3.12 and 3.13 point versions. + + + +Packaging updates and notes for downstreams +------------------------------------------- + +- `#13933 `_: The tox configuration has been adjusted to make sure the desired + version string can be passed into its :ref:`package_env` through + the ``SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST`` environment + variable as a part of the release process -- by :user:`webknjaz`. + + + +Contributor-facing changes +-------------------------- + +- `#13891 `_, `#13942 `_: The CI/CD part of the release automation is now capable of + creating GitHub Releases without having a Git checkout on + disk -- by :user:`bluetech` and :user:`webknjaz`. + + +- `#13933 `_: The tox configuration has been adjusted to make sure the desired + version string can be passed into its :ref:`package_env` through + the ``SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST`` environment + variable as a part of the release process -- by :user:`webknjaz`. + + pytest 9.0.0 (2025-11-05) ========================= diff --git a/doc/en/example/customdirectory.rst b/doc/en/example/customdirectory.rst index 1e4d7e370de..6e326352a7e 100644 --- a/doc/en/example/customdirectory.rst +++ b/doc/en/example/customdirectory.rst @@ -42,7 +42,7 @@ An you can now execute the test specification: customdirectory $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project/customdirectory configfile: pytest.ini collected 2 items @@ -62,7 +62,7 @@ You can verify that your custom collector appears in the collection tree: customdirectory $ pytest --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project/customdirectory configfile: pytest.ini collected 2 items diff --git a/doc/en/example/markers.rst b/doc/en/example/markers.rst index afb1ece0fe8..cbe417e8a3e 100644 --- a/doc/en/example/markers.rst +++ b/doc/en/example/markers.rst @@ -47,7 +47,7 @@ You can then restrict a test run to only run tests marked with ``webtest``: $ pytest -v -m webtest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 4 items / 3 deselected / 1 selected @@ -62,7 +62,7 @@ Or the inverse, running all tests except the webtest ones: $ pytest -v -m "not webtest" =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 4 items / 1 deselected / 3 selected @@ -82,7 +82,7 @@ keyword arguments, e.g. to run only tests marked with ``device`` and the specifi $ pytest -v -m "device(serial='123')" =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 4 items / 3 deselected / 1 selected @@ -106,7 +106,7 @@ tests based on their module, class, method, or function name: $ pytest -v test_server.py::TestClass::test_method =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 1 item @@ -121,7 +121,7 @@ You can also select on the class: $ pytest -v test_server.py::TestClass =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 1 item @@ -136,7 +136,7 @@ Or select multiple nodes: $ pytest -v test_server.py::TestClass test_server.py::test_send_http =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 2 items @@ -180,7 +180,7 @@ The expression matching is now case-insensitive. $ pytest -v -k http # running with the above defined example module =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 4 items / 3 deselected / 1 selected @@ -195,7 +195,7 @@ And you can also run all tests except the ones that match the keyword: $ pytest -k "not send_http" -v =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 4 items / 1 deselected / 3 selected @@ -212,7 +212,7 @@ Or to select "http" and "quick" tests: $ pytest -k "http or quick" -v =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 4 items / 2 deselected / 2 selected @@ -418,7 +418,7 @@ the test needs: $ pytest -E stage2 =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item @@ -432,7 +432,7 @@ and here is one that specifies exactly the environment needed: $ pytest -E stage1 =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item @@ -625,7 +625,7 @@ then you will see two tests skipped and two executed tests as expected: $ pytest -rs # this option reports skip reasons =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items @@ -641,7 +641,7 @@ Note that if you specify a platform via the marker-command line option like this $ pytest -m linux =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items / 3 deselected / 1 selected @@ -704,7 +704,7 @@ We can now use the ``-m option`` to select one set: $ pytest -m interface --tb=short =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items / 2 deselected / 2 selected @@ -730,7 +730,7 @@ or to select both "event" and "interface" tests: $ pytest -m "interface or event" --tb=short =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items / 1 deselected / 3 selected diff --git a/doc/en/example/nonpython.rst b/doc/en/example/nonpython.rst index a8d172937c5..bb879fb51ab 100644 --- a/doc/en/example/nonpython.rst +++ b/doc/en/example/nonpython.rst @@ -28,7 +28,7 @@ now execute the test specification: nonpython $ pytest test_simple.yaml =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project/nonpython collected 2 items @@ -64,7 +64,7 @@ consulted when reporting in ``verbose`` mode: nonpython $ pytest -v =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project/nonpython collecting ... collected 2 items @@ -90,7 +90,7 @@ interesting to just look at the collection tree: nonpython $ pytest --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project/nonpython collected 2 items diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index b27dae18c32..1cbeee27aad 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -158,11 +158,11 @@ objects, they are still using the default pytest representation: $ pytest test_time.py --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 8 items - + @@ -221,7 +221,7 @@ this is a fully self-contained example which you can run with: $ pytest test_scenarios.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items @@ -235,11 +235,11 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia $ pytest --collect-only test_scenarios.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items - + @@ -314,11 +314,11 @@ Let's first see how it looks like at collection time: $ pytest test_backends.py --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items - + @@ -413,7 +413,7 @@ The result of this test will be successful: $ pytest -v test_indirect_list.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 1 item @@ -566,7 +566,7 @@ If you run this with reporting for skips enabled: $ pytest -rs test_module.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items @@ -627,7 +627,7 @@ Then run ``pytest`` with verbose mode and with only the ``basic`` marker: $ pytest -v -m basic =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 24 items / 21 deselected / 3 selected diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index 09489418773..eba40d50d1b 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -137,12 +137,12 @@ The test collection would look like this: $ pytest --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project configfile: pytest.toml collected 2 items - + @@ -200,12 +200,12 @@ You can always peek at the collection tree without running tests like this: . $ pytest --collect-only pythoncollection.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project configfile: pytest.toml collected 3 items - + @@ -284,7 +284,7 @@ file will be left out: $ pytest --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project configfile: pytest.toml collected 0 items diff --git a/doc/en/example/reportingdemo.rst b/doc/en/example/reportingdemo.rst index 8040ee9b957..29ba190b7e7 100644 --- a/doc/en/example/reportingdemo.rst +++ b/doc/en/example/reportingdemo.rst @@ -9,7 +9,7 @@ Here is a nice run of several failures and how ``pytest`` presents things: assertion $ pytest failure_demo.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project/assertion collected 44 items diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index e150e7ca00b..09335153ad1 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -235,7 +235,7 @@ directory with the above conftest.py: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 0 items @@ -299,7 +299,7 @@ and when running it will see a skipped "slow" test: $ pytest -rs # "-rs" means report details on the little 's' =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items @@ -315,7 +315,7 @@ Or run it including the ``slow`` marked test: $ pytest --runslow =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items @@ -444,7 +444,7 @@ which will add the string to the test header accordingly: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y project deps: mylib-1.1 rootdir: /home/sweet/project collected 0 items @@ -472,7 +472,7 @@ which will add info only when run with "--v": $ pytest -v =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache info1: did you know that ... did you? @@ -487,7 +487,7 @@ and nothing when run plainly: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 0 items @@ -526,7 +526,7 @@ Now we can profile which test functions execute the slowest: $ pytest --durations=3 =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 3 items @@ -632,7 +632,7 @@ If we run this: $ pytest -rx =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 4 items @@ -714,7 +714,7 @@ We can run this: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 7 items @@ -836,7 +836,7 @@ and run them: $ pytest test_module.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items @@ -947,7 +947,7 @@ and run it: $ pytest -s test_module.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 3 items diff --git a/doc/en/getting-started.rst b/doc/en/getting-started.rst index ec1ef60a605..e1932d96ef9 100644 --- a/doc/en/getting-started.rst +++ b/doc/en/getting-started.rst @@ -20,7 +20,7 @@ Install ``pytest`` .. code-block:: bash $ pytest --version - pytest 9.0.0 + pytest 9.0.1 .. _`simpletest`: @@ -45,7 +45,7 @@ The test $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item diff --git a/doc/en/how-to/assert.rst b/doc/en/how-to/assert.rst index 4dfceda0fad..a1fce9f8b90 100644 --- a/doc/en/how-to/assert.rst +++ b/doc/en/how-to/assert.rst @@ -29,7 +29,7 @@ you will see the return value of the function call: $ pytest test_assert1.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item @@ -404,7 +404,7 @@ if you run this module: $ pytest test_assert2.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item diff --git a/doc/en/how-to/cache.rst b/doc/en/how-to/cache.rst index e3209b79359..bfc1902cae0 100644 --- a/doc/en/how-to/cache.rst +++ b/doc/en/how-to/cache.rst @@ -86,7 +86,7 @@ If you then run it with ``--lf``: $ pytest --lf =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items run-last-failure: rerun previous 2 failures @@ -132,7 +132,7 @@ of ``FF`` and dots): $ pytest --ff =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 50 items run-last-failure: rerun previous 2 failures first @@ -281,7 +281,7 @@ You can always peek at the content of the cache using the $ pytest --cache-show =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project cachedir: /home/sweet/project/.pytest_cache --------------------------- cache values for '*' --------------------------- @@ -301,7 +301,7 @@ filtering: $ pytest --cache-show example/* =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project cachedir: /home/sweet/project/.pytest_cache ----------------------- cache values for 'example/*' ----------------------- diff --git a/doc/en/how-to/capture-stdout-stderr.rst b/doc/en/how-to/capture-stdout-stderr.rst index e6affd80ea1..cd5cb6d798f 100644 --- a/doc/en/how-to/capture-stdout-stderr.rst +++ b/doc/en/how-to/capture-stdout-stderr.rst @@ -89,7 +89,7 @@ of the failing function and hide the other one: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index 2bf42adc0f7..fd84e3b54e4 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -28,7 +28,7 @@ Running pytest now produces this output: $ pytest test_show_warnings.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item diff --git a/doc/en/how-to/doctest.rst b/doc/en/how-to/doctest.rst index 601f5c0afd0..de6679bc452 100644 --- a/doc/en/how-to/doctest.rst +++ b/doc/en/how-to/doctest.rst @@ -30,7 +30,7 @@ then you can just invoke ``pytest`` directly: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item @@ -58,7 +58,7 @@ and functions, including from test modules: $ pytest --doctest-modules =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 0c4ddb8b4dc..40e13e2afa8 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -433,7 +433,7 @@ marked ``smtp_connection`` fixture function. Running the test looks like this: $ pytest test_module.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items @@ -773,7 +773,7 @@ For yield fixtures, the first teardown code to run is from the right-most fixtur $ pytest -s test_finalizers.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item @@ -807,7 +807,7 @@ For finalizers, the first fixture to run is last call to `request.addfinalizer`. $ pytest -s test_finalizers.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item @@ -1419,11 +1419,11 @@ Running the above tests results in the following test IDs being used: $ pytest --collect-only =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 12 items - + @@ -1474,7 +1474,7 @@ Running this test will *skip* the invocation of ``data_set`` with value ``2``: $ pytest test_fixture_marks.py -v =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 3 items @@ -1524,7 +1524,7 @@ Here we declare an ``app`` fixture which receives the previously defined $ pytest -v test_appsetup.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 2 items @@ -1604,7 +1604,7 @@ Let's run the tests in verbose mode and with looking at the print-output: $ pytest -v -s test_module.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python cachedir: .pytest_cache rootdir: /home/sweet/project collecting ... collected 8 items diff --git a/doc/en/how-to/output.rst b/doc/en/how-to/output.rst index e03f477b22d..ec4ca05838e 100644 --- a/doc/en/how-to/output.rst +++ b/doc/en/how-to/output.rst @@ -421,7 +421,7 @@ Example: $ pytest -ra =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 6 items @@ -478,7 +478,7 @@ More than one character can be used, so for example to only see failed and skipp $ pytest -rfs =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 6 items @@ -513,7 +513,7 @@ captured output: $ pytest -rpP =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 6 items diff --git a/doc/en/how-to/parametrize.rst b/doc/en/how-to/parametrize.rst index dba2ac0b91e..5de28472705 100644 --- a/doc/en/how-to/parametrize.rst +++ b/doc/en/how-to/parametrize.rst @@ -57,7 +57,7 @@ them in turn: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 3 items @@ -177,7 +177,7 @@ Let's run this: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 3 items diff --git a/doc/en/how-to/tmp_path.rst b/doc/en/how-to/tmp_path.rst index d19950431e5..04c663bb986 100644 --- a/doc/en/how-to/tmp_path.rst +++ b/doc/en/how-to/tmp_path.rst @@ -35,7 +35,7 @@ Running this would result in a passed test except for the last $ pytest test_tmp_path.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item diff --git a/doc/en/how-to/unittest.rst b/doc/en/how-to/unittest.rst index a8c56c266bd..12511fed262 100644 --- a/doc/en/how-to/unittest.rst +++ b/doc/en/how-to/unittest.rst @@ -137,7 +137,7 @@ the ``self.db`` values in the traceback: $ pytest test_unittest_db.py =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 2 items diff --git a/doc/en/how-to/writing_plugins.rst b/doc/en/how-to/writing_plugins.rst index 6382edc4797..ec10c0e261c 100644 --- a/doc/en/how-to/writing_plugins.rst +++ b/doc/en/how-to/writing_plugins.rst @@ -446,7 +446,7 @@ in our configuration file to tell pytest where to look for example files. $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project configfile: pytest.toml collected 2 items diff --git a/doc/en/index.rst b/doc/en/index.rst index 2d9e3bed42c..b98c886d981 100644 --- a/doc/en/index.rst +++ b/doc/en/index.rst @@ -67,7 +67,7 @@ To execute it: $ pytest =========================== test session starts ============================ - platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y + platform linux -- Python 3.x.y, pytest-9.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item From a6f3ec732798b2bd06746c55df2b147596caeed3 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 9 Nov 2025 00:38:01 +0200 Subject: [PATCH 050/307] Remove legacy py.path argument support in hooks Deprecated feature scheduled for removal in pytest 9. Part of #13893. --- doc/en/deprecations.rst | 55 ++++++++++++------------- src/_pytest/config/__init__.py | 4 +- src/_pytest/config/compat.py | 72 --------------------------------- src/_pytest/deprecated.py | 7 ---- src/_pytest/hookspec.py | 74 ++++++---------------------------- src/_pytest/main.py | 3 +- testing/deprecated_test.py | 59 --------------------------- 7 files changed, 43 insertions(+), 231 deletions(-) diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index f2a665a6267..3a7324da7ed 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -297,33 +297,6 @@ Changed ``hookwrapper`` attributes: * ``historic`` -.. _legacy-path-hooks-deprecated: - -``py.path.local`` arguments for hooks replaced with ``pathlib.Path`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. deprecated:: 7.0 - -In order to support the transition from ``py.path.local`` to :mod:`pathlib`, the following hooks now receive additional arguments: - -* :hook:`pytest_ignore_collect(collection_path: pathlib.Path) ` as equivalent to ``path`` -* :hook:`pytest_collect_file(file_path: pathlib.Path) ` as equivalent to ``path`` -* :hook:`pytest_pycollect_makemodule(module_path: pathlib.Path) ` as equivalent to ``path`` -* :hook:`pytest_report_header(start_path: pathlib.Path) ` as equivalent to ``startdir`` -* :hook:`pytest_report_collectionfinish(start_path: pathlib.Path) ` as equivalent to ``startdir`` - -The accompanying ``py.path.local`` based paths have been deprecated: plugins which manually invoke those hooks should only pass the new ``pathlib.Path`` arguments, and users should change their hook implementations to use the new ``pathlib.Path`` arguments. - -.. note:: - The name of the :class:`~_pytest.nodes.Node` arguments and attributes, - :ref:`outlined above ` (the new attribute - being ``path``) is **the opposite** of the situation for hooks (the old - argument being ``path``). - - This is an unfortunate artifact due to historical reasons, which should be - resolved in future versions as we slowly get rid of the :pypi:`py` - dependency (see :issue:`9283` for a longer discussion). - Directly constructing internal classes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -430,6 +403,34 @@ an appropriate period of deprecation has passed. Some breaking changes which could not be deprecated are also listed. +.. _legacy-path-hooks-deprecated: + +``py.path.local`` arguments for hooks replaced with ``pathlib.Path`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 7.0 +.. versionremoved:: 9.0 + +In order to support the transition from ``py.path.local`` to :mod:`pathlib`, the following hooks now receive additional arguments: + +* :hook:`pytest_ignore_collect(collection_path: pathlib.Path) ` as equivalent to ``path`` +* :hook:`pytest_collect_file(file_path: pathlib.Path) ` as equivalent to ``path`` +* :hook:`pytest_pycollect_makemodule(module_path: pathlib.Path) ` as equivalent to ``path`` +* :hook:`pytest_report_header(start_path: pathlib.Path) ` as equivalent to ``startdir`` +* :hook:`pytest_report_collectionfinish(start_path: pathlib.Path) ` as equivalent to ``startdir`` + +The accompanying ``py.path.local`` based paths have been deprecated: plugins which manually invoke those hooks should only pass the new ``pathlib.Path`` arguments, and users should change their hook implementations to use the new ``pathlib.Path`` arguments. + +.. note:: + The name of the :class:`~_pytest.nodes.Node` arguments and attributes, + :ref:`outlined above ` (the new attribute + being ``path``) is **the opposite** of the situation for hooks (the old + argument being ``path``). + + This is an unfortunate artifact due to historical reasons, which should be + resolved in future versions as we slowly get rid of the :pypi:`py` + dependency (see :issue:`9283` for a longer discussion). + .. _yield tests deprecated: ``yield`` tests diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 812daed88f2..455ff03e908 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -38,14 +38,12 @@ from typing import TYPE_CHECKING import warnings -import pluggy from pluggy import HookimplMarker from pluggy import HookimplOpts from pluggy import HookspecMarker from pluggy import HookspecOpts from pluggy import PluginManager -from .compat import PathAwareHookProxy from .exceptions import PrintHelp as PrintHelp from .exceptions import UsageError as UsageError from .findpaths import determine_setup @@ -1087,7 +1085,7 @@ def __init__( self._store = self.stash self.trace = self.pluginmanager.trace.root.get("config") - self.hook: pluggy.HookRelay = PathAwareHookProxy(self.pluginmanager.hook) # type: ignore[assignment] + self.hook = self.pluginmanager.hook self._inicache: dict[str, Any] = {} self._cleanup_stack = contextlib.ExitStack() self.pluginmanager.register(self, "pytestconfig") diff --git a/src/_pytest/config/compat.py b/src/_pytest/config/compat.py index 21eab4c7e47..9c61b4dac09 100644 --- a/src/_pytest/config/compat.py +++ b/src/_pytest/config/compat.py @@ -1,26 +1,8 @@ from __future__ import annotations -from collections.abc import Mapping -import functools from pathlib import Path -from typing import Any -import warnings - -import pluggy from ..compat import LEGACY_PATH -from ..compat import legacy_path -from ..deprecated import HOOK_LEGACY_PATH_ARG - - -# hookname: (Path, LEGACY_PATH) -imply_paths_hooks: Mapping[str, tuple[str, str]] = { - "pytest_ignore_collect": ("collection_path", "path"), - "pytest_collect_file": ("file_path", "path"), - "pytest_pycollect_makemodule": ("module_path", "path"), - "pytest_report_header": ("start_path", "startdir"), - "pytest_report_collectionfinish": ("start_path", "startdir"), -} def _check_path(path: Path, fspath: LEGACY_PATH) -> None: @@ -29,57 +11,3 @@ def _check_path(path: Path, fspath: LEGACY_PATH) -> None: f"Path({fspath!r}) != {path!r}\n" "if both path and fspath are given they need to be equal" ) - - -class PathAwareHookProxy: - """ - this helper wraps around hook callers - until pluggy supports fixingcalls, this one will do - - it currently doesn't return full hook caller proxies for fixed hooks, - this may have to be changed later depending on bugs - """ - - def __init__(self, hook_relay: pluggy.HookRelay) -> None: - self._hook_relay = hook_relay - - def __dir__(self) -> list[str]: - return dir(self._hook_relay) - - def __getattr__(self, key: str) -> pluggy.HookCaller: - hook: pluggy.HookCaller = getattr(self._hook_relay, key) - if key not in imply_paths_hooks: - self.__dict__[key] = hook - return hook - else: - path_var, fspath_var = imply_paths_hooks[key] - - @functools.wraps(hook) - def fixed_hook(**kw: Any) -> Any: - path_value: Path | None = kw.pop(path_var, None) - fspath_value: LEGACY_PATH | None = kw.pop(fspath_var, None) - if fspath_value is not None: - warnings.warn( - HOOK_LEGACY_PATH_ARG.format( - pylib_path_arg=fspath_var, pathlib_path_arg=path_var - ), - stacklevel=2, - ) - if path_value is not None: - if fspath_value is not None: - _check_path(path_value, fspath_value) - else: - fspath_value = legacy_path(path_value) - else: - assert fspath_value is not None - path_value = Path(fspath_value) - - kw[path_var] = path_value - kw[fspath_var] = fspath_value - return hook(**kw) - - fixed_hook.name = hook.name # type: ignore[attr-defined] - fixed_hook.spec = hook.spec # type: ignore[attr-defined] - fixed_hook.__name__ = key - self.__dict__[key] = fixed_hook - return fixed_hook # type: ignore[return-value] diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index a8be4881433..0d51d2e1b9f 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -39,13 +39,6 @@ PRIVATE = PytestDeprecationWarning("A private pytest class or function was used.") -HOOK_LEGACY_PATH_ARG = UnformattedWarning( - PytestRemovedIn9Warning, - "The ({pylib_path_arg}: py.path.local) argument is deprecated, please use ({pathlib_path_arg}: pathlib.Path)\n" - "see https://docs.pytest.org/en/latest/deprecations.html" - "#py-path-local-arguments-for-hooks-replaced-with-pathlib-path", -) - NODE_CTOR_FSPATH_ARG = UnformattedWarning( PytestRemovedIn9Warning, "The (fspath: py.path.local) argument to {node_type_name} is deprecated. " diff --git a/src/_pytest/hookspec.py b/src/_pytest/hookspec.py index c5bcc36ad4b..8c4333810e7 100644 --- a/src/_pytest/hookspec.py +++ b/src/_pytest/hookspec.py @@ -13,8 +13,6 @@ from pluggy import HookspecMarker -from .deprecated import HOOK_LEGACY_PATH_ARG - if TYPE_CHECKING: import pdb @@ -23,7 +21,6 @@ from _pytest._code.code import ExceptionInfo from _pytest._code.code import ExceptionRepr - from _pytest.compat import LEGACY_PATH from _pytest.config import _PluggyPlugin from _pytest.config import Config from _pytest.config import ExitCode @@ -302,17 +299,8 @@ def pytest_collection_finish(session: Session) -> None: """ -@hookspec( - firstresult=True, - warn_on_impl_args={ - "path": HOOK_LEGACY_PATH_ARG.format( - pylib_path_arg="path", pathlib_path_arg="collection_path" - ), - }, -) -def pytest_ignore_collect( - collection_path: Path, path: LEGACY_PATH, config: Config -) -> bool | None: +@hookspec(firstresult=True) +def pytest_ignore_collect(collection_path: Path, config: Config) -> bool | None: """Return ``True`` to ignore this path for collection. Return ``None`` to let other plugins ignore the path for collection. @@ -333,7 +321,7 @@ def pytest_ignore_collect( .. versionchanged:: 7.0.0 The ``collection_path`` parameter was added as a :class:`pathlib.Path` equivalent of the ``path`` parameter. The ``path`` parameter - has been deprecated. + has been deprecated and removed in pytest 9.0.0. Use in conftest plugins ======================= @@ -375,16 +363,7 @@ def pytest_collect_directory(path: Path, parent: Collector) -> Collector | None: """ -@hookspec( - warn_on_impl_args={ - "path": HOOK_LEGACY_PATH_ARG.format( - pylib_path_arg="path", pathlib_path_arg="file_path" - ), - }, -) -def pytest_collect_file( - file_path: Path, path: LEGACY_PATH, parent: Collector -) -> Collector | None: +def pytest_collect_file(file_path: Path, parent: Collector) -> Collector | None: """Create a :class:`~pytest.Collector` for the given path, or None if not relevant. For best results, the returned collector should be a subclass of @@ -399,7 +378,7 @@ def pytest_collect_file( .. versionchanged:: 7.0.0 The ``file_path`` parameter was added as a :class:`pathlib.Path` equivalent of the ``path`` parameter. The ``path`` parameter - has been deprecated. + has been deprecated and removed in pytest 9.0.0. Use in conftest plugins ======================= @@ -501,17 +480,8 @@ def pytest_make_collect_report(collector: Collector) -> CollectReport | None: # ------------------------------------------------------------------------- -@hookspec( - firstresult=True, - warn_on_impl_args={ - "path": HOOK_LEGACY_PATH_ARG.format( - pylib_path_arg="path", pathlib_path_arg="module_path" - ), - }, -) -def pytest_pycollect_makemodule( - module_path: Path, path: LEGACY_PATH, parent -) -> Module | None: +@hookspec(firstresult=True) +def pytest_pycollect_makemodule(module_path: Path, parent) -> Module | None: """Return a :class:`pytest.Module` collector or None for the given path. This hook will be called for each matching test module path. @@ -526,9 +496,8 @@ def pytest_pycollect_makemodule( .. versionchanged:: 7.0.0 The ``module_path`` parameter was added as a :class:`pathlib.Path` - equivalent of the ``path`` parameter. - - The ``path`` parameter has been deprecated in favor of ``fspath``. + equivalent of the ``path`` parameter. The ``path`` parameter has been + deprecated in favor of ``module_path`` and removed in pytest 9.0.0. Use in conftest plugins ======================= @@ -1036,16 +1005,7 @@ def pytest_assertion_pass(item: Item, lineno: int, orig: str, expl: str) -> None # ------------------------------------------------------------------------- -@hookspec( - warn_on_impl_args={ - "startdir": HOOK_LEGACY_PATH_ARG.format( - pylib_path_arg="startdir", pathlib_path_arg="start_path" - ), - }, -) -def pytest_report_header( # type:ignore[empty-body] - config: Config, start_path: Path, startdir: LEGACY_PATH -) -> str | list[str]: +def pytest_report_header(config: Config, start_path: Path) -> str | list[str]: # type: ignore[empty-body] """Return a string or list of strings to be displayed as header info for terminal reporting. :param config: The pytest config object. @@ -1063,7 +1023,7 @@ def pytest_report_header( # type:ignore[empty-body] .. versionchanged:: 7.0.0 The ``start_path`` parameter was added as a :class:`pathlib.Path` equivalent of the ``startdir`` parameter. The ``startdir`` parameter - has been deprecated. + has been deprecated and removed in pytest 9.0.0. Use in conftest plugins ======================= @@ -1072,17 +1032,9 @@ def pytest_report_header( # type:ignore[empty-body] """ -@hookspec( - warn_on_impl_args={ - "startdir": HOOK_LEGACY_PATH_ARG.format( - pylib_path_arg="startdir", pathlib_path_arg="start_path" - ), - }, -) -def pytest_report_collectionfinish( # type:ignore[empty-body] +def pytest_report_collectionfinish( # type: ignore[empty-body] config: Config, start_path: Path, - startdir: LEGACY_PATH, items: Sequence[Item], ) -> str | list[str]: """Return a string or list of strings to be displayed after collection @@ -1108,7 +1060,7 @@ def pytest_report_collectionfinish( # type:ignore[empty-body] .. versionchanged:: 7.0.0 The ``start_path`` parameter was added as a :class:`pathlib.Path` equivalent of the ``startdir`` parameter. The ``startdir`` parameter - has been deprecated. + has been deprecated and removed in pytest 9.0.0. Use in conftest plugins ======================= diff --git a/src/_pytest/main.py b/src/_pytest/main.py index 9bc930df8e8..02c7fb373fd 100644 --- a/src/_pytest/main.py +++ b/src/_pytest/main.py @@ -34,7 +34,6 @@ from _pytest.config import UsageError from _pytest.config.argparsing import OverrideIniAction from _pytest.config.argparsing import Parser -from _pytest.config.compat import PathAwareHookProxy from _pytest.outcomes import exit from _pytest.pathlib import absolutepath from _pytest.pathlib import bestrelpath @@ -727,7 +726,7 @@ def gethookproxy(self, fspath: os.PathLike[str]) -> pluggy.HookRelay: proxy: pluggy.HookRelay if remove_mods: # One or more conftests are not in use at this path. - proxy = PathAwareHookProxy(FSHookProxy(pm, remove_mods)) # type: ignore[arg-type,assignment] + proxy = FSHookProxy(pm, remove_mods) # type: ignore[assignment] else: # All plugins are active for this fspath. proxy = self.config.hook diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index 5d0e69c58c1..ca9bef2ba76 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -1,9 +1,7 @@ # mypy: allow-untyped-defs from __future__ import annotations -from pathlib import Path import re -import sys from _pytest import deprecated from _pytest.compat import legacy_path @@ -92,63 +90,6 @@ def __init__(self, foo: int, *, _ispytest: bool = False) -> None: PrivateInit(10, _ispytest=True) -@pytest.mark.parametrize("hooktype", ["hook", "ihook"]) -def test_hookproxy_warnings_for_pathlib(tmp_path, hooktype, request): - path = legacy_path(tmp_path) - - PATH_WARN_MATCH = r".*path: py\.path\.local\) argument is deprecated, please use \(collection_path: pathlib\.Path.*" - if hooktype == "ihook": - hooks = request.node.ihook - else: - hooks = request.config.hook - - with pytest.warns(PytestDeprecationWarning, match=PATH_WARN_MATCH) as r: - l1 = sys._getframe().f_lineno - hooks.pytest_ignore_collect( - config=request.config, path=path, collection_path=tmp_path - ) - l2 = sys._getframe().f_lineno - - (record,) = r - assert record.filename == __file__ - assert l1 < record.lineno < l2 - - hooks.pytest_ignore_collect(config=request.config, collection_path=tmp_path) - - # Passing entirely *different* paths is an outright error. - with pytest.raises(ValueError, match=r"path.*fspath.*need to be equal"): - with pytest.warns(PytestDeprecationWarning, match=PATH_WARN_MATCH) as r: - hooks.pytest_ignore_collect( - config=request.config, path=path, collection_path=Path("/bla/bla") - ) - - -def test_hookimpl_warnings_for_pathlib() -> None: - class Plugin: - def pytest_ignore_collect(self, path: object) -> None: - raise NotImplementedError() - - def pytest_collect_file(self, path: object) -> None: - raise NotImplementedError() - - def pytest_pycollect_makemodule(self, path: object) -> None: - raise NotImplementedError() - - def pytest_report_header(self, startdir: object) -> str: - raise NotImplementedError() - - def pytest_report_collectionfinish(self, startdir: object) -> str: - raise NotImplementedError() - - pm = pytest.PytestPluginManager() - with pytest.warns( - pytest.PytestRemovedIn9Warning, - match=r"py\.path\.local.* argument is deprecated", - ) as wc: - pm.register(Plugin()) - assert len(wc.list) == 5 - - def test_node_ctor_fspath_argument_is_deprecated(pytester: Pytester) -> None: mod = pytester.getmodulecol("") From 86608c3aaca8c6c9c009f463a01eec397f5f17ad Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 9 Nov 2025 22:12:53 +0200 Subject: [PATCH 051/307] Hard error when setting a mark on a fixture function Deprecated feature scheduled for removal in pytest 9. Part of #13893. --- doc/en/deprecations.rst | 35 +++++++++++----------- src/_pytest/deprecated.py | 5 ---- src/_pytest/fixtures.py | 6 ++-- src/_pytest/mark/structures.py | 10 ++++--- testing/deprecated_test.py | 53 ---------------------------------- testing/test_mark.py | 42 +++++++++++++++++++++++++++ 6 files changed, 70 insertions(+), 81 deletions(-) diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 3a7324da7ed..3b3968978eb 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -367,23 +367,6 @@ conflicts (such as :class:`pytest.File` now taking ``path`` instead of ``fspath``, as :ref:`outlined above `), a deprecation warning is now raised. -Applying a mark to a fixture function -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. deprecated:: 7.4 - -Applying a mark to a fixture function never had any effect, but it is a common user error. - -.. code-block:: python - - @pytest.mark.usefixtures("clean_database") - @pytest.fixture - def user() -> User: ... - -Users expected in this case that the ``usefixtures`` mark would have its intended effect of using the ``clean_database`` fixture when ``user`` was invoked, when in fact it has no effect at all. - -Now pytest will issue a warning when it encounters this problem, and will raise an error in the future versions. - The ``yield_fixture`` function/decorator ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -403,6 +386,24 @@ an appropriate period of deprecation has passed. Some breaking changes which could not be deprecated are also listed. +Applying a mark to a fixture function +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 7.4 +.. versionremoved:: 9.0 + +Applying a mark to a fixture function never had any effect, but it is a common user error. + +.. code-block:: python + + @pytest.mark.usefixtures("clean_database") + @pytest.fixture + def user() -> User: ... + +Users expected in this case that the ``usefixtures`` mark would have its intended effect of using the ``clean_database`` fixture when ``user`` was invoked, when in fact it has no effect at all. + +Now pytest will issue a warning when it encounters this problem, and will raise an error in the future versions. + .. _legacy-path-hooks-deprecated: ``py.path.local`` arguments for hooks replaced with ``pathlib.Path`` diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index 0d51d2e1b9f..5155edc9203 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -56,11 +56,6 @@ "#configuring-hook-specs-impls-using-markers", ) -MARKED_FIXTURE = PytestRemovedIn9Warning( - "Marks applied to fixtures have no effect\n" - "See docs: https://docs.pytest.org/en/stable/deprecations.html#applying-a-mark-to-a-fixture-function" -) - MONKEYPATCH_LEGACY_NAMESPACE_PACKAGES = PytestRemovedIn10Warning( "monkeypatch.syspath_prepend() called with pkg_resources legacy namespace packages detected.\n" "Legacy namespace packages (using pkg_resources.declare_namespace) are deprecated.\n" diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 27846db13a4..e32c461c1e4 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -53,7 +53,6 @@ from _pytest.config import ExitCode from _pytest.config.argparsing import Parser from _pytest.deprecated import check_ispytest -from _pytest.deprecated import MARKED_FIXTURE from _pytest.deprecated import YIELD_FIXTURE from _pytest.main import Session from _pytest.mark import Mark @@ -1236,7 +1235,10 @@ def __call__(self, function: FixtureFunction) -> FixtureFunctionDefinition: ) if hasattr(function, "pytestmark"): - warnings.warn(MARKED_FIXTURE, stacklevel=2) + fail( + "Marks cannot be applied to fixtures.\n" + "See docs: https://docs.pytest.org/en/stable/deprecations.html#applying-a-mark-to-a-fixture-function" + ) fixture_definition = FixtureFunctionDefinition( function=function, fixture_function_marker=self, _ispytest=True diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 9f2f6279158..3edf6ab1163 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -26,7 +26,6 @@ from ..compat import NotSetType from _pytest.config import Config from _pytest.deprecated import check_ispytest -from _pytest.deprecated import MARKED_FIXTURE from _pytest.deprecated import PARAMETRIZE_NON_COLLECTION_ITERABLE from _pytest.outcomes import fail from _pytest.raises import AbstractRaises @@ -409,7 +408,7 @@ def __call__(self, *args: object, **kwargs: object): if isinstance(func, staticmethod | classmethod): unwrapped_func = func.__func__ if len(args) == 1 and (istestfunc(unwrapped_func) or is_class): - store_mark(unwrapped_func, self.mark, stacklevel=3) + store_mark(unwrapped_func, self.mark) return func return self.with_args(*args, **kwargs) @@ -464,7 +463,7 @@ def normalize_mark_list( yield mark_obj -def store_mark(obj, mark: Mark, *, stacklevel: int = 2) -> None: +def store_mark(obj, mark: Mark) -> None: """Store a Mark on an object. This is used to implement the Mark declarations/decorators correctly. @@ -474,7 +473,10 @@ def store_mark(obj, mark: Mark, *, stacklevel: int = 2) -> None: from ..fixtures import getfixturemarker if getfixturemarker(obj) is not None: - warnings.warn(MARKED_FIXTURE, stacklevel=stacklevel) + fail( + "Marks cannot be applied to fixtures.\n" + "See docs: https://docs.pytest.org/en/stable/deprecations.html#applying-a-mark-to-a-fixture-function" + ) # Always reassign name to avoid updating pytestmark in a reference that # was only borrowed. diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index ca9bef2ba76..e7f1d396f3c 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -107,56 +107,3 @@ def collect(self): parent=mod.parent, fspath=legacy_path("bla"), ) - - -def test_fixture_disallow_on_marked_functions(): - """Test that applying @pytest.fixture to a marked function warns (#3364).""" - with pytest.warns( - pytest.PytestRemovedIn9Warning, - match=r"Marks applied to fixtures have no effect", - ) as record: - - @pytest.fixture - @pytest.mark.parametrize("example", ["hello"]) - @pytest.mark.usefixtures("tmp_path") - def foo(): - raise NotImplementedError() - - # it's only possible to get one warning here because you're already prevented - # from applying @fixture twice - # ValueError("fixture is being applied more than once to the same function") - assert len(record) == 1 - - -def test_fixture_disallow_marks_on_fixtures(): - """Test that applying a mark to a fixture warns (#3364).""" - with pytest.warns( - pytest.PytestRemovedIn9Warning, - match=r"Marks applied to fixtures have no effect", - ) as record: - - @pytest.mark.parametrize("example", ["hello"]) - @pytest.mark.usefixtures("tmp_path") - @pytest.fixture - def foo(): - raise NotImplementedError() - - assert len(record) == 2 # one for each mark decorator - # should point to this file - assert all(rec.filename == __file__ for rec in record) - - -def test_fixture_disallowed_between_marks(): - """Test that applying a mark to a fixture warns (#3364).""" - with pytest.warns( - pytest.PytestRemovedIn9Warning, - match=r"Marks applied to fixtures have no effect", - ) as record: - - @pytest.mark.parametrize("example", ["hello"]) - @pytest.fixture - @pytest.mark.usefixtures("tmp_path") - def foo(): - raise NotImplementedError() - - assert len(record) == 2 # one for each mark decorator diff --git a/testing/test_mark.py b/testing/test_mark.py index 8d76ea310eb..67219313183 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -1302,3 +1302,45 @@ def test_staticmethod_wrapper_on_top(value: int): ) result = pytester.runpytest() result.assert_outcomes(passed=8) + + +def test_fixture_disallow_on_marked_functions() -> None: + """Test that applying @pytest.fixture to a marked function errors (#3364).""" + with pytest.raises( + pytest.fail.Exception, + match=r"Marks cannot be applied to fixtures", + ): + + @pytest.fixture + @pytest.mark.parametrize("example", ["hello"]) + @pytest.mark.usefixtures("tmp_path") + def foo(): + raise NotImplementedError() + + +def test_fixture_disallow_marks_on_fixtures() -> None: + """Test that applying a mark to a fixture errors (#3364).""" + with pytest.raises( + pytest.fail.Exception, + match=r"Marks cannot be applied to fixtures", + ): + + @pytest.mark.parametrize("example", ["hello"]) + @pytest.mark.usefixtures("tmp_path") + @pytest.fixture + def foo(): + raise NotImplementedError() + + +def test_fixture_disallowed_between_marks() -> None: + """Test that applying a mark to a fixture errors (#3364).""" + with pytest.raises( + pytest.fail.Exception, + match=r"Marks cannot be applied to fixtures", + ): + + @pytest.mark.parametrize("example", ["hello"]) + @pytest.fixture + @pytest.mark.usefixtures("tmp_path") + def foo(): + raise NotImplementedError() From 173892066bbeddecb2c05ab89cccbdd5b1916a02 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 13 Nov 2025 18:00:45 +0200 Subject: [PATCH 052/307] config: restore `config.inicfg` Fix #13955. --- changelog/13946.bugfix.rst | 3 ++ src/_pytest/config/__init__.py | 46 +++++++++++++++++++++++++----- testing/test_config.py | 52 ++++++++++++++++++++++++++++++---- 3 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 changelog/13946.bugfix.rst diff --git a/changelog/13946.bugfix.rst b/changelog/13946.bugfix.rst new file mode 100644 index 00000000000..d6cc5b703e4 --- /dev/null +++ b/changelog/13946.bugfix.rst @@ -0,0 +1,3 @@ +The private ``config.inicfg`` attribute was changed in a breaking manner in pytest 9.0.0. +Due to its usage in the ecosystem, it is now restored to working order using a compatibility shim. +It will be deprecated in pytest 9.1 and removed in pytest 10. diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 812daed88f2..e8cb8ff354d 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -11,6 +11,7 @@ from collections.abc import Iterable from collections.abc import Iterator from collections.abc import Mapping +from collections.abc import MutableMapping from collections.abc import Sequence import contextlib import copy @@ -48,6 +49,8 @@ from .compat import PathAwareHookProxy from .exceptions import PrintHelp as PrintHelp from .exceptions import UsageError as UsageError +from .findpaths import ConfigDict +from .findpaths import ConfigValue from .findpaths import determine_setup from _pytest import __version__ import _pytest._code @@ -979,6 +982,30 @@ def _iter_rewritable_modules(package_files: Iterable[str]) -> Iterator[str]: yield from _iter_rewritable_modules(new_package_files) +class _DeprecatedInicfgProxy(MutableMapping[str, Any]): + """Compatibility proxy for the deprecated Config.inicfg.""" + + __slots__ = ("_config",) + + def __init__(self, config: Config) -> None: + self._config = config + + def __getitem__(self, key: str) -> Any: + return self._config._inicfg[key].value + + def __setitem__(self, key: str, value: Any) -> None: + self._config._inicfg[key] = ConfigValue(value, origin="override", mode="toml") + + def __delitem__(self, key: str) -> None: + del self._config._inicfg[key] + + def __iter__(self) -> Iterator[str]: + return iter(self._config._inicfg) + + def __len__(self) -> int: + return len(self._config._inicfg) + + @final class Config: """Access to configuration values, pluginmanager and plugin hooks. @@ -1089,6 +1116,7 @@ def __init__( self.trace = self.pluginmanager.trace.root.get("config") self.hook: pluggy.HookRelay = PathAwareHookProxy(self.pluginmanager.hook) # type: ignore[assignment] self._inicache: dict[str, Any] = {} + self._inicfg: ConfigDict = {} self._cleanup_stack = contextlib.ExitStack() self.pluginmanager.register(self, "pytestconfig") self._configured = False @@ -1098,6 +1126,10 @@ def __init__( self.args_source = Config.ArgsSource.ARGS self.args: list[str] = [] + @property + def inicfg(self) -> _DeprecatedInicfgProxy: + return _DeprecatedInicfgProxy(self) + @property def rootpath(self) -> pathlib.Path: """The path to the :ref:`rootdir `. @@ -1428,7 +1460,7 @@ def _warn_or_fail_if_strict(self, message: str) -> None: def _get_unknown_ini_keys(self) -> set[str]: known_keys = self._parser._inidict.keys() | self._parser._ini_aliases.keys() - return self.inicfg.keys() - known_keys + return self._inicfg.keys() - known_keys def parse(self, args: list[str], addopts: bool = True) -> None: # Parse given cmdline arguments into this config object. @@ -1459,7 +1491,7 @@ def parse(self, args: list[str], addopts: bool = True) -> None: self._rootpath = rootpath self._inipath = inipath self._ignored_config_files = ignored_config_files - self.inicfg = inicfg + self._inicfg = inicfg self._parser.extra_info["rootdir"] = str(self.rootpath) self._parser.extra_info["inifile"] = str(self.inipath) @@ -1636,14 +1668,14 @@ def _getini(self, name: str): except KeyError as e: raise ValueError(f"unknown configuration value: {name!r}") from e - # Collect all possible values (canonical name + aliases) from inicfg. + # Collect all possible values (canonical name + aliases) from _inicfg. # Each candidate is (ConfigValue, is_canonical). candidates = [] - if canonical_name in self.inicfg: - candidates.append((self.inicfg[canonical_name], True)) + if canonical_name in self._inicfg: + candidates.append((self._inicfg[canonical_name], True)) for alias, target in self._parser._ini_aliases.items(): - if target == canonical_name and alias in self.inicfg: - candidates.append((self.inicfg[alias], False)) + if target == canonical_name and alias in self._inicfg: + candidates.append((self._inicfg[alias], False)) if not candidates: return default diff --git a/testing/test_config.py b/testing/test_config.py index 65bf94ae19b..abea8fffe9e 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -60,7 +60,7 @@ def test_getcfg_and_config( _, _, cfg, _ = locate_config(Path.cwd(), [sub]) assert cfg["name"] == ConfigValue("value", origin="file", mode="ini") config = pytester.parseconfigure(str(sub)) - assert config.inicfg["name"] == ConfigValue("value", origin="file", mode="ini") + assert config._inicfg["name"] == ConfigValue("value", origin="file", mode="ini") def test_setupcfg_uses_toolpytest_with_pytest(self, pytester: Pytester) -> None: p1 = pytester.makepyfile("def test(): pass") @@ -1433,10 +1433,10 @@ def test_inifilename(self, tmp_path: Path) -> None: # this indicates this is the file used for getting configuration values assert config.inipath == inipath - assert config.inicfg.get("name") == ConfigValue( + assert config._inicfg.get("name") == ConfigValue( "value", origin="file", mode="ini" ) - assert config.inicfg.get("should_not_be_set") is None + assert config._inicfg.get("should_not_be_set") is None def test_options_on_small_file_do_not_blow_up(pytester: Pytester) -> None: @@ -2276,7 +2276,7 @@ def test_addopts_before_initini( monkeypatch.setenv("PYTEST_ADDOPTS", f"-o cache_dir={cache_dir}") config = _config_for_test config.parse([], addopts=True) - assert config.inicfg.get("cache_dir") == ConfigValue( + assert config._inicfg.get("cache_dir") == ConfigValue( cache_dir, origin="override", mode="ini" ) @@ -2317,7 +2317,7 @@ def test_override_ini_does_not_contain_paths( """Check that -o no longer swallows all options after it (#3103)""" config = _config_for_test config.parse(["-o", "cache_dir=/cache", "/some/test/path"]) - assert config.inicfg.get("cache_dir") == ConfigValue( + assert config._inicfg.get("cache_dir") == ConfigValue( "/cache", origin="override", mode="ini" ) @@ -2998,3 +2998,45 @@ def pytest_addoption(parser): with pytest.raises(TypeError, match=r"expects a string.*got int"): config.getini("string_not_string") + + +class TestInicfgDeprecation: + """Tests for the upcoming deprecation of config.inicfg.""" + + def test_inicfg_deprecated(self, pytester: Pytester) -> None: + """Test that accessing config.inicfg issues a deprecation warning (not yet).""" + pytester.makeini( + """ + [pytest] + minversion = 3.0 + """ + ) + config = pytester.parseconfig() + + inicfg = config.inicfg + + assert config.getini("minversion") == "3.0" + assert inicfg["minversion"] == "3.0" + assert inicfg.get("minversion") == "3.0" + del inicfg["minversion"] + inicfg["minversion"] = "4.0" + assert list(inicfg.keys()) == ["minversion"] + assert list(inicfg.items()) == [("minversion", "4.0")] + assert len(inicfg) == 1 + + def test_issue_13946_setting_bool_no_longer_crashes( + self, pytester: Pytester + ) -> None: + """Regression test for #13946 - setting inicfg doesn't cause a crash.""" + pytester.makepyfile( + """ + def pytest_configure(config): + config.inicfg["xfail_strict"] = True + + def test(): + pass + """ + ) + + result = pytester.runpytest() + assert result.ret == 0 From 78e1bd79ea6acffc390f6e898d6a8b7305aaefeb Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Nov 2025 18:43:13 +0200 Subject: [PATCH 053/307] config: deprecate `config.inicfg` As a private attribute, we broke it in pytest 9.0.0, but since it's not using a `_` prefix and has some external usage, let's keep it working until pytest 10 and deprecate it instead. Fix #13946. --- changelog/13946.deprecation.rst | 4 ++++ doc/en/deprecations.rst | 37 +++++++++++++++++++++++++++++++++ src/_pytest/config/__init__.py | 21 ++++++++++++++++--- src/_pytest/deprecated.py | 5 +++++ testing/test_config.py | 10 ++++++--- 5 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 changelog/13946.deprecation.rst diff --git a/changelog/13946.deprecation.rst b/changelog/13946.deprecation.rst new file mode 100644 index 00000000000..88371c4cc1c --- /dev/null +++ b/changelog/13946.deprecation.rst @@ -0,0 +1,4 @@ +The private ``config.inicfg`` attribute is now deprecated. +Use :meth:`config.getini() ` to access configuration values instead. + +See :ref:`config-inicfg` for more details. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index f2a665a6267..bdea7c65886 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -15,6 +15,43 @@ Below is a complete list of all pytest features which are considered deprecated. :class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters `. +.. _config-inicfg: + +``config.inicfg`` +~~~~~~~~~~~~~~~~~ + +.. deprecated:: 9.0 + +The private ``config.inicfg`` attribute is deprecated. +Use :meth:`config.getini() ` to access configuration values instead. + +``config.inicfg`` was never documented and it should have had a ``_`` prefix from the start. +Pytest performs caching, transformation and aliasing on configuration options which make direct access to the raw ``config.inicfg`` untenable. + +**Reading configuration values:** + +Instead of accessing ``config.inicfg`` directly, use :meth:`config.getini() `: + +.. code-block:: python + + # Deprecated + value = config.inicfg["some_option"] + + # Use this instead + value = config.getini("some_option") + +**Setting configuration values:** + +Setting or deleting configuration values after initialization is not supported. +If you need to override configuration values, use the ``-o`` command line option: + +.. code-block:: bash + + pytest -o some_option=value + +or set them in your configuration file instead. + + .. _parametrize-iterators: Non-Collection iterables in ``@pytest.mark.parametrize`` diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index e8cb8ff354d..a17e246845a 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -59,6 +59,7 @@ from _pytest._code.code import TracebackStyle from _pytest._io import TerminalWriter from _pytest.compat import assert_never +from _pytest.compat import deprecated from _pytest.compat import NOTSET from _pytest.config.argparsing import Argument from _pytest.config.argparsing import FILE_OR_DIR @@ -1126,9 +1127,23 @@ def __init__( self.args_source = Config.ArgsSource.ARGS self.args: list[str] = [] - @property - def inicfg(self) -> _DeprecatedInicfgProxy: - return _DeprecatedInicfgProxy(self) + if TYPE_CHECKING: + + @deprecated( + "config.inicfg is deprecated, use config.getini() to access configuration values instead.", + ) + @property + def inicfg(self) -> _DeprecatedInicfgProxy: + raise NotImplementedError() + else: + + @property + def inicfg(self) -> _DeprecatedInicfgProxy: + warnings.warn( + _pytest.deprecated.CONFIG_INICFG, + stacklevel=2, + ) + return _DeprecatedInicfgProxy(self) @property def rootpath(self) -> pathlib.Path: diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index a8be4881433..271b4cf50dd 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -83,6 +83,11 @@ "See https://docs.pytest.org/en/stable/deprecations.html#parametrize-iterators", ) +CONFIG_INICFG = PytestRemovedIn10Warning( + "config.inicfg is deprecated, use config.getini() to access configuration values instead.\n" + "See https://docs.pytest.org/en/stable/deprecations.html#config-inicfg" +) + # You want to make some `__init__` or function "private". # # def my_private_function(some, args): diff --git a/testing/test_config.py b/testing/test_config.py index abea8fffe9e..74bb6e7be1f 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -30,6 +30,7 @@ from _pytest.monkeypatch import MonkeyPatch from _pytest.pathlib import absolutepath from _pytest.pytester import Pytester +from _pytest.warning_types import PytestDeprecationWarning import pytest @@ -3001,10 +3002,10 @@ def pytest_addoption(parser): class TestInicfgDeprecation: - """Tests for the upcoming deprecation of config.inicfg.""" + """Tests for the deprecation of config.inicfg.""" def test_inicfg_deprecated(self, pytester: Pytester) -> None: - """Test that accessing config.inicfg issues a deprecation warning (not yet).""" + """Test that accessing config.inicfg issues a deprecation warning.""" pytester.makeini( """ [pytest] @@ -3013,7 +3014,10 @@ def test_inicfg_deprecated(self, pytester: Pytester) -> None: ) config = pytester.parseconfig() - inicfg = config.inicfg + with pytest.warns( + PytestDeprecationWarning, match=r"config\.inicfg is deprecated" + ): + inicfg = config.inicfg # type: ignore[deprecated] assert config.getini("minversion") == "3.0" assert inicfg["minversion"] == "3.0" From 2e349240751496d474bf4bb7a8f22f7c8a320b69 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 13 Nov 2025 18:11:04 +0200 Subject: [PATCH 054/307] doc: fix TOML example for `tmp_path_retention_count`, it's a string Fix #13904. --- changelog/13904.bugfix.rst | 1 + doc/en/reference/reference.rst | 4 ++-- src/_pytest/tmpdir.py | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 changelog/13904.bugfix.rst diff --git a/changelog/13904.bugfix.rst b/changelog/13904.bugfix.rst new file mode 100644 index 00000000000..f5a42215ca8 --- /dev/null +++ b/changelog/13904.bugfix.rst @@ -0,0 +1 @@ +Fixed the TOML type of the :confval:`tmp_path_retention_count` settings in the API reference from number to string. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 4b3c939bccb..65582b177f0 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -2465,14 +2465,14 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: tmp_path_retention_count How many sessions should we keep the `tmp_path` directories, - according to `tmp_path_retention_policy`. + according to :confval:`tmp_path_retention_policy`. .. tab:: toml .. code-block:: toml [pytest] - tmp_path_retention_count = 3 + tmp_path_retention_count = "3" .. tab:: ini diff --git a/src/_pytest/tmpdir.py b/src/_pytest/tmpdir.py index dcd5784f88f..855ad273ecf 100644 --- a/src/_pytest/tmpdir.py +++ b/src/_pytest/tmpdir.py @@ -225,13 +225,16 @@ def pytest_addoption(parser: Parser) -> None: parser.addini( "tmp_path_retention_count", help="How many sessions should we keep the `tmp_path` directories, according to `tmp_path_retention_policy`.", - default=3, + default="3", + # NOTE: Would have been better as an `int` but can't change it now. + type="string", ) parser.addini( "tmp_path_retention_policy", help="Controls which directories created by the `tmp_path` fixture are kept around, based on test outcome. " "(all/failed/none)", + type="string", default="all", ) From d56b1af5252ceb8578d6751a6b2006e79defbb08 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 14 Nov 2025 12:25:11 +0200 Subject: [PATCH 055/307] fixtures: remove no longer needed special case in `pytest_generate_tests` Originally added in c00fe960baa40b5a4b460988d2d1202a8e3d668b, but since made redundant. The `ignore_args` parameter in `getfixtureclosure()` (populated by `_get_direct_parametrize_args()`) now handles the precedence automatically. When a test directly parametrizes an argument, it's included in `ignore_args`, which prevents the fixture from being included in the closure computation in the first place. --- src/_pytest/fixtures.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 27846db13a4..9b88ba37224 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -56,7 +56,6 @@ from _pytest.deprecated import MARKED_FIXTURE from _pytest.deprecated import YIELD_FIXTURE from _pytest.main import Session -from _pytest.mark import Mark from _pytest.mark import ParameterSet from _pytest.mark.structures import MarkDecorator from _pytest.outcomes import fail @@ -1695,11 +1694,6 @@ def sort_by_scope(arg_name: str) -> Scope: def pytest_generate_tests(self, metafunc: Metafunc) -> None: """Generate new tests based on parametrized fixtures used by the given metafunc""" - - def get_parametrize_mark_argnames(mark: Mark) -> Sequence[str]: - args, _ = ParameterSet._parse_parametrize_args(*mark.args, **mark.kwargs) - return args - for argname in metafunc.fixturenames: # Get the FixtureDefs for the argname. fixture_defs = metafunc._arg2fixturedefs.get(argname) @@ -1708,14 +1702,6 @@ def get_parametrize_mark_argnames(mark: Mark) -> Sequence[str]: # else (e.g @pytest.mark.parametrize) continue - # If the test itself parametrizes using this argname, give it - # precedence. - if any( - argname in get_parametrize_mark_argnames(mark) - for mark in metafunc.definition.iter_markers("parametrize") - ): - continue - # In the common case we only look at the fixture def with the # closest scope (last in the list). But if the fixture overrides # another fixture, while requesting the super fixture, keep going From 934a0b1f1385ff1a5391f307f7890562d4921f69 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 14 Nov 2025 13:35:54 +0200 Subject: [PATCH 056/307] fixtures: remove distracting comment This is incidental to this function, better to focus on what it does. --- src/_pytest/fixtures.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 9b88ba37224..4fa29aaa420 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1696,11 +1696,7 @@ def pytest_generate_tests(self, metafunc: Metafunc) -> None: """Generate new tests based on parametrized fixtures used by the given metafunc""" for argname in metafunc.fixturenames: # Get the FixtureDefs for the argname. - fixture_defs = metafunc._arg2fixturedefs.get(argname) - if not fixture_defs: - # Will raise FixtureLookupError at setup time if not parametrized somewhere - # else (e.g @pytest.mark.parametrize) - continue + fixture_defs = metafunc._arg2fixturedefs.get(argname, ()) # In the common case we only look at the fixture def with the # closest scope (last in the list). But if the fixture overrides From b1dc3db7614ca8b72126d15dc6f5deddab2e8fc5 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 14 Nov 2025 13:48:45 +0200 Subject: [PATCH 057/307] fixtures: add an xfail'd test for overriding parametrizing fixture transitively Currently a known bug, hopefully we can fix it in the future. --- src/_pytest/fixtures.py | 4 ++++ testing/python/fixtures.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 4fa29aaa420..5e124d1fe80 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1715,6 +1715,10 @@ def pytest_generate_tests(self, metafunc: Metafunc) -> None: break # Not requesting the overridden super fixture, stop. + # + # TODO: Handle the case where the super-fixture is transitively + # requested (see #7737 and the xfail'd test + # test_override_parametrized_fixture_via_transitive_fixture). if argname not in fixturedef.argnames: break diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 6a65dce3c4d..8b9e3fbb0a5 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -590,6 +590,40 @@ def test_spam(foo): result = pytester.runpytest() result.stdout.fnmatch_lines(["*2 passed*"]) + @pytest.mark.xfail(reason="not handled currently") + def test_override_parametrized_fixture_via_transitive_fixture( + self, pytester: Pytester + ) -> None: + """Test that overriding a parametrized fixture works even the super + fixture is requested only transitively. + + Regression test for #7737. + """ + pytester.makepyfile( + """ + import pytest + + @pytest.fixture(params=[1, 2]) + def foo(request): + return request.param + + @pytest.fixture + def bar(foo): + return foo + + class TestIt: + @pytest.fixture + def foo(self, bar): + return bar * 2 + + def test_it(self, foo): + pass + """ + ) + result = pytester.runpytest() + assert result.ret == ExitCode.OK + result.assert_outcomes(passed=2) + def test_autouse_fixture_plugin(self, pytester: Pytester) -> None: # A fixture from a plugin has no baseid set, which screwed up # the autouse fixture handling. From 088718a43779d36bc43c7daa0bdf253803bf41e4 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 14 Nov 2025 14:09:12 +0200 Subject: [PATCH 058/307] fixtures: remove an incorrect comment The `request` thing is really accurate. The comment in the docstring is more accurate, so let's remove this redundant comment. --- src/_pytest/fixtures.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 5e124d1fe80..701be0283a1 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -345,11 +345,6 @@ def prune_dependency_tree(self) -> None: working_set = set(self.initialnames) while working_set: argname = working_set.pop() - # Argname may be something not included in the original names_closure, - # in which case we ignore it. This currently happens with pseudo - # FixtureDefs which wrap 'get_direct_param_fixture_func(request)'. - # So they introduce the new dependency 'request' which might have - # been missing in the original tree (closure). if argname not in closure and argname in self.names_closure: closure.add(argname) if argname in self.name2fixturedefs: From bbb0c0778a0fce3afb456fa8850994a63320a996 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Nov 2025 06:20:05 +0000 Subject: [PATCH 059/307] [automated] Update plugin list (#13968) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 334 ++++++++++++++++++------------- 1 file changed, 199 insertions(+), 135 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 62735e439a6..14171723794 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =6.1.0 :pypi:`pytest-aiohttp-client` Pytest \`client\` fixture for the Aiohttp Jan 10, 2023 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-aiohttp-mock` Send responses to aiohttp. Sep 13, 2025 3 - Alpha pytest>=8 + :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Nov 10, 2025 N/A pytest :pypi:`pytest-aiomoto` pytest-aiomoto Jun 24, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-aioresponses` py.test integration for aioresponses Jan 02, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 @@ -83,7 +84,7 @@ This list contains 1747 plugins. :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 - :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Aug 21, 2025 5 - Production/Stable pytest>=6 + :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Nov 12, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A @@ -93,7 +94,7 @@ This list contains 1747 plugins. :pypi:`pytest-aoc` Downloads puzzle inputs for Advent of Code and synthesizes PyTest fixtures Dec 02, 2023 5 - Production/Stable pytest ; extra == 'test' :pypi:`pytest-aoreporter` pytest report Jun 27, 2022 N/A N/A :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) - :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Oct 28, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Nov 13, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-framework-alpha` Oct 29, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A @@ -101,7 +102,7 @@ This list contains 1747 plugins. :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Nov 06, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Nov 11, 2025 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 @@ -129,7 +130,7 @@ This list contains 1747 plugins. :pypi:`pytest_async` pytest-async - Run your coroutine in event loop without decorator Feb 26, 2020 N/A N/A :pypi:`pytest-async-benchmark` pytest-async-benchmark: Modern pytest benchmarking for async code. 🚀 May 28, 2025 N/A pytest>=8.3.5 :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A - :pypi:`pytest-asyncio` Pytest support for asyncio Sep 12, 2025 5 - Production/Stable pytest<9,>=8.2 + :pypi:`pytest-asyncio` Pytest support for asyncio Nov 10, 2025 5 - Production/Stable pytest<10,>=8.2 :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. May 17, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) @@ -155,7 +156,7 @@ This list contains 1747 plugins. :pypi:`pytest-aws` pytest plugin for testing AWS resource configurations Oct 04, 2017 4 - Beta N/A :pypi:`pytest-aws-apigateway` pytest plugin for AWS ApiGateway May 24, 2024 4 - Beta pytest :pypi:`pytest-aws-config` Protect your AWS credentials in unit tests May 28, 2021 N/A N/A - :pypi:`pytest-aws-fixtures` A series of fixtures to use in integration tests involving actual AWS services. Apr 06, 2025 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-aws-fixtures` A series of fixtures to use in integration tests involving actual AWS services. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 :pypi:`pytest-axe` pytest plugin for axe-selenium-python Nov 12, 2018 N/A pytest (>=3.0.0) :pypi:`pytest-axe-playwright-snapshot` A pytest plugin that runs Axe-core on Playwright pages and takes snapshots of the results. Jul 25, 2023 N/A pytest :pypi:`pytest-azure` Pytest utilities and mocks for Azure Jan 18, 2023 3 - Alpha pytest @@ -177,11 +178,11 @@ This list contains 1747 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Oct 31, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Nov 14, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A - :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 07, 2025 5 - Production/Stable pytest>=8.1 + :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 09, 2025 5 - Production/Stable pytest>=8.1 :pypi:`pytest-better-datadir` A small example package Mar 13, 2023 N/A N/A :pypi:`pytest-better-parametrize` Better description of parametrized test cases Mar 05, 2024 4 - Beta pytest >=6.2.0 :pypi:`pytest-bg-process` Pytest plugin to initialize background process Jan 24, 2022 4 - Beta pytest (>=3.5.0) @@ -196,7 +197,7 @@ This list contains 1747 plugins. :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A - :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Oct 28, 2025 N/A pytest + :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Nov 10, 2025 N/A pytest :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest @@ -245,7 +246,7 @@ This list contains 1747 plugins. :pypi:`pytest-cassandra` Cassandra CCM Test Fixtures for pytest Nov 04, 2017 1 - Planning N/A :pypi:`pytest-catchlog` py.test plugin to catch log messages. This is a fork of pytest-capturelog. Jan 24, 2016 4 - Beta pytest (>=2.6) :pypi:`pytest-catch-server` Pytest plugin with server for catching HTTP requests. Dec 12, 2019 5 - Production/Stable N/A - :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Jan 30, 2025 N/A pytest>=7 + :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Nov 14, 2025 N/A pytest>=8 :pypi:`pytest-celery` Pytest plugin for Celery Jul 30, 2025 5 - Production/Stable N/A :pypi:`pytest-celery-py37` Pytest plugin for Celery (compatible with python 3.7) May 23, 2025 5 - Production/Stable N/A :pypi:`pytest-cfg-fetcher` Pass config options to your unit tests. Feb 26, 2024 N/A N/A @@ -283,7 +284,7 @@ This list contains 1747 plugins. :pypi:`pytest-cleanslate` Collects and executes pytest tests separately Apr 10, 2025 N/A pytest :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A - :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Aug 30, 2025 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) @@ -295,7 +296,9 @@ This list contains 1747 plugins. :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A :pypi:`pytest-cobra` PyTest plugin for testing Smart Contracts for Ethereum blockchain. Jun 29, 2019 3 - Alpha pytest (<4.0.0,>=3.7.1) - :pypi:`pytest-cocotb` Pytest plugin to integrate Cocotb Mar 15, 2025 5 - Production/Stable pytest; extra == "test" + :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. May 10, 2025 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest @@ -378,13 +381,13 @@ This list contains 1747 plugins. :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 - :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Oct 29, 2025 4 - Beta pytest<9,>=7.0.0 + :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Nov 09, 2025 4 - Beta pytest<10,>=7.0.0 :pypi:`pytest-dataplugin` A pytest plugin for managing an archive of test data. Sep 16, 2017 1 - Planning N/A :pypi:`pytest-datarecorder` A py.test plugin recording and comparing test output. Jul 31, 2024 5 - Production/Stable pytest :pypi:`pytest-dataset` Plugin for loading different datasets for pytest by prefix from json or yaml files Sep 01, 2023 5 - Production/Stable N/A :pypi:`pytest-data-suites` Class-based pytest parametrization Apr 06, 2024 N/A pytest<9.0,>=6.0 :pypi:`pytest-datatest` A pytest plugin for test driven data-wrangling (this is the development version of datatest's pytest integration). Oct 15, 2020 4 - Beta pytest (>=3.3) - :pypi:`pytest-db` Session scope fixture "db" for mysql query or change Aug 22, 2024 N/A pytest + :pypi:`pytest-db` Session scope fixture "db" for mysql query or change Nov 11, 2025 N/A pytest :pypi:`pytest-dbfixtures` Databases fixtures plugin for py.test. Dec 07, 2016 4 - Beta N/A :pypi:`pytest-db-plugin` Nov 27, 2021 N/A pytest (>=5.0) :pypi:`pytest-dbt` Unit test dbt models with standard python tooling Jun 08, 2023 2 - Pre-Alpha pytest (>=7.0.0,<8.0.0) @@ -401,7 +404,7 @@ This list contains 1747 plugins. :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 - :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Oct 27, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Nov 11, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) @@ -455,7 +458,7 @@ This list contains 1747 plugins. :pypi:`pytest-doc` A documentation plugin for py.test. Jun 28, 2015 5 - Production/Stable N/A :pypi:`pytest-docfiles` pytest plugin to test codeblocks in your documentation. Dec 22, 2021 4 - Beta pytest (>=3.7.0) :pypi:`pytest-docgen` An RST Documentation Generator for pytest-based test suites Apr 17, 2020 N/A N/A - :pypi:`pytest-docker` Simple pytest fixtures for Docker and Docker Compose based tests Jul 04, 2025 N/A pytest<9.0,>=4.0 + :pypi:`pytest-docker` Simple pytest fixtures for Docker and Docker Compose based tests Nov 12, 2025 N/A pytest<10.0,>=4.0 :pypi:`pytest-docker-apache-fixtures` Pytest fixtures for testing with apache2 (httpd). Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-butla` Jun 16, 2019 3 - Alpha N/A :pypi:`pytest-dockerc` Run, manage and stop Docker Compose project from Docker API Oct 09, 2020 5 - Production/Stable pytest (>=3.0) @@ -523,15 +526,15 @@ This list contains 1747 plugins. :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest - :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Nov 06, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Nov 06, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Nov 06, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Nov 12, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Nov 12, 2025 5 - Production/Stable N/A :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) @@ -671,7 +674,7 @@ This list contains 1747 plugins. :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) - :pypi:`pytest-funcnodes` Testing plugin for funcnodes Mar 19, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-funcnodes` Testing plugin for funcnodes Nov 13, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A @@ -689,7 +692,7 @@ This list contains 1747 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Nov 06, 2025 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Nov 10, 2025 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Oct 12, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -741,7 +744,7 @@ This list contains 1747 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Nov 08, 2025 3 - Alpha pytest==8.4.2 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Nov 15, 2025 3 - Alpha pytest==8.4.2 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -757,7 +760,7 @@ This list contains 1747 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. Oct 30, 2025 N/A N/A + :pypi:`pytest-html-plus` Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. Nov 12, 2025 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -807,6 +810,7 @@ This list contains 1747 plugins. :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 + :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Apr 09, 2025 5 - Production/Stable pytest :pypi:`pytest-inmanta-extensions` Inmanta tests package Nov 04, 2025 5 - Production/Stable N/A :pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Aug 26, 2025 5 - Production/Stable N/A @@ -815,7 +819,7 @@ This list contains 1747 plugins. :pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A :pypi:`pytest-in-robotframework` The extension enables easy execution of pytest tests within the Robot Framework environment. Nov 23, 2024 N/A pytest :pypi:`pytest-insper` Pytest plugin for courses at Insper Mar 21, 2024 N/A pytest - :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Feb 19, 2024 N/A pytest (>=7.2.0,<9.0.0) + :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Nov 12, 2025 N/A pytest>=9.0.0 :pypi:`pytest-instafail` pytest plugin to show failures instantly Mar 31, 2023 4 - Beta pytest (>=5) :pypi:`pytest-instrument` pytest plugin to instrument tests Apr 05, 2020 5 - Production/Stable pytest (>=5.1.0) :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Jul 01, 2025 4 - Beta pytest>=7.4 @@ -886,6 +890,7 @@ This list contains 1747 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Nov 15, 2025 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -915,7 +920,7 @@ This list contains 1747 plugins. :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) - :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests May 19, 2024 5 - Production/Stable pytest + :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 15, 2025 5 - Production/Stable pytest :pypi:`pytest-localserver` pytest plugin to test server connections locally. Oct 06, 2024 4 - Beta N/A :pypi:`pytest-localstack` Pytest plugin for AWS integration tests Jun 07, 2023 4 - Beta pytest (>=6.0.0,<7.0.0) :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) @@ -925,12 +930,13 @@ This list contains 1747 plugins. :pypi:`pytest-logbook` py.test plugin to capture logbook log messages Nov 23, 2015 5 - Production/Stable pytest (>=2.8) :pypi:`pytest-logdog` Pytest plugin to test logging Jun 15, 2021 1 - Planning pytest (>=6.2.0) :pypi:`pytest-logfest` Pytest plugin providing three logger fixtures with basic or full writing to log files Jul 21, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-log-filter` Ignore some loggers' log for pytest Nov 13, 2025 N/A pytest :pypi:`pytest-logger` Plugin configuring handlers for loggers from Python logging module. Mar 10, 2024 5 - Production/Stable pytest (>=3.2) :pypi:`pytest-logger-db` Add your description here Sep 14, 2025 N/A N/A :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Sep 11, 2025 5 - Production/Stable pytest==8.4.2 + :pypi:`pytest-logikal` Common testing environment Nov 15, 2025 5 - Production/Stable pytest==9.0.1 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -939,6 +945,7 @@ This list contains 1747 plugins. :pypi:`pytest-lw-realtime-result` Pytest plugin to generate realtime test results to a file Mar 13, 2025 N/A pytest>=3.5.0 :pypi:`pytest-manifest` PyTest plugin for recording and asserting against a manifest file Apr 07, 2025 N/A pytest :pypi:`pytest-manual-marker` pytest marker for marking manual tests Aug 04, 2022 3 - Alpha pytest>=7 + :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Nov 11, 2025 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-mark-count` Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers Nov 13, 2024 4 - Beta pytest>=8.0.0 :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) @@ -970,7 +977,7 @@ This list contains 1747 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 06, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 14, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -978,7 +985,7 @@ This list contains 1747 plugins. :pypi:`pytest-metaexport` Pytest plugin for exporting custom test metadata to JSON. Jun 24, 2025 N/A pytest>=7.1.0 :pypi:`pytest-metrics` Custom metrics report for pytest Apr 04, 2020 N/A pytest :pypi:`pytest-mfd-config` Pytest Plugin that handles test and topology configs and all their belongings like helper fixtures. Jul 11, 2025 N/A pytest<9,>=7.2.1 - :pypi:`pytest-mfd-logging` Module for handling PyTest logging. Jul 09, 2025 N/A pytest<9,>=7.2.1 + :pypi:`pytest-mfd-logging` Module for handling PyTest logging. Nov 14, 2025 N/A pytest<9,>=7.2.1 :pypi:`pytest-mh` Pytest multihost plugin Oct 16, 2025 N/A pytest :pypi:`pytest-mimesis` Mimesis integration with the pytest test runner Mar 21, 2020 5 - Production/Stable pytest (>=4.2) :pypi:`pytest-mimic` Easily record function calls while testing Apr 24, 2025 4 - Beta pytest>=6.2.0 @@ -1021,7 +1028,7 @@ This list contains 1747 plugins. :pypi:`pytest-mp` A test batcher for multiprocessed Pytest runs May 23, 2018 4 - Beta pytest :pypi:`pytest-mpi` pytest plugin to collect information from tests Jan 08, 2022 3 - Alpha pytest :pypi:`pytest-mpiexec` pytest plugin for running individual tests with mpiexec Jul 29, 2024 3 - Alpha pytest - :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Feb 14, 2024 4 - Beta pytest + :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Sep 10, 2025 5 - Production/Stable pytest<9; extra == "test" :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A @@ -1096,7 +1103,7 @@ This list contains 1747 plugins. :pypi:`pytest-optional-tests` Easy declaration of optional tests (i.e., that are not run by default) Jul 21, 2025 4 - Beta pytest; extra == "dev" :pypi:`pytest-orchestration` A pytest plugin for orchestrating tests Jul 18, 2019 N/A N/A :pypi:`pytest-order` pytest plugin to run your tests in a specific order Aug 22, 2024 5 - Production/Stable pytest>=5.0; python_version < "3.10" - :pypi:`pytest-ordered` Declare the order in which tests should run in your pytest.ini Oct 07, 2024 N/A pytest>=6.2.0 + :pypi:`pytest-ordered` Declare the order in which tests should run in your pytest.ini Nov 09, 2025 N/A pytest>=6.2.0 :pypi:`pytest-ordering` pytest plugin to run your tests in a specific order Nov 14, 2018 4 - Beta pytest :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A @@ -1167,11 +1174,11 @@ This list contains 1747 plugins. :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Nov 04, 2025 N/A N/A - :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 03, 2025 3 - Alpha pytest + :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 12, 2025 3 - Alpha pytest :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Oct 23, 2025 N/A pytest + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Nov 09, 2025 N/A pytest :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-pogo` Pytest plugin for pogo-migrate May 05, 2025 4 - Beta pytest<9,>=7 @@ -1201,11 +1208,11 @@ This list contains 1747 plugins. :pypi:`pytest-proceed` Oct 01, 2024 N/A pytest :pypi:`pytest-profiles` pytest plugin for configuration profiles Dec 09, 2021 4 - Beta pytest (>=3.7.0) :pypi:`pytest-profiling` Profiling plugin for py.test Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-progress` pytest plugin for instant test progress status Jun 18, 2024 5 - Production/Stable pytest>=2.7 + :pypi:`pytest-progress` pytest plugin for instant test progress status Nov 11, 2025 5 - Production/Stable pytest>=6.0 :pypi:`pytest-prometheus` Report test pass / failures to a Prometheus PushGateway Oct 03, 2017 N/A N/A :pypi:`pytest-prometheus-pushgateway` Pytest report plugin for Zulip Sep 27, 2022 5 - Production/Stable pytest :pypi:`pytest-prometheus-pushgw` Pytest plugin to export test metrics to Prometheus Pushgateway May 19, 2025 N/A pytest>=6.0.0 - :pypi:`pytest-proofy` Pytest plugin for Proofy test reporting Oct 17, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-proofy` Pytest plugin for Proofy test reporting Nov 13, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-prosper` Test helpers for Prosper projects Sep 24, 2018 N/A N/A :pypi:`pytest-prysk` Pytest plugin for prysk Dec 10, 2024 4 - Beta pytest>=7.3.2 :pypi:`pytest-pspec` A rspec format reporter for Python ptest Jun 02, 2020 4 - Beta pytest (>=3.0.0) @@ -1217,6 +1224,7 @@ This list contains 1747 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) + :pypi:`pytest-pve-cloud` Nov 15, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1237,7 +1245,7 @@ This list contains 1747 plugins. :pypi:`pytest-pyreport` PyReport is a lightweight reporting plugin for Pytest that provides concise HTML report May 05, 2024 N/A pytest :pypi:`pytest-pyright` Pytest plugin for type checking code with Pyright Jan 26, 2024 4 - Beta pytest >=7.0.0 :pypi:`pytest-pyspark-plugin` Pytest pyspark plugin (p3) Jul 28, 2025 4 - Beta pytest>=8.0.0 - :pypi:`pytest-pyspec` A plugin that transforms the pytest output into a result similar to the RSpec. It enables the use of docstrings to display results and also enables the use of the prefixes "describe", "with" and "it". Aug 17, 2024 N/A pytest<9.0.0,>=8.3.2 + :pypi:`pytest-pyspec` A plugin that transforms the pytest output into a result similar to the RSpec. It enables the use of docstrings to display results and also enables the use of the prefixes "describe", "with" and "it". Nov 11, 2025 5 - Production/Stable pytest<10,>=9 :pypi:`pytest-pystack` Plugin to run pystack after a timeout for a test suite. Nov 16, 2024 N/A pytest>=3.5.0 :pypi:`pytest-pytestdb` Add your description here Sep 14, 2025 N/A N/A :pypi:`pytest-pytestrail` Pytest plugin for interaction with TestRail Aug 27, 2020 4 - Beta pytest (>=3.8.0) @@ -1249,7 +1257,7 @@ This list contains 1747 plugins. :pypi:`pytest-pyvenv` A package for create venv in tests Feb 27, 2024 N/A pytest ; extra == 'test' :pypi:`pytest-pyvista` Pytest-pyvista package. Oct 06, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-qanova` A pytest plugin to collect test information Sep 05, 2024 3 - Alpha pytest - :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Oct 01, 2025 5 - Production/Stable pytest<9.0.0,>=7.2.2 + :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Nov 12, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Jun 14, 2024 5 - Production/Stable pytest>=6.0 @@ -1292,7 +1300,7 @@ This list contains 1747 plugins. :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Sep 05, 2025 5 - Production/Stable pytest>=6.2.0 :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Oct 11, 2025 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A - :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Aug 30, 2024 N/A pytest + :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 @@ -1311,10 +1319,10 @@ This list contains 1747 plugins. :pypi:`pytest-report-extras` Pytest plugin to enhance pytest-html and allure reports by adding comments, screenshots, webpage sources and attachments. Aug 08, 2025 N/A pytest>=8.4.0 :pypi:`pytest-reportinfra` Pytest plugin for reportinfra Aug 11, 2019 3 - Alpha N/A :pypi:`pytest-reporting` A plugin to report summarized results in a table format Oct 25, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility May 22, 2023 3 - Alpha pytest + :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Jul 08, 2025 N/A pytest>=4.6.10 + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Nov 11, 2025 N/A pytest>=4.6.10 :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A :pypi:`pytest-req` pytest requests plugin Nov 04, 2025 5 - Production/Stable pytest>=8.4.2 @@ -1333,7 +1341,7 @@ This list contains 1747 plugins. :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 22, 2024 4 - Beta pytest - :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 07, 2025 N/A pytest~=7.0 + :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-resource-usage` Pytest plugin for reporting running time and peak memory usage Nov 06, 2022 5 - Production/Stable pytest>=7.0.0 @@ -1366,7 +1374,7 @@ This list contains 1747 plugins. :pypi:`pytest-rmysql` This is a plugin which is able to connet MySQL easyly. Aug 17, 2025 N/A pytest>=8.4.1 :pypi:`pytest-rng` Fixtures for seeding tests and making randomness reproducible Aug 08, 2019 5 - Production/Stable pytest :pypi:`pytest-roast` pytest plugin for ROAST configuration override and fixtures Nov 09, 2022 5 - Production/Stable pytest - :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Nov 08, 2025 N/A pytest<9,>=7 + :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Nov 13, 2025 N/A pytest<10,>=7 :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) @@ -1393,23 +1401,24 @@ This list contains 1747 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 08, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 13, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Oct 29, 2025 N/A N/A :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 - :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest May 14, 2025 4 - Beta pytest>=8.3.4 + :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest Nov 14, 2025 4 - Beta pytest>=8.3.4 :pypi:`pytest-screenshot-on-failure` Saves a screenshot when a test case from a pytest execution fails Jul 21, 2023 4 - Beta N/A :pypi:`pytest-scrutinize` Scrutinize your pytest test suites for slow fixtures, tests and more. Aug 19, 2024 4 - Beta pytest>=6 :pypi:`pytest-securestore` An encrypted password store for use within pytest cases Nov 08, 2021 4 - Beta N/A :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 08, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 13, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 + :pypi:`pytest-semantic` A pytest plugin for testing LLM outputs using semantic similarity matching Nov 11, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-send-email` Send pytest execution result email Sep 02, 2024 N/A pytest :pypi:`pytest-sentry` A pytest plugin to send testrun information to Sentry.io Jul 01, 2025 N/A pytest :pypi:`pytest-sequence-markers` Pytest plugin for sequencing markers for execution of tests May 23, 2023 5 - Production/Stable N/A @@ -1457,7 +1466,7 @@ This list contains 1747 plugins. :pypi:`pytest-smart-debugger-backend` Backend server for Pytest Smart Debugger Sep 17, 2025 N/A N/A :pypi:`pytest-smart-rerun` A Pytest plugin for intelligent retrying of flaky tests. Oct 12, 2025 3 - Alpha N/A :pypi:`pytest-smell` Automated bad smell detection tool for Pytest Jun 26, 2022 N/A N/A - :pypi:`pytest-smoke` Pytest plugin for smoke testing Oct 08, 2025 4 - Beta pytest<9,>=7.0.0 + :pypi:`pytest-smoke` Pytest plugin for smoke testing Nov 09, 2025 4 - Beta pytest<10,>=7.0.0 :pypi:`pytest-smtp` Send email with pytest execution result Feb 20, 2021 N/A pytest :pypi:`pytest-smtp4dev` Plugin for smtp4dev API Jun 27, 2023 5 - Production/Stable N/A :pypi:`pytest-smtpd` An SMTP server for testing built on aiosmtpd May 15, 2023 N/A pytest @@ -1592,7 +1601,6 @@ This list contains 1747 plugins. :pypi:`pytest-testrail-e2e` pytest plugin for creating TestRail runs and adding results Oct 11, 2021 N/A pytest (>=3.6) :pypi:`pytest-testrail-integrator` Pytest plugin for sending report to testrail system. Aug 01, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-testrail-ns` pytest plugin for creating TestRail runs and adding results Aug 12, 2022 N/A N/A - :pypi:`pytest-testrail-plugin` PyTest plugin for TestRail Apr 21, 2020 3 - Alpha pytest :pypi:`pytest-testrail-reporter` Sep 10, 2018 N/A N/A :pypi:`pytest-testrail-results` A pytest plugin to upload results to TestRail. Mar 04, 2024 N/A pytest >=7.2.0 :pypi:`pytest-testreport` Dec 01, 2022 4 - Beta pytest (>=3.5.0) @@ -1624,7 +1632,7 @@ This list contains 1747 plugins. :pypi:`pytest-tinybird` A pytest plugin to report test results to tinybird May 07, 2025 4 - Beta pytest>=3.8.0 :pypi:`pytest-tipsi-django` Better fixtures for django Feb 05, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-tipsi-testing` Better fixtures management. Various helpers Feb 04, 2024 5 - Production/Stable pytest>=3.3.0 - :pypi:`pytest-tldr` A pytest plugin that limits the output to just the things you need. Oct 26, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-tldr` A pytest plugin that limits the output to just the things you need. Nov 10, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-tm4j-reporter` Cloud Jira Test Management (TM4J) PyTest reporter plugin Sep 01, 2020 N/A pytest :pypi:`pytest-tmnet` A small example package Mar 01, 2022 N/A N/A :pypi:`pytest-tmp-files` Utilities to create temporary file hierarchies in pytest. Dec 08, 2023 N/A pytest @@ -1683,7 +1691,7 @@ This list contains 1747 plugins. :pypi:`pytest-unmarked` Run only unmarked tests Aug 27, 2019 5 - Production/Stable N/A :pypi:`pytest-unordered` Test equality of unordered collections in pytest Jun 03, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-unstable` Set a test as unstable to return 0 even if it failed Sep 27, 2022 4 - Beta N/A - :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Mar 15, 2025 4 - Beta pytest>7.3.2 + :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Nov 10, 2025 4 - Beta pytest>7.3.2 :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) @@ -1736,7 +1744,7 @@ This list contains 1747 plugins. :pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0) :pypi:`pytest-xdist-gnumake` A small example package Jun 22, 2025 N/A pytest :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) - :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Mar 15, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Jun 10, 2025 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A @@ -1961,6 +1969,13 @@ This list contains 1747 plugins. Send responses to aiohttp. + :pypi:`pytest-aiohutils` + *last release*: Nov 10, 2025, + *status*: N/A, + *requires*: pytest + + Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). + :pypi:`pytest-aiomoto` *last release*: Jun 24, 2023, *status*: N/A, @@ -2130,7 +2145,7 @@ This list contains 1747 plugins. Pytest plugin to allow use of Annotated in tests to resolve fixtures :pypi:`pytest-ansible` - *last release*: Aug 21, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=6 @@ -2200,7 +2215,7 @@ This list contains 1747 plugins. An ASGI middleware to populate OpenAPI Specification examples from pytest functions :pypi:`pytest-api-cov` - *last release*: Oct 28, 2025, + *last release*: Nov 13, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -2256,7 +2271,7 @@ This list contains 1747 plugins. Pytest plugin for appium :pypi:`pytest-approval` - *last release*: Nov 06, 2025, + *last release*: Nov 11, 2025, *status*: N/A, *requires*: pytest>=8.3.5 @@ -2452,9 +2467,9 @@ This list contains 1747 plugins. Pytest fixtures for async generators :pypi:`pytest-asyncio` - *last release*: Sep 12, 2025, + *last release*: Nov 10, 2025, *status*: 5 - Production/Stable, - *requires*: pytest<9,>=8.2 + *requires*: pytest<10,>=8.2 Pytest support for asyncio @@ -2634,9 +2649,9 @@ This list contains 1747 plugins. Protect your AWS credentials in unit tests :pypi:`pytest-aws-fixtures` - *last release*: Apr 06, 2025, + *last release*: Nov 11, 2025, *status*: N/A, - *requires*: pytest<9.0.0,>=8.0.0 + *requires*: pytest<10.0.0,>=8.0.0 A series of fixtures to use in integration tests involving actual AWS services. @@ -2788,7 +2803,7 @@ This list contains 1747 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Oct 31, 2025, + *last release*: Nov 14, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -2816,7 +2831,7 @@ This list contains 1747 plugins. Benchmark utility that plugs into pytest. :pypi:`pytest-benchmark` - *last release*: Nov 07, 2025, + *last release*: Nov 09, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=8.1 @@ -2921,7 +2936,7 @@ This list contains 1747 plugins. pytest plugin to mark a test as blocker and skip all other tests :pypi:`pytest-b-logger` - *last release*: Oct 28, 2025, + *last release*: Nov 10, 2025, *status*: N/A, *requires*: pytest @@ -3264,9 +3279,9 @@ This list contains 1747 plugins. Pytest plugin with server for catching HTTP requests. :pypi:`pytest-cdist` - *last release*: Jan 30, 2025, + *last release*: Nov 14, 2025, *status*: N/A, - *requires*: pytest>=7 + *requires*: pytest>=8 A pytest plugin to split your test suite into multiple parts @@ -3530,9 +3545,9 @@ This list contains 1747 plugins. A cleanup plugin for pytest :pypi:`pytest-clerk` - *last release*: Aug 30, 2025, + *last release*: Nov 11, 2025, *status*: N/A, - *requires*: pytest<9.0.0,>=8.0.0 + *requires*: pytest<10.0.0,>=8.0.0 A set of pytest fixtures to help with integration testing with Clerk. @@ -3614,11 +3629,25 @@ This list contains 1747 plugins. PyTest plugin for testing Smart Contracts for Ethereum blockchain. :pypi:`pytest-cocotb` - *last release*: Mar 15, 2025, + *last release*: Nov 09, 2025, *status*: 5 - Production/Stable, - *requires*: pytest; extra == "test" + *requires*: pytest + + Pytest plugin that enables using pytest as the regression manager for running cocotb tests. + + :pypi:`pytest-cocotb-cov` + *last release*: Nov 09, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest + + Pytest plugin for measuring HDL coverage. + + :pypi:`pytest-cocotb-pyuvm` + *last release*: Nov 09, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest - Pytest plugin to integrate Cocotb + Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` *last release*: May 10, 2025, @@ -4195,9 +4224,9 @@ This list contains 1747 plugins. Data validation and integrity testing for your datasets using pytest. :pypi:`pytest-data-loader` - *last release*: Oct 29, 2025, + *last release*: Nov 09, 2025, *status*: 4 - Beta, - *requires*: pytest<9,>=7.0.0 + *requires*: pytest<10,>=7.0.0 Pytest plugin for loading test data for data-driven testing (DDT) @@ -4237,7 +4266,7 @@ This list contains 1747 plugins. A pytest plugin for test driven data-wrangling (this is the development version of datatest's pytest integration). :pypi:`pytest-db` - *last release*: Aug 22, 2024, + *last release*: Nov 11, 2025, *status*: N/A, *requires*: pytest @@ -4356,7 +4385,7 @@ This list contains 1747 plugins. A 'defer' fixture for pytest :pypi:`pytest-delta` - *last release*: Oct 27, 2025, + *last release*: Nov 11, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -4734,9 +4763,9 @@ This list contains 1747 plugins. An RST Documentation Generator for pytest-based test suites :pypi:`pytest-docker` - *last release*: Jul 04, 2025, + *last release*: Nov 12, 2025, *status*: N/A, - *requires*: pytest<9.0,>=4.0 + *requires*: pytest<10.0,>=4.0 Simple pytest fixtures for Docker and Docker Compose based tests @@ -5210,63 +5239,63 @@ This list contains 1747 plugins. Send execution result email :pypi:`pytest-embedded` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A pytest plugin that designed for embedded testing. :pypi:`pytest-embedded-arduino` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-idf` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with ESP-IDF. :pypi:`pytest-embedded-jtag` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with JTAG. :pypi:`pytest-embedded-nuttx` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with NuttX. :pypi:`pytest-embedded-qemu` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with QEMU. :pypi:`pytest-embedded-serial` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Serial. :pypi:`pytest-embedded-serial-esp` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Espressif target boards. :pypi:`pytest-embedded-wokwi` - *last release*: Nov 06, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -6246,7 +6275,7 @@ This list contains 1747 plugins. Pytest plugin for measuring function coverage :pypi:`pytest-funcnodes` - *last release*: Mar 19, 2025, + *last release*: Nov 13, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -6372,7 +6401,7 @@ This list contains 1747 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Nov 06, 2025, + *last release*: Nov 10, 2025, *status*: N/A, *requires*: pytest>=3.6 @@ -6736,7 +6765,7 @@ This list contains 1747 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Nov 08, 2025, + *last release*: Nov 15, 2025, *status*: 3 - Alpha, *requires*: pytest==8.4.2 @@ -6848,7 +6877,7 @@ This list contains 1747 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Oct 30, 2025, + *last release*: Nov 12, 2025, *status*: N/A, *requires*: N/A @@ -7197,6 +7226,13 @@ This list contains 1747 plugins. A pytest plugin for writing inline tests + :pypi:`pytest-inline-snapshot` + *last release*: Nov 09, 2025, + *status*: N/A, + *requires*: N/A + + inline-snapshot is the package you are looking for + :pypi:`pytest-inmanta` *last release*: Apr 09, 2025, *status*: 5 - Production/Stable, @@ -7254,9 +7290,9 @@ This list contains 1747 plugins. Pytest plugin for courses at Insper :pypi:`pytest-insta` - *last release*: Feb 19, 2024, + *last release*: Nov 12, 2025, *status*: N/A, - *requires*: pytest (>=7.2.0,<9.0.0) + *requires*: pytest>=9.0.0 A practical snapshot testing plugin for pytest @@ -7750,6 +7786,13 @@ This list contains 1747 plugins. Pytest-style test runner for langchain agents + :pypi:`pytest-language-server` + *last release*: Nov 15, 2025, + *status*: 4 - Beta, + *requires*: N/A + + A blazingly fast Language Server Protocol implementation for pytest + :pypi:`pytest-lark` *last release*: Nov 05, 2023, *status*: N/A, @@ -7954,7 +7997,7 @@ This list contains 1747 plugins. Generate local badges (shields) reporting your test suite status. :pypi:`pytest-localftpserver` - *last release*: May 19, 2024, + *last release*: Nov 15, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -8023,6 +8066,13 @@ This list contains 1747 plugins. Pytest plugin providing three logger fixtures with basic or full writing to log files + :pypi:`pytest-log-filter` + *last release*: Nov 13, 2025, + *status*: N/A, + *requires*: pytest + + Ignore some loggers' log for pytest + :pypi:`pytest-logger` *last release*: Mar 10, 2024, *status*: 5 - Production/Stable, @@ -8059,9 +8109,9 @@ This list contains 1747 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Sep 11, 2025, + *last release*: Nov 15, 2025, *status*: 5 - Production/Stable, - *requires*: pytest==8.4.2 + *requires*: pytest==9.0.1 Common testing environment @@ -8121,6 +8171,13 @@ This list contains 1747 plugins. pytest marker for marking manual tests + :pypi:`pytest-mark-ac` + *last release*: Nov 11, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest>=9.0.0 + + Provides a marker to reference acceptance criteria from PyTest tests through annotations + :pypi:`pytest-mark-count` *last release*: Nov 13, 2024, *status*: 4 - Beta, @@ -8339,7 +8396,7 @@ This list contains 1747 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Nov 06, 2025, + *last release*: Nov 14, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -8395,7 +8452,7 @@ This list contains 1747 plugins. Pytest Plugin that handles test and topology configs and all their belongings like helper fixtures. :pypi:`pytest-mfd-logging` - *last release*: Jul 09, 2025, + *last release*: Nov 14, 2025, *status*: N/A, *requires*: pytest<9,>=7.2.1 @@ -8696,9 +8753,9 @@ This list contains 1747 plugins. pytest plugin for running individual tests with mpiexec :pypi:`pytest-mpl` - *last release*: Feb 14, 2024, - *status*: 4 - Beta, - *requires*: pytest + *last release*: Nov 15, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest>=5.4.0 pytest plugin to help with testing figures output from Matplotlib @@ -9221,7 +9278,7 @@ This list contains 1747 plugins. pytest plugin to run your tests in a specific order :pypi:`pytest-ordered` - *last release*: Oct 07, 2024, + *last release*: Nov 09, 2025, *status*: N/A, *requires*: pytest>=6.2.0 @@ -9718,7 +9775,7 @@ This list contains 1747 plugins. Easy pytest visual regression testing using playwright :pypi:`pytest-pl-grader` - *last release*: Nov 03, 2025, + *last release*: Nov 12, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -9746,7 +9803,7 @@ This list contains 1747 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Oct 23, 2025, + *last release*: Nov 09, 2025, *status*: N/A, *requires*: pytest @@ -9956,9 +10013,9 @@ This list contains 1747 plugins. Profiling plugin for py.test :pypi:`pytest-progress` - *last release*: Jun 18, 2024, + *last release*: Nov 11, 2025, *status*: 5 - Production/Stable, - *requires*: pytest>=2.7 + *requires*: pytest>=6.0 pytest plugin for instant test progress status @@ -9984,7 +10041,7 @@ This list contains 1747 plugins. Pytest plugin to export test metrics to Prometheus Pushgateway :pypi:`pytest-proofy` - *last release*: Oct 17, 2025, + *last release*: Nov 13, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -10067,6 +10124,13 @@ This list contains 1747 plugins. pytest plugin for push report to minio + :pypi:`pytest-pve-cloud` + *last release*: Nov 15, 2025, + *status*: N/A, + *requires*: pytest==8.4.2 + + + :pypi:`pytest-py125` *last release*: Dec 03, 2022, *status*: N/A, @@ -10208,9 +10272,9 @@ This list contains 1747 plugins. Pytest pyspark plugin (p3) :pypi:`pytest-pyspec` - *last release*: Aug 17, 2024, - *status*: N/A, - *requires*: pytest<9.0.0,>=8.3.2 + *last release*: Nov 11, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest<10,>=9 A plugin that transforms the pytest output into a result similar to the RSpec. It enables the use of docstrings to display results and also enables the use of the prefixes "describe", "with" and "it". @@ -10292,9 +10356,9 @@ This list contains 1747 plugins. A pytest plugin to collect test information :pypi:`pytest-qaseio` - *last release*: Oct 01, 2025, + *last release*: Nov 12, 2025, *status*: 5 - Production/Stable, - *requires*: pytest<9.0.0,>=7.2.2 + *requires*: pytest>=7.2.2 Pytest plugin for Qase.io integration @@ -10593,7 +10657,7 @@ This list contains 1747 plugins. a pytest plugin that sorts tests using "before" and "after" markers :pypi:`pytest-relative-path` - *last release*: Aug 30, 2024, + *last release*: Nov 13, 2025, *status*: N/A, *requires*: pytest @@ -10726,8 +10790,8 @@ This list contains 1747 plugins. A plugin to report summarized results in a table format :pypi:`pytest-reportlog` - *last release*: May 22, 2023, - *status*: 3 - Alpha, + *last release*: Nov 11, 2025, + *status*: 5 - Production/Stable, *requires*: pytest Replacement for the --resultlog option, focused in simplicity and extensibility @@ -10747,7 +10811,7 @@ This list contains 1747 plugins. pytest plugin for adding tests' parameters to junit report :pypi:`pytest-reportportal` - *last release*: Jul 08, 2025, + *last release*: Nov 11, 2025, *status*: N/A, *requires*: pytest>=4.6.10 @@ -10880,7 +10944,7 @@ This list contains 1747 plugins. Pytest fixture for recording and replaying serial port traffic. :pypi:`pytest-resilient-circuits` - *last release*: Nov 07, 2025, + *last release*: Nov 13, 2025, *status*: N/A, *requires*: pytest~=7.0 @@ -11111,9 +11175,9 @@ This list contains 1747 plugins. pytest plugin for ROAST configuration override and fixtures :pypi:`pytest_robotframework` - *last release*: Nov 08, 2025, + *last release*: Nov 13, 2025, *status*: N/A, - *requires*: pytest<9,>=7 + *requires*: pytest<10,>=7 a pytest plugin that can run both python and robotframework tests while generating robot reports for them @@ -11300,7 +11364,7 @@ This list contains 1747 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Nov 08, 2025, + *last release*: Nov 13, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11342,7 +11406,7 @@ This list contains 1747 plugins. 👍 Validate return values against a schema-like object in testing :pypi:`pytest-scim2-server` - *last release*: May 14, 2025, + *last release*: Nov 14, 2025, *status*: 4 - Beta, *requires*: pytest>=8.3.4 @@ -11391,7 +11455,7 @@ This list contains 1747 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Nov 08, 2025, + *last release*: Nov 13, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11418,6 +11482,13 @@ This list contains 1747 plugins. A pytest plugin for selfie snapshot testing. + :pypi:`pytest-semantic` + *last release*: Nov 11, 2025, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + A pytest plugin for testing LLM outputs using semantic similarity matching + :pypi:`pytest-send-email` *last release*: Sep 02, 2024, *status*: N/A, @@ -11748,9 +11819,9 @@ This list contains 1747 plugins. Automated bad smell detection tool for Pytest :pypi:`pytest-smoke` - *last release*: Oct 08, 2025, + *last release*: Nov 09, 2025, *status*: 4 - Beta, - *requires*: pytest<9,>=7.0.0 + *requires*: pytest<10,>=7.0.0 Pytest plugin for smoke testing @@ -12692,13 +12763,6 @@ This list contains 1747 plugins. pytest plugin for creating TestRail runs and adding results - :pypi:`pytest-testrail-plugin` - *last release*: Apr 21, 2020, - *status*: 3 - Alpha, - *requires*: pytest - - PyTest plugin for TestRail - :pypi:`pytest-testrail-reporter` *last release*: Sep 10, 2018, *status*: N/A, @@ -12917,9 +12981,9 @@ This list contains 1747 plugins. Better fixtures management. Various helpers :pypi:`pytest-tldr` - *last release*: Oct 26, 2022, + *last release*: Nov 10, 2025, *status*: 4 - Beta, - *requires*: pytest (>=3.5.0) + *requires*: pytest>=7.0.0 A pytest plugin that limits the output to just the things you need. @@ -13330,7 +13394,7 @@ This list contains 1747 plugins. Set a test as unstable to return 0 even if it failed :pypi:`pytest-unused-fixtures` - *last release*: Mar 15, 2025, + *last release*: Nov 10, 2025, *status*: 4 - Beta, *requires*: pytest>7.3.2 @@ -13701,7 +13765,7 @@ This list contains 1747 plugins. pytest plugin helps to reproduce failures for particular xdist node :pypi:`pytest-xdist-worker-stats` - *last release*: Mar 15, 2025, + *last release*: Nov 10, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0.0 From 774372083b9555d41cc1c56cc1375f4011cc0054 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 08:26:38 -0300 Subject: [PATCH 060/307] [pre-commit.ci] pre-commit autoupdate (#13975) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.4 → v0.14.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.4...v0.14.5) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index efbe635b401..b04f98c40d0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.4" + rev: "v0.14.5" hooks: - id: ruff-check args: ["--fix"] From 3c2263613165828421aa482b9d7939bbe3cfa0b9 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 17 Nov 2025 22:35:50 +0200 Subject: [PATCH 061/307] python: use nodeid in error messages instead of function name The function name is ambiguous, full nodeid is more helpful. --- src/_pytest/python.py | 31 +++++++++------------ testing/python/metafunc.py | 56 +++++++++++++++----------------------- 2 files changed, 35 insertions(+), 52 deletions(-) diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 257dd78f462..e9d7fab0413 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -870,7 +870,6 @@ class IdMaker: __slots__ = ( "argnames", "config", - "func_name", "idfn", "ids", "nodeid", @@ -893,9 +892,6 @@ class IdMaker: # Optionally, the ID of the node being parametrized. # Used only for clearer error messages. nodeid: str | None - # Optionally, the ID of the function being parametrized. - # Used only for clearer error messages. - func_name: str | None def make_unique_parameterset_ids(self) -> list[str | _HiddenParam]: """Make a unique identifier for each ParameterSet, that may be used to @@ -1083,9 +1079,7 @@ def _complain_multiple_hidden_parameter_sets(self) -> NoReturn: ) def _make_error_prefix(self) -> str: - if self.func_name is not None: - return f"In {self.func_name}: " - elif self.nodeid is not None: + if self.nodeid is not None: return f"In {self.nodeid}: " else: return "" @@ -1435,7 +1429,7 @@ def _resolve_parameter_set_ids( ids_ = None else: idfn = None - ids_ = self._validate_ids(ids, parametersets, self.function.__name__) + ids_ = self._validate_ids(ids, parametersets) id_maker = IdMaker( argnames, parametersets, @@ -1443,7 +1437,6 @@ def _resolve_parameter_set_ids( ids_, self.config, nodeid=nodeid, - func_name=self.function.__name__, ) return id_maker.make_unique_parameterset_ids() @@ -1451,7 +1444,6 @@ def _validate_ids( self, ids: Iterable[object | None], parametersets: Sequence[ParameterSet], - func_name: str, ) -> list[object | None]: try: num_ids = len(ids) # type: ignore[arg-type] @@ -1464,8 +1456,11 @@ def _validate_ids( # num_ids == 0 is a special case: https://github.com/pytest-dev/pytest/issues/1849 if num_ids != len(parametersets) and num_ids != 0: - msg = "In {}: {} parameter sets specified, with different number of ids: {}" - fail(msg.format(func_name, len(parametersets), num_ids), pytrace=False) + nodeid = self.definition.nodeid + fail( + f"In {nodeid}: {len(parametersets)} parameter sets specified, with different number of ids: {num_ids}", + pytrace=False, + ) return list(itertools.islice(ids, num_ids)) @@ -1486,6 +1481,7 @@ def _resolve_args_directness( :returns A dict mapping each arg name to either "indirect" or "direct". """ + nodeid = self.definition.nodeid arg_directness: dict[str, Literal["indirect", "direct"]] if isinstance(indirect, bool): arg_directness = dict.fromkeys( @@ -1496,14 +1492,13 @@ def _resolve_args_directness( for arg in indirect: if arg not in argnames: fail( - f"In {self.function.__name__}: indirect fixture '{arg}' doesn't exist", + f"In {nodeid}: indirect fixture '{arg}' doesn't exist", pytrace=False, ) arg_directness[arg] = "indirect" else: fail( - f"In {self.function.__name__}: expected Sequence or boolean" - f" for indirect, got {type(indirect).__name__}", + f"In {nodeid}: expected Sequence or boolean for indirect, got {type(indirect).__name__}", pytrace=False, ) return arg_directness @@ -1520,12 +1515,12 @@ def _validate_if_using_arg_names( :raises ValueError: If validation fails. """ default_arg_names = set(get_default_arg_names(self.function)) - func_name = self.function.__name__ + nodeid = self.definition.nodeid for arg in argnames: if arg not in self.fixturenames: if arg in default_arg_names: fail( - f"In {func_name}: function already takes an argument '{arg}' with a default value", + f"In {nodeid}: function already takes an argument '{arg}' with a default value", pytrace=False, ) else: @@ -1534,7 +1529,7 @@ def _validate_if_using_arg_names( else: name = "fixture" if indirect else "argument" fail( - f"In {func_name}: function uses no {name} '{arg}'", + f"In {nodeid}: function uses no {name} '{arg}'", pytrace=False, ) diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index 82a5509c49a..7217c80c03d 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -119,7 +119,7 @@ def gen() -> Iterator[int | None | Exc]: with pytest.raises( fail.Exception, match=( - r"In func: ids contains unsupported value Exc\(from_gen\) \(type: \) at index 2. " + r"In mock::nodeid: ids contains unsupported value Exc\(from_gen\) \(type: \) at index 2. " r"Supported types are: .*" ), ): @@ -300,7 +300,7 @@ class A: deadline=400.0 ) # very close to std deadline and CI boxes are not reliable in CPU power def test_idval_hypothesis(self, value) -> None: - escaped = IdMaker([], [], None, None, None, None, None)._idval(value, "a", 6) + escaped = IdMaker([], [], None, None, None, None)._idval(value, "a", 6) assert isinstance(escaped, str) escaped.encode("ascii") @@ -323,8 +323,7 @@ def test_unicode_idval(self) -> None: ] for val, expected in values: assert ( - IdMaker([], [], None, None, None, None, None)._idval(val, "a", 6) - == expected + IdMaker([], [], None, None, None, None)._idval(val, "a", 6) == expected ) def test_unicode_idval_with_config(self) -> None: @@ -353,7 +352,7 @@ def getini(self, name): ("ação", MockConfig({option: False}), "a\\xe7\\xe3o"), ] for val, config, expected in values: - actual = IdMaker([], [], None, None, config, None, None)._idval(val, "a", 6) + actual = IdMaker([], [], None, None, config, None)._idval(val, "a", 6) assert actual == expected def test_bytes_idval(self) -> None: @@ -367,8 +366,7 @@ def test_bytes_idval(self) -> None: ] for val, expected in values: assert ( - IdMaker([], [], None, None, None, None, None)._idval(val, "a", 6) - == expected + IdMaker([], [], None, None, None, None)._idval(val, "a", 6) == expected ) def test_class_or_function_idval(self) -> None: @@ -384,8 +382,7 @@ def test_function(): values = [(TestClass, "TestClass"), (test_function, "test_function")] for val, expected in values: assert ( - IdMaker([], [], None, None, None, None, None)._idval(val, "a", 6) - == expected + IdMaker([], [], None, None, None, None)._idval(val, "a", 6) == expected ) def test_notset_idval(self) -> None: @@ -394,9 +391,7 @@ def test_notset_idval(self) -> None: Regression test for #7686. """ - assert ( - IdMaker([], [], None, None, None, None, None)._idval(NOTSET, "a", 0) == "a0" - ) + assert IdMaker([], [], None, None, None, None)._idval(NOTSET, "a", 0) == "a0" def test_idmaker_autoname(self) -> None: """#250""" @@ -407,7 +402,6 @@ def test_idmaker_autoname(self) -> None: None, None, None, - None, ).make_unique_parameterset_ids() assert result == ["string-1.0", "st-ring-2.0"] @@ -418,18 +412,17 @@ def test_idmaker_autoname(self) -> None: None, None, None, - None, ).make_unique_parameterset_ids() assert result == ["a0-1.0", "a1-b1"] # unicode mixing, issue250 result = IdMaker( - ("a", "b"), [pytest.param({}, b"\xc3\xb4")], None, None, None, None, None + ("a", "b"), [pytest.param({}, b"\xc3\xb4")], None, None, None, None ).make_unique_parameterset_ids() assert result == ["a0-\\xc3\\xb4"] def test_idmaker_with_bytes_regex(self) -> None: result = IdMaker( - ("a"), [pytest.param(re.compile(b"foo"))], None, None, None, None, None + ("a"), [pytest.param(re.compile(b"foo"))], None, None, None, None ).make_unique_parameterset_ids() assert result == ["foo"] @@ -455,7 +448,6 @@ def test_idmaker_native_strings(self) -> None: None, None, None, - None, ).make_unique_parameterset_ids() assert result == [ "1.0--1.1", @@ -488,7 +480,6 @@ def test_idmaker_non_printable_characters(self) -> None: None, None, None, - None, ).make_unique_parameterset_ids() assert result == ["\\x00-1", "\\x05-2", "\\x00-3", "\\x05-4", "\\t-5", "\\t-6"] @@ -503,7 +494,6 @@ def test_idmaker_manual_ids_must_be_printable(self) -> None: None, None, None, - None, ).make_unique_parameterset_ids() assert result == ["hello \\x00", "hello \\x05"] @@ -511,7 +501,7 @@ def test_idmaker_enum(self) -> None: enum = pytest.importorskip("enum") e = enum.Enum("Foo", "one, two") result = IdMaker( - ("a", "b"), [pytest.param(e.one, e.two)], None, None, None, None, None + ("a", "b"), [pytest.param(e.one, e.two)], None, None, None, None ).make_unique_parameterset_ids() assert result == ["Foo.one-Foo.two"] @@ -534,7 +524,6 @@ def ids(val: object) -> str | None: None, None, None, - None, ).make_unique_parameterset_ids() assert result == ["10.0-IndexError()", "20-KeyError()", "three-b2"] @@ -555,7 +544,6 @@ def ids(val: object) -> str: None, None, None, - None, ).make_unique_parameterset_ids() assert result == ["a-a0", "a-a1", "a-a2"] @@ -593,7 +581,6 @@ def getini(self, name): None, config, None, - None, ).make_unique_parameterset_ids() assert result == [expected] @@ -625,7 +612,7 @@ def getini(self, name): ] for config, expected in values: result = IdMaker( - ("a",), [pytest.param("string")], None, ["ação"], config, None, None + ("a",), [pytest.param("string")], None, ["ação"], config, None ).make_unique_parameterset_ids() assert result == [expected] @@ -656,14 +643,13 @@ def getini(self, name): None, config, None, - None, ).make_unique_parameterset_ids() assert result == [expected] def test_idmaker_duplicated_empty_str(self) -> None: """Regression test for empty strings parametrized more than once (#11563).""" result = IdMaker( - ("a",), [pytest.param(""), pytest.param("")], None, None, None, None, None + ("a",), [pytest.param(""), pytest.param("")], None, None, None, None ).make_unique_parameterset_ids() assert result == ["0", "1"] @@ -728,7 +714,6 @@ def test_idmaker_with_ids(self) -> None: ["a", None], None, None, - None, ).make_unique_parameterset_ids() assert result == ["a", "3-4"] @@ -740,7 +725,6 @@ def test_idmaker_with_paramset_id(self) -> None: ["a", None], None, None, - None, ).make_unique_parameterset_ids() assert result == ["me", "you"] @@ -752,7 +736,6 @@ def test_idmaker_with_ids_unique_names(self) -> None: ["a", "a", "b", "c", "b"], None, None, - None, ).make_unique_parameterset_ids() assert result == ["a0", "a1", "b0", "c", "b1"] @@ -811,7 +794,7 @@ def func(x, y): metafunc = self.Metafunc(func) with pytest.raises( fail.Exception, - match="In func: expected Sequence or boolean for indirect, got dict", + match="In mock::nodeid: expected Sequence or boolean for indirect, got dict", ): metafunc.parametrize("x, y", [("a", "b")], indirect={}) # type: ignore[arg-type] @@ -1431,7 +1414,8 @@ def test_ids_numbers(x,expected): result = pytester.runpytest() result.stdout.fnmatch_lines( [ - "In test_ids_numbers: ids contains unsupported value OSError() (type: ) at index 2. " + "In test_parametrized_ids_invalid_type.py::test_ids_numbers: ids contains unsupported value " + "OSError() (type: ) at index 2. " "Supported types are: str, bytes, int, float, complex, bool, enum, regex or anything with a __name__." ] ) @@ -2303,8 +2287,8 @@ def test_func(foo, bar): "", "*= ERRORS =*", "*_ ERROR collecting test_multiple_hidden_param_is_forbidden.py _*", - "E Failed: In test_func: multiple instances of HIDDEN_PARAM cannot be used " - "in the same parametrize call, because the tests names need to be unique.", + "E Failed: In test_multiple_hidden_param_is_forbidden.py::test_func: multiple instances of " + "HIDDEN_PARAM cannot be used in the same parametrize call, because the tests names need to be unique.", "*! Interrupted: 1 error during collection !*", "*= no tests collected, 1 error in *", ] @@ -2318,12 +2302,16 @@ def test_multiple_hidden_param_is_forbidden_idmaker(self) -> None: [pytest.HIDDEN_PARAM, pytest.HIDDEN_PARAM], None, "some_node_id", - None, ) expected = "In some_node_id: multiple instances of HIDDEN_PARAM" with pytest.raises(Failed, match=expected): id_maker.make_unique_parameterset_ids() + def test_idmaker_error_without_nodeid(self) -> None: + id_maker = IdMaker(["a"], [pytest.param("a")], None, [object()], None, None) + with pytest.raises(Failed, match="ids contains unsupported value"): + id_maker.make_unique_parameterset_ids() + def test_multiple_parametrize(self, pytester: Pytester) -> None: items = pytester.getitems( """ From 3aabdca3f301dca9c3574bb4e15226a9387dee61 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 17 Nov 2025 23:18:28 +0200 Subject: [PATCH 062/307] python: move `_resolve_args_directness` function Needed for the next commit. --- src/_pytest/fixtures.py | 40 +++++++++++++++++++++++++++++++++++++ src/_pytest/python.py | 44 ++++------------------------------------- 2 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 701be0283a1..9f3bb877a5d 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -25,6 +25,7 @@ from typing import Final from typing import final from typing import Generic +from typing import Literal from typing import NoReturn from typing import overload from typing import TYPE_CHECKING @@ -1472,6 +1473,45 @@ def pytest_cmdline_main(config: Config) -> int | ExitCode | None: return None +def _resolve_args_directness( + argnames: Sequence[str], + indirect: bool | Sequence[str], + nodeid: str, +) -> dict[str, Literal["indirect", "direct"]]: + """Resolve if each parametrized argument must be considered an indirect + parameter to a fixture of the same name, or a direct parameter to the + parametrized function, based on the ``indirect`` parameter of the + parametrize() call. + + :param argnames: + List of argument names passed to ``parametrize()``. + :param indirect: + Same as the ``indirect`` parameter of ``parametrize()``. + :param nodeid: + Node ID to which the parametrization is applied. + :returns: + A dict mapping each arg name to either "indirect" or "direct". + """ + arg_directness: dict[str, Literal["indirect", "direct"]] + if isinstance(indirect, bool): + arg_directness = dict.fromkeys(argnames, "indirect" if indirect else "direct") + elif isinstance(indirect, Sequence): + arg_directness = dict.fromkeys(argnames, "direct") + for arg in indirect: + if arg not in argnames: + fail( + f"In {nodeid}: indirect fixture '{arg}' doesn't exist", + pytrace=False, + ) + arg_directness[arg] = "indirect" + else: + fail( + f"In {nodeid}: expected Sequence or boolean for indirect, got {type(indirect).__name__}", + pytrace=False, + ) + return arg_directness + + def _get_direct_parametrize_args(node: nodes.Node) -> set[str]: """Return all direct parametrization arguments of a node, so we don't mistake them for fixtures. diff --git a/src/_pytest/python.py b/src/_pytest/python.py index e9d7fab0413..7374fa3cee0 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -53,6 +53,7 @@ from _pytest.config import hookimpl from _pytest.config.argparsing import Parser from _pytest.deprecated import check_ispytest +from _pytest.fixtures import _resolve_args_directness from _pytest.fixtures import FixtureDef from _pytest.fixtures import FixtureRequest from _pytest.fixtures import FuncFixtureInfo @@ -1327,7 +1328,9 @@ def parametrize( object.__setattr__(_param_mark._param_ids_from, "_param_ids_generated", ids) # Calculate directness. - arg_directness = self._resolve_args_directness(argnames, indirect) + arg_directness = _resolve_args_directness( + argnames, indirect, self.definition.nodeid + ) self._params_directness.update(arg_directness) # Add direct parametrizations as fixturedefs to arg2fixturedefs by @@ -1464,45 +1467,6 @@ def _validate_ids( return list(itertools.islice(ids, num_ids)) - def _resolve_args_directness( - self, - argnames: Sequence[str], - indirect: bool | Sequence[str], - ) -> dict[str, Literal["indirect", "direct"]]: - """Resolve if each parametrized argument must be considered an indirect - parameter to a fixture of the same name, or a direct parameter to the - parametrized function, based on the ``indirect`` parameter of the - parametrized() call. - - :param argnames: - List of argument names passed to ``parametrize()``. - :param indirect: - Same as the ``indirect`` parameter of ``parametrize()``. - :returns - A dict mapping each arg name to either "indirect" or "direct". - """ - nodeid = self.definition.nodeid - arg_directness: dict[str, Literal["indirect", "direct"]] - if isinstance(indirect, bool): - arg_directness = dict.fromkeys( - argnames, "indirect" if indirect else "direct" - ) - elif isinstance(indirect, Sequence): - arg_directness = dict.fromkeys(argnames, "direct") - for arg in indirect: - if arg not in argnames: - fail( - f"In {nodeid}: indirect fixture '{arg}' doesn't exist", - pytrace=False, - ) - arg_directness[arg] = "indirect" - else: - fail( - f"In {nodeid}: expected Sequence or boolean for indirect, got {type(indirect).__name__}", - pytrace=False, - ) - return arg_directness - def _validate_if_using_arg_names( self, argnames: Sequence[str], From adcdeb9236d40a0b3a7f25e03ae94e683501cf56 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 17 Nov 2025 23:19:13 +0200 Subject: [PATCH 063/307] fixtures: fix incorrect "duplicate parametrization" when using `indirect=[...]` The code in `_get_direct_parametrize_args` only handled `indirect=True/False`, it didn't account for `indirect=[...]`. This caused the added test to start failing after d56b1af5252ceb8578d6751a6b2006e79defbb08. Fix by using the common `_resolve_args_directness` function. It's a bit heavy for the task but correctness first... Fix #13974. --- src/_pytest/fixtures.py | 15 ++++++++++----- testing/python/collect.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 9f3bb877a5d..5fc2abc3991 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1523,11 +1523,16 @@ def _get_direct_parametrize_args(node: nodes.Node) -> set[str]: """ parametrize_argnames: set[str] = set() for marker in node.iter_markers(name="parametrize"): - if not marker.kwargs.get("indirect", False): - p_argnames, _ = ParameterSet._parse_parametrize_args( - *marker.args, **marker.kwargs - ) - parametrize_argnames.update(p_argnames) + indirect = marker.kwargs.get("indirect", False) + p_argnames, _ = ParameterSet._parse_parametrize_args( + *marker.args, **marker.kwargs + ) + p_directness = _resolve_args_directness(p_argnames, indirect, node.nodeid) + parametrize_argnames.update( + argname + for argname, directness in p_directness.items() + if directness == "direct" + ) return parametrize_argnames diff --git a/testing/python/collect.py b/testing/python/collect.py index b26931007d9..d1901684527 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -524,6 +524,42 @@ def test_overridden_via_param(value): rec = pytester.inline_run() rec.assertoutcome(passed=1) + def test_parametrize_overrides_parametrized_fixture_with_unrelated_indirect( + self, pytester: Pytester + ) -> None: + """Test parametrization when parameter overrides existing parametrized fixture with same name, + and there is an unrelated indirect param. + + Regression test for #13974. + """ + pytester.makepyfile( + """ + import pytest + + @pytest.fixture(params=["a", "b"]) + def target(request): + return request.param + + @pytest.fixture + def val(request): + return int(request.param) + + @pytest.mark.parametrize( + ["val", "target"], + [ + ("1", 1), + ("2", 2), + ], + indirect=["val"], + ) + def test(val, target): + assert val == target + """ + ) + result = pytester.runpytest() + assert result.ret == 0 + result.assert_outcomes(passed=2) + def test_parametrize_overrides_indirect_dependency_fixture( self, pytester: Pytester ) -> None: From fd47511afeb024d2fbad9257d1b44310672c6a0f Mon Sep 17 00:00:00 2001 From: Tom Most Date: Wed, 19 Nov 2025 02:22:15 -0800 Subject: [PATCH 064/307] Fix a typo in the 9.0 changelog (#13969) --- AUTHORS | 1 + doc/en/changelog.rst | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 83509281035..a089ca678f7 100644 --- a/AUTHORS +++ b/AUTHORS @@ -459,6 +459,7 @@ TJ Bruno Tobias Diez Tobias Petersen Tom Dalton +Tom Most Tom Viner Tomáš Gavenčiak Tomer Keren diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index 85a509dff3f..1de9afaaa66 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -326,7 +326,7 @@ Bug fixes - `#13865 `_: Fixed `--show-capture` with `--tb=line`. -- `#13522 `_: Fixed :fixture:`pytester` in subprocess mode ignored all :attr`pytester.plugins ` except the first. +- `#13522 `_: Fixed :fixture:`pytester` in subprocess mode ignored all :attr:`pytester.plugins ` except the first. Fixed :fixture:`pytester` in subprocess mode silently ignored non-str :attr:`pytester.plugins `. Now it errors instead. From 79f080c28cbee194bc59f8e1cfe98a9c90260a49 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 20 Nov 2025 17:28:25 +0200 Subject: [PATCH 065/307] ci: restore full windows coverage Since 01dce85a89eb0b3e881303784267f14b94d9691f, we don't have a CI job on windows with coverage enabled which runs the full test suite. The unittest/twisted ones only run `test_unittest.py`. Enable coverage for one of the full jobs. --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 443a1723a0c..de40c8a10e2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -139,6 +139,7 @@ jobs: python: "3.14" os: windows-latest tox_env: "py314" + use_coverage: true # Use separate jobs for different unittest flavors (twisted, asynctest) to ensure proper coverage. - name: "ubuntu-py310-unittest-asynctest" From 2ffef56153c0e25330110cc32d046df6d395ad74 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 16 Nov 2025 15:05:10 +0200 Subject: [PATCH 066/307] terminal: disable OSC 9;4; terminal progress by default, except on Windows Fix #13896. --- changelog/13896.bugfix.rst | 3 +++ doc/en/changelog.rst | 4 ++++ src/_pytest/config/__init__.py | 1 + src/_pytest/terminal.py | 15 ++++---------- src/_pytest/terminalprogress.py | 28 ++++++++++++++++++++++++++ testing/test_terminal.py | 35 +++++++++++++++++++-------------- 6 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 changelog/13896.bugfix.rst create mode 100644 src/_pytest/terminalprogress.py diff --git a/changelog/13896.bugfix.rst b/changelog/13896.bugfix.rst new file mode 100644 index 00000000000..528556d7a5b --- /dev/null +++ b/changelog/13896.bugfix.rst @@ -0,0 +1,3 @@ +The terminal progress feature added in pytest 9.0.0 has been disabled by default, except on Windows, due to compatibility issues with some terminal emulators. + +You may enable it again by passing ``-p terminalprogress``. We may enable it by default again once compatibility improves in the future. diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index 1de9afaaa66..d9e9928db00 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -178,6 +178,10 @@ New features - `#13072 `_: Added support for displaying test session **progress in the terminal tab** using the `OSC 9;4; `_ ANSI sequence. + + **Note**: *This feature has been disabled by default in version 9.0.2, except on Windows, due to compatibility issues with some terminal emulators. + You may enable it again by passing* ``-p terminalprogress``. *We may enable it by default again once compatibility improves in the future.* + When pytest runs in a supported terminal emulator like ConEmu, Gnome Terminal, Ptyxis, Windows Terminal, Kitty or Ghostty, you'll see the progress in the terminal tab or window, allowing you to monitor pytest's progress at a glance. diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index a17e246845a..63bcdad3f11 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -303,6 +303,7 @@ def directory_arg(path: str, optname: str) -> str: *default_plugins, "pytester", "pytester_assertions", + "terminalprogress", } diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 4517b05bdee..e66e4f48dd6 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -16,7 +16,6 @@ import datetime from functools import partial import inspect -import os from pathlib import Path import platform import sys @@ -299,16 +298,10 @@ def mywriter(tags, args): config.trace.root.setprocessor("pytest:config", mywriter) - if reporter.isatty(): - # Some terminals interpret OSC 9;4 as desktop notification, - # skip on those we know (#13896). - should_skip_terminal_progress = ( - # iTerm2 (reported on version 3.6.5). - "ITERM_SESSION_ID" in os.environ - ) - if not should_skip_terminal_progress: - plugin = TerminalProgressPlugin(reporter) - config.pluginmanager.register(plugin, "terminalprogress") + # See terminalprogress.py. + # On Windows it's safe to load by default. + if sys.platform == "win32": + config.pluginmanager.import_plugin("terminalprogress") def getreportopt(config: Config) -> str: diff --git a/src/_pytest/terminalprogress.py b/src/_pytest/terminalprogress.py new file mode 100644 index 00000000000..4d5d321c490 --- /dev/null +++ b/src/_pytest/terminalprogress.py @@ -0,0 +1,28 @@ +# A plugin to register the TerminalProgressPlugin plugin. +# +# This plugin is not loaded by default due to compatibility issues (#13896), +# but can be enabled in one of these ways: +# - The terminal plugin enables it in a few cases where it's safe, and not +# blocked by the user (using e.g. `-p no:terminalprogress`). +# - The user explicitly requests it, e.g. using `-p terminalprogress`. +# +# In a few years, if it's safe, we can consider enabling it by default. Then, +# this file will become unnecessary and can be inlined into terminal.py. + +from __future__ import annotations + +from _pytest.config import Config +from _pytest.config import hookimpl +from _pytest.terminal import TerminalProgressPlugin +from _pytest.terminal import TerminalReporter + + +@hookimpl(trylast=True) +def pytest_configure(config: Config) -> None: + reporter: TerminalReporter | None = config.pluginmanager.get_plugin( + "terminalreporter" + ) + + if reporter is not None and reporter.isatty(): + plugin = TerminalProgressPlugin(reporter) + config.pluginmanager.register(plugin, name="terminalprogress-plugin") diff --git a/testing/test_terminal.py b/testing/test_terminal.py index a981e14f0a2..9b63484fdbe 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -3428,30 +3428,35 @@ def write_raw(s: str, *, flush: bool = False) -> None: tr._progress_nodeids_reported = set() return tr - def test_plugin_registration(self, pytester: pytest.Pytester) -> None: - """Test that the plugin is registered correctly on TTY output.""" + @pytest.mark.skipif(sys.platform != "win32", reason="#13896") + def test_plugin_registration_enabled_by_default( + self, pytester: pytest.Pytester + ) -> None: + """Test that the plugin registration is enabled by default. + + Currently only on Windows (#13896). + """ # The plugin module should be registered as a default plugin. with patch.object(sys.stdout, "isatty", return_value=True): config = pytester.parseconfigure() plugin = config.pluginmanager.get_plugin("terminalprogress") assert plugin is not None + def test_plugin_registred_on_all_platforms_when_explicitly_requested( + self, pytester: pytest.Pytester + ) -> None: + """Test that the plugin is registered on any platform if explicitly requested.""" + # The plugin module should be registered as a default plugin. + with patch.object(sys.stdout, "isatty", return_value=True): + config = pytester.parseconfigure("-p", "terminalprogress") + plugin = config.pluginmanager.get_plugin("terminalprogress") + assert plugin is not None + def test_disabled_for_non_tty(self, pytester: pytest.Pytester) -> None: """Test that plugin is disabled for non-TTY output.""" with patch.object(sys.stdout, "isatty", return_value=False): - config = pytester.parseconfigure() - plugin = config.pluginmanager.get_plugin("terminalprogress") - assert plugin is None - - def test_disabled_for_iterm2(self, pytester: pytest.Pytester, monkeypatch) -> None: - """Should not register the plugin on iTerm2 terminal since it interprets - OSC 9;4 as desktop notifications, not progress (#13896).""" - monkeypatch.setenv( - "ITERM_SESSION_ID", "w0t1p0:3DB6DF06-FE11-40C3-9A66-9E10A193A632" - ) - with patch.object(sys.stdout, "isatty", return_value=True): - config = pytester.parseconfigure() - plugin = config.pluginmanager.get_plugin("terminalprogress") + config = pytester.parseconfigure("-p", "terminalprogress") + plugin = config.pluginmanager.get_plugin("terminalprogress-plugin") assert plugin is None @pytest.mark.parametrize( From 6d6ae274f9d5fe50faba7d2a26888c67bc1d1b0b Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 18 Nov 2025 20:49:29 +0200 Subject: [PATCH 067/307] testing: improve mocking in terminalprogress tests --- testing/test_terminal.py | 45 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/testing/test_terminal.py b/testing/test_terminal.py index 9b63484fdbe..9cbd829f3c2 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -12,8 +12,7 @@ from typing import cast from typing import Literal from typing import NamedTuple -from unittest.mock import Mock -from unittest.mock import patch +from unittest import mock import pluggy @@ -3419,45 +3418,47 @@ def mock_file(self) -> StringIO: @pytest.fixture def mock_tr(self, mock_file: StringIO) -> pytest.TerminalReporter: - tr = Mock(spec=pytest.TerminalReporter) + tr: pytest.TerminalReporter = mock.create_autospec(pytest.TerminalReporter) - def write_raw(s: str, *, flush: bool = False) -> None: - mock_file.write(s) + def write_raw(content: str, *, flush: bool = False) -> None: + mock_file.write(content) - tr.write_raw = write_raw + tr.write_raw = write_raw # type: ignore[method-assign] tr._progress_nodeids_reported = set() return tr @pytest.mark.skipif(sys.platform != "win32", reason="#13896") def test_plugin_registration_enabled_by_default( - self, pytester: pytest.Pytester + self, pytester: pytest.Pytester, monkeypatch: MonkeyPatch ) -> None: """Test that the plugin registration is enabled by default. Currently only on Windows (#13896). """ + monkeypatch.setattr(sys.stdout, "isatty", lambda: True) # The plugin module should be registered as a default plugin. - with patch.object(sys.stdout, "isatty", return_value=True): - config = pytester.parseconfigure() - plugin = config.pluginmanager.get_plugin("terminalprogress") - assert plugin is not None + config = pytester.parseconfigure() + plugin = config.pluginmanager.get_plugin("terminalprogress") + assert plugin is not None def test_plugin_registred_on_all_platforms_when_explicitly_requested( - self, pytester: pytest.Pytester + self, pytester: pytest.Pytester, monkeypatch: MonkeyPatch ) -> None: """Test that the plugin is registered on any platform if explicitly requested.""" + monkeypatch.setattr(sys.stdout, "isatty", lambda: True) # The plugin module should be registered as a default plugin. - with patch.object(sys.stdout, "isatty", return_value=True): - config = pytester.parseconfigure("-p", "terminalprogress") - plugin = config.pluginmanager.get_plugin("terminalprogress") - assert plugin is not None + config = pytester.parseconfigure("-p", "terminalprogress") + plugin = config.pluginmanager.get_plugin("terminalprogress") + assert plugin is not None - def test_disabled_for_non_tty(self, pytester: pytest.Pytester) -> None: + def test_disabled_for_non_tty( + self, pytester: pytest.Pytester, monkeypatch: MonkeyPatch + ) -> None: """Test that plugin is disabled for non-TTY output.""" - with patch.object(sys.stdout, "isatty", return_value=False): - config = pytester.parseconfigure("-p", "terminalprogress") - plugin = config.pluginmanager.get_plugin("terminalprogress-plugin") - assert plugin is None + monkeypatch.setattr(sys.stdout, "isatty", lambda: False) + config = pytester.parseconfigure("-p", "terminalprogress") + plugin = config.pluginmanager.get_plugin("terminalprogress-plugin") + assert plugin is None @pytest.mark.parametrize( ["state", "progress", "expected"], @@ -3489,7 +3490,7 @@ def test_session_lifecycle( """Test progress updates during session lifecycle.""" plugin = TerminalProgressPlugin(mock_tr) - session = Mock(spec=pytest.Session) + session = mock.create_autospec(pytest.Session) session.testscollected = 3 # Session start - should emit indeterminate progress. From beedab9c364e46101d629e2655f00cdb280bdc70 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 18 Nov 2025 20:50:06 +0200 Subject: [PATCH 068/307] terminalprogress: disable when TERM=dumb TERM=dumb shouldn't emit escape codes like terminalprogress does, it would likely come out as literal escape characters. --- changelog/13896.bugfix.rst | 2 ++ src/_pytest/terminalprogress.py | 4 +++- testing/test_terminal.py | 10 ++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/changelog/13896.bugfix.rst b/changelog/13896.bugfix.rst index 528556d7a5b..187be00cc4d 100644 --- a/changelog/13896.bugfix.rst +++ b/changelog/13896.bugfix.rst @@ -1,3 +1,5 @@ The terminal progress feature added in pytest 9.0.0 has been disabled by default, except on Windows, due to compatibility issues with some terminal emulators. You may enable it again by passing ``-p terminalprogress``. We may enable it by default again once compatibility improves in the future. + +Additionally, when the environment variable ``TERM`` is ``dumb``, the escape codes are no longer emitted, even if the plugin is enabled. diff --git a/src/_pytest/terminalprogress.py b/src/_pytest/terminalprogress.py index 4d5d321c490..287f0d569ff 100644 --- a/src/_pytest/terminalprogress.py +++ b/src/_pytest/terminalprogress.py @@ -11,6 +11,8 @@ from __future__ import annotations +import os + from _pytest.config import Config from _pytest.config import hookimpl from _pytest.terminal import TerminalProgressPlugin @@ -23,6 +25,6 @@ def pytest_configure(config: Config) -> None: "terminalreporter" ) - if reporter is not None and reporter.isatty(): + if reporter is not None and reporter.isatty() and os.environ.get("TERM") != "dumb": plugin = TerminalProgressPlugin(reporter) config.pluginmanager.register(plugin, name="terminalprogress-plugin") diff --git a/testing/test_terminal.py b/testing/test_terminal.py index 9cbd829f3c2..3053f5ef9a1 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -3460,6 +3460,16 @@ def test_disabled_for_non_tty( plugin = config.pluginmanager.get_plugin("terminalprogress-plugin") assert plugin is None + def test_disabled_for_dumb_terminal( + self, pytester: pytest.Pytester, monkeypatch: MonkeyPatch + ) -> None: + """Test that plugin is disabled when TERM=dumb.""" + monkeypatch.setenv("TERM", "dumb") + monkeypatch.setattr(sys.stdout, "isatty", lambda: True) + config = pytester.parseconfigure("-p", "terminalprogress") + plugin = config.pluginmanager.get_plugin("terminalprogress-plugin") + assert plugin is None + @pytest.mark.parametrize( ["state", "progress", "expected"], [ From 2ddf1b780feb9e3da20fae069cbb54757a4c7527 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 20 Nov 2025 23:31:00 +0200 Subject: [PATCH 069/307] coverage: use `ctrace` core to avoid CI slowdown on Python 3.14 While `sysmon` (default since Python 3.14) is supposed to be faster, it about 3x slower in CI (~24m vs. ~8m) ATM. https://coverage.readthedocs.io/en/latest/config.html#config-run-core https://coverage.readthedocs.io/en/latest/faq.html#q-coverage-py-is-much-slower-than-i-remember-what-s-going-on --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 72cfdcb03c8..5956eff9f68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -446,6 +446,9 @@ include = [ parallel = true branch = true patch = [ "subprocess" ] +# The sysmon core (default since Python 3.14) is much slower. +# Perhaps: https://github.com/coveragepy/coveragepy/issues/2082 +core = "ctrace" [tool.coverage.paths] source = [ From c4142aff4ba2ed34ab4ff86ffffb9f9e357fc524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B3la=20Lus=C3=B8t?= <60041069+solaluset@users.noreply.github.com> Date: Fri, 21 Nov 2025 03:13:03 +0200 Subject: [PATCH 070/307] Fix internal error when source is modified (#13884) Fix IndexError when retrieving start lineno --- changelog/13884.bugfix.rst | 1 + src/_pytest/_code/source.py | 3 +++ testing/code/test_source.py | 25 +++++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 changelog/13884.bugfix.rst diff --git a/changelog/13884.bugfix.rst b/changelog/13884.bugfix.rst new file mode 100644 index 00000000000..af0f08eb00c --- /dev/null +++ b/changelog/13884.bugfix.rst @@ -0,0 +1 @@ +Fixed rare internal IndexError caused by `builtins.compile` being overridden in client code. diff --git a/src/_pytest/_code/source.py b/src/_pytest/_code/source.py index 99c242dd98e..cbadf667907 100644 --- a/src/_pytest/_code/source.py +++ b/src/_pytest/_code/source.py @@ -168,6 +168,8 @@ def get_statement_startend2(lineno: int, node: ast.AST) -> tuple[int, int | None values.append(val[0].lineno - 1 - 1) values.sort() insert_index = bisect_right(values, lineno) + if insert_index == 0: + return 0, None start = values[insert_index - 1] if insert_index >= len(values): end = None @@ -216,6 +218,7 @@ def getstatementrange_ast( pass # The end might still point to a comment or empty line, correct it. + end = min(end, len(source.lines)) while end: line = source.lines[end - 1].lstrip() if line.startswith("#") or not line: diff --git a/testing/code/test_source.py b/testing/code/test_source.py index e413af3766e..3512a86f9a8 100644 --- a/testing/code/test_source.py +++ b/testing/code/test_source.py @@ -7,6 +7,7 @@ import sys import textwrap from typing import Any +from unittest.mock import patch from _pytest._code import Code from _pytest._code import Frame @@ -647,3 +648,27 @@ def __init__(self, *args): # fmt: on values = [i for i in x.source.lines if i.strip()] assert len(values) == 4 + + +def test_patched_compile() -> None: + # ensure Source doesn't break + # when compile() modifies code dynamically + from builtins import compile + + def patched_compile1(_, *args, **kwargs): + return compile("", *args, **kwargs) + + with patch("builtins.compile", new=patched_compile1): + Source(patched_compile1).getstatement(1) + + # fmt: off + def patched_compile2(_, *args, **kwargs): + + # first line of this function (the one above this one) must be empty + # LINES must be equal or higher than number of lines of this function + LINES = 99 + return compile("\ndef a():\n" + "\n" * LINES + " pass", *args, **kwargs) + # fmt: on + + with patch("builtins.compile", new=patched_compile2): + Source(patched_compile2).getstatement(1) From 9f992b8b61264ef5d010783e0d31b63d859f0071 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 21 Nov 2025 16:35:27 +0100 Subject: [PATCH 071/307] config: Add a test for -o with invalid option (#13980) This was ignored until #13830. With that change, it now gets correctly surfaced to the user as a warning (or error with --strict-config), so we should have a test for it. --- testing/test_config.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/testing/test_config.py b/testing/test_config.py index 74bb6e7be1f..48e402746d7 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -2356,7 +2356,14 @@ def test_override_ini_without_config_file(self, pytester: Pytester) -> None: } ) result = pytester.runpytest("--override-ini", "pythonpath=src") - assert result.parseoutcomes() == {"passed": 1} + result.assert_outcomes(passed=1) + + def test_override_ini_invalid_option(self, pytester: Pytester) -> None: + result = pytester.runpytest("--override-ini", "doesnotexist=true") + result.stdout.fnmatch_lines([ + "=*= warnings summary =*=", + "*PytestConfigWarning:*Unknown config option: doesnotexist", + ]) def test_help_via_addopts(pytester: Pytester) -> None: From ded73ee1721e8361bec4b63c8656d83f06986a42 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 21 Nov 2025 23:37:06 +0100 Subject: [PATCH 072/307] Fix ruff format --- testing/test_config.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/testing/test_config.py b/testing/test_config.py index 48e402746d7..cb916a8b15a 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -2360,10 +2360,12 @@ def test_override_ini_without_config_file(self, pytester: Pytester) -> None: def test_override_ini_invalid_option(self, pytester: Pytester) -> None: result = pytester.runpytest("--override-ini", "doesnotexist=true") - result.stdout.fnmatch_lines([ - "=*= warnings summary =*=", - "*PytestConfigWarning:*Unknown config option: doesnotexist", - ]) + result.stdout.fnmatch_lines( + [ + "=*= warnings summary =*=", + "*PytestConfigWarning:*Unknown config option: doesnotexist", + ] + ) def test_help_via_addopts(pytester: Pytester) -> None: From 342dba6c9fa2262fb6baa7eee3eaa62d12cfdd88 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Sat, 22 Nov 2025 08:59:47 -0300 Subject: [PATCH 073/307] Fix quadratic-time behavior when handling `unittest` subtests in Python 3.10 (#13993) Fix #13965 Close #13970 --- changelog/13965.bugfix.rst | 1 + src/_pytest/unittest.py | 48 ++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 changelog/13965.bugfix.rst diff --git a/changelog/13965.bugfix.rst b/changelog/13965.bugfix.rst new file mode 100644 index 00000000000..b910d6c5361 --- /dev/null +++ b/changelog/13965.bugfix.rst @@ -0,0 +1 @@ +Fixed quadratic-time behavior when handling ``unittest`` subtests in Python 3.10. diff --git a/src/_pytest/unittest.py b/src/_pytest/unittest.py index 7498f1b0002..23b92724f5d 100644 --- a/src/_pytest/unittest.py +++ b/src/_pytest/unittest.py @@ -225,6 +225,10 @@ def setup(self) -> None: # A bound method to be called during teardown() if set (see 'runtest()'). self._explicit_tearDown: Callable[[], None] | None = None super().setup() + if sys.version_info < (3, 11): + # A cache of the subTest errors and non-subtest skips in self._outcome. + # Compute and cache these lists once, instead of computing them again and again for each subtest (#13965). + self._cached_errors_and_skips: tuple[list[Any], list[Any]] | None = None def teardown(self) -> None: if self._explicit_tearDown is not None: @@ -313,11 +317,7 @@ def add_skip() -> None: # We also need to check if `self.instance._outcome` is `None` (this happens if the test # class/method is decorated with `unittest.skip`, see pytest-dev/pytest-subtests#173). if sys.version_info < (3, 11) and self.instance._outcome is not None: - subtest_errors = [ - x - for x, y in self.instance._outcome.errors - if isinstance(x, _SubTest) and y is not None - ] + subtest_errors, _ = self._obtain_errors_and_skips() if len(subtest_errors) == 0: add_skip() else: @@ -443,18 +443,8 @@ def addSubTest( # For python < 3.11: add non-subtest skips once all subtest failures are processed by # `_addSubTest`. if sys.version_info < (3, 11): - from unittest.case import _SubTest # type: ignore[attr-defined] - - non_subtest_skip = [ - (x, y) - for x, y in self.instance._outcome.skipped - if not isinstance(x, _SubTest) - ] - subtest_errors = [ - (x, y) - for x, y in self.instance._outcome.errors - if isinstance(x, _SubTest) and y is not None - ] + subtest_errors, non_subtest_skip = self._obtain_errors_and_skips() + # Check if we have non-subtest skips: if there are also sub failures, non-subtest skips are not treated in # `_addSubTest` and have to be added using `add_skip` after all subtest failures are processed. if len(non_subtest_skip) > 0 and len(subtest_errors) > 0: @@ -465,6 +455,30 @@ def addSubTest( for testcase, reason in non_subtest_skip: self.addSkip(testcase, reason, handle_subtests=False) + def _obtain_errors_and_skips(self) -> tuple[list[Any], list[Any]]: + """Compute or obtain the cached values for subtest errors and non-subtest skips.""" + from unittest.case import _SubTest # type: ignore[attr-defined] + + assert sys.version_info < (3, 11), ( + "This workaround only should be used in Python 3.10" + ) + if self._cached_errors_and_skips is not None: + return self._cached_errors_and_skips + + subtest_errors = [ + (x, y) + for x, y in self.instance._outcome.errors + if isinstance(x, _SubTest) and y is not None + ] + + non_subtest_skips = [ + (x, y) + for x, y in self.instance._outcome.skipped + if not isinstance(x, _SubTest) + ] + self._cached_errors_and_skips = (subtest_errors, non_subtest_skips) + return subtest_errors, non_subtest_skips + @hookimpl(tryfirst=True) def pytest_runtest_makereport(item: Item, call: CallInfo[None]) -> None: From 9b688f08dce00097a37bde808d9dafb4038b2bfa Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 23 Nov 2025 07:02:22 +0200 Subject: [PATCH 074/307] pre-commit: fix rst-lint after new release (#13999) https://github.com/twolfson/restructuredtext-lint?tab=readme-ov-file#breaking-changes-in-200 --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b04f98c40d0..9dd76c9f816 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -94,10 +94,10 @@ repos: stages: [manual] - id: rst name: rst - entry: rst-lint --encoding utf-8 + entry: rst-lint files: ^(RELEASING.rst|README.rst|TIDELIFT.rst)$ language: python - additional_dependencies: [pygments, restructuredtext_lint] + additional_dependencies: [pygments, restructuredtext_lint>=2.0.0] - id: changelogs-rst name: changelog filenames language: fail From ee652d689feb1e889737f56fdb3585572e1f140f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 23 Nov 2025 05:15:04 +0000 Subject: [PATCH 075/307] [automated] Update plugin list (#14000) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 198 ++++++++++++++++++------------- 1 file changed, 115 insertions(+), 83 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 14171723794..99e993fa2c4 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.3 :pypi:`logassert` Simple but powerful assertion and verification of logged lines Aug 14, 2025 5 - Production/Stable pytest; extra == "dev" :pypi:`logot` Test whether your code is logging correctly 🪵 Jul 28, 2025 5 - Production/Stable pytest; extra == "pytest" - :pypi:`nuts` Network Unit Testing System May 10, 2025 N/A pytest<8,>=7 + :pypi:`nuts` Network Unit Testing System Nov 17, 2025 N/A pytest<8,>=7 :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A :pypi:`pytest-abstracts` A contextmanager pytest fixture for handling multiple mock abstracts May 25, 2022 N/A N/A :pypi:`pytest-accept` Aug 19, 2025 N/A pytest>=7 @@ -96,7 +96,7 @@ This list contains 1755 plugins. :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Nov 13, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Oct 29, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Nov 21, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -178,7 +178,7 @@ This list contains 1755 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Nov 14, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Nov 19, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -299,7 +299,7 @@ This list contains 1755 plugins. :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. May 10, 2025 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Nov 16, 2025 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -404,7 +404,7 @@ This list contains 1755 plugins. :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 - :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Nov 11, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Nov 21, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) @@ -465,7 +465,7 @@ This list contains 1755 plugins. :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 11, 2024 4 - Beta pytest>=7.2.2 :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) - :pypi:`pytest-docker-fixtures` pytest docker fixtures Jun 25, 2025 3 - Alpha pytest + :pypi:`pytest-docker-fixtures` pytest docker fixtures Nov 18, 2025 3 - Alpha pytest :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-haproxy-fixtures` Pytest fixtures for testing with haproxy. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-pexpect` pytest plugin for writing functional tests with pexpect and docker Jan 14, 2019 N/A pytest @@ -482,7 +482,7 @@ This list contains 1755 plugins. :pypi:`pytest-doctest-import` A simple pytest plugin to import names and add them to the doctest namespace. Nov 13, 2018 4 - Beta pytest (>=3.3.0) :pypi:`pytest-doctest-mkdocstrings` Run pytest --doctest-modules with markdown docstrings in code blocks (\`\`\`) Mar 02, 2024 N/A pytest :pypi:`pytest-doctest-only` A plugin to run only doctest Jul 30, 2025 4 - Beta pytest>=8.3.0 - :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Oct 18, 2025 5 - Production/Stable pytest>=4.6 + :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Nov 20, 2025 5 - Production/Stable pytest>=4.6 :pypi:`pytest-documentary` A simple pytest plugin to generate test documentation Jul 11, 2024 N/A pytest :pypi:`pytest-dogu-report` pytest plugin for dogu report Jul 07, 2023 N/A N/A :pypi:`pytest-dogu-sdk` pytest plugin for the Dogu Dec 14, 2023 N/A N/A @@ -612,6 +612,7 @@ This list contains 1755 plugins. :pypi:`pytest-fantasy` Pytest plugin for Flask Fantasy Framework Mar 14, 2019 N/A N/A :pypi:`pytest-fastapi` Dec 27, 2020 N/A N/A :pypi:`pytest-fastapi-deps` A fixture which allows easy replacement of fastapi dependencies for testing Jul 20, 2022 5 - Production/Stable pytest + :pypi:`pytest-fastcollect` A high-performance pytest plugin that replaces test collection with a Rust-based implementation Nov 19, 2025 N/A pytest>=7.0.0 :pypi:`pytest-fastest` Use SCM and coverage to run only needed tests Oct 04, 2023 4 - Beta pytest (>=4.4) :pypi:`pytest-fast-first` Pytest plugin that runs fast tests first Jan 19, 2023 3 - Alpha pytest :pypi:`pytest-faulthandler` py.test plugin that activates the fault handler module for tests (dummy package) Jul 04, 2019 6 - Mature pytest (>=5.0) @@ -718,7 +719,7 @@ This list contains 1755 plugins. :pypi:`pytest-gradescope` A pytest plugin for Gradescope integration Apr 29, 2025 N/A N/A :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A - :pypi:`pytest-greener` Pytest plugin for Greener Oct 18, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-greener` Pytest plugin for Greener Nov 18, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) @@ -744,7 +745,7 @@ This list contains 1755 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Nov 15, 2025 3 - Alpha pytest==8.4.2 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Nov 22, 2025 3 - Alpha pytest==8.4.2 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -756,11 +757,12 @@ This list contains 1755 plugins. :pypi:`pytest-html` pytest plugin for generating HTML reports Nov 07, 2023 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-html5` the best report for pytest Oct 11, 2025 N/A N/A :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 + :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 22, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. Nov 12, 2025 N/A N/A + :pypi:`pytest-html-plus` Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. Nov 22, 2025 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -784,6 +786,7 @@ This list contains 1755 plugins. :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A + :pypi:`pytest-human` A beautiful nested pytest HTML test report Nov 17, 2025 4 - Beta pytest>=8.0.0 :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 @@ -805,21 +808,21 @@ This list contains 1755 plugins. :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Oct 29, 2025 4 - Beta pytest~=8.3 + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Nov 20, 2025 4 - Beta pytest~=8.3 :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A - :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Apr 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest :pypi:`pytest-inmanta-extensions` Inmanta tests package Nov 04, 2025 5 - Production/Stable N/A - :pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Aug 26, 2025 5 - Production/Stable N/A + :pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Nov 19, 2025 5 - Production/Stable N/A :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest :pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A :pypi:`pytest-in-robotframework` The extension enables easy execution of pytest tests within the Robot Framework environment. Nov 23, 2024 N/A pytest :pypi:`pytest-insper` Pytest plugin for courses at Insper Mar 21, 2024 N/A pytest - :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Nov 12, 2025 N/A pytest>=9.0.0 + :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Nov 22, 2025 N/A pytest>=9.0.0 :pypi:`pytest-instafail` pytest plugin to show failures instantly Mar 31, 2023 4 - Beta pytest (>=5) :pypi:`pytest-instrument` pytest plugin to instrument tests Apr 05, 2020 5 - Production/Stable pytest (>=5.1.0) :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Jul 01, 2025 4 - Beta pytest>=7.4 @@ -890,7 +893,7 @@ This list contains 1755 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Nov 15, 2025 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Nov 21, 2025 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -920,7 +923,7 @@ This list contains 1755 plugins. :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) - :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 15, 2025 5 - Production/Stable pytest + :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest :pypi:`pytest-localserver` pytest plugin to test server connections locally. Oct 06, 2024 4 - Beta N/A :pypi:`pytest-localstack` Pytest plugin for AWS integration tests Jun 07, 2023 4 - Beta pytest (>=6.0.0,<7.0.0) :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) @@ -936,7 +939,7 @@ This list contains 1755 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Nov 15, 2025 5 - Production/Stable pytest==9.0.1 + :pypi:`pytest-logikal` Common testing environment Nov 16, 2025 5 - Production/Stable pytest==9.0.1 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -945,7 +948,7 @@ This list contains 1755 plugins. :pypi:`pytest-lw-realtime-result` Pytest plugin to generate realtime test results to a file Mar 13, 2025 N/A pytest>=3.5.0 :pypi:`pytest-manifest` PyTest plugin for recording and asserting against a manifest file Apr 07, 2025 N/A pytest :pypi:`pytest-manual-marker` pytest marker for marking manual tests Aug 04, 2022 3 - Alpha pytest>=7 - :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Nov 11, 2025 5 - Production/Stable pytest>=9.0.0 + :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Nov 17, 2025 5 - Production/Stable pytest~=8.4 :pypi:`pytest-mark-count` Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers Nov 13, 2024 4 - Beta pytest>=8.0.0 :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) @@ -959,7 +962,7 @@ This list contains 1755 plugins. :pypi:`pytest-marks` UNKNOWN Nov 23, 2012 3 - Alpha N/A :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Jan 28, 2025 N/A N/A :pypi:`pytest-matcher` Easy way to match captured \`pytest\` output against expectations stored in files Aug 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-matchers` Matchers for pytest Feb 11, 2025 N/A pytest<9.0,>=7.0 + :pypi:`pytest-matchers` Matchers for pytest Nov 19, 2025 N/A pytest<10.0,>=7.0 :pypi:`pytest-match-skip` Skip matching marks. Matches partial marks using wildcards. May 15, 2019 4 - Beta pytest (>=4.4.1) :pypi:`pytest-mat-report` this is report Jan 20, 2021 N/A N/A :pypi:`pytest-matrix` Provide tools for generating tests from combinations of fixtures. Jun 24, 2020 5 - Production/Stable pytest (>=5.4.3,<6.0.0) @@ -977,7 +980,7 @@ This list contains 1755 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 14, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 19, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -994,7 +997,7 @@ This list contains 1755 plugins. :pypi:`pytest-minio-mock` A pytest plugin for mocking Minio S3 interactions Aug 06, 2025 N/A pytest>=5.0.0 :pypi:`pytest-mirror` A pluggy-based pytest plugin and CLI tool for ensuring your test suite mirrors your source code structure Jul 30, 2025 4 - Beta N/A :pypi:`pytest-missing-fixtures` Pytest plugin that creates missing fixtures Oct 14, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-missing-modules` Pytest plugin to easily fake missing modules Sep 03, 2024 N/A pytest>=8.3.2 + :pypi:`pytest-missing-modules` Pytest plugin to easily fake missing modules Nov 17, 2025 N/A pytest>=8.3.2 :pypi:`pytest-mitmproxy` pytest plugin for mitmproxy tests Nov 13, 2024 N/A pytest>=7.0 :pypi:`pytest-mitmproxy-plugin` Use MITM Proxy in autotests with full control from code Apr 10, 2025 4 - Beta pytest>=7.2.0 :pypi:`pytest-ml` Test your machine learning! May 04, 2019 4 - Beta N/A @@ -1003,7 +1006,7 @@ This list contains 1755 plugins. :pypi:`pytest-mock-api` A mock API server with configurable routes and responses available as a fixture. Feb 13, 2019 1 - Planning pytest (>=4.0.0) :pypi:`pytest-mock-generator` A pytest fixture wrapper for https://pypi.org/project/mock-generator May 16, 2022 5 - Production/Stable N/A :pypi:`pytest-mock-helper` Help you mock HTTP call and generate mock code Jan 24, 2018 N/A pytest - :pypi:`pytest-mockito` Base fixtures for mockito Jul 11, 2018 4 - Beta N/A + :pypi:`pytest-mockito` Base fixtures for mockito Nov 17, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-mockredis` An in-memory mock of a Redis server that runs in a separate thread. This is to be used for unit-tests that require a Redis database. Jan 02, 2018 2 - Pre-Alpha N/A :pypi:`pytest-mock-resources` A pytest plugin for easily instantiating reproducible mock resources. Sep 17, 2025 N/A pytest>=1.0 :pypi:`pytest-mock-server` Mock server plugin for pytest Jan 09, 2022 4 - Beta pytest (>=3.5.0) @@ -1023,7 +1026,7 @@ This list contains 1755 plugins. :pypi:`pytest-monkeyplus` pytest's monkeypatch subclass with extra functionalities Sep 18, 2012 5 - Production/Stable N/A :pypi:`pytest-monkeytype` pytest-monkeytype: Generate Monkeytype annotations from your pytest tests. Jul 29, 2020 4 - Beta N/A :pypi:`pytest-moto` Fixtures for integration tests of AWS services,uses moto mocking library. Aug 28, 2015 1 - Planning N/A - :pypi:`pytest-moto-fixtures` Fixtures for testing code that interacts with AWS Feb 04, 2025 1 - Planning pytest<9,>=8.3; extra == "pytest" + :pypi:`pytest-moto-fixtures` Fixtures for testing code that interacts with AWS Nov 17, 2025 1 - Planning pytest<9.1,>=8.3; extra == "pytest" :pypi:`pytest-motor` A pytest plugin for motor, the non-blocking MongoDB driver. Jul 21, 2021 3 - Alpha pytest :pypi:`pytest-mp` A test batcher for multiprocessed Pytest runs May 23, 2018 4 - Beta pytest :pypi:`pytest-mpi` pytest plugin to collect information from tests Jan 08, 2022 3 - Alpha pytest @@ -1108,7 +1111,7 @@ This list contains 1755 plugins. :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Apr 24, 2025 N/A pytest==8.3.5 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Nov 17, 2025 N/A pytest==9.0.1 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1178,7 +1181,7 @@ This list contains 1755 plugins. :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Nov 09, 2025 N/A pytest + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Nov 17, 2025 N/A pytest :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-pogo` Pytest plugin for pogo-migrate May 05, 2025 4 - Beta pytest<9,>=7 @@ -1217,14 +1220,14 @@ This list contains 1755 plugins. :pypi:`pytest-prysk` Pytest plugin for prysk Dec 10, 2024 4 - Beta pytest>=7.3.2 :pypi:`pytest-pspec` A rspec format reporter for Python ptest Jun 02, 2020 4 - Beta pytest (>=3.0.0) :pypi:`pytest-psqlgraph` pytest plugin for testing applications that use psqlgraph Oct 19, 2021 4 - Beta pytest (>=6.0) - :pypi:`pytest-pt` pytest plugin to use \*.pt files as tests Sep 22, 2024 5 - Production/Stable pytest + :pypi:`pytest-pt` pytest plugin to use \*.pt files as tests Nov 21, 2025 5 - Production/Stable pytest :pypi:`pytest-ptera` Use ptera probes in tests Mar 01, 2022 N/A pytest (>=6.2.4,<7.0.0) :pypi:`pytest-publish` Jun 04, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-pudb` Pytest PuDB debugger integration Oct 25, 2018 3 - Alpha pytest (>=2.0) :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Nov 15, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Nov 21, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1245,12 +1248,12 @@ This list contains 1755 plugins. :pypi:`pytest-pyreport` PyReport is a lightweight reporting plugin for Pytest that provides concise HTML report May 05, 2024 N/A pytest :pypi:`pytest-pyright` Pytest plugin for type checking code with Pyright Jan 26, 2024 4 - Beta pytest >=7.0.0 :pypi:`pytest-pyspark-plugin` Pytest pyspark plugin (p3) Jul 28, 2025 4 - Beta pytest>=8.0.0 - :pypi:`pytest-pyspec` A plugin that transforms the pytest output into a result similar to the RSpec. It enables the use of docstrings to display results and also enables the use of the prefixes "describe", "with" and "it". Nov 11, 2025 5 - Production/Stable pytest<10,>=9 + :pypi:`pytest-pyspec` The pytest-pyspec plugin transforms pytest output into a beautiful, readable format similar to RSpec. It provides semantic meaning to your tests by organizing them into descriptive hierarchies, using the prefixes \`Describe\`/\`Test\`, \`With\`/\`Without\`/\`When\`, and \`test\`/\`it\`, while allowing docstrings and decorators to override the descriptions. Nov 18, 2025 5 - Production/Stable pytest<10,>=9 :pypi:`pytest-pystack` Plugin to run pystack after a timeout for a test suite. Nov 16, 2024 N/A pytest>=3.5.0 :pypi:`pytest-pytestdb` Add your description here Sep 14, 2025 N/A N/A :pypi:`pytest-pytestrail` Pytest plugin for interaction with TestRail Aug 27, 2020 4 - Beta pytest (>=3.8.0) :pypi:`pytest-pytestrail-internal` Pytest plugin for interaction with TestRail, Pytest plugin for TestRail (internal fork from: https://github.com/tolstislon/pytest-pytestrail with PR #25 fix) Jun 12, 2025 4 - Beta pytest>=3.8.0 - :pypi:`pytest-pythonhashseed` Pytest plugin to set PYTHONHASHSEED env var. Sep 28, 2025 4 - Beta pytest>=3.0.0 + :pypi:`pytest-pythonhashseed` Pytest plugin to set PYTHONHASHSEED env var. Nov 16, 2025 4 - Beta pytest>=3.0.0 :pypi:`pytest-pythonpath` pytest plugin for adding to the PYTHONPATH from command line or configs. Feb 10, 2022 5 - Production/Stable pytest (<7,>=2.5.2) :pypi:`pytest-python-test-engineer-sort` Sort plugin for Pytest May 13, 2024 N/A pytest>=6.2.0 :pypi:`pytest-pytorch` pytest plugin for a better developer experience when working with the PyTorch test suite May 25, 2021 4 - Beta pytest @@ -1305,7 +1308,7 @@ This list contains 1755 plugins. :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) - :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Jul 07, 2023 4 - Beta pytest + :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A @@ -1340,7 +1343,7 @@ This list contains 1755 plugins. :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A - :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 22, 2024 4 - Beta pytest + :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Nov 17, 2025 4 - Beta pytest :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 @@ -1401,10 +1404,10 @@ This list contains 1755 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 13, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 22, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 - :pypi:`pytest-scenarios` Add your description here Oct 29, 2025 N/A N/A + :pypi:`pytest-scenarios` Add your description here Nov 22, 2025 N/A N/A :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest Nov 14, 2025 4 - Beta pytest>=8.3.4 @@ -1414,7 +1417,7 @@ This list contains 1755 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 13, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 22, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1505,7 +1508,7 @@ This list contains 1755 plugins. :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 - :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Aug 28, 2025 N/A N/A + :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 17, 2025 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A :pypi:`pytest-sqlalchemy` pytest plugin with sqlalchemy related fixtures Apr 19, 2025 3 - Alpha pytest>=8.0 @@ -1663,7 +1666,7 @@ This list contains 1755 plugins. :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A - :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Nov 02, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Nov 20, 2025 N/A pytest<=9.0.1,>=7.4 :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A @@ -1743,6 +1746,7 @@ This list contains 1755 plugins. :pypi:`pytest-xdist-debug-for-graingert` pytest xdist plugin for distributed testing and loop-on-failing modes Jul 24, 2019 5 - Production/Stable pytest (>=4.4.0) :pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0) :pypi:`pytest-xdist-gnumake` A small example package Jun 22, 2025 N/A pytest + :pypi:`pytest-xdist-load-testing` xdist scheduler to repeately run tests Nov 22, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Jun 10, 2025 N/A pytest<9.0.0,>=8.0.0 @@ -1765,7 +1769,7 @@ This list contains 1755 plugins. :pypi:`pytest-xvfb` A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests. Mar 12, 2025 4 - Beta pytest>=2.8.1 :pypi:`pytest-xvirt` A pytest plugin to virtualize test. For example to transparently running them on a remote box. Dec 15, 2024 4 - Beta pytest>=7.2.2 :pypi:`pytest-yaml` This plugin is used to load yaml output to your test using pytest framework. Oct 05, 2018 N/A pytest - :pypi:`pytest-yaml-fei` a pytest yaml allure package Aug 03, 2025 N/A pytest + :pypi:`pytest-yaml-fei` a pytest yaml allure package Nov 21, 2025 N/A pytest :pypi:`pytest-yaml-sanmu` Pytest plugin for generating test cases with YAML. In test cases, you can use markers, fixtures, variables, and even call Python functions. Sep 16, 2025 N/A pytest>=8.2.2 :pypi:`pytest-yamltree` Create or check file/directory trees described by YAML Mar 02, 2020 4 - Beta pytest (>=3.1.1) :pypi:`pytest-yamlwsgi` Run tests against wsgi apps defined in yaml May 11, 2010 N/A N/A @@ -1816,7 +1820,7 @@ This list contains 1755 plugins. Test whether your code is logging correctly 🪵 :pypi:`nuts` - *last release*: May 10, 2025, + *last release*: Nov 17, 2025, *status*: N/A, *requires*: pytest<8,>=7 @@ -2229,7 +2233,7 @@ This list contains 1755 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Oct 29, 2025, + *last release*: Nov 21, 2025, *status*: N/A, *requires*: pytest==7.2.2 @@ -2803,7 +2807,7 @@ This list contains 1755 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Nov 14, 2025, + *last release*: Nov 19, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -3650,7 +3654,7 @@ This list contains 1755 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: May 10, 2025, + *last release*: Nov 16, 2025, *status*: 4 - Beta, *requires*: pytest @@ -4385,7 +4389,7 @@ This list contains 1755 plugins. A 'defer' fixture for pytest :pypi:`pytest-delta` - *last release*: Nov 11, 2025, + *last release*: Nov 21, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -4812,7 +4816,7 @@ This list contains 1755 plugins. A plugin to use docker databases for pytests :pypi:`pytest-docker-fixtures` - *last release*: Jun 25, 2025, + *last release*: Nov 18, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -4931,7 +4935,7 @@ This list contains 1755 plugins. A plugin to run only doctest :pypi:`pytest-doctestplus` - *last release*: Oct 18, 2025, + *last release*: Nov 20, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=4.6 @@ -5840,6 +5844,13 @@ This list contains 1755 plugins. A fixture which allows easy replacement of fastapi dependencies for testing + :pypi:`pytest-fastcollect` + *last release*: Nov 19, 2025, + *status*: N/A, + *requires*: pytest>=7.0.0 + + A high-performance pytest plugin that replaces test collection with a Rust-based implementation + :pypi:`pytest-fastest` *last release*: Oct 04, 2023, *status*: 4 - Beta, @@ -6583,7 +6594,7 @@ This list contains 1755 plugins. Green progress dots :pypi:`pytest-greener` - *last release*: Oct 18, 2025, + *last release*: Nov 18, 2025, *status*: N/A, *requires*: pytest<9.0.0,>=8.3.3 @@ -6765,7 +6776,7 @@ This list contains 1755 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Nov 15, 2025, + *last release*: Nov 22, 2025, *status*: 3 - Alpha, *requires*: pytest==8.4.2 @@ -6848,6 +6859,13 @@ This list contains 1755 plugins. pytest plugin for generating HTML reports + :pypi:`pytest-html-dashboard` + *last release*: Nov 22, 2025, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights + :pypi:`pytest-html-lee` *last release*: Jun 30, 2020, *status*: 5 - Production/Stable, @@ -6877,7 +6895,7 @@ This list contains 1755 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Nov 12, 2025, + *last release*: Nov 22, 2025, *status*: N/A, *requires*: N/A @@ -7044,6 +7062,13 @@ This list contains 1755 plugins. Visualise PyTest status via your Phillips Hue lights + :pypi:`pytest-human` + *last release*: Nov 17, 2025, + *status*: 4 - Beta, + *requires*: pytest>=8.0.0 + + A beautiful nested pytest HTML test report + :pypi:`pytest-hylang` *last release*: Mar 28, 2021, *status*: N/A, @@ -7192,7 +7217,7 @@ This list contains 1755 plugins. display more node ininformation. :pypi:`pytest-infrahouse` - *last release*: Oct 29, 2025, + *last release*: Nov 20, 2025, *status*: 4 - Beta, *requires*: pytest~=8.3 @@ -7234,7 +7259,7 @@ This list contains 1755 plugins. inline-snapshot is the package you are looking for :pypi:`pytest-inmanta` - *last release*: Apr 09, 2025, + *last release*: Nov 18, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -7248,7 +7273,7 @@ This list contains 1755 plugins. Inmanta tests package :pypi:`pytest-inmanta-lsm` - *last release*: Aug 26, 2025, + *last release*: Nov 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -7290,7 +7315,7 @@ This list contains 1755 plugins. Pytest plugin for courses at Insper :pypi:`pytest-insta` - *last release*: Nov 12, 2025, + *last release*: Nov 22, 2025, *status*: N/A, *requires*: pytest>=9.0.0 @@ -7787,7 +7812,7 @@ This list contains 1755 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Nov 15, 2025, + *last release*: Nov 21, 2025, *status*: 4 - Beta, *requires*: N/A @@ -7997,7 +8022,7 @@ This list contains 1755 plugins. Generate local badges (shields) reporting your test suite status. :pypi:`pytest-localftpserver` - *last release*: Nov 15, 2025, + *last release*: Nov 16, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -8109,7 +8134,7 @@ This list contains 1755 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Nov 15, 2025, + *last release*: Nov 16, 2025, *status*: 5 - Production/Stable, *requires*: pytest==9.0.1 @@ -8172,9 +8197,9 @@ This list contains 1755 plugins. pytest marker for marking manual tests :pypi:`pytest-mark-ac` - *last release*: Nov 11, 2025, + *last release*: Nov 17, 2025, *status*: 5 - Production/Stable, - *requires*: pytest>=9.0.0 + *requires*: pytest~=8.4 Provides a marker to reference acceptance criteria from PyTest tests through annotations @@ -8270,9 +8295,9 @@ This list contains 1755 plugins. Easy way to match captured \`pytest\` output against expectations stored in files :pypi:`pytest-matchers` - *last release*: Feb 11, 2025, + *last release*: Nov 19, 2025, *status*: N/A, - *requires*: pytest<9.0,>=7.0 + *requires*: pytest<10.0,>=7.0 Matchers for pytest @@ -8396,7 +8421,7 @@ This list contains 1755 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Nov 14, 2025, + *last release*: Nov 19, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -8515,7 +8540,7 @@ This list contains 1755 plugins. Pytest plugin that creates missing fixtures :pypi:`pytest-missing-modules` - *last release*: Sep 03, 2024, + *last release*: Nov 17, 2025, *status*: N/A, *requires*: pytest>=8.3.2 @@ -8578,9 +8603,9 @@ This list contains 1755 plugins. Help you mock HTTP call and generate mock code :pypi:`pytest-mockito` - *last release*: Jul 11, 2018, - *status*: 4 - Beta, - *requires*: N/A + *last release*: Nov 17, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest>=6 Base fixtures for mockito @@ -8718,9 +8743,9 @@ This list contains 1755 plugins. Fixtures for integration tests of AWS services,uses moto mocking library. :pypi:`pytest-moto-fixtures` - *last release*: Feb 04, 2025, + *last release*: Nov 17, 2025, *status*: 1 - Planning, - *requires*: pytest<9,>=8.3; extra == "pytest" + *requires*: pytest<9.1,>=8.3; extra == "pytest" Fixtures for testing code that interacts with AWS @@ -9313,9 +9338,9 @@ This list contains 1755 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Apr 24, 2025, + *last release*: Nov 17, 2025, *status*: N/A, - *requires*: pytest==8.3.5 + *requires*: pytest==9.0.1 OpenTelemetry plugin for Pytest @@ -9803,7 +9828,7 @@ This list contains 1755 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Nov 09, 2025, + *last release*: Nov 17, 2025, *status*: N/A, *requires*: pytest @@ -10076,7 +10101,7 @@ This list contains 1755 plugins. pytest plugin for testing applications that use psqlgraph :pypi:`pytest-pt` - *last release*: Sep 22, 2024, + *last release*: Nov 21, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -10125,7 +10150,7 @@ This list contains 1755 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Nov 15, 2025, + *last release*: Nov 21, 2025, *status*: N/A, *requires*: pytest==8.4.2 @@ -10272,11 +10297,11 @@ This list contains 1755 plugins. Pytest pyspark plugin (p3) :pypi:`pytest-pyspec` - *last release*: Nov 11, 2025, + *last release*: Nov 18, 2025, *status*: 5 - Production/Stable, *requires*: pytest<10,>=9 - A plugin that transforms the pytest output into a result similar to the RSpec. It enables the use of docstrings to display results and also enables the use of the prefixes "describe", "with" and "it". + The pytest-pyspec plugin transforms pytest output into a beautiful, readable format similar to RSpec. It provides semantic meaning to your tests by organizing them into descriptive hierarchies, using the prefixes \`Describe\`/\`Test\`, \`With\`/\`Without\`/\`When\`, and \`test\`/\`it\`, while allowing docstrings and decorators to override the descriptions. :pypi:`pytest-pystack` *last release*: Nov 16, 2024, @@ -10307,7 +10332,7 @@ This list contains 1755 plugins. Pytest plugin for interaction with TestRail, Pytest plugin for TestRail (internal fork from: https://github.com/tolstislon/pytest-pytestrail with PR #25 fix) :pypi:`pytest-pythonhashseed` - *last release*: Sep 28, 2025, + *last release*: Nov 16, 2025, *status*: 4 - Beta, *requires*: pytest>=3.0.0 @@ -10692,7 +10717,7 @@ This list contains 1755 plugins. Pytest plugin for capturing and mocking connection requests. :pypi:`pytest-remove-stale-bytecode` - *last release*: Jul 07, 2023, + *last release*: Nov 19, 2025, *status*: 4 - Beta, *requires*: pytest @@ -10937,7 +10962,7 @@ This list contains 1755 plugins. pytest plugin to re-run tests to eliminate flaky failures :pypi:`pytest-reserial` - *last release*: Dec 22, 2024, + *last release*: Nov 17, 2025, *status*: 4 - Beta, *requires*: pytest @@ -11364,7 +11389,7 @@ This list contains 1755 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Nov 13, 2025, + *last release*: Nov 22, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11385,7 +11410,7 @@ This list contains 1755 plugins. A pytest plugin that generates unit test scenarios from data files. :pypi:`pytest-scenarios` - *last release*: Oct 29, 2025, + *last release*: Nov 22, 2025, *status*: N/A, *requires*: N/A @@ -11455,7 +11480,7 @@ This list contains 1755 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Nov 13, 2025, + *last release*: Nov 22, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -12092,7 +12117,7 @@ This list contains 1755 plugins. A Dynamic test tool for Splunk Apps and Add-ons :pypi:`pytest-splunk-addon-ui-smartx` - *last release*: Aug 28, 2025, + *last release*: Nov 17, 2025, *status*: N/A, *requires*: N/A @@ -13198,9 +13223,9 @@ This list contains 1755 plugins. Text User Interface (TUI) and HTML report for Pytest test runs :pypi:`pytest-tui-runner` - *last release*: Nov 02, 2025, + *last release*: Nov 20, 2025, *status*: N/A, - *requires*: pytest>=8.3.5 + *requires*: pytest<=9.0.1,>=7.4 Textual-based terminal UI for running pytest tests @@ -13757,6 +13782,13 @@ This list contains 1755 plugins. A small example package + :pypi:`pytest-xdist-load-testing` + *last release*: Nov 22, 2025, + *status*: 4 - Beta, + *requires*: pytest>=8.4.2 + + xdist scheduler to repeately run tests + :pypi:`pytest-xdist-tracker` *last release*: Nov 18, 2021, *status*: 3 - Alpha, @@ -13912,7 +13944,7 @@ This list contains 1755 plugins. This plugin is used to load yaml output to your test using pytest framework. :pypi:`pytest-yaml-fei` - *last release*: Aug 03, 2025, + *last release*: Nov 21, 2025, *status*: N/A, *requires*: pytest From 94f4922d9a73236d88d637e71316ceb446695158 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 22:17:22 +0000 Subject: [PATCH 076/307] [pre-commit.ci] pre-commit autoupdate (#14002) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.5 → v0.14.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.5...v0.14.6) - [github.com/asottile/pyupgrade: v3.21.1 → v3.21.2](https://github.com/asottile/pyupgrade/compare/v3.21.1...v3.21.2) Co-authored-by: Pierre Sassoulas --- .pre-commit-config.yaml | 4 ++-- src/_pytest/subtests.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9dd76c9f816..6b70abd2985 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.5" + rev: "v0.14.6" hooks: - id: ruff-check args: ["--fix"] @@ -74,7 +74,7 @@ repos: # https://pyproject-fmt.readthedocs.io/en/latest/#calculating-max-supported-python-version additional_dependencies: ["tox>=4.9"] - repo: https://github.com/asottile/pyupgrade - rev: v3.21.1 + rev: v3.21.2 hooks: - id: pyupgrade args: diff --git a/src/_pytest/subtests.py b/src/_pytest/subtests.py index e0ceb27f4b1..a96b11f1fe4 100644 --- a/src/_pytest/subtests.py +++ b/src/_pytest/subtests.py @@ -353,7 +353,7 @@ def pytest_report_from_serializable(data: dict[str, Any]) -> SubtestReport | Non def pytest_configure(config: Config) -> None: - config.stash[failed_subtests_key] = defaultdict(lambda: 0) + config.stash[failed_subtests_key] = defaultdict(int) @hookimpl(tryfirst=True) From 93db6d1a8e38636d3111fce9e9affe6c2053c817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=87=BA=F0=9F=87=A6=20Sviatoslav=20Sydorenko=20=28?= =?UTF-8?q?=D0=A1=D0=B2=D1=8F=D1=82=D0=BE=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A1?= =?UTF-8?q?=D0=B8=D0=B4=D0=BE=D1=80=D0=B5=D0=BD=D0=BA=D0=BE=29?= Date: Wed, 26 Nov 2025 15:41:16 +0100 Subject: [PATCH 077/307] Drop an accidental backtick from the plugin list doc template --- scripts/update-plugin-list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/update-plugin-list.py b/scripts/update-plugin-list.py index 61debb44043..be57d436966 100644 --- a/scripts/update-plugin-list.py +++ b/scripts/update-plugin-list.py @@ -30,7 +30,7 @@ Pytest Plugin List ================== -Below is an automated compilation of ``pytest``` plugins available on `PyPI `_. +Below is an automated compilation of ``pytest`` plugins available on `PyPI `_. It includes PyPI projects whose names begin with ``pytest-`` or ``pytest_`` and a handful of manually selected projects. Packages classified as inactive are excluded. From 3e75c0a2c1b785651b12bd22f8d1bbc2bfbd6cfa Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Wed, 26 Nov 2025 15:05:38 +0000 Subject: [PATCH 078/307] Fix docs typo (#14005) "there may files" should be "there may be files" --- doc/en/example/pythoncollection.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index eba40d50d1b..f422e51ab76 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -231,7 +231,7 @@ You can easily instruct ``pytest`` to discover tests from every Python file: python_files = ["*.py"] However, many projects will have a ``setup.py`` which they don't want to be -imported. Moreover, there may files only importable by a specific python +imported. Moreover, there may be files only importable by a specific python version. For such cases you can dynamically define files to be ignored by listing them in a ``conftest.py`` file: From 922b60377a38238b282c062e9589fdbe7eac1804 Mon Sep 17 00:00:00 2001 From: Fazeel Usmani Date: Thu, 27 Nov 2025 02:43:00 +0530 Subject: [PATCH 079/307] Add CLI options reference documentation (#13930) Co-authored-by: Ran Benita --- changelog/4492.doc.rst | 1 + doc/en/backwards-compatibility.rst | 2 +- doc/en/builtin.rst | 6 +- doc/en/example/markers.rst | 10 +- doc/en/example/parametrize.rst | 4 +- doc/en/example/pythoncollection.rst | 14 +- doc/en/example/simple.rst | 6 +- doc/en/explanation/goodpractices.rst | 4 +- doc/en/explanation/pythonpath.rst | 4 +- doc/en/getting-started.rst | 2 +- doc/en/how-to/assert.rst | 2 +- doc/en/how-to/cache.rst | 22 +- doc/en/how-to/capture-stdout-stderr.rst | 8 +- doc/en/how-to/capture-warnings.rst | 2 +- doc/en/how-to/doctest.rst | 4 +- doc/en/how-to/failures.rst | 4 +- doc/en/how-to/fixtures.rst | 4 +- doc/en/how-to/logging.rst | 26 +- doc/en/how-to/mark.rst | 2 +- doc/en/how-to/monkeypatch.rst | 2 +- doc/en/how-to/output.rst | 16 +- doc/en/how-to/plugins.rst | 4 +- doc/en/how-to/skipping.rst | 4 +- doc/en/how-to/subtests.rst | 4 +- doc/en/how-to/tmp_path.rst | 8 +- doc/en/how-to/unittest.rst | 2 +- doc/en/how-to/usage.rst | 6 +- doc/en/how-to/writing_plugins.rst | 2 +- doc/en/reference/customize.rst | 4 +- doc/en/reference/fixtures.rst | 10 +- doc/en/reference/reference.rst | 591 +++++++++++++++++++++++- 31 files changed, 675 insertions(+), 105 deletions(-) create mode 100644 changelog/4492.doc.rst diff --git a/changelog/4492.doc.rst b/changelog/4492.doc.rst new file mode 100644 index 00000000000..811994afb5c --- /dev/null +++ b/changelog/4492.doc.rst @@ -0,0 +1 @@ +The API Reference now contains cross-reference-able documentation of :ref:`pytest's command-line flags `. diff --git a/doc/en/backwards-compatibility.rst b/doc/en/backwards-compatibility.rst index 82f678b4dea..d79d112df2d 100644 --- a/doc/en/backwards-compatibility.rst +++ b/doc/en/backwards-compatibility.rst @@ -60,7 +60,7 @@ Keeping backwards compatibility has a very high priority in the pytest project. With the pytest 3.0 release, we introduced a clear communication scheme for when we will actually remove the old busted joint and politely ask you to use the new hotness instead, while giving you enough time to adjust your tests or raise concerns if there are valid reasons to keep deprecated functionality around. -To communicate changes, we issue deprecation warnings using a custom warning hierarchy (see :ref:`internal-warnings`). These warnings may be suppressed using the standard means: ``-W`` command-line flag or ``filterwarnings`` ini options (see :ref:`warnings`), but we suggest to use these sparingly and temporarily, and heed the warnings when possible. +To communicate changes, we issue deprecation warnings using a custom warning hierarchy (see :ref:`internal-warnings`). These warnings may be suppressed using the standard means: :option:`-W` command-line flag or :confval:`filterwarnings` configuration option (see :ref:`warnings`), but we suggest to use these sparingly and temporarily, and heed the warnings when possible. We will only start the removal of deprecated functionality in major releases (e.g. if we deprecate something in 3.0, we will start to remove it in 4.0), and keep it around for at least two minor releases (e.g. if we deprecate something in 3.9 and 4.0 is the next release, we start to remove it in 5.0, not in 4.0). diff --git a/doc/en/builtin.rst b/doc/en/builtin.rst index 5b66626fd20..1a8d32effee 100644 --- a/doc/en/builtin.rst +++ b/doc/en/builtin.rst @@ -12,7 +12,7 @@ For information on plugin hooks and objects, see :ref:`plugins`. For information on the ``pytest.mark`` mechanism, see :ref:`mark`. -For information about fixtures, see :ref:`fixtures`. To see a complete list of available fixtures (add ``-v`` to also see fixtures with leading ``_``), type : +For information about fixtures, see :ref:`fixtures`. To see a complete list of available fixtures (add :option:`-v` to also see fixtures with leading ``_``), type : .. code-block:: pytest @@ -53,7 +53,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a capteesys -- .../_pytest/capture.py:1028 Enable simultaneous text capturing and pass-through of writes - to ``sys.stdout`` and ``sys.stderr`` as defined by ``--capture=``. + to ``sys.stdout`` and ``sys.stderr`` as defined by :option:`--capture`. The captured output is made available via ``capteesys.readouterr()`` method @@ -61,7 +61,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a ``out`` and ``err`` will be ``text`` objects. The output is also passed-through, allowing it to be "live-printed", - reported, or both as defined by ``--capture=``. + reported, or both as defined by :option:`--capture`. Returns an instance of :class:`CaptureFixture[str] `. diff --git a/doc/en/example/markers.rst b/doc/en/example/markers.rst index cbe417e8a3e..4f6738207e1 100644 --- a/doc/en/example/markers.rst +++ b/doc/en/example/markers.rst @@ -167,9 +167,9 @@ Using ``-k expr`` to select tests based on their name .. versionadded:: 2.0/2.3.4 -You can use the ``-k`` command line option to specify an expression +You can use the :option:`-k` command line option to specify an expression which implements a substring match on the test names instead of the -exact match on markers that ``-m`` provides. This makes it easy to +exact match on markers that :option:`-m` provides. This makes it easy to select tests based on their names: .. versionchanged:: 5.4 @@ -225,7 +225,7 @@ Or to select "http" and "quick" tests: You can use ``and``, ``or``, ``not`` and parentheses. -In addition to the test's name, ``-k`` also matches the names of the test's parents (usually, the name of the file and class it's in), +In addition to the test's name, :option:`-k` also matches the names of the test's parents (usually, the name of the file and class it's in), attributes set on the test function, markers applied to it or its parents and any :attr:`extra keywords <_pytest.nodes.Node.extra_keyword_matches>` explicitly added to it or its parents. @@ -440,7 +440,7 @@ and here is one that specifies exactly the environment needed: ============================ 1 passed in 0.12s ============================= -The ``--markers`` option always gives you a list of available markers: +The :option:`--markers` option always gives you a list of available markers: .. code-block:: pytest @@ -658,7 +658,7 @@ Automatically adding markers based on test names If you have a test suite where test function names indicate a certain type of test, you can implement a hook that automatically defines -markers so that you can use the ``-m`` option with it. Let's look +markers so that you can use the :option:`-m` option with it. Let's look at this test module: .. code-block:: python diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index 1cbeee27aad..40b63b28ec6 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -83,9 +83,9 @@ Different options for test IDs ------------------------------------ pytest will build a string that is the test ID for each set of values in a -parametrized test. These IDs can be used with ``-k`` to select specific cases +parametrized test. These IDs can be used with :option:`-k` to select specific cases to run, and they will also identify the specific case when one is failing. -Running pytest with ``--collect-only`` will show the generated IDs. +Running pytest with :option:`--collect-only` will show the generated IDs. Numbers, strings, booleans and None will have their usual string representation used in the test ID. For other objects, pytest will make a string based on diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index f422e51ab76..ff694f746d7 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -5,7 +5,7 @@ Ignore paths during test collection ----------------------------------- You can easily ignore certain test directories and modules during collection -by passing the ``--ignore=path`` option on the cli. ``pytest`` allows multiple +by passing the :option:`--ignore=path` option on the cli. ``pytest`` allows multiple ``--ignore`` options. Example: .. code-block:: text @@ -43,16 +43,16 @@ you will see that ``pytest`` only collects test-modules, which do not match the ========================= 5 passed in 0.02 seconds ========================= -The ``--ignore-glob`` option allows to ignore test file paths based on Unix shell-style wildcards. -If you want to exclude test-modules that end with ``_01.py``, execute ``pytest`` with ``--ignore-glob='*_01.py'``. +The :option:`--ignore-glob` option allows to ignore test file paths based on Unix shell-style wildcards. +If you want to exclude test-modules that end with ``_01.py``, execute ``pytest`` with :option:`--ignore-glob='*_01.py'`. Deselect tests during test collection ------------------------------------- -Tests can individually be deselected during collection by passing the ``--deselect=item`` option. +Tests can individually be deselected during collection by passing the :option:`--deselect=item` option. For example, say ``tests/foobar/test_foobar_01.py`` contains ``test_a`` and ``test_b``. You can run all of the tests within ``tests/`` *except* for ``tests/foobar/test_foobar_01.py::test_a`` -by invoking ``pytest`` with ``--deselect tests/foobar/test_foobar_01.py::test_a``. +by invoking ``pytest`` with ``--deselect=tests/foobar/test_foobar_01.py::test_a``. ``pytest`` allows multiple ``--deselect`` options. .. _duplicate-paths: @@ -73,7 +73,7 @@ Example: Just collect tests once. -To collect duplicate tests, use the ``--keep-duplicates`` option on the cli. +To collect duplicate tests, use the :option:`--keep-duplicates` option on the cli. Example: .. code-block:: pytest @@ -168,7 +168,7 @@ You can check for multiple glob patterns by adding a space between the patterns: Interpreting cmdline arguments as Python packages ----------------------------------------------------- -You can use the ``--pyargs`` option to make ``pytest`` try +You can use the :option:`--pyargs` option to make ``pytest`` try interpreting arguments as python package names, deriving their file system path and then running the test. For example if you have unittest2 installed you can type: diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index 09335153ad1..8b35f0ebca5 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -43,7 +43,7 @@ The actual command line executed is: pytest -ra -q -v -m slow Note that as usual for other command-line applications, in case of conflicting options the last one wins, so the example -above will show verbose output because ``-v`` overwrites ``-q``. +above will show verbose output because :option:`-v` overwrites :option:`-q`. .. _request example: @@ -353,7 +353,7 @@ Example: The ``__tracebackhide__`` setting influences ``pytest`` showing of tracebacks: the ``checkconfig`` function will not be shown -unless the ``--full-trace`` command line option is specified. +unless the :option:`--full-trace` command line option is specified. Let's run our little function: .. code-block:: pytest @@ -998,7 +998,7 @@ information. Sometimes a test session might get stuck and there might be no easy way to figure out -which test got stuck, for example if pytest was run in quiet mode (``-q``) or you don't have access to the console +which test got stuck, for example if pytest was run in quiet mode (:option:`-q`) or you don't have access to the console output. This is particularly a problem if the problem happens only sporadically, the famous "flaky" kind of tests. ``pytest`` sets the :envvar:`PYTEST_CURRENT_TEST` environment variable when running tests, which can be inspected diff --git a/doc/en/explanation/goodpractices.rst b/doc/en/explanation/goodpractices.rst index 4920309b9d6..bbc64ec662d 100644 --- a/doc/en/explanation/goodpractices.rst +++ b/doc/en/explanation/goodpractices.rst @@ -170,7 +170,7 @@ want to distribute them along with your application: test_view.py ... -In this scheme, it is easy to run your tests using the ``--pyargs`` option: +In this scheme, it is easy to run your tests using the :option:`--pyargs` option: .. code-block:: bash @@ -217,7 +217,7 @@ Note that this layout also works in conjunction with the ``src`` layout mentione from each other and thus deriving a canonical import name helps to avoid surprises such as a test module getting imported twice. - With ``--import-mode=importlib`` things are less convoluted because + With :option:`--import-mode=importlib` things are less convoluted because pytest doesn't need to change ``sys.path``, making things much less surprising. diff --git a/doc/en/explanation/pythonpath.rst b/doc/en/explanation/pythonpath.rst index ddcbd304f89..cb3ae67216a 100644 --- a/doc/en/explanation/pythonpath.rst +++ b/doc/en/explanation/pythonpath.rst @@ -11,7 +11,7 @@ Import modes pytest as a testing framework needs to import test modules and ``conftest.py`` files for execution. Importing files in Python is a non-trivial process, so aspects of the -import process can be controlled through the ``--import-mode`` command-line flag, which can assume +import process can be controlled through the :option:`--import-mode` command-line flag, which can assume these values: .. _`import-mode-prepend`: @@ -44,7 +44,7 @@ these values: pkg_under_test/ the tests will run against the installed version - of ``pkg_under_test`` when ``--import-mode=append`` is used whereas + of ``pkg_under_test`` when :option:`--import-mode=append` is used whereas with ``prepend``, they would pick up the local version. This kind of confusion is why we advocate for using :ref:`src-layouts `. diff --git a/doc/en/getting-started.rst b/doc/en/getting-started.rst index e1932d96ef9..7365dcdc491 100644 --- a/doc/en/getting-started.rst +++ b/doc/en/getting-started.rst @@ -262,7 +262,7 @@ Find out what kind of builtin :ref:`pytest fixtures ` exist with the c pytest --fixtures # shows builtin and custom fixtures -Note that this command omits fixtures with leading ``_`` unless the ``-v`` option is added. +Note that this command omits fixtures with leading ``_`` unless the :option:`-v` option is added. Continue reading ------------------------------------- diff --git a/doc/en/how-to/assert.rst b/doc/en/how-to/assert.rst index a1fce9f8b90..4ef2664b1d5 100644 --- a/doc/en/how-to/assert.rst +++ b/doc/en/how-to/assert.rst @@ -599,4 +599,4 @@ If this is the case you have two options: * Disable rewriting for a specific module by adding the string ``PYTEST_DONT_REWRITE`` to its docstring. -* Disable rewriting for all modules by using ``--assert=plain``. +* Disable rewriting for all modules by using :option:`--assert=plain`. diff --git a/doc/en/how-to/cache.rst b/doc/en/how-to/cache.rst index bfc1902cae0..4271ab469dc 100644 --- a/doc/en/how-to/cache.rst +++ b/doc/en/how-to/cache.rst @@ -13,11 +13,11 @@ Usage The plugin provides two command line options to rerun failures from the last ``pytest`` invocation: -* ``--lf``, ``--last-failed`` - to only re-run the failures. -* ``--ff``, ``--failed-first`` - to run the failures first and then the rest of +* :option:`--lf, --last-failed <--lf>` - to only re-run the failures. +* :option:`--ff, --failed-first <--ff>` - to run the failures first and then the rest of the tests. -For cleanup (usually not needed), a ``--cache-clear`` option allows to remove +For cleanup (usually not needed), a :option:`--cache-clear` option allows to remove all cross-session cache contents ahead of a test run. Other plugins may access the `config.cache`_ object to set/get @@ -80,7 +80,7 @@ If you run this for the first time you will see two failures: FAILED test_50.py::test_num[25] - Failed: bad luck 2 failed, 48 passed in 0.12s -If you then run it with ``--lf``: +If you then run it with :option:`--lf`: .. code-block:: pytest @@ -124,7 +124,7 @@ If you then run it with ``--lf``: You have run only the two failing tests from the last run, while the 48 passing tests have not been run ("deselected"). -Now, if you run with the ``--ff`` option, all tests will be run but the first +Now, if you run with the :option:`--ff` option, all tests will be run but the first previous failures will be executed first (as can be seen from the series of ``FF`` and dots): @@ -169,14 +169,14 @@ of ``FF`` and dots): .. _`config.cache`: -New ``--nf``, ``--new-first`` options: run new tests first followed by the rest +New :option:`--nf, --new-first <--nf>` option: run new tests first followed by the rest of the tests, in both cases tests are also sorted by the file modified time, with more recent files coming first. Behavior when no tests failed in the last run --------------------------------------------- -The ``--lfnf/--last-failed-no-failures`` option governs the behavior of ``--last-failed``. +The :option:`--lfnf, --last-failed-no-failures <--lfnf>` option governs the behavior of :option:`--last-failed`. Determines whether to execute tests when there are no previously (known) failures or when no cached ``lastfailed`` data was found. @@ -275,7 +275,7 @@ Inspecting Cache content ------------------------ You can always peek at the content of the cache using the -``--cache-show`` command line option: +:option:`--cache-show` command line option: .. code-block:: pytest @@ -294,7 +294,7 @@ You can always peek at the content of the cache using the ========================== no tests ran in 0.12s =========================== -``--cache-show`` takes an optional argument to specify a glob pattern for +:option:`--cache-show` takes an optional argument to specify a glob pattern for filtering: .. code-block:: pytest @@ -314,7 +314,7 @@ Clearing Cache content ---------------------- You can instruct pytest to clear all cache files and values -by adding the ``--cache-clear`` option like this: +by adding the :option:`--cache-clear` option like this: .. code-block:: bash @@ -330,4 +330,4 @@ than speed. Stepwise -------- -As an alternative to ``--lf -x``, especially for cases where you expect a large part of the test suite will fail, ``--sw``, ``--stepwise`` allows you to fix them one at a time. The test suite will run until the first failure and then stop. At the next invocation, tests will continue from the last failing test and then run until the next failing test. You may use the ``--stepwise-skip`` option to ignore one failing test and stop the test execution on the second failing test instead. This is useful if you get stuck on a failing test and just want to ignore it until later. Providing ``--stepwise-skip`` will also enable ``--stepwise`` implicitly. +As an alternative to :option:`--lf` :option:`-x`, especially for cases where you expect a large part of the test suite will fail, :option:`--sw, --stepwise <--sw>` allows you to fix them one at a time. The test suite will run until the first failure and then stop. At the next invocation, tests will continue from the last failing test and then run until the next failing test. You may use the :option:`--stepwise-skip` option to ignore one failing test and stop the test execution on the second failing test instead. This is useful if you get stuck on a failing test and just want to ignore it until later. Providing ``--stepwise-skip`` will also enable ``--stepwise`` implicitly. diff --git a/doc/en/how-to/capture-stdout-stderr.rst b/doc/en/how-to/capture-stdout-stderr.rst index cd5cb6d798f..14807b9b777 100644 --- a/doc/en/how-to/capture-stdout-stderr.rst +++ b/doc/en/how-to/capture-stdout-stderr.rst @@ -4,19 +4,19 @@ How to capture stdout/stderr output ========================================================= -Pytest intercepts stdout and stderr as configured by the ``--capture=`` +Pytest intercepts stdout and stderr as configured by the :option:`--capture=` command-line argument or by using fixtures. The ``--capture=`` flag configures reporting, whereas the fixtures offer more granular control and allows inspection of output during testing. The reports can be customized with the -`-r flag <../reference/reference.html#command-line-flags>`_. +:option:`-r` flag. Default stdout/stderr/stdin capturing behaviour --------------------------------------------------------- During test execution any output sent to ``stdout`` and ``stderr`` is captured. If a test or a setup method fails its according captured -output will usually be shown along with the failure traceback. (this -behavior can be configured by the ``--show-capture`` command-line option). +output will usually be shown along with the failure traceback. (This +behavior can be configured by the :option:`--show-capture` command-line option). In addition, ``stdin`` is set to a "null" object which will fail on attempts to read from it because it is rarely desired diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index fd84e3b54e4..ebf65ffd8c4 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -198,7 +198,7 @@ decorator or to all tests in a module by setting the :globalvar:`pytestmark` var Disabling warnings summary -------------------------- -Although not recommended, you can use the ``--disable-warnings`` command-line option to suppress the +Although not recommended, you can use the :option:`--disable-warnings` command-line option to suppress the warning summary entirely from the test run output. Disabling warning capture entirely diff --git a/doc/en/how-to/doctest.rst b/doc/en/how-to/doctest.rst index de6679bc452..433b35b61ce 100644 --- a/doc/en/how-to/doctest.rst +++ b/doc/en/how-to/doctest.rst @@ -11,7 +11,7 @@ can change the pattern by issuing: pytest --doctest-glob="*.rst" -on the command line. ``--doctest-glob`` can be given multiple times in the command-line. +on the command line. :option:`--doctest-glob` can be given multiple times in the command-line. If you then have a text file like this: @@ -39,7 +39,7 @@ then you can just invoke ``pytest`` directly: ============================ 1 passed in 0.12s ============================= By default, pytest will collect ``test*.txt`` files looking for doctest directives, but you -can pass additional globs using the ``--doctest-glob`` option (multi-allowed). +can pass additional globs using the :option:`--doctest-glob` option (multi-allowed). In addition to text files, you can also execute doctests directly from docstrings of your classes and functions, including from test modules: diff --git a/doc/en/how-to/failures.rst b/doc/en/how-to/failures.rst index 0c45cd7b118..878c869d525 100644 --- a/doc/en/how-to/failures.rst +++ b/doc/en/how-to/failures.rst @@ -93,8 +93,8 @@ Pytest supports the use of ``breakpoint()`` with the following behaviours: - When ``breakpoint()`` is called and ``PYTHONBREAKPOINT`` is set to the default value, pytest will use the custom internal PDB trace UI instead of the system default ``Pdb``. - When tests are complete, the system will default back to the system ``Pdb`` trace UI. - - With ``--pdb`` passed to pytest, the custom internal Pdb trace UI is used with both ``breakpoint()`` and failed tests/unhandled exceptions. - - ``--pdbcls`` can be used to specify a custom debugger class. + - With :option:`--pdb` passed to pytest, the custom internal Pdb trace UI is used with both ``breakpoint()`` and failed tests/unhandled exceptions. + - :option:`--pdbcls` can be used to specify a custom debugger class. .. _faulthandler: diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 40e13e2afa8..b15b3a5497b 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1368,9 +1368,9 @@ different server string is expected than what arrived. pytest will build a string that is the test ID for each fixture value in a parametrized fixture, e.g. ``test_ehlo[smtp.gmail.com]`` and ``test_ehlo[mail.python.org]`` in the above examples. These IDs can -be used with ``-k`` to select specific cases to run, and they will +be used with :option:`-k` to select specific cases to run, and they will also identify the specific case when one is failing. Running pytest -with ``--collect-only`` will show the generated IDs. +with :option:`--collect-only` will show the generated IDs. Numbers, strings, booleans and ``None`` will have their usual string representation used in the test ID. For other objects, pytest will diff --git a/doc/en/how-to/logging.rst b/doc/en/how-to/logging.rst index d6d87f03bbf..c0762e60928 100644 --- a/doc/en/how-to/logging.rst +++ b/doc/en/how-to/logging.rst @@ -65,7 +65,7 @@ These options can also be customized through a configuration file: log_format = %(asctime)s %(levelname)s %(message)s log_date_format = %Y-%m-%d %H:%M:%S -Specific loggers can be disabled via ``--log-disable={logger_name}``. +Specific loggers can be disabled via :option:`--log-disable={logger_name}`. This argument can be passed multiple times: .. code-block:: bash @@ -199,13 +199,13 @@ By setting the :confval:`log_cli` configuration option to ``true``, pytest will logging records as they are emitted directly into the console. You can specify the logging level for which log records with equal or higher -level are printed to the console by passing ``--log-cli-level``. This setting +level are printed to the console by passing :option:`--log-cli-level`. This setting accepts the logging level names or numeric values as seen in :ref:`logging's documentation `. -Additionally, you can also specify ``--log-cli-format`` and -``--log-cli-date-format`` which mirror and default to ``--log-format`` and -``--log-date-format`` if not provided, but are applied only to the console +Additionally, you can also specify :option:`--log-cli-format` and +:option:`--log-cli-date-format` which mirror and default to :option:`--log-format` and +:option:`--log-date-format` if not provided, but are applied only to the console logging handler. All of the CLI log options can also be set in the configuration file. The @@ -216,19 +216,19 @@ option names are: * :confval:`log_cli_date_format` If you need to record the whole test suite logging calls to a file, you can pass -``--log-file=/path/to/log/file``. This log file is opened in write mode by default which +:option:`--log-file=/path/to/log/file`. This log file is opened in write mode by default which means that it will be overwritten at each run tests session. -If you'd like the file opened in append mode instead, then you can pass ``--log-file-mode=a``. +If you'd like the file opened in append mode instead, then you can pass :option:`--log-file-mode=a`. Note that relative paths for the log-file location, whether passed on the CLI or declared in a config file, are always resolved relative to the current working directory. You can also specify the logging level for the log file by passing -``--log-file-level``. This setting accepts the logging level names or numeric +:option:`--log-file-level`. This setting accepts the logging level names or numeric values as seen in :ref:`logging's documentation `. -Additionally, you can also specify ``--log-file-format`` and -``--log-file-date-format`` which are equal to ``--log-format`` and -``--log-date-format`` but are applied to the log file logging handler. +Additionally, you can also specify :option:`--log-file-format` and +:option:`--log-file-date-format` which are equal to ``--log-format`` and +:option:`--log-date-format` but are applied to the log file logging handler. All of the log file options can also be set in the configuration file. The option names are: @@ -302,14 +302,14 @@ This feature was introduced in ``3.3`` and some **incompatible changes** have be made in ``3.4`` after community feedback: * Log levels are no longer changed unless explicitly requested by the :confval:`log_level` configuration - or ``--log-level`` command-line options. This allows users to configure logger objects themselves. + or :option:`--log-level` command-line options. This allows users to configure logger objects themselves. Setting :confval:`log_level` will set the level that is captured globally so if a specific test requires a lower level than this, use the ``caplog.set_level()`` functionality otherwise that test will be prone to failure. * :ref:`Live Logs ` is now disabled by default and can be enabled setting the :confval:`log_cli` configuration option to ``true``. When enabled, the verbosity is increased so logging for each test is visible. -* :ref:`Live Logs ` are now sent to ``sys.stdout`` and no longer require the ``-s`` command-line option +* :ref:`Live Logs ` are now sent to ``sys.stdout`` and no longer require the :option:`-s` command-line option to work. If you want to partially restore the logging behavior of version ``3.3``, you can add this options to your configuration diff --git a/doc/en/how-to/mark.rst b/doc/en/how-to/mark.rst index 575ce2f41c2..e22219414a0 100644 --- a/doc/en/how-to/mark.rst +++ b/doc/en/how-to/mark.rst @@ -21,7 +21,7 @@ Here are some of the builtin markers: It's easy to create custom markers or to apply markers to whole test classes or modules. Those markers can be used by plugins, and also -are commonly used to :ref:`select tests ` on the command-line with the ``-m`` option. +are commonly used to :ref:`select tests ` on the command-line with the :option:`-m` option. See :ref:`mark examples` for examples which also serve as documentation. diff --git a/doc/en/how-to/monkeypatch.rst b/doc/en/how-to/monkeypatch.rst index a9504dcb32a..ad0c6e0e1c5 100644 --- a/doc/en/how-to/monkeypatch.rst +++ b/doc/en/how-to/monkeypatch.rst @@ -235,7 +235,7 @@ so that any attempts within tests to create http requests will fail. Be advised that it is not recommended to patch builtin functions such as ``open``, ``compile``, etc., because it might break pytest's internals. If that's - unavoidable, passing ``--tb=native``, ``--assert=plain`` and ``--capture=no`` might + unavoidable, passing :option:`--tb=native`, :option:`--assert=plain` and :option:`--capture=no` might help although there's no guarantee. .. note:: diff --git a/doc/en/how-to/output.rst b/doc/en/how-to/output.rst index ec4ca05838e..d92b2131701 100644 --- a/doc/en/how-to/output.rst +++ b/doc/en/how-to/output.rst @@ -30,8 +30,8 @@ Examples for modifying traceback printing: pytest --tb=native # Python standard library formatting pytest --tb=no # no traceback at all -The ``--full-trace`` causes very long traces to be printed on error (longer -than ``--tb=long``). It also ensures that a stack trace is printed on +The :option:`--full-trace` causes very long traces to be printed on error (longer +than :option:`--tb=long`). It also ensures that a stack trace is printed on **KeyboardInterrupt** (Ctrl+C). This is very useful if the tests are taking too long and you interrupt them with Ctrl+C to find out where the tests are *hanging*. By default no output @@ -52,8 +52,8 @@ Examples for modifying printing verbosity: pytest -vv # more verbose, display more details from the test output pytest -vvv # not a standard , but may be used for even more detail in certain setups -The ``-v`` flag controls the verbosity of pytest output in various aspects: test session progress, assertion -details when tests fail, fixtures details with ``--fixtures``, etc. +The :option:`-v` flag controls the verbosity of pytest output in various aspects: test session progress, assertion +details when tests fail, fixtures details with :option:`--fixtures`, etc. .. regendoc:wipe @@ -372,7 +372,7 @@ test inside the file gets its own line in the output. Producing a detailed summary report -------------------------------------------------- -The ``-r`` flag can be used to display a "short test summary info" at the end of the test session, +The :option:`-r` flag can be used to display a "short test summary info" at the end of the test session, making it easy in large test suites to get a clear picture of all failures, skips, xfails, etc. It defaults to ``fE`` to list failures and errors. @@ -453,7 +453,7 @@ Example: FAILED test_example.py::test_fail - assert 0 == 1 failed, 1 passed, 1 skipped, 1 xfailed, 1 xpassed, 1 error in 0.12s === -The ``-r`` options accepts a number of characters after it, with ``a`` used +The :option:`-r` options accepts a number of characters after it, with ``a`` used above meaning "all except passes". Here is the full list of available characters that can be used: @@ -547,7 +547,7 @@ captured output: .. note:: By default, parametrized variants of skipped tests are grouped together if - they share the same skip reason. You can use ``--no-fold-skipped`` to print each skipped test separately. + they share the same skip reason. You can use :option:`--no-fold-skipped` to print each skipped test separately. .. _truncation-params: @@ -822,7 +822,7 @@ Sending test report to an online pastebin service This will submit test run information to a remote Paste service and provide a URL for each failure. You may select tests as usual or add -for example ``-x`` if you only want to send one particular failure. +for example :option:`-x` if you only want to send one particular failure. **Creating a URL for a whole test session log**: diff --git a/doc/en/how-to/plugins.rst b/doc/en/how-to/plugins.rst index 591c44dfa4d..48a45619324 100644 --- a/doc/en/how-to/plugins.rst +++ b/doc/en/how-to/plugins.rst @@ -148,7 +148,7 @@ Disabling plugins from autoloading ---------------------------------- If you want to disable plugins from loading automatically, instead of requiring you to -manually specify each plugin with ``-p`` or :envvar:`PYTEST_PLUGINS`, you can use ``--disable-plugin-autoload`` or :envvar:`PYTEST_DISABLE_PLUGIN_AUTOLOAD`. +manually specify each plugin with :option:`-p` or :envvar:`PYTEST_PLUGINS`, you can use :option:`--disable-plugin-autoload` or :envvar:`PYTEST_DISABLE_PLUGIN_AUTOLOAD`. .. code-block:: bash @@ -179,4 +179,4 @@ manually specify each plugin with ``-p`` or :envvar:`PYTEST_PLUGINS`, you can us .. versionadded:: 8.4 - The ``--disable-plugin-autoload`` command-line flag. + The :option:`--disable-plugin-autoload` command-line flag. diff --git a/doc/en/how-to/skipping.rst b/doc/en/how-to/skipping.rst index 1887fbd53ef..3b4d412843d 100644 --- a/doc/en/how-to/skipping.rst +++ b/doc/en/how-to/skipping.rst @@ -21,14 +21,14 @@ it's an **xpass** and will be reported in the test summary. ``pytest`` counts and lists *skip* and *xfail* tests separately. Detailed information about skipped/xfailed tests is not shown by default to avoid -cluttering the output. You can use the ``-r`` option to see details +cluttering the output. You can use the :option:`-r` option to see details corresponding to the "short" letters shown in the test progress: .. code-block:: bash pytest -rxXs # show extra info on xfailed, xpassed, and skipped tests -More details on the ``-r`` option can be found by running ``pytest -h``. +More details on the :option:`-r` option can be found by running ``pytest -h``. (See :ref:`how to change command line options defaults`) diff --git a/doc/en/how-to/subtests.rst b/doc/en/how-to/subtests.rst index c8d9461c983..5a08dbc4769 100644 --- a/doc/en/how-to/subtests.rst +++ b/doc/en/how-to/subtests.rst @@ -90,7 +90,7 @@ outside the ``subtests.test`` block: Verbosity --------- -By default, only **subtest failures** are shown. Higher verbosity levels (``-v``) will also show progress output for **passed** subtests. +By default, only **subtest failures** are shown. Higher verbosity levels (:option:`-v`) will also show progress output for **passed** subtests. It is possible to control the verbosity of subtests by setting :confval:`verbosity_subtests`. @@ -118,7 +118,7 @@ Parametrization * Happens at collection time. * Generates individual tests. * Parametrized tests can be referenced from the command line. -* Plays well with plugins that handle test execution, such as ``--last-failed``. +* Plays well with plugins that handle test execution, such as :option:`--last-failed`. * Ideal for decision table testing. Subtests diff --git a/doc/en/how-to/tmp_path.rst b/doc/en/how-to/tmp_path.rst index 04c663bb986..e73c55878a6 100644 --- a/doc/en/how-to/tmp_path.rst +++ b/doc/en/how-to/tmp_path.rst @@ -136,9 +136,9 @@ Temporary directory location and retention The temporary directories, as returned by the :fixture:`tmp_path` and (now deprecated) :fixture:`tmpdir` fixtures, are automatically created under a base temporary directory, -in a structure that depends on the ``--basetemp`` option: +in a structure that depends on the :option:`--basetemp` option: -- By default (when the ``--basetemp`` option is not set), +- By default (when the :option:`--basetemp` option is not set), the temporary directories will follow this template: .. code-block:: text @@ -160,7 +160,7 @@ in a structure that depends on the ``--basetemp`` option: but this behavior can be configured with :confval:`tmp_path_retention_count` and :confval:`tmp_path_retention_policy`. -- When the ``--basetemp`` option is used (e.g. ``pytest --basetemp=mydir``), +- When the :option:`--basetemp` option is used (e.g. ``pytest --basetemp=mydir``), it will be used directly as base temporary directory: .. code-block:: text @@ -172,7 +172,7 @@ in a structure that depends on the ``--basetemp`` option: .. warning:: - The directory given to ``--basetemp`` will be cleared blindly before each test run, + The directory given to :option:`--basetemp` will be cleared blindly before each test run, so make sure to use a directory for that purpose only. When distributing tests on the local machine using ``pytest-xdist``, care is taken to diff --git a/doc/en/how-to/unittest.rst b/doc/en/how-to/unittest.rst index 12511fed262..0762e7d4cf8 100644 --- a/doc/en/how-to/unittest.rst +++ b/doc/en/how-to/unittest.rst @@ -42,7 +42,7 @@ in most cases without having to modify existing code: * Obtain :ref:`more informative tracebacks `; * :ref:`stdout and stderr ` capturing; -* :ref:`Test selection options ` using ``-k`` and ``-m`` flags; +* :ref:`Test selection options ` using :option:`-k` and :option:`-m` flags; * :ref:`maxfail`; * :ref:`--pdb ` command-line option for debugging on test failures (see :ref:`note ` below); diff --git a/doc/en/how-to/usage.rst b/doc/en/how-to/usage.rst index 0e0a0310fd8..94e6d94d834 100644 --- a/doc/en/how-to/usage.rst +++ b/doc/en/how-to/usage.rst @@ -4,7 +4,7 @@ How to invoke pytest ========================================== -.. seealso:: :ref:`Complete pytest command-line flag reference ` +.. seealso:: :ref:`Complete pytest command-line flags reference ` In general, pytest is invoked with the command ``pytest`` (see below for :ref:`other ways to invoke pytest `). This will execute all tests in all files whose names follow the form ``test_*.py`` or ``\*_test.py`` @@ -155,7 +155,7 @@ Managing loading of plugins Early loading plugins ~~~~~~~~~~~~~~~~~~~~~~~ -You can early-load plugins (internal and external) explicitly in the command-line with the ``-p`` option:: +You can early-load plugins (internal and external) explicitly in the command-line with the :option:`-p` option:: pytest -p mypluginmodule @@ -171,7 +171,7 @@ The option receives a ``name`` parameter, which can be: Disabling plugins ~~~~~~~~~~~~~~~~~~ -To disable loading specific plugins at invocation time, use the ``-p`` option +To disable loading specific plugins at invocation time, use the :option:`-p` option together with the prefix ``no:``. Example: to disable loading the plugin ``doctest``, which is responsible for diff --git a/doc/en/how-to/writing_plugins.rst b/doc/en/how-to/writing_plugins.rst index ec10c0e261c..6b7e2a7e496 100644 --- a/doc/en/how-to/writing_plugins.rst +++ b/doc/en/how-to/writing_plugins.rst @@ -295,7 +295,7 @@ the plugin manager like this: plugin = config.pluginmanager.get_plugin("name_of_plugin") If you want to look at the names of existing plugins, use -the ``--trace-config`` option. +the :option:`--trace-config` option. .. _registering-markers: diff --git a/doc/en/reference/customize.rst b/doc/en/reference/customize.rst index 500e5519bdd..b2e7d64cc26 100644 --- a/doc/en/reference/customize.rst +++ b/doc/en/reference/customize.rst @@ -173,7 +173,7 @@ Here's a summary what ``pytest`` uses ``rootdir`` for: ``rootdir`` is **NOT** used to modify ``sys.path``/``PYTHONPATH`` or influence how modules are imported. See :ref:`pythonpath` for more details. -The ``--rootdir=path`` command-line option can be used to force a specific directory. +The :option:`--rootdir=path` command-line option can be used to force a specific directory. Note that contrary to other command-line options, ``--rootdir`` cannot be used with :confval:`addopts` inside a configuration file because the ``rootdir`` is used to *find* the configuration file already. @@ -183,7 +183,7 @@ Finding the ``rootdir`` Here is the algorithm which finds the rootdir from ``args``: -- If ``-c`` is passed in the command-line, use that as configuration file, and its directory as ``rootdir``. +- If :option:`-c` is passed in the command-line, use that as configuration file, and its directory as ``rootdir``. - Determine the common ancestor directory for the specified ``args`` that are recognised as paths that exist in the file system. If no such paths are diff --git a/doc/en/reference/fixtures.rst b/doc/en/reference/fixtures.rst index 02e235ceb9e..b0fa8660f9b 100644 --- a/doc/en/reference/fixtures.rst +++ b/doc/en/reference/fixtures.rst @@ -34,7 +34,7 @@ Built-in fixtures :fixture:`capteesys` Capture in the same manner as :fixture:`capsys`, but also pass text - through according to ``--capture=``. + through according to :option:`--capture`. :fixture:`capsysbinary` Capture, as bytes, output to ``sys.stdout`` and ``sys.stderr``. @@ -281,9 +281,9 @@ searching for them first in the scopes inside ``tests/``. pytest can tell you what fixtures are available for a given test if you call ``pytests`` along with the test's name (or the scope it's in), and provide - the ``--fixtures`` flag, e.g. ``pytest --fixtures test_something.py`` + the :option:`--fixtures` flag, e.g. ``pytest --fixtures test_something.py`` (fixtures with names that start with ``_`` will only be shown if you also - provide the ``-v`` flag). + provide the :option:`-v` flag). .. _`fixture order`: @@ -452,6 +452,6 @@ can't see ``c3``. pytest can tell you what order the fixtures will execute in for a given test if you call ``pytests`` along with the test's name (or the scope it's in), - and provide the ``--setup-plan`` flag, e.g. + and provide the :option:`--setup-plan` flag, e.g. ``pytest --setup-plan test_something.py`` (fixtures with names that start - with ``_`` will only be shown if you also provide the ``-v`` flag). + with ``_`` will only be shown if you also provide the :option:`-v` flag). diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 65582b177f0..57415a18cc1 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1212,7 +1212,7 @@ as discussed in :ref:`temporary directory location and retention`. When set, disables plugin auto-loading through :std:doc:`entry point packaging metadata `. Only plugins -explicitly specified in :envvar:`PYTEST_PLUGINS` or with ``-p`` will be loaded. +explicitly specified in :envvar:`PYTEST_PLUGINS` or with :option:`-p` will be loaded. See also :ref:`--disable-plugin-autoload `. .. envvar:: PYTEST_PLUGINS @@ -1223,7 +1223,7 @@ Contains comma-separated list of modules that should be loaded as plugins: export PYTEST_PLUGINS=mymodule.plugin,xdist -See also ``-p``. +See also :option:`-p`. .. envvar:: PYTEST_THEME @@ -1406,7 +1406,7 @@ passed multiple times. The expected format is ``name=value``. For example:: when collecting Python modules. Default is ``False``. Set to ``True`` if the package you are testing is part of a namespace package. - Namespace packages are also supported as ``--pyargs`` target. + Namespace packages are also supported as :option:`--pyargs` target. Only `native namespace packages `__ are supported, with no plans to support `legacy namespace packages `__. @@ -1744,7 +1744,7 @@ passed multiple times. The expected format is ``name=value``. For example:: Allow selective auto-indentation of multiline log messages. - Supports command line option ``--log-auto-indent [value]`` + Supports command line option :option:`--log-auto-indent=[value]` and config option ``log_auto_indent = [value]`` to set the auto-indentation behavior for all logging. @@ -2128,7 +2128,7 @@ passed multiple times. The expected format is ``name=value``. For example:: Additionally, ``pytest`` will attempt to intelligently identify and ignore a virtualenv. Any directory deemed to be the root of a virtual environment will not be considered during test collection unless - ``--collect-in-virtualenv`` is given. Note also that ``norecursedirs`` + :option:`--collect-in-virtualenv` is given. Note also that ``norecursedirs`` takes precedence over ``--collect-in-virtualenv``; e.g. if you intend to run tests in a virtualenv with a base directory that matches ``'.*'`` you *must* override ``norecursedirs`` in addition to using the @@ -2610,7 +2610,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] verbosity_assertions = 2 - If not set, defaults to application wide verbosity level (via the ``-v`` command-line option). A special value of + If not set, defaults to application wide verbosity level (via the :option:`-v` command-line option). A special value of ``"auto"`` can be used to explicitly use the global verbosity level. @@ -2633,9 +2633,9 @@ passed multiple times. The expected format is ``name=value``. For example:: verbosity_subtests = 1 A value of ``1`` or higher will show output for **passed** subtests (**failed** subtests are always reported). - Passed subtests output can be suppressed with the value ``0``, which overwrites the ``-v`` command-line option. + Passed subtests output can be suppressed with the value ``0``, which overwrites the :option:`-v` command-line option. - If not set, defaults to application wide verbosity level (via the ``-v`` command-line option). A special value of + If not set, defaults to application wide verbosity level (via the :option:`-v` command-line option). A special value of ``"auto"`` can be used to explicitly use the global verbosity level. See also: :ref:`subtests`. @@ -2659,7 +2659,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] verbosity_test_cases = 2 - If not set, defaults to application wide verbosity level (via the ``-v`` command-line option). A special value of + If not set, defaults to application wide verbosity level (via the :option:`-v` command-line option). A special value of ``"auto"`` can be used to explicitly use the global verbosity level. @@ -2668,7 +2668,576 @@ passed multiple times. The expected format is ``name=value``. For example:: Command-line Flags ------------------ -All the command-line flags can be obtained by running ``pytest --help``:: +This section documents all command-line options provided by pytest's core plugins. + +.. note:: + + External plugins can add their own command-line options. + This reference documents only the options from pytest's core plugins. + To see all available options including those from installed plugins, run ``pytest --help``. + +Test Selection +~~~~~~~~~~~~~~ + +.. option:: -k EXPRESSION + + Only run tests which match the given substring expression. + An expression is a Python evaluable expression where all names are substring-matched against test names and their parent classes. + + Examples:: + + pytest -k "test_method or test_other" # matches names containing 'test_method' OR 'test_other' + pytest -k "not test_method" # matches names NOT containing 'test_method' + pytest -k "not test_method and not test_other" # excludes both + + The matching is case-insensitive. + Keywords are also matched to classes and functions containing extra names in their ``extra_keyword_matches`` set. + + See :ref:`select-tests` for more information and examples. + +.. option:: -m MARKEXPR + + Only run tests matching given mark expression. + Supports ``and``, ``or``, and ``not`` operators. + + Examples:: + + pytest -m slow # run tests marked with @pytest.mark.slow + pytest -m "not slow" # run tests NOT marked slow + pytest -m "mark1 and not mark2" # run tests marked mark1 but not mark2 + + See :ref:`mark` for more information on markers. + +.. option:: --markers + + Show all available markers (builtin, plugin, and per-project markers defined in configuration). + +Test Execution Control +~~~~~~~~~~~~~~~~~~~~~~~ + +.. option:: -x, --exitfirst + + Exit instantly on first error or failed test. + +.. option:: --maxfail=NUM + + Exit after first ``num`` failures or errors. + Useful for CI environments where you want to fail fast but see a few failures. + +.. option:: --last-failed, --lf + + Rerun only the tests that failed at the last run. + If no tests failed (or no cached data exists), all tests are run. + See also :confval:`cache_dir` and :ref:`cache`. + +.. option:: --failed-first, --ff + + Run all tests, but run the last failures first. + This may re-order tests and thus lead to repeated fixture setup/teardown. + +.. option:: --new-first, --nf + + Run tests from new files first, then the rest of the tests sorted by file modification time. + +.. option:: --stepwise, --sw + + Exit on test failure and continue from last failing test next time. + Useful for fixing multiple test failures one at a time. + + See :ref:`cache stepwise` for more information. + +.. option:: --stepwise-skip, --sw-skip + + Ignore the first failing test but stop on the next failing test. + Implicitly enables :option:`--stepwise`. + +.. option:: --stepwise-reset, --sw-reset + + Resets stepwise state, restarting the stepwise workflow. + Implicitly enables :option:`--stepwise`. + +.. option:: --last-failed-no-failures, --lfnf + + With :option:`--last-failed`, determines whether to execute tests when there are no previously known failures or when no cached ``lastfailed`` data was found. + + * ``all`` (default): runs the full test suite again + * ``none``: just emits a message about no known failures and exits successfully + +.. option:: --runxfail + + Report the results of xfail tests as if they were not marked. + Useful for debugging xfailed tests. + See :ref:`xfail`. + +Collection +~~~~~~~~~~ + +.. option:: --collect-only, --co + + Only collect tests, don't execute them. + Shows which tests would be collected and run. + +.. option:: --pyargs + + Try to interpret all arguments as Python packages. + Useful for running tests of installed packages:: + + pytest --pyargs pkg.testing + +.. option:: --ignore=PATH + + Ignore path during collection (multi-allowed). + Can be specified multiple times. + +.. option:: --ignore-glob=PATTERN + + Ignore path pattern during collection (multi-allowed). + Supports glob patterns. + +.. option:: --deselect=NODEID_PREFIX + + Deselect item (via node id prefix) during collection (multi-allowed). + +.. option:: --confcutdir=DIR + + Only load ``conftest.py`` files relative to specified directory. + +.. option:: --noconftest + + Don't load any ``conftest.py`` files. + +.. option:: --keep-duplicates + + Keep duplicate tests. By default, pytest removes duplicate test items. + +.. option:: --collect-in-virtualenv + + Don't ignore tests in a local virtualenv directory. + By default, pytest skips tests in virtualenv directories. + +.. option:: --continue-on-collection-errors + + Force test execution even if collection errors occur. + +.. option:: --import-mode + + Prepend/append to sys.path when importing test modules and conftest files. + + * ``prepend`` (default): prepend to sys.path + * ``append``: append to sys.path + * ``importlib``: use importlib to import test modules + + See :ref:`pythonpath` for more information. + +Fixtures +~~~~~~~~ + +.. option:: --fixtures, --funcargs + + Show available fixtures, sorted by plugin appearance. + Fixtures with leading ``_`` are only shown with :option:`--verbose`. + +.. option:: --fixtures-per-test + + Show fixtures per test. + +.. option:: --setup-only + + Only setup fixtures, do not execute tests. + See :ref:`how-to-fixtures`. + +.. option:: --setup-show + + Show setup of fixtures while executing tests. + +.. option:: --setup-plan + + Show what fixtures and tests would be executed but don't execute anything. + +Debugging +~~~~~~~~~ + +.. option:: --pdb + + Start the interactive Python debugger on errors or KeyboardInterrupt. + See :ref:`pdb-option`. + +.. option:: --pdbcls=MODULENAME:CLASSNAME + + Specify a custom interactive Python debugger for use with :option:`--pdb`. + + Example:: + + pytest --pdbcls=IPython.terminal.debugger:TerminalPdb + +.. option:: --trace + + Immediately break when running each test. + + See :ref:`trace-option` for more information. + +.. option:: --full-trace + + Don't cut any tracebacks (default is to cut). + + See :ref:`how-to-modifying-python-tb-printing` for more information. + +.. option:: --debug, --debug=DEBUG_FILE_NAME + + Store internal tracing debug information in this log file. + This file is opened with ``'w'`` and truncated as a result, care advised. + Default file name if not specified: ``pytestdebug.log``. + +.. option:: --trace-config + + Trace considerations of conftest.py files. + +Output and Reporting +~~~~~~~~~~~~~~~~~~~~ + +.. option:: -v, --verbose + + Increase verbosity. + Can be specified multiple times (e.g., ``-vv``) for even more verbose output. + + See :ref:`pytest.fine_grained_verbosity` for fine-grained control over verbosity. + +.. option:: -q, --quiet + + Decrease verbosity. + +.. option:: --verbosity=NUM + + Set verbosity level explicitly. Default: 0. + +.. option:: -r CHARS + + Show extra test summary info as specified by chars: + + * ``f``: failed + * ``E``: error + * ``s``: skipped + * ``x``: xfailed + * ``X``: xpassed + * ``p``: passed + * ``P``: passed with output + * ``a``: all except passed (p/P) + * ``A``: all + * ``w``: warnings (enabled by default) + * ``N``: resets the list + + Default: ``'fE'`` + + Examples:: + + pytest -rA # show all outcomes + pytest -rfE # show only failed and errors (default) + pytest -rfs # show failed and skipped + + See :ref:`pytest.detailed_failed_tests_usage` for more information. + +.. option:: --no-header + + Disable header. + +.. option:: --no-summary + + Disable summary. + +.. option:: --no-fold-skipped + + Do not fold skipped tests in short summary. + +.. option:: --force-short-summary + + Force condensed summary output regardless of verbosity level. + +.. option:: -l, --showlocals + + Show locals in tracebacks (disabled by default). + +.. option:: --no-showlocals + + Hide locals in tracebacks (negate :option:`--showlocals` passed through addopts). + +.. option:: --tb=STYLE + + Traceback print mode: + + * ``auto``: intelligent traceback formatting (default) + * ``long``: exhaustive, informative traceback formatting + * ``short``: shorter traceback format + * ``line``: only the failing line + * ``native``: Python's standard traceback + * ``no``: no traceback + + See :ref:`how-to-modifying-python-tb-printing` for examples. + +.. option:: --xfail-tb + + Show tracebacks for xfail (as long as :option:`--tb` != ``no``). + +.. option:: --show-capture + + Controls how captured stdout/stderr/log is shown on failed tests. + + * ``no``: don't show captured output + * ``stdout``: show captured stdout + * ``stderr``: show captured stderr + * ``log``: show captured logging + * ``all`` (default): show all captured output + +.. option:: --color=WHEN + + Color terminal output: + + * ``yes``: always use color + * ``no``: never use color + * ``auto`` (default): use color if terminal supports it + +.. option:: --code-highlight={yes,no} + + Whether code should be highlighted (only if :option:`--color` is also enabled). + Default: ``yes``. + +.. option:: --pastebin=MODE + + Send failed|all info to bpaste.net pastebin service. + +.. option:: --durations=NUM + + Show N slowest setup/test durations (N=0 for all). + See :ref:`durations`. + +.. option:: --durations-min=NUM + + Minimal duration in seconds for inclusion in slowest list. + Default: 0.005 (or 0.0 if ``-vv`` is given). + +Output Capture +~~~~~~~~~~~~~~ + +.. option:: --capture=METHOD + + Per-test capturing method: + + * ``fd``: capture at file descriptor level (default) + * ``sys``: capture at sys level + * ``no``: don't capture output + * ``tee-sys``: capture but also show output on terminal + + See :ref:`captures`. + +.. option:: -s + + Shortcut for :option:`--capture=no`. + +JUnit XML +~~~~~~~~~ + +.. option:: --junit-xml=PATH, --junitxml=PATH + + Create junit-xml style report file at given path. + +.. option:: --junit-prefix=STR, --junitprefix=STR + + Prepend prefix to classnames in junit-xml output. + +Cache +~~~~~ + +.. option:: --cache-show[=PATTERN] + + Show cache contents, don't perform collection or tests. + Default glob pattern: ``'*'``. + +.. option:: --cache-clear + + Remove all cache contents at start of test run. + See :ref:`cache`. + +Warnings +~~~~~~~~ + +.. option:: --disable-pytest-warnings, --disable-warnings + + Disable warnings summary. + +.. option:: -W WARNING, --pythonwarnings=WARNING + + Set which warnings to report, see ``-W`` option of Python itself. + Can be specified multiple times. + +Doctest +~~~~~~~ + +.. option:: --doctest-modules + + Run doctests in all .py modules. + + See :ref:`doctest` for more information on using doctests with pytest. + +.. option:: --doctest-report + + Choose another output format for diffs on doctest failure: + + * ``none`` + * ``cdiff`` + * ``ndiff`` + * ``udiff`` + * ``only_first_failure`` + +.. option:: --doctest-glob=PATTERN + + Doctests file matching pattern. + Default: ``test*.txt``. + +.. option:: --doctest-ignore-import-errors + + Ignore doctest collection errors. + +.. option:: --doctest-continue-on-failure + + For a given doctest, continue to run after the first failure. + +Configuration +~~~~~~~~~~~~~ + +.. option:: -c FILE, --config-file=FILE + + Load configuration from ``FILE`` instead of trying to locate one of the implicit configuration files. + +.. option:: --rootdir=ROOTDIR + + Define root directory for tests. + Can be relative path: ``'root_dir'``, ``'./root_dir'``, ``'root_dir/another_dir/'``; absolute path: ``'/home/user/root_dir'``; path with variables: ``'$HOME/root_dir'``. + +.. option:: --basetemp=DIR + + Base temporary directory for this test run. + Warning: this directory is removed if it exists. + + See :ref:`temporary directory location and retention` for more information. + +.. option:: -o OPTION=VALUE, --override-ini=OPTION=VALUE + + Override configuration option with ``option=value`` style. + Can be specified multiple times. + + Example:: + + pytest -o strict_xfail=true -o cache_dir=cache + +.. option:: --strict-config + + Enables the :confval:`strict_config` option. + +.. option:: --strict-markers + + Enables the :confval:`strict_markers` option. + +.. option:: --strict + + Enables the :confval:`strict` option (which enables all strictness options). + +.. option:: --assert=MODE + + Control assertion debugging tools: + + * ``plain``: performs no assertion debugging + * ``rewrite`` (default): rewrites assert statements in test modules on import to provide assert expression information + +Logging +~~~~~~~ + +See :ref:`logging` for a guide on using these flags. + +.. option:: --log-level=LEVEL + + Level of messages to catch/display. + Not set by default, so it depends on the root/parent log handler's effective level, where it is ``WARNING`` by default. + +.. option:: --log-format=FORMAT + + Log format used by the logging module. + +.. option:: --log-date-format=FORMAT + + Log date format used by the logging module. + +.. option:: --log-cli-level=LEVEL + + CLI logging level. See :ref:`live_logs`. + +.. option:: --log-cli-format=FORMAT + + Log format used by the logging module for CLI output. + +.. option:: --log-cli-date-format=FORMAT + + Log date format used by the logging module for CLI output. + +.. option:: --log-file=PATH + + Path to a file when logging will be written to. + +.. option:: --log-file-mode + + Log file open mode: + + * ``w`` (default): recreate the file + * ``a``: append to the file + +.. option:: --log-file-level=LEVEL + + Log file logging level. + +.. option:: --log-file-format=FORMAT + + Log format used by the logging module for the log file. + +.. option:: --log-file-date-format=FORMAT + + Log date format used by the logging module for the log file. + +.. option:: --log-auto-indent=VALUE + + Auto-indent multiline messages passed to the logging module. + Accepts ``true|on``, ``false|off`` or an integer. + +.. option:: --log-disable=LOGGER + + Disable a logger by name. Can be passed multiple times. + +Plugin and Extension Management +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. option:: -p NAME + + Early-load given plugin module name or entry point (multi-allowed). + To avoid loading of plugins, use the ``no:`` prefix, e.g. ``no:doctest``. + See also :option:`--disable-plugin-autoload`. + +.. option:: --disable-plugin-autoload + + Disable plugin auto-loading through entry point packaging metadata. + Only plugins explicitly specified in :option:`-p` or env var :envvar:`PYTEST_PLUGINS` will be loaded. + +Version and Help +~~~~~~~~~~~~~~~~ + +.. option:: -V, --version + + Display pytest version and information about plugins. When given twice, also display information about plugins. + +.. option:: -h, --help + + Show help message and configuration info. + +Complete Help Output +~~~~~~~~~~~~~~~~~~~~ + +All the command-line flags can also be obtained by running ``pytest --help``:: $ pytest --help usage: pytest [options] [file_or_dir] [file_or_dir] [...] @@ -2727,7 +3296,7 @@ All the command-line flags can be obtained by running ``pytest --help``:: tests. Optional argument: glob (default: '*'). --cache-clear Remove all cache contents at start of test run --lfnf, --last-failed-no-failures={all,none} - With ``--lf``, determines whether to execute tests + With :option:`--lf`, determines whether to execute tests when there are no previously (known) failures or when no cached ``lastfailed`` data was found. ``all`` (the default) runs the full test suite From 4d386750cb390bf72119ff6bb11b06da64fb6941 Mon Sep 17 00:00:00 2001 From: Antonis Gardi <147614527+asgardik0@users.noreply.github.com> Date: Sat, 29 Nov 2025 11:41:13 +0200 Subject: [PATCH 080/307] Make references in CONTRIBUTIGN.rst work in GitHub (#14010) --- CONTRIBUTING.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index f31c14aec49..86d4231fedf 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -49,7 +49,7 @@ Look through the `GitHub issues for bugs `_ that are friendly to new contributors. -:ref:`Talk ` to developers to find out how you can fix specific bugs. To indicate that you are going +`Talk to developers `_ to find out how you can fix specific bugs. To indicate that you are going to work on a particular issue, add a comment to that effect on the specific issue. Don't forget to check the issue trackers of your favourite plugins, too! @@ -61,7 +61,7 @@ Implement features Look through the `GitHub issues for enhancements `_. -:ref:`Talk ` to developers to find out how you can implement specific +`Talk to developers `_ to find out how you can implement specific features. Write documentation From ccda6a1f5e7e59b6c639421babb802eabdf633ae Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 29 Nov 2025 21:36:13 +0200 Subject: [PATCH 081/307] doc: add compat note about `config.args` to pytest 9.0.0 changelog Refs #13996. --- doc/en/changelog.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index d9e9928db00..8f869634c73 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -266,6 +266,9 @@ Removals and backward incompatible breaking changes now, CI mode is only activated if at least one of those variables is defined and set to a *non-empty* value. +- The non-public ``config.args`` attribute used to be able to contain ``pathlib.Path`` instances; now it can only contain strings. + + - `#13779 `_: **PytestRemovedIn9Warning deprecation warnings are now errors by default.** Following our plan to remove deprecated features with as little disruption as From d871b508011011cd2c76a7aa354b569cef38b24b Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 29 Nov 2025 22:23:13 +0200 Subject: [PATCH 082/307] fixtures: turn requesting async fixture without a plugin into a hard error Deprecated feature scheduled for removal in pytest 9. Part of #13893. --- doc/en/deprecations.rst | 142 +++++++++++++++++++------------------ src/_pytest/fixtures.py | 18 ++--- testing/acceptance_test.py | 50 +++++-------- 3 files changed, 93 insertions(+), 117 deletions(-) diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 7f7e3536655..e607b7f26dc 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -148,76 +148,6 @@ Simply remove the ``__init__.py`` file entirely. Python 3.3+ natively supports namespace packages without ``__init__.py``. -.. _sync-test-async-fixture: - -sync test depending on async fixture -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. deprecated:: 8.4 - -Pytest has for a long time given an error when encountering an asynchronous test function, prompting the user to install -a plugin that can handle it. It has not given any errors if you have an asynchronous fixture that's depended on by a -synchronous test. If the fixture was an async function you did get an "unawaited coroutine" warning, but for async yield fixtures you didn't even get that. -This is a problem even if you do have a plugin installed for handling async tests, as they may require -special decorators for async fixtures to be handled, and some may not robustly handle if a user accidentally requests an -async fixture from their sync tests. Fixture values being cached can make this even more unintuitive, where everything will -"work" if the fixture is first requested by an async test, and then requested by a synchronous test. - -Unfortunately there is no 100% reliable method of identifying when a user has made a mistake, versus when they expect an -unawaited object from their fixture that they will handle on their own. To suppress this warning -when you in fact did intend to handle this you can wrap your async fixture in a synchronous fixture: - -.. code-block:: python - - import asyncio - import pytest - - - @pytest.fixture - async def unawaited_fixture(): - return 1 - - - def test_foo(unawaited_fixture): - assert 1 == asyncio.run(unawaited_fixture) - -should be changed to - - -.. code-block:: python - - import asyncio - import pytest - - - @pytest.fixture - def unawaited_fixture(): - async def inner_fixture(): - return 1 - - return inner_fixture() - - - def test_foo(unawaited_fixture): - assert 1 == asyncio.run(unawaited_fixture) - - -You can also make use of `pytest_fixture_setup` to handle the coroutine/asyncgen before pytest sees it - this is the way current async pytest plugins handle it. - -If a user has an async fixture with ``autouse=True`` in their ``conftest.py``, or in a file -containing both synchronous tests and the fixture, they will receive this warning. -Unless you're using a plugin that specifically handles async fixtures -with synchronous tests, we strongly recommend against this practice. -It can lead to unpredictable behavior (with larger scopes, it may appear to "work" if an async -test is the first to request the fixture, due to value caching) and will generate -unawaited-coroutine runtime warnings (but only for non-yield fixtures). -Additionally, it creates ambiguity for other developers about whether the fixture is intended to perform -setup for synchronous tests. - -The `anyio pytest plugin `_ supports -synchronous tests with async fixtures, though certain limitations apply. - - .. _import-or-skip-import-error: ``pytest.importorskip`` default behavior regarding :class:`ImportError` @@ -423,6 +353,78 @@ an appropriate period of deprecation has passed. Some breaking changes which could not be deprecated are also listed. +.. _sync-test-async-fixture: + +sync test depending on async fixture +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 8.4 +.. versionremoved:: 9.0 + +Pytest has for a long time given an error when encountering an asynchronous test function, prompting the user to install +a plugin that can handle it. It has not given any errors if you have an asynchronous fixture that's depended on by a +synchronous test. If the fixture was an async function you did get an "unawaited coroutine" warning, but for async yield fixtures you didn't even get that. +This is a problem even if you do have a plugin installed for handling async tests, as they may require +special decorators for async fixtures to be handled, and some may not robustly handle if a user accidentally requests an +async fixture from their sync tests. Fixture values being cached can make this even more unintuitive, where everything will +"work" if the fixture is first requested by an async test, and then requested by a synchronous test. + +Unfortunately there is no 100% reliable method of identifying when a user has made a mistake, versus when they expect an +unawaited object from their fixture that they will handle on their own. To suppress this warning +when you in fact did intend to handle this you can wrap your async fixture in a synchronous fixture: + +.. code-block:: python + + import asyncio + import pytest + + + @pytest.fixture + async def unawaited_fixture(): + return 1 + + + def test_foo(unawaited_fixture): + assert 1 == asyncio.run(unawaited_fixture) + +should be changed to + + +.. code-block:: python + + import asyncio + import pytest + + + @pytest.fixture + def unawaited_fixture(): + async def inner_fixture(): + return 1 + + return inner_fixture() + + + def test_foo(unawaited_fixture): + assert 1 == asyncio.run(unawaited_fixture) + + +You can also make use of `pytest_fixture_setup` to handle the coroutine/asyncgen before pytest sees it - this is the way current async pytest plugins handle it. + +If a user has an async fixture with ``autouse=True`` in their ``conftest.py``, or in a file +containing both synchronous tests and the fixture, they will receive this warning. +Unless you're using a plugin that specifically handles async fixtures +with synchronous tests, we strongly recommend against this practice. +It can lead to unpredictable behavior (with larger scopes, it may appear to "work" if an async +test is the first to request the fixture, due to value caching) and will generate +unawaited-coroutine runtime warnings (but only for non-yield fixtures). +Additionally, it creates ambiguity for other developers about whether the fixture is intended to perform +setup for synchronous tests. + +The `anyio pytest plugin `_ supports +synchronous tests with async fixtures, though certain limitations apply. + + + Applying a mark to a fixture function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index bb9daa84726..d8d19fcac6d 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -66,7 +66,6 @@ from _pytest.scope import _ScopeName from _pytest.scope import HIGH_SCOPES from _pytest.scope import Scope -from _pytest.warning_types import PytestRemovedIn9Warning from _pytest.warning_types import PytestWarning @@ -1178,18 +1177,11 @@ def pytest_fixture_setup( fixturefunc ): auto_str = " with autouse=True" if fixturedef._autouse else "" - - warnings.warn( - PytestRemovedIn9Warning( - f"{request.node.name!r} requested an async fixture " - f"{request.fixturename!r}{auto_str}, with no plugin or hook that " - "handled it. This is usually an error, as pytest does not natively " - "support it. " - "This will turn into an error in pytest 9.\n" - "See: https://docs.pytest.org/en/stable/deprecations.html#sync-test-depending-on-async-fixture" - ), - # no stacklevel will point at users code, so we just point here - stacklevel=1, + fail( + f"{request.node.name!r} requested an async fixture {request.fixturename!r}{auto_str}, " + "with no plugin or hook that handled it. This is an error, as pytest does not natively support it.\n" + "See: https://docs.pytest.org/en/stable/deprecations.html#sync-test-depending-on-async-fixture", + pytrace=False, ) try: diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index 11cc8a7217f..f941cbe1921 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -1307,7 +1307,7 @@ def test_3(): result.assert_outcomes(failed=3) -def test_warning_on_sync_test_async_fixture(pytester: Pytester) -> None: +def test_error_on_sync_test_async_fixture(pytester: Pytester) -> None: pytester.makepyfile( test_sync=""" import pytest @@ -1324,23 +1324,17 @@ def test_foo(async_fixture): pass """ ) - result = pytester.runpytest("-Wdefault::pytest.PytestRemovedIn9Warning") + result = pytester.runpytest() + result.assert_outcomes(errors=1) result.stdout.fnmatch_lines( [ - "*== warnings summary ==*", - ( - "*PytestRemovedIn9Warning: 'test_foo' requested an async " - "fixture 'async_fixture', with no plugin or hook that handled it. " - "This is usually an error, as pytest does not natively support it. " - "This will turn into an error in pytest 9." - ), - " See: https://docs.pytest.org/en/stable/deprecations.html#sync-test-depending-on-async-fixture", + "'test_foo' requested an async fixture 'async_fixture', with no plugin or hook that handled it. " + "This is an error, as pytest does not natively support it." ] ) - result.assert_outcomes(passed=1, warnings=1) -def test_warning_on_sync_test_async_fixture_gen(pytester: Pytester) -> None: +def test_error_on_sync_test_async_fixture_gen(pytester: Pytester) -> None: pytester.makepyfile( test_sync=""" import pytest @@ -1354,23 +1348,17 @@ def test_foo(async_fixture): ... """ ) - result = pytester.runpytest("-Wdefault::pytest.PytestRemovedIn9Warning") + result = pytester.runpytest() + result.assert_outcomes(errors=1) result.stdout.fnmatch_lines( [ - "*== warnings summary ==*", - ( - "*PytestRemovedIn9Warning: 'test_foo' requested an async " - "fixture 'async_fixture', with no plugin or hook that handled it. " - "This is usually an error, as pytest does not natively support it. " - "This will turn into an error in pytest 9." - ), - " See: https://docs.pytest.org/en/stable/deprecations.html#sync-test-depending-on-async-fixture", + "'test_foo' requested an async fixture 'async_fixture', with no plugin or hook that handled it. " + "This is an error, as pytest does not natively support it." ] ) - result.assert_outcomes(passed=1, warnings=1) -def test_warning_on_sync_test_async_autouse_fixture(pytester: Pytester) -> None: +def test_error_on_sync_test_async_autouse_fixture(pytester: Pytester) -> None: pytester.makepyfile( test_sync=""" import pytest @@ -1388,21 +1376,15 @@ def test_foo(async_fixture): pass """ ) - result = pytester.runpytest("-Wdefault::pytest.PytestRemovedIn9Warning") + result = pytester.runpytest() + result.assert_outcomes(errors=1) result.stdout.fnmatch_lines( [ - "*== warnings summary ==*", - ( - "*PytestRemovedIn9Warning: 'test_foo' requested an async " - "fixture 'async_fixture' with autouse=True, with no plugin or hook " - "that handled it. " - "This is usually an error, as pytest does not natively support it. " - "This will turn into an error in pytest 9." - ), - " See: https://docs.pytest.org/en/stable/deprecations.html#sync-test-depending-on-async-fixture", + "'test_foo' requested an async fixture 'async_fixture' with autouse=True, " + "with no plugin or hook that handled it. " + "This is an error, as pytest does not natively support it." ] ) - result.assert_outcomes(passed=1, warnings=1) def test_pdb_can_be_rewritten(pytester: Pytester) -> None: From be5c7edf302cecceb9d8e9397c0daef890b8940f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 30 Nov 2025 05:42:44 +0000 Subject: [PATCH 083/307] [automated] Update plugin list (#14016) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 238 ++++++++++++++++++++----------- 1 file changed, 155 insertions(+), 83 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 99e993fa2c4..e058347ddd5 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -6,7 +6,7 @@ Pytest Plugin List ================== -Below is an automated compilation of ``pytest``` plugins available on `PyPI `_. +Below is an automated compilation of ``pytest`` plugins available on `PyPI `_. It includes PyPI projects whose names begin with ``pytest-`` or ``pytest_`` and a handful of manually selected projects. Packages classified as inactive are excluded. @@ -27,7 +27,7 @@ please refer to `the update script =7.1.1,<8.0.0) :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Nov 13, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Nov 21, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Nov 26, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -171,14 +171,14 @@ This list contains 1759 plugins. :pypi:`pytest-bdd` BDD for pytest Dec 05, 2024 6 - Mature pytest>=7.0.0 :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 - :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Aug 19, 2025 N/A pytest>=7.1.3 + :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Nov 23, 2025 N/A pytest>=7.1.3 :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Nov 19, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Nov 26, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -197,7 +197,7 @@ This list contains 1759 plugins. :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A - :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Nov 10, 2025 N/A pytest + :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Nov 24, 2025 N/A pytest :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest @@ -239,16 +239,17 @@ This list contains 1759 plugins. :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A :pypi:`pytest-capture-warnings` pytest plugin to capture all warnings and put them in one file of your choice May 03, 2022 N/A pytest :pypi:`pytest-case` A clean, modern, wrapper for pytest.mark.parametrize Nov 25, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Oct 26, 2025 3 - Alpha pytest<9,>=8 + :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Nov 26, 2025 3 - Alpha pytest<9,>=8 :pypi:`pytest-cases` Separate test code from test cases in pytest. Jun 09, 2025 5 - Production/Stable pytest :pypi:`pytest-case-start-from` A pytest plugin to start test execution from a specific test case Oct 28, 2025 4 - Beta pytest>=6.0.0 :pypi:`pytest-casewise-package-install` A pytest plugin for test case-level dynamic dependency management Oct 31, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-cassandra` Cassandra CCM Test Fixtures for pytest Nov 04, 2017 1 - Planning N/A :pypi:`pytest-catchlog` py.test plugin to catch log messages. This is a fork of pytest-capturelog. Jan 24, 2016 4 - Beta pytest (>=2.6) :pypi:`pytest-catch-server` Pytest plugin with server for catching HTTP requests. Dec 12, 2019 5 - Production/Stable N/A - :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Nov 14, 2025 N/A pytest>=8 + :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Nov 26, 2025 N/A pytest>=8 :pypi:`pytest-celery` Pytest plugin for Celery Jul 30, 2025 5 - Production/Stable N/A :pypi:`pytest-celery-py37` Pytest plugin for Celery (compatible with python 3.7) May 23, 2025 5 - Production/Stable N/A + :pypi:`pytest-celery-utils` Pytest plugin for inspecting Celery task queues in Redis during tests Nov 26, 2025 N/A pytest>=9.0.1 :pypi:`pytest-cfg-fetcher` Pass config options to your unit tests. Feb 26, 2024 N/A N/A :pypi:`pytest-chainmaker` pytest plugin for chainmaker Oct 15, 2021 N/A N/A :pypi:`pytest-chalice` A set of py.test fixtures for AWS Chalice Jul 01, 2020 4 - Beta N/A @@ -257,7 +258,7 @@ This list contains 1759 plugins. :pypi:`pytest-change-report` turn . into √,turn F into x Sep 14, 2020 N/A pytest :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) - :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Oct 07, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Nov 29, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-checkdocs` check the README when running tests Apr 30, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 :pypi:`pytest-check-library` check your missing library Jul 17, 2022 N/A N/A @@ -270,7 +271,7 @@ This list contains 1759 plugins. :pypi:`pytest-chic-report` Simple pytest plugin for generating and sending report to messengers. Nov 01, 2024 N/A pytest>=6.0 :pypi:`pytest-chinesereport` Apr 16, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-choose` Provide the pytest with the ability to collect use cases based on rules in text files Feb 04, 2024 N/A pytest >=7.0.0 - :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Oct 30, 2025 N/A pytest>=8.0; extra == "dev" + :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Nov 28, 2025 N/A pytest>=8.0; extra == "dev" :pypi:`pytest-chunks` Run only a chunk of your test suite Jul 05, 2022 N/A pytest (>=6.0.0) :pypi:`pytest_cid` Compare data structures containing matching CIDs of different versions and encoding Sep 01, 2023 4 - Beta pytest >= 5.0, < 7.0 :pypi:`pytest-circleci` py.test plugin for CircleCI May 03, 2019 N/A N/A @@ -299,7 +300,7 @@ This list contains 1759 plugins. :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Nov 16, 2025 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Nov 26, 2025 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -343,6 +344,7 @@ This list contains 1759 plugins. :pypi:`pytest-cpp` Use pytest's runner to discover and execute C++ tests Sep 18, 2024 5 - Production/Stable pytest :pypi:`pytest-cqase` Custom qase pytest plugin Aug 22, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-cram` Run cram tests with pytest. Aug 08, 2020 N/A N/A + :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Nov 25, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-crate` Manages CrateDB instances during your integration tests May 28, 2019 3 - Alpha pytest (>=4.0) :pypi:`pytest-cratedb` Manage CrateDB instances for integration tests Oct 08, 2024 4 - Beta pytest<9 :pypi:`pytest-cratedb-reporter` A pytest plugin for reporting test results to CrateDB Mar 11, 2025 N/A pytest>=6.0.0 @@ -415,7 +417,7 @@ This list contains 1759 plugins. :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Sep 13, 2025 N/A pytest + :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Nov 23, 2025 N/A pytest :pypi:`pytest-dhos` Common fixtures for pytest in DHOS services and libraries Sep 07, 2022 N/A N/A :pypi:`pytest-diamond` pytest plugin for diamond Aug 31, 2015 4 - Beta N/A :pypi:`pytest-dicom` pytest plugin to provide DICOM fixtures Dec 19, 2018 3 - Alpha pytest @@ -501,14 +503,14 @@ This list contains 1759 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Nov 07, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Nov 28, 2025 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 - :pypi:`pytest-dynamic-parameterize` A Python package for managing pytest plugins. Oct 14, 2025 N/A pytest + :pypi:`pytest-dynamic-parameterize` A Python package for managing pytest plugins. Nov 25, 2025 4 - Beta pytest>=9.0.1 :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A @@ -553,6 +555,7 @@ This list contains 1759 plugins. :pypi:`pytest-envvars` Pytest plugin to validate use of envvars on your tests Jun 13, 2020 5 - Production/Stable pytest (>=3.0.0) :pypi:`pytest-envx` Pytest plugin for managing environment variables with interpolation and .env file support. Jun 28, 2025 4 - Beta pytest>=8.4.1 :pypi:`pytest-env-yaml` Apr 02, 2019 N/A N/A + :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Nov 26, 2025 N/A pytest<10.0.0,>=9.0.1 :pypi:`pytest-eradicate` pytest plugin to check for commented out code Sep 08, 2020 N/A pytest (>=2.4.2) :pypi:`pytest_erp` py.test plugin to send test info to report portal dynamically Jan 13, 2015 N/A N/A :pypi:`pytest-error-for-skips` Pytest plugin to treat skipped tests a test failure Dec 19, 2019 4 - Beta pytest (>=4.6) @@ -675,7 +678,7 @@ This list contains 1759 plugins. :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) - :pypi:`pytest-funcnodes` Testing plugin for funcnodes Nov 13, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-funcnodes` Testing plugin for funcnodes Nov 27, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A @@ -705,13 +708,13 @@ This list contains 1759 plugins. :pypi:`pytest-gitignore` py.test plugin to ignore the same files as git Jul 17, 2015 4 - Beta N/A :pypi:`pytest-gitlab` Pytest Plugin for Gitlab Oct 16, 2024 N/A N/A :pypi:`pytest-gitlabci-parallelized` Parallelize pytest across GitLab CI workers. Mar 08, 2023 N/A N/A - :pypi:`pytest-gitlab-code-quality` Collects warnings while testing and generates a GitLab Code Quality Report. Sep 09, 2024 N/A pytest>=8.1.1 + :pypi:`pytest-gitlab-code-quality` Collects warnings while testing and generates a GitLab Code Quality Report. Nov 23, 2025 N/A pytest>=8.1.1 :pypi:`pytest-gitlab-fold` Folds output sections in GitLab CI build log Dec 31, 2023 4 - Beta pytest >=2.6.0 :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jul 20, 2025 4 - Beta pytest<=8.4.1 :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest - :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jul 18, 2022 N/A pytest (>=6.1.2) + :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Nov 23, 2025 5 - Production/Stable pytest>=6.1.2 :pypi:`pytest-goldie` A plugin to support golden tests with pytest. May 23, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-google-chat` Notify google chat channel for test results Mar 27, 2022 4 - Beta pytest :pypi:`pytest-google-cloud-storage` Pytest custom features, e.g. fixtures and various tests. Aimed to emulate Google Cloud Storage service Sep 11, 2025 N/A pytest>=8.0.0 @@ -719,7 +722,7 @@ This list contains 1759 plugins. :pypi:`pytest-gradescope` A pytest plugin for Gradescope integration Apr 29, 2025 N/A N/A :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A - :pypi:`pytest-greener` Pytest plugin for Greener Nov 18, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-greener` Pytest plugin for Greener Nov 28, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) @@ -755,9 +758,9 @@ This list contains 1759 plugins. :pypi:`pytest-hoverfly-wrapper` Integrates the Hoverfly HTTP proxy into Pytest Feb 27, 2023 5 - Production/Stable pytest (>=3.7.0) :pypi:`pytest-hpfeeds` Helpers for testing hpfeeds in your python project Feb 28, 2023 4 - Beta pytest (>=6.2.4,<7.0.0) :pypi:`pytest-html` pytest plugin for generating HTML reports Nov 07, 2023 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-html5` the best report for pytest Oct 11, 2025 N/A N/A + :pypi:`pytest-html5` the best report for pytest Nov 26, 2025 N/A N/A :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 - :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 22, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A @@ -786,7 +789,7 @@ This list contains 1759 plugins. :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A - :pypi:`pytest-human` A beautiful nested pytest HTML test report Nov 17, 2025 4 - Beta pytest>=8.0.0 + :pypi:`pytest-human` A beautiful nested pytest HTML test report Nov 24, 2025 4 - Beta pytest>=8 :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 @@ -808,10 +811,11 @@ This list contains 1759 plugins. :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Nov 20, 2025 4 - Beta pytest~=8.3 + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Nov 24, 2025 4 - Beta pytest~=8.3 :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 + :pypi:`pytest-inject` A pytest plugin that allows you to inject arguments into fixtures and parametrized tests using pytest command-line options. Nov 25, 2025 N/A pytest>=6.0.0 :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest @@ -864,9 +868,10 @@ This list contains 1759 plugins. :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Sep 13, 2025 N/A pytest + :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Nov 26, 2025 N/A pytest :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 :pypi:`pytest-jubilant` Add your description here Jul 28, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest @@ -924,7 +929,7 @@ This list contains 1759 plugins. :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest - :pypi:`pytest-localserver` pytest plugin to test server connections locally. Oct 06, 2024 4 - Beta N/A + :pypi:`pytest-localserver` pytest plugin to test server connections locally. Nov 24, 2025 4 - Beta N/A :pypi:`pytest-localstack` Pytest plugin for AWS integration tests Jun 07, 2023 4 - Beta pytest (>=6.0.0,<7.0.0) :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-lockable` lockable resource plugin for pytest Sep 08, 2025 5 - Production/Stable pytest @@ -939,7 +944,7 @@ This list contains 1759 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Nov 16, 2025 5 - Production/Stable pytest==9.0.1 + :pypi:`pytest-logikal` Common testing environment Nov 28, 2025 5 - Production/Stable pytest==9.0.1 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -980,7 +985,7 @@ This list contains 1759 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 19, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 28, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1168,9 +1173,9 @@ This list contains 1759 plugins. :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) - :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Sep 08, 2025 N/A pytest<9.0.0,>=6.2.4 + :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A - :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Sep 08, 2025 N/A pytest<9.0.0,>=6.2.4 + :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Nov 01, 2025 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A @@ -1181,7 +1186,7 @@ This list contains 1759 plugins. :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Nov 17, 2025 N/A pytest + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Nov 25, 2025 4 - Beta pytest>=9.0.1 :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-pogo` Pytest plugin for pogo-migrate May 05, 2025 4 - Beta pytest<9,>=7 @@ -1227,7 +1232,7 @@ This list contains 1759 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Nov 21, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Nov 28, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1247,7 +1252,7 @@ This list contains 1759 plugins. :pypi:`pytest-pyramid-server` Pyramid server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-pyreport` PyReport is a lightweight reporting plugin for Pytest that provides concise HTML report May 05, 2024 N/A pytest :pypi:`pytest-pyright` Pytest plugin for type checking code with Pyright Jan 26, 2024 4 - Beta pytest >=7.0.0 - :pypi:`pytest-pyspark-plugin` Pytest pyspark plugin (p3) Jul 28, 2025 4 - Beta pytest>=8.0.0 + :pypi:`pytest-pyspark-plugin` Pytest pyspark plugin (p3) Nov 23, 2025 4 - Beta pytest>=8.0.0 :pypi:`pytest-pyspec` The pytest-pyspec plugin transforms pytest output into a beautiful, readable format similar to RSpec. It provides semantic meaning to your tests by organizing them into descriptive hierarchies, using the prefixes \`Describe\`/\`Test\`, \`With\`/\`Without\`/\`When\`, and \`test\`/\`it\`, while allowing docstrings and decorators to override the descriptions. Nov 18, 2025 5 - Production/Stable pytest<10,>=9 :pypi:`pytest-pystack` Plugin to run pystack after a timeout for a test suite. Nov 16, 2024 N/A pytest>=3.5.0 :pypi:`pytest-pytestdb` Add your description here Sep 14, 2025 N/A N/A @@ -1311,6 +1316,7 @@ This list contains 1759 plugins. :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest + :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Nov 29, 2025 N/A pytest>=7.0.0 :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Feb 05, 2025 5 - Production/Stable pytest :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance May 05, 2025 3 - Alpha pytest @@ -1343,7 +1349,7 @@ This list contains 1759 plugins. :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A - :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Nov 17, 2025 4 - Beta pytest + :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Nov 23, 2025 4 - Beta pytest :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 @@ -1366,7 +1372,7 @@ This list contains 1759 plugins. :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A - :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Oct 23, 2025 4 - Beta pytest<9,>=7.0 + :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Nov 24, 2025 4 - Beta pytest<9,>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest @@ -1387,7 +1393,7 @@ This list contains 1759 plugins. :pypi:`pytest-ruff` pytest plugin to check ruff requirements. Jun 19, 2025 4 - Beta pytest>=5 :pypi:`pytest-run-changed` Pytest plugin that runs changed tests only Apr 02, 2021 3 - Alpha pytest :pypi:`pytest-runfailed` implement a --failed option for pytest Mar 24, 2016 N/A N/A - :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Oct 23, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Nov 24, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-run-subprocess` Pytest Plugin for running and testing subprocesses. Nov 12, 2022 5 - Production/Stable pytest :pypi:`pytest-runtime-types` Checks type annotations on runtime while running tests. Feb 09, 2023 N/A pytest :pypi:`pytest-runtime-xfail` Call runtime_xfail() to mark running test as xfail. Oct 10, 2025 5 - Production/Stable pytest>=5.0.0 @@ -1404,7 +1410,7 @@ This list contains 1759 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 22, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 29, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Nov 22, 2025 N/A N/A @@ -1417,7 +1423,7 @@ This list contains 1759 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 22, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 29, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1508,7 +1514,7 @@ This list contains 1759 plugins. :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 - :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 17, 2025 N/A N/A + :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 24, 2025 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A :pypi:`pytest-sqlalchemy` pytest plugin with sqlalchemy related fixtures Apr 19, 2025 3 - Alpha pytest>=8.0 @@ -1578,6 +1584,7 @@ This list contains 1759 plugins. :pypi:`pytest-terraform-fixture` generate terraform resources to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-test-analyzer` A powerful tool for analyzing pytest test files and generating detailed reports Jun 14, 2025 4 - Beta N/A :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A + :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Nov 29, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest @@ -1614,6 +1621,7 @@ This list contains 1759 plugins. :pypi:`pytest-test-tracer-for-pytest-bdd` A plugin that allows coll test data for use on Test Tracer Aug 20, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-test-utils` Feb 08, 2024 N/A pytest >=3.9 :pypi:`pytest-tesults` Tesults plugin for pytest Nov 12, 2024 5 - Production/Stable pytest>=3.5.0 + :pypi:`pytest-texts-score` Texts content similarity scoring plugin Nov 26, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-textual-snapshot` Snapshot testing for Textual apps Jan 23, 2025 5 - Production/Stable pytest>=8.0.0 :pypi:`pytest-tezos` pytest-ligo Jan 16, 2020 4 - Beta N/A :pypi:`pytest-tf` Test your OpenTofu and Terraform config using a PyTest plugin May 29, 2024 N/A pytest<9.0.0,>=8.2.1 @@ -1666,7 +1674,7 @@ This list contains 1759 plugins. :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A - :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Nov 20, 2025 N/A pytest<=9.0.1,>=7.4 + :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Nov 29, 2025 N/A pytest<=9.0.1,>=7.4 :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A @@ -1747,6 +1755,7 @@ This list contains 1759 plugins. :pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0) :pypi:`pytest-xdist-gnumake` A small example package Jun 22, 2025 N/A pytest :pypi:`pytest-xdist-load-testing` xdist scheduler to repeately run tests Nov 22, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Nov 24, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Jun 10, 2025 N/A pytest<9.0.0,>=8.0.0 @@ -2233,7 +2242,7 @@ This list contains 1759 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Nov 21, 2025, + *last release*: Nov 26, 2025, *status*: N/A, *requires*: pytest==7.2.2 @@ -2758,7 +2767,7 @@ This list contains 1759 plugins. BDD for pytest :pypi:`pytest-bdd-report` - *last release*: Aug 19, 2025, + *last release*: Nov 23, 2025, *status*: N/A, *requires*: pytest>=7.1.3 @@ -2807,7 +2816,7 @@ This list contains 1759 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Nov 19, 2025, + *last release*: Nov 26, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -2940,7 +2949,7 @@ This list contains 1759 plugins. pytest plugin to mark a test as blocker and skip all other tests :pypi:`pytest-b-logger` - *last release*: Nov 10, 2025, + *last release*: Nov 24, 2025, *status*: N/A, *requires*: pytest @@ -3234,7 +3243,7 @@ This list contains 1759 plugins. A clean, modern, wrapper for pytest.mark.parametrize :pypi:`pytest-case-provider` - *last release*: Oct 26, 2025, + *last release*: Nov 26, 2025, *status*: 3 - Alpha, *requires*: pytest<9,>=8 @@ -3283,7 +3292,7 @@ This list contains 1759 plugins. Pytest plugin with server for catching HTTP requests. :pypi:`pytest-cdist` - *last release*: Nov 14, 2025, + *last release*: Nov 26, 2025, *status*: N/A, *requires*: pytest>=8 @@ -3303,6 +3312,13 @@ This list contains 1759 plugins. Pytest plugin for Celery (compatible with python 3.7) + :pypi:`pytest-celery-utils` + *last release*: Nov 26, 2025, + *status*: N/A, + *requires*: pytest>=9.0.1 + + Pytest plugin for inspecting Celery task queues in Redis during tests + :pypi:`pytest-cfg-fetcher` *last release*: Feb 26, 2024, *status*: N/A, @@ -3360,7 +3376,7 @@ This list contains 1759 plugins. A pytest fixture for changing current working directory :pypi:`pytest-check` - *last release*: Oct 07, 2025, + *last release*: Nov 29, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -3451,7 +3467,7 @@ This list contains 1759 plugins. Provide the pytest with the ability to collect use cases based on rules in text files :pypi:`pytest-chronicle` - *last release*: Oct 30, 2025, + *last release*: Nov 28, 2025, *status*: N/A, *requires*: pytest>=8.0; extra == "dev" @@ -3654,7 +3670,7 @@ This list contains 1759 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Nov 16, 2025, + *last release*: Nov 26, 2025, *status*: 4 - Beta, *requires*: pytest @@ -3961,6 +3977,13 @@ This list contains 1759 plugins. Run cram tests with pytest. + :pypi:`pytest-crap` + *last release*: Nov 25, 2025, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + pytest plugin that calculates CRAP scores to guide test writing + :pypi:`pytest-crate` *last release*: May 28, 2019, *status*: 3 - Alpha, @@ -4466,7 +4489,7 @@ This list contains 1759 plugins. DevPI server fixture for py.test :pypi:`pytest-dfm` - *last release*: Sep 13, 2025, + *last release*: Nov 23, 2025, *status*: N/A, *requires*: pytest @@ -5068,7 +5091,7 @@ This list contains 1759 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Nov 07, 2025, + *last release*: Nov 28, 2025, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5117,9 +5140,9 @@ This list contains 1759 plugins. Pytest plugin reporting fixtures and test functions execution time. :pypi:`pytest-dynamic-parameterize` - *last release*: Oct 14, 2025, - *status*: N/A, - *requires*: pytest + *last release*: Nov 25, 2025, + *status*: 4 - Beta, + *requires*: pytest>=9.0.1 A Python package for managing pytest plugins. @@ -5431,6 +5454,13 @@ This list contains 1759 plugins. + :pypi:`pytest-ephemeral-container` + *last release*: Nov 26, 2025, + *status*: N/A, + *requires*: pytest<10.0.0,>=9.0.1 + + Spawn epehemeral containers in pytest + :pypi:`pytest-eradicate` *last release*: Sep 08, 2020, *status*: N/A, @@ -6286,7 +6316,7 @@ This list contains 1759 plugins. Pytest plugin for measuring function coverage :pypi:`pytest-funcnodes` - *last release*: Nov 13, 2025, + *last release*: Nov 27, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -6496,7 +6526,7 @@ This list contains 1759 plugins. Parallelize pytest across GitLab CI workers. :pypi:`pytest-gitlab-code-quality` - *last release*: Sep 09, 2024, + *last release*: Nov 23, 2025, *status*: N/A, *requires*: pytest>=8.1.1 @@ -6538,9 +6568,9 @@ This list contains 1759 plugins. Pytest fixtures for testing with gnupg. :pypi:`pytest-golden` - *last release*: Jul 18, 2022, - *status*: N/A, - *requires*: pytest (>=6.1.2) + *last release*: Nov 23, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest>=6.1.2 Plugin for pytest that offloads expected outputs to data files @@ -6594,7 +6624,7 @@ This list contains 1759 plugins. Green progress dots :pypi:`pytest-greener` - *last release*: Nov 18, 2025, + *last release*: Nov 28, 2025, *status*: N/A, *requires*: pytest<9.0.0,>=8.3.3 @@ -6846,7 +6876,7 @@ This list contains 1759 plugins. pytest plugin for generating HTML reports :pypi:`pytest-html5` - *last release*: Oct 11, 2025, + *last release*: Nov 26, 2025, *status*: N/A, *requires*: N/A @@ -6860,7 +6890,7 @@ This list contains 1759 plugins. pytest plugin for generating HTML reports :pypi:`pytest-html-dashboard` - *last release*: Nov 22, 2025, + *last release*: Nov 24, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -7063,9 +7093,9 @@ This list contains 1759 plugins. Visualise PyTest status via your Phillips Hue lights :pypi:`pytest-human` - *last release*: Nov 17, 2025, + *last release*: Nov 24, 2025, *status*: 4 - Beta, - *requires*: pytest>=8.0.0 + *requires*: pytest>=8 A beautiful nested pytest HTML test report @@ -7217,7 +7247,7 @@ This list contains 1759 plugins. display more node ininformation. :pypi:`pytest-infrahouse` - *last release*: Nov 20, 2025, + *last release*: Nov 24, 2025, *status*: 4 - Beta, *requires*: pytest~=8.3 @@ -7244,6 +7274,13 @@ This list contains 1759 plugins. Plugin for sending automation test data from Pytest to the initry + :pypi:`pytest-inject` + *last release*: Nov 25, 2025, + *status*: N/A, + *requires*: pytest>=6.0.0 + + A pytest plugin that allows you to inject arguments into fixtures and parametrized tests using pytest command-line options. + :pypi:`pytest-inline` *last release*: Oct 24, 2024, *status*: 4 - Beta, @@ -7609,7 +7646,7 @@ This list contains 1759 plugins. A pytest plugin to perform JSONSchema validations :pypi:`pytest-jsonschema-snapshot` - *last release*: Sep 13, 2025, + *last release*: Nov 26, 2025, *status*: N/A, *requires*: pytest @@ -7629,6 +7666,13 @@ This list contains 1759 plugins. Add your description here + :pypi:`pytest-junit-logging` + *last release*: Nov 27, 2025, + *status*: 4 - Beta, + *requires*: pytest>=6.0 + + A pytest plugin for embedding log output into JUnit XML reports + :pypi:`pytest-junit-xray-xml` *last release*: Jan 01, 2025, *status*: 4 - Beta, @@ -8029,7 +8073,7 @@ This list contains 1759 plugins. A PyTest plugin which provides an FTP fixture for your tests :pypi:`pytest-localserver` - *last release*: Oct 06, 2024, + *last release*: Nov 24, 2025, *status*: 4 - Beta, *requires*: N/A @@ -8134,7 +8178,7 @@ This list contains 1759 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Nov 16, 2025, + *last release*: Nov 28, 2025, *status*: 5 - Production/Stable, *requires*: pytest==9.0.1 @@ -8421,7 +8465,7 @@ This list contains 1759 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Nov 19, 2025, + *last release*: Nov 28, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -9737,9 +9781,9 @@ This list contains 1759 plugins. Pytest plugin for reading playbooks. :pypi:`pytest-playwright` - *last release*: Sep 08, 2025, + *last release*: Nov 24, 2025, *status*: N/A, - *requires*: pytest<9.0.0,>=6.2.4 + *requires*: pytest<10.0.0,>=6.2.4 A pytest wrapper with fixtures for Playwright to automate web browsers @@ -9751,9 +9795,9 @@ This list contains 1759 plugins. ASYNC Pytest plugin for Playwright :pypi:`pytest-playwright-asyncio` - *last release*: Sep 08, 2025, + *last release*: Nov 24, 2025, *status*: N/A, - *requires*: pytest<9.0.0,>=6.2.4 + *requires*: pytest<10.0.0,>=6.2.4 A pytest wrapper with async fixtures for Playwright to automate web browsers @@ -9828,9 +9872,9 @@ This list contains 1759 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Nov 17, 2025, - *status*: N/A, - *requires*: pytest + *last release*: Nov 25, 2025, + *status*: 4 - Beta, + *requires*: pytest>=9.0.1 A Python package for managing pytest plugins. @@ -10150,7 +10194,7 @@ This list contains 1759 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Nov 21, 2025, + *last release*: Nov 28, 2025, *status*: N/A, *requires*: pytest==8.4.2 @@ -10290,7 +10334,7 @@ This list contains 1759 plugins. Pytest plugin for type checking code with Pyright :pypi:`pytest-pyspark-plugin` - *last release*: Jul 28, 2025, + *last release*: Nov 23, 2025, *status*: 4 - Beta, *requires*: pytest>=8.0.0 @@ -10737,6 +10781,13 @@ This list contains 1759 plugins. pytest plugin for repeating tests + :pypi:`pytest-repeated` + *last release*: Nov 29, 2025, + *status*: N/A, + *requires*: pytest>=7.0.0 + + A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. + :pypi:`pytest_repeater` *last release*: Feb 09, 2018, *status*: 1 - Planning, @@ -10962,7 +11013,7 @@ This list contains 1759 plugins. pytest plugin to re-run tests to eliminate flaky failures :pypi:`pytest-reserial` - *last release*: Nov 17, 2025, + *last release*: Nov 23, 2025, *status*: 4 - Beta, *requires*: pytest @@ -11123,7 +11174,7 @@ This list contains 1759 plugins. :pypi:`pytest-revealtype-injector` - *last release*: Oct 23, 2025, + *last release*: Nov 24, 2025, *status*: 4 - Beta, *requires*: pytest<9,>=7.0 @@ -11270,7 +11321,7 @@ This list contains 1759 plugins. implement a --failed option for pytest :pypi:`pytest-run-parallel` - *last release*: Oct 23, 2025, + *last release*: Nov 24, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -11389,7 +11440,7 @@ This list contains 1759 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Nov 22, 2025, + *last release*: Nov 29, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11480,7 +11531,7 @@ This list contains 1759 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Nov 22, 2025, + *last release*: Nov 29, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -12117,7 +12168,7 @@ This list contains 1759 plugins. A Dynamic test tool for Splunk Apps and Add-ons :pypi:`pytest-splunk-addon-ui-smartx` - *last release*: Nov 17, 2025, + *last release*: Nov 24, 2025, *status*: N/A, *requires*: N/A @@ -12606,6 +12657,13 @@ This list contains 1759 plugins. A plugin to run tests written in Jupyter notebook + :pypi:`pytest-test-categories` + *last release*: Nov 29, 2025, + *status*: 4 - Beta, + *requires*: pytest>=8.4.2 + + A pytest plugin to enforce test timing constraints and size distributions. + :pypi:`pytest-testconfig` *last release*: Jan 11, 2020, *status*: 4 - Beta, @@ -12858,6 +12916,13 @@ This list contains 1759 plugins. Tesults plugin for pytest + :pypi:`pytest-texts-score` + *last release*: Nov 26, 2025, + *status*: 4 - Beta, + *requires*: pytest>=8.4.2 + + Texts content similarity scoring plugin + :pypi:`pytest-textual-snapshot` *last release*: Jan 23, 2025, *status*: 5 - Production/Stable, @@ -13223,7 +13288,7 @@ This list contains 1759 plugins. Text User Interface (TUI) and HTML report for Pytest test runs :pypi:`pytest-tui-runner` - *last release*: Nov 20, 2025, + *last release*: Nov 29, 2025, *status*: N/A, *requires*: pytest<=9.0.1,>=7.4 @@ -13789,6 +13854,13 @@ This list contains 1759 plugins. xdist scheduler to repeately run tests + :pypi:`pytest-xdist-rate-limit` + *last release*: Nov 24, 2025, + *status*: 4 - Beta, + *requires*: pytest>=8.4.2 + + Shared state management and rate limiting for pytest-xdist workers + :pypi:`pytest-xdist-tracker` *last release*: Nov 18, 2021, *status*: 3 - Alpha, From 8fb7815f1440c7cf8718c248639109a779db575d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 06:35:35 +0100 Subject: [PATCH 084/307] build(deps): Bump actions/checkout from 5 to 6 (#14020) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 6 +++--- .github/workflows/doc-check-links.yml | 2 +- .github/workflows/prepare-release-pr.yml | 2 +- .github/workflows/test.yml | 4 ++-- .github/workflows/update-plugin-list.yml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3c71166d969..cb45154f412 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: attestations: write steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -42,7 +42,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -99,7 +99,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: true diff --git a/.github/workflows/doc-check-links.yml b/.github/workflows/doc-check-links.yml index 9de20b37cc3..6d31b9903c1 100644 --- a/.github/workflows/doc-check-links.yml +++ b/.github/workflows/doc-check-links.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/prepare-release-pr.yml b/.github/workflows/prepare-release-pr.yml index 94b3dfc7710..715392e1b01 100644 --- a/.github/workflows/prepare-release-pr.yml +++ b/.github/workflows/prepare-release-pr.yml @@ -27,7 +27,7 @@ jobs: pull-requests: write steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 # persist-credentials is needed in order for us to push the release branch. diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index de40c8a10e2..59eda632959 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,7 +37,7 @@ jobs: package: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -251,7 +251,7 @@ jobs: continue-on-error: ${{ matrix.xfail && true || false }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index c4d3087f285..f8577e34673 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false From 64e3c9105037d4d388c18272ade084c610ca34e6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 03:02:53 +0100 Subject: [PATCH 085/307] [pre-commit.ci] pre-commit autoupdate (#14022) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.6 → v0.14.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.6...v0.14.7) - [github.com/woodruffw/zizmor-pre-commit: v1.16.3 → v1.18.0](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.16.3...v1.18.0) - [github.com/pre-commit/mirrors-mypy: v1.18.2 → v1.19.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.18.2...v1.19.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6b70abd2985..18eb11f4d8b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.6" + rev: "v0.14.7" hooks: - id: ruff-check args: ["--fix"] @@ -13,7 +13,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.16.3 + rev: v1.18.0 hooks: - id: zizmor args: ["--fix"] @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.18.2 + rev: v1.19.0 hooks: - id: mypy files: ^(src/|testing/|scripts/) From 4488b9e4c8b06e15b9ac3d6860655abf4f028d1b Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 2 Dec 2025 01:58:20 -0500 Subject: [PATCH 086/307] feat: add `--report-chars` long option and its corresponding test --- src/_pytest/terminal.py | 1 + testing/test_config.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index e66e4f48dd6..837a78cc568 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -189,6 +189,7 @@ def pytest_addoption(parser: Parser) -> None: ) group._addoption( # private to use reserved lower-case short option "-r", + "--report-chars", action="store", dest="reportchars", default=_REPORTCHARS_DEFAULT, diff --git a/testing/test_config.py b/testing/test_config.py index cb916a8b15a..15691351cd4 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -97,6 +97,14 @@ def test_append_parse_args( assert config.option.tbstyle == "short" assert config.option.verbose + def test_report_chars_long_option( + self, pytester: Pytester, tmp_path: Path, monkeypatch: MonkeyPatch + ) -> None: + """Test that --report-chars is parsed correctly.""" + monkeypatch.setenv("PYTEST_ADDOPTS", '--report-chars=fE') + config = pytester.parseconfig(tmp_path) + assert config.option.reportchars == "fE" + def test_tox_ini_wrong_version(self, pytester: Pytester) -> None: pytester.makefile( ".ini", From 90365c87c3770412bf65568bebadfb35179c2327 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 2 Dec 2025 02:08:23 -0500 Subject: [PATCH 087/307] docs: Add `--report-chars` long option to `-r` in reference documentation. --- doc/en/reference/reference.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 57415a18cc1..d0f9c9266a4 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -2910,7 +2910,7 @@ Output and Reporting Set verbosity level explicitly. Default: 0. -.. option:: -r CHARS +.. option:: -r CHARS, --report-chars=CHARS Show extra test summary info as specified by chars: From 7a2e12ff4a416da9759fd46047706e1fdab5bbb0 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 2 Dec 2025 02:10:46 -0500 Subject: [PATCH 088/307] docs: add Junhao Liao to AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index a089ca678f7..55892463e30 100644 --- a/AUTHORS +++ b/AUTHORS @@ -237,6 +237,7 @@ Joseph Sawaya Josh Karpel Joshua Bronson Julian Valentin +Junhao Liao Jurko Gospodnetić Justice Ndou Justyna Janczyszyn From aaa7d0ade3717b79593b510ea658e18af7e16fa3 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 2 Dec 2025 02:14:26 -0500 Subject: [PATCH 089/307] add changelog --- changelog/14023.feature.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/14023.feature.rst diff --git a/changelog/14023.feature.rst b/changelog/14023.feature.rst new file mode 100644 index 00000000000..c5449271212 --- /dev/null +++ b/changelog/14023.feature.rst @@ -0,0 +1 @@ +Added --report-chars long CLI option. \ No newline at end of file From 8ba1639ff6d57c647b327fb3d92cc735661688c4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 07:15:01 +0000 Subject: [PATCH 090/307] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- changelog/14023.feature.rst | 2 +- testing/test_config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/14023.feature.rst b/changelog/14023.feature.rst index c5449271212..67c5cd75ead 100644 --- a/changelog/14023.feature.rst +++ b/changelog/14023.feature.rst @@ -1 +1 @@ -Added --report-chars long CLI option. \ No newline at end of file +Added --report-chars long CLI option. diff --git a/testing/test_config.py b/testing/test_config.py index 15691351cd4..1062e0888dc 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -101,7 +101,7 @@ def test_report_chars_long_option( self, pytester: Pytester, tmp_path: Path, monkeypatch: MonkeyPatch ) -> None: """Test that --report-chars is parsed correctly.""" - monkeypatch.setenv("PYTEST_ADDOPTS", '--report-chars=fE') + monkeypatch.setenv("PYTEST_ADDOPTS", "--report-chars=fE") config = pytester.parseconfig(tmp_path) assert config.option.reportchars == "fE" From 12bd5ae04c9842093d99ac69e350a4bcd3dbc26e Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 2 Dec 2025 02:17:27 -0500 Subject: [PATCH 091/307] docs: format CLI option in changelog entry --- changelog/14023.feature.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/14023.feature.rst b/changelog/14023.feature.rst index 67c5cd75ead..5d0f07c942e 100644 --- a/changelog/14023.feature.rst +++ b/changelog/14023.feature.rst @@ -1 +1 @@ -Added --report-chars long CLI option. +Added `--report-chars` long CLI option. From c116ac0b7d6063e81d3ea2858a3d1d21fc8f9b55 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 2 Dec 2025 13:23:48 -0500 Subject: [PATCH 092/307] test: parameterize report-chars option parsing to cover short and long forms with various values. --- testing/test_config.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/testing/test_config.py b/testing/test_config.py index 1062e0888dc..e76f01e1ec5 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -97,13 +97,29 @@ def test_append_parse_args( assert config.option.tbstyle == "short" assert config.option.verbose - def test_report_chars_long_option( - self, pytester: Pytester, tmp_path: Path, monkeypatch: MonkeyPatch + @pytest.mark.parametrize( + "opts, expected", + [ + ("-rfE", "fE"), + ("--report-chars=fE", "fE"), + ("-rA", "A"), + ("--report-chars=A", "A"), + ("-rfs", "fs"), + ("--report-chars=fs", "fs"), + ], + ) + def test_report_chars_option( + self, + pytester: Pytester, + tmp_path: Path, + monkeypatch: MonkeyPatch, + opts: str, + expected: str, ) -> None: - """Test that --report-chars is parsed correctly.""" - monkeypatch.setenv("PYTEST_ADDOPTS", "--report-chars=fE") + """Test that -r/--report-chars is parsed correctly.""" + monkeypatch.setenv("PYTEST_ADDOPTS", opts) config = pytester.parseconfig(tmp_path) - assert config.option.reportchars == "fE" + assert config.option.reportchars == expected def test_tox_ini_wrong_version(self, pytester: Pytester) -> None: pytester.makefile( From 8b3550c6cb4ea3898140df153a83addc8cd65710 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Dec 2025 16:02:18 +0100 Subject: [PATCH 093/307] build(deps): Bump django in /testing/plugins_integration (#14027) Bumps [django](https://github.com/django/django) from 5.2.8 to 5.2.9. - [Commits](https://github.com/django/django/compare/5.2.8...5.2.9) --- updated-dependencies: - dependency-name: django dependency-version: 5.2.9 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index f33ac01f848..e9a349945af 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.11.0 -django==5.2.8 +django==5.2.9 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 From 6c3b2bab072a724bdfc85580231fa804b37fdef7 Mon Sep 17 00:00:00 2001 From: jakkdl Date: Thu, 4 Dec 2025 15:54:11 +0100 Subject: [PATCH 094/307] make parametrize nicer --- testing/test_config.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/testing/test_config.py b/testing/test_config.py index e76f01e1ec5..44ac0ca2aa7 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -97,29 +97,20 @@ def test_append_parse_args( assert config.option.tbstyle == "short" assert config.option.verbose - @pytest.mark.parametrize( - "opts, expected", - [ - ("-rfE", "fE"), - ("--report-chars=fE", "fE"), - ("-rA", "A"), - ("--report-chars=A", "A"), - ("-rfs", "fs"), - ("--report-chars=fs", "fs"), - ], - ) + @pytest.mark.parametrize("flag", ("-r", "--report-chars=")) + @pytest.mark.parametrize("value", ("fE", "A", "fs")) def test_report_chars_option( self, pytester: Pytester, tmp_path: Path, monkeypatch: MonkeyPatch, - opts: str, - expected: str, + flag: str, + value: str, ) -> None: """Test that -r/--report-chars is parsed correctly.""" - monkeypatch.setenv("PYTEST_ADDOPTS", opts) + monkeypatch.setenv("PYTEST_ADDOPTS", flag + value) config = pytester.parseconfig(tmp_path) - assert config.option.reportchars == expected + assert config.option.reportchars == value def test_tox_ini_wrong_version(self, pytester: Pytester) -> None: pytester.makefile( From 24359be37c626deb1e6c777347a1fe8ceb3d5b8c Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 6 Dec 2025 23:33:14 +0200 Subject: [PATCH 095/307] Merge pull request #14031 from pytest-dev/release-9.0.2 Release 9.0.2 (cherry picked from commit 0dfc4c9329455e1c6d6a42126c96a2d09ece3509) --- changelog/13896.bugfix.rst | 5 ----- changelog/13904.bugfix.rst | 1 - changelog/13946.bugfix.rst | 3 --- changelog/13965.bugfix.rst | 1 - changelog/4492.doc.rst | 1 - doc/en/announce/index.rst | 1 + doc/en/announce/release-9.0.2.rst | 22 ++++++++++++++++++++ doc/en/builtin.rst | 8 ++++---- doc/en/changelog.rst | 31 +++++++++++++++++++++++++++++ doc/en/example/parametrize.rst | 6 +++--- doc/en/example/pythoncollection.rst | 4 ++-- doc/en/getting-started.rst | 2 +- doc/en/how-to/fixtures.rst | 2 +- doc/en/reference/reference.rst | 2 +- 14 files changed, 66 insertions(+), 23 deletions(-) delete mode 100644 changelog/13896.bugfix.rst delete mode 100644 changelog/13904.bugfix.rst delete mode 100644 changelog/13946.bugfix.rst delete mode 100644 changelog/13965.bugfix.rst delete mode 100644 changelog/4492.doc.rst create mode 100644 doc/en/announce/release-9.0.2.rst diff --git a/changelog/13896.bugfix.rst b/changelog/13896.bugfix.rst deleted file mode 100644 index 187be00cc4d..00000000000 --- a/changelog/13896.bugfix.rst +++ /dev/null @@ -1,5 +0,0 @@ -The terminal progress feature added in pytest 9.0.0 has been disabled by default, except on Windows, due to compatibility issues with some terminal emulators. - -You may enable it again by passing ``-p terminalprogress``. We may enable it by default again once compatibility improves in the future. - -Additionally, when the environment variable ``TERM`` is ``dumb``, the escape codes are no longer emitted, even if the plugin is enabled. diff --git a/changelog/13904.bugfix.rst b/changelog/13904.bugfix.rst deleted file mode 100644 index f5a42215ca8..00000000000 --- a/changelog/13904.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the TOML type of the :confval:`tmp_path_retention_count` settings in the API reference from number to string. diff --git a/changelog/13946.bugfix.rst b/changelog/13946.bugfix.rst deleted file mode 100644 index d6cc5b703e4..00000000000 --- a/changelog/13946.bugfix.rst +++ /dev/null @@ -1,3 +0,0 @@ -The private ``config.inicfg`` attribute was changed in a breaking manner in pytest 9.0.0. -Due to its usage in the ecosystem, it is now restored to working order using a compatibility shim. -It will be deprecated in pytest 9.1 and removed in pytest 10. diff --git a/changelog/13965.bugfix.rst b/changelog/13965.bugfix.rst deleted file mode 100644 index b910d6c5361..00000000000 --- a/changelog/13965.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed quadratic-time behavior when handling ``unittest`` subtests in Python 3.10. diff --git a/changelog/4492.doc.rst b/changelog/4492.doc.rst deleted file mode 100644 index 811994afb5c..00000000000 --- a/changelog/4492.doc.rst +++ /dev/null @@ -1 +0,0 @@ -The API Reference now contains cross-reference-able documentation of :ref:`pytest's command-line flags `. diff --git a/doc/en/announce/index.rst b/doc/en/announce/index.rst index 2859e6210ff..b92b8d4a56b 100644 --- a/doc/en/announce/index.rst +++ b/doc/en/announce/index.rst @@ -6,6 +6,7 @@ Release announcements :maxdepth: 2 + release-9.0.2 release-9.0.1 release-9.0.0 release-8.4.2 diff --git a/doc/en/announce/release-9.0.2.rst b/doc/en/announce/release-9.0.2.rst new file mode 100644 index 00000000000..f15a2dc8e13 --- /dev/null +++ b/doc/en/announce/release-9.0.2.rst @@ -0,0 +1,22 @@ +pytest-9.0.2 +======================================= + +pytest 9.0.2 has just been released to PyPI. + +This is a bug-fix release, being a drop-in replacement. + +The full changelog is available at https://docs.pytest.org/en/stable/changelog.html. + +Thanks to all of the contributors to this release: + +* Alex Waygood +* Bruno Oliveira +* Fazeel Usmani +* Florian Bruhin +* Ran Benita +* Tom Most +* 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) + + +Happy testing, +The pytest Development Team diff --git a/doc/en/builtin.rst b/doc/en/builtin.rst index 1a8d32effee..6a96bb0a304 100644 --- a/doc/en/builtin.rst +++ b/doc/en/builtin.rst @@ -53,7 +53,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a capteesys -- .../_pytest/capture.py:1028 Enable simultaneous text capturing and pass-through of writes - to ``sys.stdout`` and ``sys.stderr`` as defined by :option:`--capture`. + to ``sys.stdout`` and ``sys.stderr`` as defined by ``--capture=``. The captured output is made available via ``capteesys.readouterr()`` method @@ -61,7 +61,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a ``out`` and ``err`` will be ``text`` objects. The output is also passed-through, allowing it to be "live-printed", - reported, or both as defined by :option:`--capture`. + reported, or both as defined by ``--capture=``. Returns an instance of :class:`CaptureFixture[str] `. @@ -257,10 +257,10 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a subtests -- .../_pytest/subtests.py:129 Provides subtests functionality. - tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:240 + tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:243 Return a :class:`pytest.TempPathFactory` instance for the test session. - tmp_path -- .../_pytest/tmpdir.py:255 + tmp_path -- .../_pytest/tmpdir.py:258 Return a temporary directory (as :class:`pathlib.Path` object) which is unique to each test function invocation. The temporary directory is created as a subdirectory diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index 8f869634c73..b4e5cee694e 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -31,6 +31,37 @@ with advance notice in the **Deprecations** section of releases. .. towncrier release notes start +pytest 9.0.2 (2025-12-06) +========================= + +Bug fixes +--------- + +- `#13896 `_: The terminal progress feature added in pytest 9.0.0 has been disabled by default, except on Windows, due to compatibility issues with some terminal emulators. + + You may enable it again by passing ``-p terminalprogress``. We may enable it by default again once compatibility improves in the future. + + Additionally, when the environment variable ``TERM`` is ``dumb``, the escape codes are no longer emitted, even if the plugin is enabled. + + +- `#13904 `_: Fixed the TOML type of the :confval:`tmp_path_retention_count` settings in the API reference from number to string. + + +- `#13946 `_: The private ``config.inicfg`` attribute was changed in a breaking manner in pytest 9.0.0. + Due to its usage in the ecosystem, it is now restored to working order using a compatibility shim. + It will be deprecated in pytest 9.1 and removed in pytest 10. + + +- `#13965 `_: Fixed quadratic-time behavior when handling ``unittest`` subtests in Python 3.10. + + + +Improved documentation +---------------------- + +- `#4492 `_: The API Reference now contains cross-reference-able documentation of :ref:`pytest's command-line flags `. + + pytest 9.0.1 (2025-11-12) ========================= diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index 40b63b28ec6..7aec1364953 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -162,7 +162,7 @@ objects, they are still using the default pytest representation: rootdir: /home/sweet/project collected 8 items - + @@ -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 - + @@ -318,7 +318,7 @@ Let's first see how it looks like at collection time: rootdir: /home/sweet/project collected 2 items - + diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index ff694f746d7..339944c4758 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -142,7 +142,7 @@ The test collection would look like this: configfile: pytest.toml collected 2 items - + @@ -205,7 +205,7 @@ You can always peek at the collection tree without running tests like this: configfile: pytest.toml collected 3 items - + diff --git a/doc/en/getting-started.rst b/doc/en/getting-started.rst index 7365dcdc491..3ba30a90b34 100644 --- a/doc/en/getting-started.rst +++ b/doc/en/getting-started.rst @@ -20,7 +20,7 @@ Install ``pytest`` .. code-block:: bash $ pytest --version - pytest 9.0.1 + pytest 9.0.2 .. _`simpletest`: diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index b15b3a5497b..5c5a239e8d4 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1423,7 +1423,7 @@ Running the above tests results in the following test IDs being used: rootdir: /home/sweet/project collected 12 items - + diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 57415a18cc1..6672db4f54b 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -3296,7 +3296,7 @@ All the command-line flags can also be obtained by running ``pytest --help``:: tests. Optional argument: glob (default: '*'). --cache-clear Remove all cache contents at start of test run --lfnf, --last-failed-no-failures={all,none} - With :option:`--lf`, determines whether to execute tests + With ``--lf``, determines whether to execute tests when there are no previously (known) failures or when no cached ``lastfailed`` data was found. ``all`` (the default) runs the full test suite From 92be6f73c0b3faf0def5cda548cd503c43a81cf9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 05:57:48 +0000 Subject: [PATCH 096/307] [automated] Update plugin list (#14033) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 216 ++++++++++++++++++++----------- 1 file changed, 140 insertions(+), 76 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index e058347ddd5..1cd5392e656 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =3.5.0) :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 - :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Nov 12, 2025 5 - Production/Stable pytest>=6 + :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Dec 02, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A @@ -94,7 +94,7 @@ This list contains 1768 plugins. :pypi:`pytest-aoc` Downloads puzzle inputs for Advent of Code and synthesizes PyTest fixtures Dec 02, 2023 5 - Production/Stable pytest ; extra == 'test' :pypi:`pytest-aoreporter` pytest report Jun 27, 2022 N/A N/A :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) - :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Nov 13, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-framework-alpha` Nov 26, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A @@ -145,6 +145,7 @@ This list contains 1768 plugins. :pypi:`pytest-autocap` automatically capture test & fixture stdout/stderr to files May 15, 2022 N/A pytest (<7.2,>=7.1.2) :pypi:`pytest-autochecklog` automatically check condition and log all the checks Apr 25, 2015 4 - Beta N/A :pypi:`pytest-autofixture` simplify pytest fixtures Aug 01, 2024 N/A pytest>=8 + :pypi:`pytest-autofocus` Auto-focus plugin: run only @pytest.mark.focus tests when --auto-focus is set Dec 02, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-automation` pytest plugin for building a test suite, using YAML files to extend pytest parameterize functionality. Apr 24, 2024 N/A pytest>=7.0.0 :pypi:`pytest-automock` Pytest plugin for automatical mocks creation May 16, 2023 N/A pytest ; extra == 'dev' :pypi:`pytest-auto-parametrize` pytest plugin: avoid repeating arguments in parametrize Oct 02, 2016 3 - Alpha N/A @@ -157,6 +158,7 @@ This list contains 1768 plugins. :pypi:`pytest-aws-apigateway` pytest plugin for AWS ApiGateway May 24, 2024 4 - Beta pytest :pypi:`pytest-aws-config` Protect your AWS credentials in unit tests May 28, 2021 N/A N/A :pypi:`pytest-aws-fixtures` A series of fixtures to use in integration tests involving actual AWS services. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 + :pypi:`pytest-aws-fixtures-293984` AWS configuration utilities for Python applications Dec 04, 2025 3 - Alpha N/A :pypi:`pytest-axe` pytest plugin for axe-selenium-python Nov 12, 2018 N/A pytest (>=3.0.0) :pypi:`pytest-axe-playwright-snapshot` A pytest plugin that runs Axe-core on Playwright pages and takes snapshots of the results. Jul 25, 2023 N/A pytest :pypi:`pytest-azure` Pytest utilities and mocks for Azure Jan 18, 2023 3 - Alpha pytest @@ -178,7 +180,7 @@ This list contains 1768 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Nov 26, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 04, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -197,7 +199,7 @@ This list contains 1768 plugins. :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A - :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Nov 24, 2025 N/A pytest + :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 06, 2025 N/A pytest :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest @@ -239,7 +241,7 @@ This list contains 1768 plugins. :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A :pypi:`pytest-capture-warnings` pytest plugin to capture all warnings and put them in one file of your choice May 03, 2022 N/A pytest :pypi:`pytest-case` A clean, modern, wrapper for pytest.mark.parametrize Nov 25, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Nov 26, 2025 3 - Alpha pytest<9,>=8 + :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 06, 2025 3 - Alpha pytest<9,>=8 :pypi:`pytest-cases` Separate test code from test cases in pytest. Jun 09, 2025 5 - Production/Stable pytest :pypi:`pytest-case-start-from` A pytest plugin to start test execution from a specific test case Oct 28, 2025 4 - Beta pytest>=6.0.0 :pypi:`pytest-casewise-package-install` A pytest plugin for test case-level dynamic dependency management Oct 31, 2025 3 - Alpha pytest>=6.0.0 @@ -271,7 +273,7 @@ This list contains 1768 plugins. :pypi:`pytest-chic-report` Simple pytest plugin for generating and sending report to messengers. Nov 01, 2024 N/A pytest>=6.0 :pypi:`pytest-chinesereport` Apr 16, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-choose` Provide the pytest with the ability to collect use cases based on rules in text files Feb 04, 2024 N/A pytest >=7.0.0 - :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Nov 28, 2025 N/A pytest>=8.0; extra == "dev" + :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Nov 30, 2025 N/A pytest>=8.0; extra == "dev" :pypi:`pytest-chunks` Run only a chunk of your test suite Jul 05, 2022 N/A pytest (>=6.0.0) :pypi:`pytest_cid` Compare data structures containing matching CIDs of different versions and encoding Sep 01, 2023 4 - Beta pytest >= 5.0, < 7.0 :pypi:`pytest-circleci` py.test plugin for CircleCI May 03, 2019 N/A N/A @@ -300,7 +302,7 @@ This list contains 1768 plugins. :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Nov 26, 2025 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Dec 06, 2025 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -344,7 +346,7 @@ This list contains 1768 plugins. :pypi:`pytest-cpp` Use pytest's runner to discover and execute C++ tests Sep 18, 2024 5 - Production/Stable pytest :pypi:`pytest-cqase` Custom qase pytest plugin Aug 22, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-cram` Run cram tests with pytest. Aug 08, 2020 N/A N/A - :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Nov 25, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Dec 02, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-crate` Manages CrateDB instances during your integration tests May 28, 2019 3 - Alpha pytest (>=4.0) :pypi:`pytest-cratedb` Manage CrateDB instances for integration tests Oct 08, 2024 4 - Beta pytest<9 :pypi:`pytest-cratedb-reporter` A pytest plugin for reporting test results to CrateDB Mar 11, 2025 N/A pytest>=6.0.0 @@ -410,6 +412,7 @@ This list contains 1768 plugins. :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) + :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Dec 05, 2025 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 @@ -467,7 +470,7 @@ This list contains 1768 plugins. :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 11, 2024 4 - Beta pytest>=7.2.2 :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) - :pypi:`pytest-docker-fixtures` pytest docker fixtures Nov 18, 2025 3 - Alpha pytest + :pypi:`pytest-docker-fixtures` pytest docker fixtures Dec 01, 2025 3 - Alpha pytest :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-haproxy-fixtures` Pytest fixtures for testing with haproxy. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-pexpect` pytest plugin for writing functional tests with pexpect and docker Jan 14, 2019 N/A pytest @@ -510,7 +513,7 @@ This list contains 1768 plugins. :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 - :pypi:`pytest-dynamic-parameterize` A Python package for managing pytest plugins. Nov 25, 2025 4 - Beta pytest>=9.0.1 + :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Dec 06, 2025 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A @@ -555,9 +558,10 @@ This list contains 1768 plugins. :pypi:`pytest-envvars` Pytest plugin to validate use of envvars on your tests Jun 13, 2020 5 - Production/Stable pytest (>=3.0.0) :pypi:`pytest-envx` Pytest plugin for managing environment variables with interpolation and .env file support. Jun 28, 2025 4 - Beta pytest>=8.4.1 :pypi:`pytest-env-yaml` Apr 02, 2019 N/A N/A - :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Nov 26, 2025 N/A pytest<10.0.0,>=9.0.1 + :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Dec 05, 2025 N/A pytest :pypi:`pytest-eradicate` pytest plugin to check for commented out code Sep 08, 2020 N/A pytest (>=2.4.2) :pypi:`pytest_erp` py.test plugin to send test info to report portal dynamically Jan 13, 2015 N/A N/A + :pypi:`pytest-error` A decorator for testing exceptions with pytest Dec 06, 2025 4 - Beta pytest>=8.4 :pypi:`pytest-error-for-skips` Pytest plugin to treat skipped tests a test failure Dec 19, 2019 4 - Beta pytest (>=4.6) :pypi:`pytest-errxfail` pytest plugin to mark a test as xfailed if it fails with the specified error message in the captured output Jan 06, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-essentials` A Pytest plugin providing essential utilities like soft assertions. May 19, 2025 3 - Alpha pytest>=7.0 @@ -722,7 +726,7 @@ This list contains 1768 plugins. :pypi:`pytest-gradescope` A pytest plugin for Gradescope integration Apr 29, 2025 N/A N/A :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A - :pypi:`pytest-greener` Pytest plugin for Greener Nov 28, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-greener` Pytest plugin for Greener Dec 06, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) @@ -748,7 +752,7 @@ This list contains 1768 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Nov 22, 2025 3 - Alpha pytest==8.4.2 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Dec 06, 2025 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -758,14 +762,14 @@ This list contains 1768 plugins. :pypi:`pytest-hoverfly-wrapper` Integrates the Hoverfly HTTP proxy into Pytest Feb 27, 2023 5 - Production/Stable pytest (>=3.7.0) :pypi:`pytest-hpfeeds` Helpers for testing hpfeeds in your python project Feb 28, 2023 4 - Beta pytest (>=6.2.4,<7.0.0) :pypi:`pytest-html` pytest plugin for generating HTML reports Nov 07, 2023 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-html5` the best report for pytest Nov 26, 2025 N/A N/A + :pypi:`pytest-html5` the best report for pytest Dec 04, 2025 N/A N/A :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. Nov 22, 2025 N/A N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Dec 03, 2025 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -785,7 +789,7 @@ This list contains 1768 plugins. :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Apr 10, 2025 3 - Alpha N/A :pypi:`pytest-httptesting` http_testing framework on top of pytest Dec 19, 2024 N/A pytest>=8.2.0 - :pypi:`pytest-httpx` Send responses to httpx. Nov 28, 2024 5 - Production/Stable pytest==8.* + :pypi:`pytest-httpx` Send responses to httpx. Dec 02, 2025 5 - Production/Stable pytest==9.* :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A @@ -811,7 +815,7 @@ This list contains 1768 plugins. :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Nov 24, 2025 4 - Beta pytest~=8.3 + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Dec 05, 2025 4 - Beta pytest~=9.0 :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 @@ -832,6 +836,7 @@ This list contains 1768 plugins. :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Jul 01, 2025 4 - Beta pytest>=7.4 :pypi:`pytest-integration` Organizing pytests by integration or not Nov 17, 2022 N/A N/A :pypi:`pytest-integration-mark` Automatic integration test marking and excluding plugin for pytest May 22, 2023 N/A pytest (>=5.2) + :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 06, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Oct 09, 2025 4 - Beta pytest @@ -841,7 +846,7 @@ This list contains 1768 plugins. :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Oct 24, 2025 N/A pytest + :pypi:`pytest-ipywidgets` Dec 05, 2025 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) @@ -898,7 +903,7 @@ This list contains 1768 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Nov 21, 2025 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 06, 2025 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -985,7 +990,7 @@ This list contains 1768 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Nov 28, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Dec 01, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1178,6 +1183,7 @@ This list contains 1768 plugins. :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Nov 01, 2025 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Dec 01, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A @@ -1186,7 +1192,7 @@ This list contains 1768 plugins. :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Nov 25, 2025 4 - Beta pytest>=9.0.1 + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Dec 05, 2025 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-pogo` Pytest plugin for pogo-migrate May 05, 2025 4 - Beta pytest<9,>=7 @@ -1195,7 +1201,7 @@ This list contains 1768 plugins. :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A - :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Oct 20, 2025 N/A N/A + :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Nov 30, 2025 N/A N/A :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) :pypi:`pytest-poo` Visualize your crappy tests Mar 25, 2021 5 - Production/Stable pytest (>=2.3.4) :pypi:`pytest-poo-fail` Visualize your failed tests with poo Feb 12, 2015 5 - Production/Stable N/A @@ -1232,7 +1238,7 @@ This list contains 1768 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Nov 28, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Dec 06, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1263,7 +1269,7 @@ This list contains 1768 plugins. :pypi:`pytest-python-test-engineer-sort` Sort plugin for Pytest May 13, 2024 N/A pytest>=6.2.0 :pypi:`pytest-pytorch` pytest plugin for a better developer experience when working with the PyTorch test suite May 25, 2021 4 - Beta pytest :pypi:`pytest-pyvenv` A package for create venv in tests Feb 27, 2024 N/A pytest ; extra == 'test' - :pypi:`pytest-pyvista` Pytest-pyvista package. Oct 06, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-pyvista` Pytest-pyvista package. Dec 02, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-qanova` A pytest plugin to collect test information Sep 05, 2024 3 - Alpha pytest :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Nov 12, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) @@ -1316,7 +1322,7 @@ This list contains 1768 plugins. :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Nov 29, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 05, 2025 N/A pytest>=7.0.0 :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Feb 05, 2025 5 - Production/Stable pytest :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance May 05, 2025 3 - Alpha pytest @@ -1331,7 +1337,7 @@ This list contains 1768 plugins. :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Nov 11, 2025 N/A pytest>=4.6.10 + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Dec 02, 2025 N/A pytest>=4.6.10 :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A :pypi:`pytest-req` pytest requests plugin Nov 04, 2025 5 - Production/Stable pytest>=8.4.2 @@ -1386,6 +1392,7 @@ This list contains 1768 plugins. :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Nov 13, 2025 N/A pytest<10,>=7 :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) + :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-rst` Test code from RST documents with pytest Jan 26, 2023 N/A N/A :pypi:`pytest-rt` pytest data collector plugin for Testgr May 05, 2022 N/A N/A @@ -1492,6 +1499,7 @@ This list contains 1768 plugins. :pypi:`pytest-snowflake-bdd` Setup test data and run tests on snowflake in BDD style! Jan 05, 2022 4 - Beta pytest (>=6.2.0) :pypi:`pytest-socket` Pytest Plugin to disable socket calls during tests Jan 28, 2024 4 - Beta pytest (>=6.2.5) :pypi:`pytest-sofaepione` Test the installation of SOFA and the SofaEpione plugin. Aug 17, 2022 N/A N/A + :pypi:`pytest-soft-assert` Pytest plugin for soft assertions. Dec 07, 2025 N/A pytest>=8.4.0 :pypi:`pytest-soft-assertions` May 05, 2020 3 - Alpha pytest :pypi:`pytest-solidity` A PyTest library plugin for Solidity language. Jan 15, 2022 1 - Planning pytest (<7,>=6.0.1) ; extra == 'tests' :pypi:`pytest-solr` Solr process and client fixtures for py.test. May 11, 2020 3 - Alpha pytest (>=3.0.0) @@ -1584,7 +1592,7 @@ This list contains 1768 plugins. :pypi:`pytest-terraform-fixture` generate terraform resources to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-test-analyzer` A powerful tool for analyzing pytest test files and generating detailed reports Jun 14, 2025 4 - Beta N/A :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A - :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Nov 29, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Dec 04, 2025 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest @@ -1596,7 +1604,7 @@ This list contains 1768 plugins. :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testit-parametrize` A pytest plugin for uploading parameterized tests parameters into TMS TestIT Dec 04, 2024 4 - Beta pytest>=8.3.3 :pypi:`pytest-testlink-adaptor` pytest reporting plugin for testlink Dec 20, 2018 4 - Beta pytest (>=2.6) - :pypi:`pytest-testmon` selects tests affected by changed files and methods Nov 07, 2025 4 - Beta pytest<9,>=5 + :pypi:`pytest-testmon` selects tests affected by changed files and methods Dec 01, 2025 4 - Beta pytest<10,>=5 :pypi:`pytest-testmon-dev` selects tests affected by changed files and methods Mar 30, 2023 4 - Beta pytest (<8,>=5) :pypi:`pytest-testmon-oc` nOly selects tests affected by changed files and methods Jun 01, 2022 4 - Beta pytest (<8,>=5) :pypi:`pytest-testmon-skip-libraries` selects tests affected by changed files and methods Mar 03, 2023 4 - Beta pytest (<8,>=5) @@ -1630,7 +1638,7 @@ This list contains 1768 plugins. :pypi:`pytest-thread` Jul 07, 2023 N/A N/A :pypi:`pytest-threadleak` Detects thread leaks Jul 03, 2022 4 - Beta pytest (>=3.1.1) :pypi:`pytest-tick` Ticking on tests Aug 31, 2021 5 - Production/Stable pytest (>=6.2.5,<7.0.0) - :pypi:`pytest-time` Jan 20, 2025 3 - Alpha pytest + :pypi:`pytest_time` Dec 01, 2025 3 - Alpha pytest :pypi:`pytest-timeassert-ethan` execution duration Dec 25, 2023 N/A pytest :pypi:`pytest-timeit` A pytest plugin to time test function runs Oct 13, 2016 4 - Beta N/A :pypi:`pytest-timeout` pytest plugin to abort hanging tests May 05, 2025 5 - Production/Stable pytest>=7.0.0 @@ -1674,7 +1682,7 @@ This list contains 1768 plugins. :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A - :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Nov 29, 2025 N/A pytest<=9.0.1,>=7.4 + :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Dec 06, 2025 N/A pytest<=9.0.1,>=7.4 :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A @@ -1702,7 +1710,7 @@ This list contains 1768 plugins. :pypi:`pytest-unmarked` Run only unmarked tests Aug 27, 2019 5 - Production/Stable N/A :pypi:`pytest-unordered` Test equality of unordered collections in pytest Jun 03, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-unstable` Set a test as unstable to return 0 even if it failed Sep 27, 2022 4 - Beta N/A - :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Nov 10, 2025 4 - Beta pytest>7.3.2 + :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Dec 02, 2025 4 - Beta pytest>7.3.2 :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) @@ -1758,7 +1766,7 @@ This list contains 1768 plugins. :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Nov 24, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Jun 10, 2025 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 04, 2025 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 @@ -2158,7 +2166,7 @@ This list contains 1768 plugins. Pytest plugin to allow use of Annotated in tests to resolve fixtures :pypi:`pytest-ansible` - *last release*: Nov 12, 2025, + *last release*: Dec 02, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=6 @@ -2228,7 +2236,7 @@ This list contains 1768 plugins. An ASGI middleware to populate OpenAPI Specification examples from pytest functions :pypi:`pytest-api-cov` - *last release*: Nov 13, 2025, + *last release*: Dec 02, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -2584,6 +2592,13 @@ This list contains 1768 plugins. simplify pytest fixtures + :pypi:`pytest-autofocus` + *last release*: Dec 02, 2025, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + Auto-focus plugin: run only @pytest.mark.focus tests when --auto-focus is set + :pypi:`pytest-automation` *last release*: Apr 24, 2024, *status*: N/A, @@ -2668,6 +2683,13 @@ This list contains 1768 plugins. A series of fixtures to use in integration tests involving actual AWS services. + :pypi:`pytest-aws-fixtures-293984` + *last release*: Dec 04, 2025, + *status*: 3 - Alpha, + *requires*: N/A + + AWS configuration utilities for Python applications + :pypi:`pytest-axe` *last release*: Nov 12, 2018, *status*: N/A, @@ -2816,7 +2838,7 @@ This list contains 1768 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Nov 26, 2025, + *last release*: Dec 04, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -2949,7 +2971,7 @@ This list contains 1768 plugins. pytest plugin to mark a test as blocker and skip all other tests :pypi:`pytest-b-logger` - *last release*: Nov 24, 2025, + *last release*: Dec 06, 2025, *status*: N/A, *requires*: pytest @@ -3243,7 +3265,7 @@ This list contains 1768 plugins. A clean, modern, wrapper for pytest.mark.parametrize :pypi:`pytest-case-provider` - *last release*: Nov 26, 2025, + *last release*: Dec 06, 2025, *status*: 3 - Alpha, *requires*: pytest<9,>=8 @@ -3467,7 +3489,7 @@ This list contains 1768 plugins. Provide the pytest with the ability to collect use cases based on rules in text files :pypi:`pytest-chronicle` - *last release*: Nov 28, 2025, + *last release*: Nov 30, 2025, *status*: N/A, *requires*: pytest>=8.0; extra == "dev" @@ -3670,7 +3692,7 @@ This list contains 1768 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Nov 26, 2025, + *last release*: Dec 06, 2025, *status*: 4 - Beta, *requires*: pytest @@ -3978,7 +4000,7 @@ This list contains 1768 plugins. Run cram tests with pytest. :pypi:`pytest-crap` - *last release*: Nov 25, 2025, + *last release*: Dec 02, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -4439,6 +4461,13 @@ This list contains 1768 plugins. Tests that depend on other tests + :pypi:`pytest-depends-on` + *last release*: Dec 05, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest>=9.0.1 + + A Python package for managing test dependencies in pytest. + :pypi:`pytest-depper` *last release*: Oct 23, 2025, *status*: 4 - Beta, @@ -4839,7 +4868,7 @@ This list contains 1768 plugins. A plugin to use docker databases for pytests :pypi:`pytest-docker-fixtures` - *last release*: Nov 18, 2025, + *last release*: Dec 01, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -5140,11 +5169,11 @@ This list contains 1768 plugins. Pytest plugin reporting fixtures and test functions execution time. :pypi:`pytest-dynamic-parameterize` - *last release*: Nov 25, 2025, - *status*: 4 - Beta, + *last release*: Dec 06, 2025, + *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 - A Python package for managing pytest plugins. + A pytest plugin to dynamically parameterize tests based on external data sources. :pypi:`pytest-dynamicrerun` *last release*: Aug 15, 2020, @@ -5455,9 +5484,9 @@ This list contains 1768 plugins. :pypi:`pytest-ephemeral-container` - *last release*: Nov 26, 2025, + *last release*: Dec 05, 2025, *status*: N/A, - *requires*: pytest<10.0.0,>=9.0.1 + *requires*: pytest Spawn epehemeral containers in pytest @@ -5475,6 +5504,13 @@ This list contains 1768 plugins. py.test plugin to send test info to report portal dynamically + :pypi:`pytest-error` + *last release*: Dec 06, 2025, + *status*: 4 - Beta, + *requires*: pytest>=8.4 + + A decorator for testing exceptions with pytest + :pypi:`pytest-error-for-skips` *last release*: Dec 19, 2019, *status*: 4 - Beta, @@ -6624,7 +6660,7 @@ This list contains 1768 plugins. Green progress dots :pypi:`pytest-greener` - *last release*: Nov 28, 2025, + *last release*: Dec 06, 2025, *status*: N/A, *requires*: pytest<9.0.0,>=8.3.3 @@ -6806,9 +6842,9 @@ This list contains 1768 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Nov 22, 2025, + *last release*: Dec 06, 2025, *status*: 3 - Alpha, - *requires*: pytest==8.4.2 + *requires*: pytest==9.0.0 Experimental package to automatically extract test plugins for Home Assistant custom components @@ -6876,7 +6912,7 @@ This list contains 1768 plugins. pytest plugin for generating HTML reports :pypi:`pytest-html5` - *last release*: Nov 26, 2025, + *last release*: Dec 04, 2025, *status*: N/A, *requires*: N/A @@ -6925,11 +6961,11 @@ This list contains 1768 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Nov 22, 2025, + *last release*: Dec 03, 2025, *status*: N/A, *requires*: N/A - Get started with rich pytest reports in under 3 seconds. Just install the plugin — no setup required. The simplest, fastest reporter for pytest. + Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. :pypi:`pytest-html-profiling` *last release*: Feb 11, 2020, @@ -7065,9 +7101,9 @@ This list contains 1768 plugins. http_testing framework on top of pytest :pypi:`pytest-httpx` - *last release*: Nov 28, 2024, + *last release*: Dec 02, 2025, *status*: 5 - Production/Stable, - *requires*: pytest==8.* + *requires*: pytest==9.* Send responses to httpx. @@ -7247,9 +7283,9 @@ This list contains 1768 plugins. display more node ininformation. :pypi:`pytest-infrahouse` - *last release*: Nov 24, 2025, + *last release*: Dec 05, 2025, *status*: 4 - Beta, - *requires*: pytest~=8.3 + *requires*: pytest~=9.0 A set of fixtures to use with pytest @@ -7393,6 +7429,13 @@ This list contains 1768 plugins. Automatic integration test marking and excluding plugin for pytest + :pypi:`pytest-intent` + *last release*: Dec 06, 2025, + *status*: N/A, + *requires*: pytest<10.0.0,>=9.0.0 + + A pytest plugin for tracking requirement coverage. + :pypi:`pytest-interactive` *last release*: Nov 30, 2017, *status*: 3 - Alpha, @@ -7457,7 +7500,7 @@ This list contains 1768 plugins. Pytest plugin to run tests in Jupyter Notebooks :pypi:`pytest-ipywidgets` - *last release*: Oct 24, 2025, + *last release*: Dec 05, 2025, *status*: N/A, *requires*: pytest @@ -7856,7 +7899,7 @@ This list contains 1768 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Nov 21, 2025, + *last release*: Dec 06, 2025, *status*: 4 - Beta, *requires*: N/A @@ -8465,7 +8508,7 @@ This list contains 1768 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Nov 28, 2025, + *last release*: Dec 01, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -9815,6 +9858,13 @@ This list contains 1768 plugins. A pytest plugin for playwright python + :pypi:`pytest-playwright-json` + *last release*: Dec 01, 2025, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + Generate Playwright-compatible JSON reports from pytest-playwright test runs + :pypi:`pytest-playwrights` *last release*: Dec 02, 2021, *status*: N/A, @@ -9872,8 +9922,8 @@ This list contains 1768 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Nov 25, 2025, - *status*: 4 - Beta, + *last release*: Dec 05, 2025, + *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 A Python package for managing pytest plugins. @@ -9935,7 +9985,7 @@ This list contains 1768 plugins. Provides Polecat pytest fixtures :pypi:`pytest-polymeric-report` - *last release*: Oct 20, 2025, + *last release*: Nov 30, 2025, *status*: N/A, *requires*: N/A @@ -10194,7 +10244,7 @@ This list contains 1768 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Nov 28, 2025, + *last release*: Dec 06, 2025, *status*: N/A, *requires*: pytest==8.4.2 @@ -10411,7 +10461,7 @@ This list contains 1768 plugins. A package for create venv in tests :pypi:`pytest-pyvista` - *last release*: Oct 06, 2025, + *last release*: Dec 02, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -10782,7 +10832,7 @@ This list contains 1768 plugins. pytest plugin for repeating tests :pypi:`pytest-repeated` - *last release*: Nov 29, 2025, + *last release*: Dec 05, 2025, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10887,7 +10937,7 @@ This list contains 1768 plugins. pytest plugin for adding tests' parameters to junit report :pypi:`pytest-reportportal` - *last release*: Nov 11, 2025, + *last release*: Dec 02, 2025, *status*: N/A, *requires*: pytest>=4.6.10 @@ -11271,6 +11321,13 @@ This list contains 1768 plugins. Pytest integration with rotest + :pypi:`pytest-routes` + *last release*: Dec 01, 2025, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Property-based smoke testing for ASGI application routes + :pypi:`pytest-rpc` *last release*: Feb 22, 2019, *status*: 4 - Beta, @@ -12013,6 +12070,13 @@ This list contains 1768 plugins. Test the installation of SOFA and the SofaEpione plugin. + :pypi:`pytest-soft-assert` + *last release*: Dec 07, 2025, + *status*: N/A, + *requires*: pytest>=8.4.0 + + Pytest plugin for soft assertions. + :pypi:`pytest-soft-assertions` *last release*: May 05, 2020, *status*: 3 - Alpha, @@ -12658,8 +12722,8 @@ This list contains 1768 plugins. A plugin to run tests written in Jupyter notebook :pypi:`pytest-test-categories` - *last release*: Nov 29, 2025, - *status*: 4 - Beta, + *last release*: Dec 04, 2025, + *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 A pytest plugin to enforce test timing constraints and size distributions. @@ -12742,9 +12806,9 @@ This list contains 1768 plugins. pytest reporting plugin for testlink :pypi:`pytest-testmon` - *last release*: Nov 07, 2025, + *last release*: Dec 01, 2025, *status*: 4 - Beta, - *requires*: pytest<9,>=5 + *requires*: pytest<10,>=5 selects tests affected by changed files and methods @@ -12979,8 +13043,8 @@ This list contains 1768 plugins. Ticking on tests - :pypi:`pytest-time` - *last release*: Jan 20, 2025, + :pypi:`pytest_time` + *last release*: Dec 01, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -13288,7 +13352,7 @@ This list contains 1768 plugins. Text User Interface (TUI) and HTML report for Pytest test runs :pypi:`pytest-tui-runner` - *last release*: Nov 29, 2025, + *last release*: Dec 06, 2025, *status*: N/A, *requires*: pytest<=9.0.1,>=7.4 @@ -13484,7 +13548,7 @@ This list contains 1768 plugins. Set a test as unstable to return 0 even if it failed :pypi:`pytest-unused-fixtures` - *last release*: Nov 10, 2025, + *last release*: Dec 02, 2025, *status*: 4 - Beta, *requires*: pytest>7.3.2 @@ -13876,7 +13940,7 @@ This list contains 1768 plugins. A pytest plugin to list worker statistics after a xdist run. :pypi:`pytest-xdocker` - *last release*: Jun 10, 2025, + *last release*: Dec 04, 2025, *status*: N/A, *requires*: pytest<9.0.0,>=8.0.0 From d5757b89f4cbeb4cd54135fb8044a398ecfe8a4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 06:41:25 +0100 Subject: [PATCH 097/307] build(deps): Bump anyio[trio] in /testing/plugins_integration (#14034) Bumps [anyio[trio]](https://github.com/agronholm/anyio) from 4.11.0 to 4.12.0. - [Release notes](https://github.com/agronholm/anyio/releases) - [Commits](https://github.com/agronholm/anyio/compare/4.11.0...4.12.0) --- updated-dependencies: - dependency-name: anyio[trio] dependency-version: 4.12.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index e9a349945af..29a8ba52f86 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,4 +1,4 @@ -anyio[trio]==4.11.0 +anyio[trio]==4.12.0 django==5.2.9 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 From 3a35fcd4c0daf366c0580d903d9996b9d2dc119d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 07:10:47 +0100 Subject: [PATCH 098/307] [pre-commit.ci] pre-commit autoupdate (#14037) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.7 → v0.14.8](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.7...v0.14.8) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 18eb11f4d8b..147b8805405 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.7" + rev: "v0.14.8" hooks: - id: ruff-check args: ["--fix"] From 980bb5c12bac5a765dc0fc76142ba62177d1dba9 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Tue, 9 Dec 2025 21:15:46 +0200 Subject: [PATCH 099/307] Docs: `deprecated_call` also catches `FutureWarning` (#14038) --- doc/en/how-to/capture-warnings.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index ebf65ffd8c4..ae9e71a2750 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -286,8 +286,8 @@ Ensuring code triggers a deprecation warning -------------------------------------------- You can also use :func:`pytest.deprecated_call` for checking -that a certain function call triggers a ``DeprecationWarning`` or -``PendingDeprecationWarning``: +that a certain function call triggers a ``DeprecationWarning``, ``PendingDeprecationWarning`` or +``FutureWarning``: .. code-block:: python From 7eb7b3ed4270b8ad5c4c0bc45ae99b82e7546b6b Mon Sep 17 00:00:00 2001 From: Nikesh Chavhan Date: Thu, 11 Dec 2025 20:32:29 +0530 Subject: [PATCH 100/307] Add test coverage for compiled regex patterns in pytest.raises() (#14026) * Add test coverage for compiled regex patterns in pytest.raises() * Add changelog entry for #14026 --- AUTHORS | 1 + changelog/14026.improvement.rst | 1 + testing/python/raises.py | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 changelog/14026.improvement.rst diff --git a/AUTHORS b/AUTHORS index 55892463e30..bf34f79c374 100644 --- a/AUTHORS +++ b/AUTHORS @@ -338,6 +338,7 @@ Niclas Olofsson Nicolas Delaby Nicolas Simonds Nico Vidal +Nikesh Chavhan Nikolay Kondratyev Nipunn Koorapati Oleg Pidsadnyi diff --git a/changelog/14026.improvement.rst b/changelog/14026.improvement.rst new file mode 100644 index 00000000000..7025ba80481 --- /dev/null +++ b/changelog/14026.improvement.rst @@ -0,0 +1 @@ +Added test coverage for compiled regex patterns in :func:`pytest.raises` match parameter. diff --git a/testing/python/raises.py b/testing/python/raises.py index c9d57918a83..6b2a765e7fb 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -407,3 +407,26 @@ def test_issue_11872(self) -> None: code=404, msg="Not Found", fp=io.BytesIO(), hdrs=Message(), url="" ) exc_info.value.close() # avoid a resource warning + + def test_raises_match_compiled_regex(self) -> None: + """Test that compiled regex patterns work with pytest.raises.""" + # Test with a compiled pattern that matches + pattern = re.compile(r"with base \d+") + with pytest.raises(ValueError, match=pattern): + int("asdf") + + # Test with a compiled pattern that doesn't match + pattern_nomatch = re.compile(r"with base 16") + expr = ( + "Regex pattern did not match.\n" + f" Expected regex: {pattern_nomatch.pattern!r}\n" + f" Actual message: \"invalid literal for int() with base 10: 'asdf'\"" + ) + with pytest.raises(AssertionError, match="^" + re.escape(expr) + "$"): + with pytest.raises(ValueError, match=pattern_nomatch): + int("asdf", base=10) + + # Test compiled pattern with flags + pattern_with_flags = re.compile(r"INVALID LITERAL", re.IGNORECASE) + with pytest.raises(ValueError, match=pattern_with_flags): + int("asdf") From fa6a232d529b33f6388dc788d7613cf206c08130 Mon Sep 17 00:00:00 2001 From: John Litborn <11260241+jakkdl@users.noreply.github.com> Date: Fri, 12 Dec 2025 16:15:44 +0100 Subject: [PATCH 101/307] don't crash if exceptiongroup has only hidden tb frames (#14025) * don't crash if exceptiongroup has only hidden tb frames --- changelog/13734.bugfix.rst | 1 + src/_pytest/_code/code.py | 8 +++++++- testing/code/test_excinfo.py | 12 ++++++++---- 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 changelog/13734.bugfix.rst diff --git a/changelog/13734.bugfix.rst b/changelog/13734.bugfix.rst new file mode 100644 index 00000000000..de1d7368cd4 --- /dev/null +++ b/changelog/13734.bugfix.rst @@ -0,0 +1 @@ +Fixed crash when a test raises an exceptiongroup with ``__tracebackhide__ = True``. diff --git a/src/_pytest/_code/code.py b/src/_pytest/_code/code.py index add2a493ca7..4cf99a77340 100644 --- a/src/_pytest/_code/code.py +++ b/src/_pytest/_code/code.py @@ -1193,9 +1193,15 @@ def repr_excinfo(self, excinfo: ExceptionInfo[BaseException]) -> ExceptionChainR format_exception( type(excinfo.value), excinfo.value, - traceback[0]._rawentry, + traceback[0]._rawentry if traceback else None, ) ) + if not traceback: + reprtraceback.extraline = ( + "All traceback entries are hidden. " + "Pass `--full-trace` to see hidden and internal frames." + ) + else: reprtraceback = self.repr_traceback(excinfo_) reprcrash = excinfo_._getreprcrash() diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index 476720f0bbe..70499fec893 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -1897,19 +1897,23 @@ def test_nested_multiple() -> None: @pytest.mark.parametrize("tbstyle", ("long", "short", "auto", "line", "native")) -def test_all_entries_hidden(pytester: Pytester, tbstyle: str) -> None: +@pytest.mark.parametrize("group", (True, False), ids=("group", "bare")) +def test_all_entries_hidden(pytester: Pytester, tbstyle: str, group: bool) -> None: """Regression test for #10903.""" pytester.makepyfile( - """ + f""" + import sys + if sys.version_info < (3, 11): + from exceptiongroup import ExceptionGroup def test(): __tracebackhide__ = True - 1 / 0 + raise {'ExceptionGroup("", [ValueError("bar")])' if group else 'ValueError("bar")'} """ ) result = pytester.runpytest("--tb", tbstyle) assert result.ret == 1 if tbstyle != "line": - result.stdout.fnmatch_lines(["*ZeroDivisionError: division by zero"]) + result.stdout.fnmatch_lines(["*ValueError: bar"]) if tbstyle not in ("line", "native"): result.stdout.fnmatch_lines(["All traceback entries are hidden.*"]) From af95858c9293e1fddf05116b1f2a38b62ebd36b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 14 Dec 2025 04:57:36 +0000 Subject: [PATCH 102/307] [automated] Update plugin list (#14044) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 230 ++++++++++++++++++++----------- 1 file changed, 147 insertions(+), 83 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 1cd5392e656..96400e4bb6c 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =6.0.0 :pypi:`pytest-alphamoon` Static code checks used at Alphamoon Dec 30, 2021 5 - Production/Stable pytest (>=3.5.0) :pypi:`pytest-amaranth-sim` Fixture to automate running Amaranth simulations Sep 21, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-ampel-core` A plugin to provide AmpelContext fixtures in pytest Dec 12, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-analyzer` this plugin allows to analyze tests in pytest project, collect test metadata and sync it with testomat.io TCM system Feb 21, 2024 N/A pytest <8.0.0,>=7.3.1 :pypi:`pytest-android` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Feb 21, 2019 3 - Alpha pytest :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) @@ -96,7 +97,7 @@ This list contains 1776 plugins. :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Nov 26, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Dec 12, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -107,7 +108,7 @@ This list contains 1776 plugins. :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) - :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Sep 17, 2025 4 - Beta pytest>=3.0; extra == "dev" + :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Dec 08, 2025 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 24, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 @@ -180,7 +181,7 @@ This list contains 1776 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 04, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 12, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -241,7 +242,7 @@ This list contains 1776 plugins. :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A :pypi:`pytest-capture-warnings` pytest plugin to capture all warnings and put them in one file of your choice May 03, 2022 N/A pytest :pypi:`pytest-case` A clean, modern, wrapper for pytest.mark.parametrize Nov 25, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 06, 2025 3 - Alpha pytest<9,>=8 + :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 07, 2025 3 - Alpha pytest<9,>=8 :pypi:`pytest-cases` Separate test code from test cases in pytest. Jun 09, 2025 5 - Production/Stable pytest :pypi:`pytest-case-start-from` A pytest plugin to start test execution from a specific test case Oct 28, 2025 4 - Beta pytest>=6.0.0 :pypi:`pytest-casewise-package-install` A pytest plugin for test case-level dynamic dependency management Oct 31, 2025 3 - Alpha pytest>=6.0.0 @@ -262,6 +263,7 @@ This list contains 1776 plugins. :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Nov 29, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-checkdocs` check the README when running tests Apr 30, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" + :pypi:`pytest-checkers` Add your description here Dec 14, 2025 N/A N/A :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 :pypi:`pytest-check-library` check your missing library Jul 17, 2022 N/A N/A :pypi:`pytest-check-libs` check your missing library Jul 17, 2022 N/A N/A @@ -295,7 +297,7 @@ This list contains 1776 plugins. :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cmake` Provide CMake module for Pytest Aug 14, 2025 N/A pytest<9,>=4 + :pypi:`pytest-cmake` Provide CMake module for Pytest Dec 08, 2025 N/A pytest<10,>=4 :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A :pypi:`pytest-cobra` PyTest plugin for testing Smart Contracts for Ethereum blockchain. Jun 29, 2019 3 - Alpha pytest (<4.0.0,>=3.7.1) @@ -317,6 +319,7 @@ This list contains 1776 plugins. :pypi:`pytest-collect-interface-info-plugin` Get executed interface information in pytest interface automation framework Sep 25, 2023 4 - Beta N/A :pypi:`pytest-collector` Python package for collecting pytest. Aug 02, 2022 N/A pytest (>=7.0,<8.0) :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A + :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Dec 13, 2025 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-colordots` Colorizes the progress indicators Oct 06, 2017 5 - Production/Stable N/A :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) :pypi:`pytest-common-subject` pytest framework for testing different aspects of a common method Oct 22, 2025 N/A pytest<9,>=3.6 @@ -416,7 +419,7 @@ This list contains 1776 plugins. :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-describe` Describe-style plugin for pytest Oct 23, 2025 5 - Production/Stable pytest<9,>=6 + :pypi:`pytest-describe` Describe-style plugin for pytest Dec 12, 2025 5 - Production/Stable pytest<10,>=6 :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest @@ -440,7 +443,7 @@ This list contains 1776 plugins. :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow tables. Jun 09, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-django` A Django plugin for pytest. Apr 03, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) - :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Sep 28, 2025 5 - Production/Stable pytest + :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A :pypi:`pytest-django-casperjs` Integrate CasperJS with your django tests as a pytest fixture. Mar 15, 2015 2 - Pre-Alpha N/A :pypi:`pytest-django-class` A pytest plugin for running django in class-scoped fixtures Aug 08, 2023 4 - Beta N/A @@ -506,14 +509,14 @@ This list contains 1776 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Nov 28, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Dec 09, 2025 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 - :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Dec 06, 2025 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Dec 11, 2025 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A @@ -574,11 +577,11 @@ This list contains 1776 plugins. :pypi:`pytest_evm` The testing package containing tools to test Web3-based projects Sep 23, 2024 4 - Beta pytest<9.0.0,>=8.1.1 :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 - :pypi:`pytest-exasol-backend` Oct 29, 2025 N/A pytest<9,>=7 - :pypi:`pytest-exasol-extension` Oct 29, 2025 N/A pytest<9,>=7 + :pypi:`pytest-exasol-backend` Dec 10, 2025 N/A pytest<9,>=7 + :pypi:`pytest-exasol-extension` Dec 11, 2025 N/A pytest<9,>=7 :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 - :pypi:`pytest-exasol-slc` Oct 30, 2025 N/A pytest<9,>=7 + :pypi:`pytest-exasol-slc` Dec 12, 2025 N/A pytest<9,>=7 :pypi:`pytest-excel` pytest plugin for generating excel reports Jul 22, 2025 5 - Production/Stable pytest :pypi:`pytest-exceptional` Better exceptions Mar 16, 2017 4 - Beta N/A :pypi:`pytest-exception-script` Walk your code through exception script to check it's resiliency to failures. Aug 04, 2020 3 - Alpha pytest @@ -650,14 +653,17 @@ This list contains 1776 plugins. :pypi:`pytest-fixture-rtttg` Warn or fail on fixture name clash Feb 23, 2022 N/A pytest (>=7.0.1,<8.0.0) :pypi:`pytest-fixtures` Common fixtures for pytest May 01, 2019 5 - Production/Stable N/A :pypi:`pytest-fixtures-fixtures` Handy fixtues to access your fixtures from your _pytest tests. Nov 06, 2025 4 - Beta pytest>=8.4.1 + :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Dec 09, 2025 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Dec 09, 2025 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) @@ -717,6 +723,7 @@ This list contains 1776 plugins. :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jul 20, 2025 4 - Beta pytest<=8.4.1 + :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Nov 23, 2025 5 - Production/Stable pytest>=6.1.2 :pypi:`pytest-goldie` A plugin to support golden tests with pytest. May 23, 2023 4 - Beta pytest (>=3.5.0) @@ -752,7 +759,7 @@ This list contains 1776 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Dec 06, 2025 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Dec 09, 2025 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -793,7 +800,7 @@ This list contains 1776 plugins. :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A - :pypi:`pytest-human` A beautiful nested pytest HTML test report Nov 24, 2025 4 - Beta pytest>=8 + :pypi:`pytest-human` A beautiful nested pytest HTML test report Dec 07, 2025 4 - Beta pytest>=8 :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 @@ -833,10 +840,10 @@ This list contains 1776 plugins. :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Nov 22, 2025 N/A pytest>=9.0.0 :pypi:`pytest-instafail` pytest plugin to show failures instantly Mar 31, 2023 4 - Beta pytest (>=5) :pypi:`pytest-instrument` pytest plugin to instrument tests Apr 05, 2020 5 - Production/Stable pytest (>=5.1.0) - :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Jul 01, 2025 4 - Beta pytest>=7.4 + :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Dec 08, 2025 4 - Beta pytest>=7.4 :pypi:`pytest-integration` Organizing pytests by integration or not Nov 17, 2022 N/A N/A :pypi:`pytest-integration-mark` Automatic integration test marking and excluding plugin for pytest May 22, 2023 N/A pytest (>=5.2) - :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 06, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 13, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Oct 09, 2025 4 - Beta pytest @@ -897,13 +904,13 @@ This list contains 1776 plugins. :pypi:`pytest-koopmans` A plugin for testing the koopmans package Nov 21, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-krtech-common` pytest krtech common library Nov 28, 2016 4 - Beta N/A :pypi:`pytest-kubernetes` Oct 23, 2025 N/A pytest<9.0.0,>=8.3.0 - :pypi:`pytest_kustomize` Parse and validate kustomize output Oct 02, 2025 N/A N/A + :pypi:`pytest_kustomize` Parse and validate kustomize output Dec 08, 2025 N/A N/A :pypi:`pytest-kuunda` pytest plugin to help with test data setup for PySpark tests Feb 25, 2024 4 - Beta pytest >=6.2.0 :pypi:`pytest-kwparametrize` Alternate syntax for @pytest.mark.parametrize with test cases as dictionaries and default value fallbacks Jan 22, 2021 N/A pytest (>=6) :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 06, 2025 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 09, 2025 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -930,6 +937,7 @@ This list contains 1776 plugins. :pypi:`pytest-litter` Pytest plugin which verifies that tests do not modify file trees. Nov 23, 2023 4 - Beta pytest >=6.1 :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-llm-agent` Add your description here Dec 12, 2025 N/A N/A :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) @@ -949,7 +957,7 @@ This list contains 1776 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Nov 28, 2025 5 - Production/Stable pytest==9.0.1 + :pypi:`pytest-logikal` Common testing environment Dec 11, 2025 5 - Production/Stable pytest==9.0.1 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -970,7 +978,7 @@ This list contains 1776 plugins. :pypi:`pytest-mark-manage` 用例标签化管理 Aug 15, 2024 N/A pytest :pypi:`pytest-mark-no-py3` pytest plugin and bowler codemod to help migrate tests to Python 3 May 17, 2019 N/A pytest :pypi:`pytest-marks` UNKNOWN Nov 23, 2012 3 - Alpha N/A - :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Jan 28, 2025 N/A N/A + :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Dec 12, 2025 N/A N/A :pypi:`pytest-matcher` Easy way to match captured \`pytest\` output against expectations stored in files Aug 07, 2025 5 - Production/Stable pytest :pypi:`pytest-matchers` Matchers for pytest Nov 19, 2025 N/A pytest<10.0,>=7.0 :pypi:`pytest-match-skip` Skip matching marks. Matches partial marks using wildcards. May 15, 2019 4 - Beta pytest (>=4.4.1) @@ -1121,7 +1129,7 @@ This list contains 1776 plugins. :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Nov 17, 2025 N/A pytest==9.0.1 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Dec 08, 2025 N/A pytest==9.0.2 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1174,7 +1182,7 @@ This list contains 1776 plugins. :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Feb 18, 2025 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Dec 11, 2025 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) @@ -1183,7 +1191,7 @@ This list contains 1776 plugins. :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Nov 01, 2025 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Dec 01, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Dec 08, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A @@ -1201,7 +1209,7 @@ This list contains 1776 plugins. :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A - :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Nov 30, 2025 N/A N/A + :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Dec 12, 2025 N/A N/A :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) :pypi:`pytest-poo` Visualize your crappy tests Mar 25, 2021 5 - Production/Stable pytest (>=2.3.4) :pypi:`pytest-poo-fail` Visualize your failed tests with poo Feb 12, 2015 5 - Production/Stable N/A @@ -1238,7 +1246,7 @@ This list contains 1776 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Dec 06, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Dec 14, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1271,7 +1279,7 @@ This list contains 1776 plugins. :pypi:`pytest-pyvenv` A package for create venv in tests Feb 27, 2024 N/A pytest ; extra == 'test' :pypi:`pytest-pyvista` Pytest-pyvista package. Dec 02, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-qanova` A pytest plugin to collect test information Sep 05, 2024 3 - Alpha pytest - :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Nov 12, 2025 5 - Production/Stable pytest>=7.2.2 + :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Jun 14, 2024 5 - Production/Stable pytest>=6.0 @@ -1322,10 +1330,10 @@ This list contains 1776 plugins. :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 05, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 11, 2025 N/A pytest>=7.0.0 :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A - :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Feb 05, 2025 5 - Production/Stable pytest - :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance May 05, 2025 3 - Alpha pytest + :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A @@ -1340,7 +1348,7 @@ This list contains 1776 plugins. :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Dec 02, 2025 N/A pytest>=4.6.10 :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A - :pypi:`pytest-req` pytest requests plugin Nov 04, 2025 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-req` pytest requests plugin Dec 09, 2025 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-reqcov` A pytest plugin for requirement coverage tracking Jul 04, 2025 3 - Alpha pytest>=6.0 :pypi:`pytest-reqs` pytest plugin to check pinned requirements May 12, 2019 N/A pytest (>=2.4.2) :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) @@ -1389,7 +1397,7 @@ This list contains 1776 plugins. :pypi:`pytest-rmysql` This is a plugin which is able to connet MySQL easyly. Aug 17, 2025 N/A pytest>=8.4.1 :pypi:`pytest-rng` Fixtures for seeding tests and making randomness reproducible Aug 08, 2019 5 - Production/Stable pytest :pypi:`pytest-roast` pytest plugin for ROAST configuration override and fixtures Nov 09, 2022 5 - Production/Stable pytest - :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Nov 13, 2025 N/A pytest<10,>=7 + :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Dec 09, 2025 N/A pytest<10,>=7 :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 @@ -1417,10 +1425,10 @@ This list contains 1776 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Nov 29, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 13, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 - :pypi:`pytest-scenarios` Add your description here Nov 22, 2025 N/A N/A + :pypi:`pytest-scenarios` Add your description here Dec 07, 2025 N/A N/A :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest Nov 14, 2025 4 - Beta pytest>=8.3.4 @@ -1430,7 +1438,7 @@ This list contains 1776 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Nov 29, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 13, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1629,7 +1637,7 @@ This list contains 1776 plugins. :pypi:`pytest-test-tracer-for-pytest-bdd` A plugin that allows coll test data for use on Test Tracer Aug 20, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-test-utils` Feb 08, 2024 N/A pytest >=3.9 :pypi:`pytest-tesults` Tesults plugin for pytest Nov 12, 2024 5 - Production/Stable pytest>=3.5.0 - :pypi:`pytest-texts-score` Texts content similarity scoring plugin Nov 26, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-texts-score` Texts content similarity scoring plugin Dec 13, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-textual-snapshot` Snapshot testing for Textual apps Jan 23, 2025 5 - Production/Stable pytest>=8.0.0 :pypi:`pytest-tezos` pytest-ligo Jan 16, 2020 4 - Beta N/A :pypi:`pytest-tf` Test your OpenTofu and Terraform config using a PyTest plugin May 29, 2024 N/A pytest<9.0.0,>=8.2.1 @@ -1682,7 +1690,7 @@ This list contains 1776 plugins. :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A - :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Dec 06, 2025 N/A pytest<=9.0.1,>=7.4 + :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Dec 12, 2025 N/A pytest<=9.0.1,>=7.4 :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A @@ -1703,7 +1711,7 @@ This list contains 1776 plugins. :pypi:`pytest-uncollect-if` A plugin to uncollect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-unflakable` Unflakable plugin for PyTest Apr 30, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-unhandled-exception-exit-code` Plugin for py.test set a different exit code on uncaught exceptions Jun 22, 2020 5 - Production/Stable pytest (>=2.3) - :pypi:`pytest-unique` Pytest fixture to generate unique values. Nov 03, 2025 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-unique` Pytest fixture to generate unique values. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-unittest-filter` A pytest plugin for filtering unittest-based test classes Jan 12, 2019 4 - Beta pytest (>=3.1.0) :pypi:`pytest-unittest-id-runner` A pytest plugin to run tests using unittest-style test IDs Feb 09, 2025 N/A pytest>=6.0.0 :pypi:`pytest-unmagic` Pytest fixtures with conventional import semantics Jul 14, 2025 5 - Production/Stable pytest @@ -1766,7 +1774,7 @@ This list contains 1776 plugins. :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Nov 24, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 04, 2025 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 @@ -2130,6 +2138,13 @@ This list contains 1776 plugins. Fixture to automate running Amaranth simulations + :pypi:`pytest-ampel-core` + *last release*: Dec 12, 2025, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + A plugin to provide AmpelContext fixtures in pytest + :pypi:`pytest-analyzer` *last release*: Feb 21, 2024, *status*: N/A, @@ -2250,7 +2265,7 @@ This list contains 1776 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Nov 26, 2025, + *last release*: Dec 12, 2025, *status*: N/A, *requires*: pytest==7.2.2 @@ -2327,9 +2342,9 @@ This list contains 1776 plugins. pyest results colection plugin :pypi:`pytest-argus-reporter` - *last release*: Sep 17, 2025, + *last release*: Dec 08, 2025, *status*: 4 - Beta, - *requires*: pytest>=3.0; extra == "dev" + *requires*: pytest~=9.0.0; extra == "dev" A simple plugin to report results of test into argus @@ -2838,7 +2853,7 @@ This list contains 1776 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Dec 04, 2025, + *last release*: Dec 12, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -3265,7 +3280,7 @@ This list contains 1776 plugins. A clean, modern, wrapper for pytest.mark.parametrize :pypi:`pytest-case-provider` - *last release*: Dec 06, 2025, + *last release*: Dec 07, 2025, *status*: 3 - Alpha, *requires*: pytest<9,>=8 @@ -3411,6 +3426,13 @@ This list contains 1776 plugins. check the README when running tests + :pypi:`pytest-checkers` + *last release*: Dec 14, 2025, + *status*: N/A, + *requires*: N/A + + Add your description here + :pypi:`pytest-checkipdb` *last release*: Dec 04, 2023, *status*: 5 - Production/Stable, @@ -3643,9 +3665,9 @@ This list contains 1776 plugins. Distribute tests to cloud machines without fuss :pypi:`pytest-cmake` - *last release*: Aug 14, 2025, + *last release*: Dec 08, 2025, *status*: N/A, - *requires*: pytest<9,>=4 + *requires*: pytest<10,>=4 Provide CMake module for Pytest @@ -3796,6 +3818,13 @@ This list contains 1776 plugins. A simple plugin to use with pytest + :pypi:`pytest-collect-requirements` + *last release*: Dec 13, 2025, + *status*: 5 - Production/Stable, + *requires*: pytest>=9.0.1 + + A pytest plugin to collect test requirements from requirements marker. + :pypi:`pytest-colordots` *last release*: Oct 06, 2017, *status*: 5 - Production/Stable, @@ -4490,9 +4519,9 @@ This list contains 1776 plugins. A simple plugin to use with pytest :pypi:`pytest-describe` - *last release*: Oct 23, 2025, + *last release*: Dec 12, 2025, *status*: 5 - Production/Stable, - *requires*: pytest<9,>=6 + *requires*: pytest<10,>=6 Describe-style plugin for pytest @@ -4658,7 +4687,7 @@ This list contains 1776 plugins. A Django plugin for pytest. :pypi:`pytest-djangoapp` - *last release*: Sep 28, 2025, + *last release*: Dec 13, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -5120,7 +5149,7 @@ This list contains 1776 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Nov 28, 2025, + *last release*: Dec 09, 2025, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5169,7 +5198,7 @@ This list contains 1776 plugins. Pytest plugin reporting fixtures and test functions execution time. :pypi:`pytest-dynamic-parameterize` - *last release*: Dec 06, 2025, + *last release*: Dec 11, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -5596,14 +5625,14 @@ This list contains 1776 plugins. Pytest plugin for testing examples in docstrings and markdown files. :pypi:`pytest-exasol-backend` - *last release*: Oct 29, 2025, + *last release*: Dec 10, 2025, *status*: N/A, *requires*: pytest<9,>=7 :pypi:`pytest-exasol-extension` - *last release*: Oct 29, 2025, + *last release*: Dec 11, 2025, *status*: N/A, *requires*: pytest<9,>=7 @@ -5624,7 +5653,7 @@ This list contains 1776 plugins. :pypi:`pytest-exasol-slc` - *last release*: Oct 30, 2025, + *last release*: Dec 12, 2025, *status*: N/A, *requires*: pytest<9,>=7 @@ -6127,6 +6156,13 @@ This list contains 1776 plugins. Handy fixtues to access your fixtures from your _pytest tests. + :pypi:`pytest-fixture-timing` + *last release*: Dec 11, 2025, + *status*: N/A, + *requires*: pytest>=7.0 + + Tiny plugin to report total duration per fixture + :pypi:`pytest-fixture-tools` *last release*: Apr 30, 2025, *status*: 6 - Mature, @@ -6169,6 +6205,13 @@ This list contains 1776 plugins. Continuously runs your tests to detect flaky tests + :pypi:`pytest-flakefighters` + *last release*: Dec 09, 2025, + *status*: N/A, + *requires*: pytest>=6.2.0 + + Pytest plugin implementing flaky test failure detection and classification. + :pypi:`pytest-flakefinder` *last release*: Oct 26, 2022, *status*: 4 - Beta, @@ -6183,6 +6226,13 @@ This list contains 1776 plugins. pytest plugin to check source code with pyflakes + :pypi:`pytest-flakiness` + *last release*: Dec 09, 2025, + *status*: N/A, + *requires*: pytest>=9.0.2 + + Pytest reporter for Flakiness.io + :pypi:`pytest-flaptastic` *last release*: Mar 17, 2019, *status*: N/A, @@ -6596,6 +6646,13 @@ This list contains 1776 plugins. Extends allure-pytest functionality + :pypi:`pytest-glow-report` + *last release*: Dec 08, 2025, + *status*: 4 - Beta, + *requires*: pytest>=6.0; extra == "dev" + + Beautiful, glowing HTML test reports for PyTest and unittest. + :pypi:`pytest-gnupg-fixtures` *last release*: Mar 04, 2021, *status*: 4 - Beta, @@ -6842,7 +6899,7 @@ This list contains 1776 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Dec 06, 2025, + *last release*: Dec 09, 2025, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7129,7 +7186,7 @@ This list contains 1776 plugins. Visualise PyTest status via your Phillips Hue lights :pypi:`pytest-human` - *last release*: Nov 24, 2025, + *last release*: Dec 07, 2025, *status*: 4 - Beta, *requires*: pytest>=8 @@ -7409,7 +7466,7 @@ This list contains 1776 plugins. pytest plugin to instrument tests :pypi:`pytest-insubprocess` - *last release*: Jul 01, 2025, + *last release*: Dec 08, 2025, *status*: 4 - Beta, *requires*: pytest>=7.4 @@ -7430,7 +7487,7 @@ This list contains 1776 plugins. Automatic integration test marking and excluding plugin for pytest :pypi:`pytest-intent` - *last release*: Dec 06, 2025, + *last release*: Dec 13, 2025, *status*: N/A, *requires*: pytest<10.0.0,>=9.0.0 @@ -7857,7 +7914,7 @@ This list contains 1776 plugins. :pypi:`pytest_kustomize` - *last release*: Oct 02, 2025, + *last release*: Dec 08, 2025, *status*: N/A, *requires*: N/A @@ -7899,7 +7956,7 @@ This list contains 1776 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Dec 06, 2025, + *last release*: Dec 09, 2025, *status*: 4 - Beta, *requires*: N/A @@ -8087,6 +8144,13 @@ This list contains 1776 plugins. pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. + :pypi:`pytest-llm-agent` + *last release*: Dec 12, 2025, + *status*: N/A, + *requires*: N/A + + Add your description here + :pypi:`pytest-llmeval` *last release*: Mar 19, 2025, *status*: 4 - Beta, @@ -8221,7 +8285,7 @@ This list contains 1776 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Nov 28, 2025, + *last release*: Dec 11, 2025, *status*: 5 - Production/Stable, *requires*: pytest==9.0.1 @@ -8368,7 +8432,7 @@ This list contains 1776 plugins. UNKNOWN :pypi:`pytest-mask-secrets` - *last release*: Jan 28, 2025, + *last release*: Dec 12, 2025, *status*: N/A, *requires*: N/A @@ -9425,9 +9489,9 @@ This list contains 1776 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Nov 17, 2025, + *last release*: Dec 08, 2025, *status*: N/A, - *requires*: pytest==9.0.1 + *requires*: pytest==9.0.2 OpenTelemetry plugin for Pytest @@ -9796,7 +9860,7 @@ This list contains 1776 plugins. runs tests in an order such that coverage increases as fast as possible :pypi:`pytest-platform-adapter` - *last release*: Feb 18, 2025, + *last release*: Dec 11, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.5 @@ -9859,7 +9923,7 @@ This list contains 1776 plugins. A pytest plugin for playwright python :pypi:`pytest-playwright-json` - *last release*: Dec 01, 2025, + *last release*: Dec 08, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -9985,7 +10049,7 @@ This list contains 1776 plugins. Provides Polecat pytest fixtures :pypi:`pytest-polymeric-report` - *last release*: Nov 30, 2025, + *last release*: Dec 12, 2025, *status*: N/A, *requires*: N/A @@ -10244,7 +10308,7 @@ This list contains 1776 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Dec 06, 2025, + *last release*: Dec 14, 2025, *status*: N/A, *requires*: pytest==8.4.2 @@ -10475,7 +10539,7 @@ This list contains 1776 plugins. A pytest plugin to collect test information :pypi:`pytest-qaseio` - *last release*: Nov 12, 2025, + *last release*: Dec 10, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=7.2.2 @@ -10832,7 +10896,7 @@ This list contains 1776 plugins. pytest plugin for repeating tests :pypi:`pytest-repeated` - *last release*: Dec 05, 2025, + *last release*: Dec 11, 2025, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10846,14 +10910,14 @@ This list contains 1776 plugins. py.test plugin for repeating single test multiple times. :pypi:`pytest-replay` - *last release*: Feb 05, 2025, + *last release*: Dec 09, 2025, *status*: 5 - Production/Stable, *requires*: pytest Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests :pypi:`pytest-repo-health` - *last release*: May 05, 2025, + *last release*: Dec 09, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -10958,7 +11022,7 @@ This list contains 1776 plugins. Pytest Repo Structure :pypi:`pytest-req` - *last release*: Nov 04, 2025, + *last release*: Dec 09, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -11301,7 +11365,7 @@ This list contains 1776 plugins. pytest plugin for ROAST configuration override and fixtures :pypi:`pytest_robotframework` - *last release*: Nov 13, 2025, + *last release*: Dec 09, 2025, *status*: N/A, *requires*: pytest<10,>=7 @@ -11497,7 +11561,7 @@ This list contains 1776 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Nov 29, 2025, + *last release*: Dec 13, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11518,7 +11582,7 @@ This list contains 1776 plugins. A pytest plugin that generates unit test scenarios from data files. :pypi:`pytest-scenarios` - *last release*: Nov 22, 2025, + *last release*: Dec 07, 2025, *status*: N/A, *requires*: N/A @@ -11588,7 +11652,7 @@ This list contains 1776 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Nov 29, 2025, + *last release*: Dec 13, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -12981,7 +13045,7 @@ This list contains 1776 plugins. Tesults plugin for pytest :pypi:`pytest-texts-score` - *last release*: Nov 26, 2025, + *last release*: Dec 13, 2025, *status*: 4 - Beta, *requires*: pytest>=8.4.2 @@ -13352,7 +13416,7 @@ This list contains 1776 plugins. Text User Interface (TUI) and HTML report for Pytest test runs :pypi:`pytest-tui-runner` - *last release*: Dec 06, 2025, + *last release*: Dec 12, 2025, *status*: N/A, *requires*: pytest<=9.0.1,>=7.4 @@ -13499,9 +13563,9 @@ This list contains 1776 plugins. Plugin for py.test set a different exit code on uncaught exceptions :pypi:`pytest-unique` - *last release*: Nov 03, 2025, + *last release*: Dec 08, 2025, *status*: N/A, - *requires*: pytest<9.0.0,>=8.0.0 + *requires*: pytest<10.0.0,>=9.0.0 Pytest fixture to generate unique values. @@ -13940,9 +14004,9 @@ This list contains 1776 plugins. A pytest plugin to list worker statistics after a xdist run. :pypi:`pytest-xdocker` - *last release*: Dec 04, 2025, + *last release*: Dec 08, 2025, *status*: N/A, - *requires*: pytest<9.0.0,>=8.0.0 + *requires*: pytest<10.0.0,>=9.0.0 Pytest fixture to run docker across test runs. From 17ac05b58f53633e575a2141db974911a478de3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 07:02:14 +0100 Subject: [PATCH 103/307] build(deps): Bump django in /testing/plugins_integration (#14046) Bumps [django](https://github.com/django/django) from 5.2.9 to 6.0. - [Commits](https://github.com/django/django/compare/5.2.9...6.0) --- updated-dependencies: - dependency-name: django dependency-version: '6.0' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index 29a8ba52f86..9797ee83f57 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.12.0 -django==5.2.9 +django==6.0 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 From 18da5ddf403e0ab69ff17fdb1f76817db0dabc6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 13:48:21 +0100 Subject: [PATCH 104/307] build(deps): Bump peter-evans/create-pull-request from 7.0.8 to 7.0.9 (#14019) Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.8 to 7.0.9. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/271a8d0340265f705b14b6d32b9829c1cb33d45e...84ae59a2cdc2258d6fa0732dd66352dddae2a412) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 7.0.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index f8577e34673..efe18bb6b12 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -47,7 +47,7 @@ jobs: - name: Create Pull Request id: pr - uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e + uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 with: commit-message: '[automated] Update plugin list' author: 'pytest bot ' From 2fb64da82c83d4a485b3b2626ab8b39ede340d43 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 22:04:08 +0000 Subject: [PATCH 105/307] [pre-commit.ci] pre-commit autoupdate (#14047) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.8 → v0.14.9](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.8...v0.14.9) - [github.com/pre-commit/mirrors-mypy: v1.19.0 → v1.19.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.19.0...v1.19.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 147b8805405..cd435791da9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.8" + rev: "v0.14.9" hooks: - id: ruff-check args: ["--fix"] @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.19.0 + rev: v1.19.1 hooks: - id: mypy files: ^(src/|testing/|scripts/) From c287dd7147319bf76179633def108c4b5aa013e6 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Sat, 20 Dec 2025 07:37:02 -0300 Subject: [PATCH 106/307] Ensure subtest's context kwargs are JSON serializable (#13963) Convert all the values of `SubtestContext.kwargs` to strings using `saferepr`. This complies with the requirement that the returned dict from `pytest_report_to_serializable` is serializable to JSON, at the cost of losing type information for objects that are natively supported by JSON. Fixes pytest-dev/pytest-xdist#1273 --- changelog/13963.bugfix.rst | 3 ++ src/_pytest/subtests.py | 9 ++++- testing/test_subtests.py | 69 ++++++++++++++++++++++++++++++-------- 3 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 changelog/13963.bugfix.rst diff --git a/changelog/13963.bugfix.rst b/changelog/13963.bugfix.rst new file mode 100644 index 00000000000..a5f7ebe5c03 --- /dev/null +++ b/changelog/13963.bugfix.rst @@ -0,0 +1,3 @@ +Fixed subtests running with `pytest-xdist `__ when their contexts contain objects that are not JSON-serializable. + +Fixes `pytest-dev/pytest-xdist#1273 `__. diff --git a/src/_pytest/subtests.py b/src/_pytest/subtests.py index a96b11f1fe4..4856f72b9ff 100644 --- a/src/_pytest/subtests.py +++ b/src/_pytest/subtests.py @@ -61,8 +61,15 @@ class SubtestContext: msg: str | None kwargs: Mapping[str, Any] + def __post_init__(self) -> None: + # Brute-force the returned kwargs dict to be JSON serializable (pytest-dev/pytest-xdist#1273). + object.__setattr__( + self, "kwargs", {k: saferepr(v) for (k, v) in self.kwargs.items()} + ) + def _to_json(self) -> dict[str, Any]: - return dataclasses.asdict(self) + result = dataclasses.asdict(self) + return result @classmethod def _from_json(cls, d: dict[str, Any]) -> Self: diff --git a/testing/test_subtests.py b/testing/test_subtests.py index 6849df53622..c480bb01658 100644 --- a/testing/test_subtests.py +++ b/testing/test_subtests.py @@ -1,8 +1,11 @@ from __future__ import annotations +from enum import Enum +import json import sys from typing import Literal +from _pytest._io.saferepr import saferepr from _pytest.subtests import SubtestContext from _pytest.subtests import SubtestReport import pytest @@ -302,10 +305,10 @@ def test_foo(subtests, x): result = pytester.runpytest("-v") result.stdout.fnmatch_lines( [ - "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i=1) *[[] 50%[]]", - "*.py::test_foo[[]0[]] FAILED *[[] 50%[]]", - "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i=1) *[[]100%[]]", - "*.py::test_foo[[]1[]] FAILED *[[]100%[]]", + "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i='1') *[[] 50%[]]", + "*.py::test_foo[[]0[]] FAILED *[[] 50%[]]", + "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i='1') *[[]100%[]]", + "*.py::test_foo[[]1[]] FAILED *[[]100%[]]", "contains 1 failed subtest", "* 4 failed, 4 subtests passed in *", ] @@ -320,10 +323,10 @@ def test_foo(subtests, x): result = pytester.runpytest("-v") result.stdout.fnmatch_lines( [ - "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i=1) *[[] 50%[]]", - "*.py::test_foo[[]0[]] FAILED *[[] 50%[]]", - "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i=1) *[[]100%[]]", - "*.py::test_foo[[]1[]] FAILED *[[]100%[]]", + "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i='1') *[[] 50%[]]", + "*.py::test_foo[[]0[]] FAILED *[[] 50%[]]", + "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i='1') *[[]100%[]]", + "*.py::test_foo[[]1[]] FAILED *[[]100%[]]", "contains 1 failed subtest", "* 4 failed in *", ] @@ -650,12 +653,12 @@ def test_capturing(self, pytester: pytest.Pytester, mode: str) -> None: result = pytester.runpytest(f"--capture={mode}") result.stdout.fnmatch_lines( [ - "*__ test (i='A') __*", + "*__ test (i=\"'A'\") __*", "*Captured stdout call*", "hello stdout A", "*Captured stderr call*", "hello stderr A", - "*__ test (i='B') __*", + "*__ test (i=\"'B'\") __*", "*Captured stdout call*", "hello stdout B", "*Captured stderr call*", @@ -676,8 +679,8 @@ def test_no_capture(self, pytester: pytest.Pytester) -> None: "hello stdout A", "uhello stdout B", "uend test", - "*__ test (i='A') __*", - "*__ test (i='B') __*", + "*__ test (i=\"'A'\") __*", + "*__ test (i=\"'B'\") __*", "*__ test __*", ] ) @@ -957,7 +960,14 @@ def test(subtests): ) +class MyEnum(Enum): + """Used in test_serialization, needs to be declared at the module level to be pickled.""" + + A = "A" + + def test_serialization() -> None: + """Ensure subtest's kwargs are serialized using `saferepr` (pytest-dev/pytest-xdist#1273).""" from _pytest.subtests import pytest_report_from_serializable from _pytest.subtests import pytest_report_to_serializable @@ -968,10 +978,41 @@ def test_serialization() -> None: outcome="passed", when="call", longrepr=None, - context=SubtestContext(msg="custom message", kwargs=dict(i=10)), + context=SubtestContext(msg="custom message", kwargs=dict(i=10, a=MyEnum.A)), ) data = pytest_report_to_serializable(report) assert data is not None + # Ensure the report is actually serializable to JSON. + _ = json.dumps(data) new_report = pytest_report_from_serializable(data) assert new_report is not None - assert new_report.context == SubtestContext(msg="custom message", kwargs=dict(i=10)) + assert new_report.context == SubtestContext( + msg="custom message", kwargs=dict(i=saferepr(10), a=saferepr(MyEnum.A)) + ) + + +def test_serialization_xdist(pytester: pytest.Pytester) -> None: # pragma: no cover + """Regression test for pytest-dev/pytest-xdist#1273.""" + pytest.importorskip("xdist") + pytester.makepyfile( + """ + from enum import Enum + import unittest + + class MyEnum(Enum): + A = "A" + + def test(subtests): + with subtests.test(a=MyEnum.A): + pass + + class T(unittest.TestCase): + + def test(self): + with self.subTest(a=MyEnum.A): + pass + """ + ) + pytester.syspathinsert() + result = pytester.runpytest("-n1", "-pxdist.plugin") + result.assert_outcomes(passed=2) From 50dcee5d5e8b2fdd6c9c6c61b7d45dd86df614a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:46:24 -0300 Subject: [PATCH 107/307] build(deps): Bump actions/cache from 4 to 5 (#14058) Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index efe18bb6b12..db48dcf1735 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -31,7 +31,7 @@ jobs: python-version: "3.13" - name: requests-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.cache/pytest-plugin-list/ key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well From 893389508ccaec4fa2b15f2e069d69cad8e5b1f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:46:34 -0300 Subject: [PATCH 108/307] build(deps): Bump peter-evans/create-pull-request from 7.0.9 to 8.0.0 (#14059) Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.9 to 8.0.0. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/84ae59a2cdc2258d6fa0732dd66352dddae2a412...98357b18bf14b5342f975ff684046ec3b2a07725) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index db48dcf1735..7c02a7c95eb 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -47,7 +47,7 @@ jobs: - name: Create Pull Request id: pr - uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 with: commit-message: '[automated] Update plugin list' author: 'pytest bot ' From 3b4e7ca59f42127a9aa27b790827ab819a75b9e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:46:56 -0300 Subject: [PATCH 109/307] build(deps): Bump actions/download-artifact from 6 to 7 (#14060) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 6 +++--- .github/workflows/test.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index cb45154f412..a6c07792f89 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -82,7 +82,7 @@ jobs: id-token: write steps: - name: Download Package - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: name: Packages path: dist @@ -121,13 +121,13 @@ jobs: contents: write steps: - name: Download Package - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: name: Packages path: dist - name: Download release notes - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: name: release-notes path: . diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 59eda632959..478b189ae83 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -257,7 +257,7 @@ jobs: persist-credentials: false - name: Download Package - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: name: Packages path: dist From 8650a5f7affefc6a2139a49d33eaa4c6625c8ade Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:47:07 -0300 Subject: [PATCH 110/307] build(deps): Bump actions/upload-artifact from 5 to 6 (#14062) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a6c07792f89..ef94adcffce 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -64,7 +64,7 @@ jobs: tox -e generate-gh-release-notes -- "$VERSION" gh-release-notes.md - name: Upload release notes - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: release-notes path: gh-release-notes.md From 502f76346eb730975ec746747f10de8db6344e21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:47:18 -0300 Subject: [PATCH 111/307] build(deps): Bump codecov/codecov-action from 5.5.1 to 5.5.2 (#14061) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.1 to 5.5.2. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/5a1091511ad55cbe89839c7260b706298ca349f7...671740ac38dd9b0130fbe1cec585b89eea48d3de) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.5.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 478b189ae83..133e9991f70 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -286,7 +286,7 @@ jobs: - name: Upload coverage to Codecov if: "matrix.use_coverage" - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de with: fail_ci_if_error: false files: ./coverage.xml From 3d5db6f9dae13b46eb837f598cefcdc282298f32 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:48:11 -0300 Subject: [PATCH 112/307] [automated] Update plugin list (#14055) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 202 +++++++++++++++++-------------- 1 file changed, 113 insertions(+), 89 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 96400e4bb6c..d715aa1ec53 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =6.0.0 :pypi:`pytest-alphamoon` Static code checks used at Alphamoon Dec 30, 2021 5 - Production/Stable pytest (>=3.5.0) :pypi:`pytest-amaranth-sim` Fixture to automate running Amaranth simulations Sep 21, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-ampel-core` A plugin to provide AmpelContext fixtures in pytest Dec 12, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-ampel-core` A plugin to provide AmpelContext fixtures in pytest Dec 17, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-analyzer` this plugin allows to analyze tests in pytest project, collect test metadata and sync it with testomat.io TCM system Feb 21, 2024 N/A pytest <8.0.0,>=7.3.1 :pypi:`pytest-android` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Feb 21, 2019 3 - Alpha pytest :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) @@ -97,7 +97,7 @@ This list contains 1784 plugins. :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Dec 12, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Dec 17, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -108,7 +108,7 @@ This list contains 1784 plugins. :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) - :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Dec 08, 2025 4 - Beta pytest~=9.0.0; extra == "dev" + :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Dec 17, 2025 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 24, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 @@ -181,7 +181,7 @@ This list contains 1784 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 12, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 17, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -200,7 +200,7 @@ This list contains 1784 plugins. :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A - :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 06, 2025 N/A pytest + :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 16, 2025 N/A pytest :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest @@ -242,7 +242,7 @@ This list contains 1784 plugins. :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A :pypi:`pytest-capture-warnings` pytest plugin to capture all warnings and put them in one file of your choice May 03, 2022 N/A pytest :pypi:`pytest-case` A clean, modern, wrapper for pytest.mark.parametrize Nov 25, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 07, 2025 3 - Alpha pytest<9,>=8 + :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 15, 2025 3 - Alpha pytest>=8 :pypi:`pytest-cases` Separate test code from test cases in pytest. Jun 09, 2025 5 - Production/Stable pytest :pypi:`pytest-case-start-from` A pytest plugin to start test execution from a specific test case Oct 28, 2025 4 - Beta pytest>=6.0.0 :pypi:`pytest-casewise-package-install` A pytest plugin for test case-level dynamic dependency management Oct 31, 2025 3 - Alpha pytest>=6.0.0 @@ -263,7 +263,7 @@ This list contains 1784 plugins. :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Nov 29, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-checkdocs` check the README when running tests Apr 30, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" - :pypi:`pytest-checkers` Add your description here Dec 14, 2025 N/A N/A + :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 20, 2025 N/A pytest>=9.0.2 :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 :pypi:`pytest-check-library` check your missing library Jul 17, 2022 N/A N/A :pypi:`pytest-check-libs` check your missing library Jul 17, 2022 N/A N/A @@ -275,7 +275,7 @@ This list contains 1784 plugins. :pypi:`pytest-chic-report` Simple pytest plugin for generating and sending report to messengers. Nov 01, 2024 N/A pytest>=6.0 :pypi:`pytest-chinesereport` Apr 16, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-choose` Provide the pytest with the ability to collect use cases based on rules in text files Feb 04, 2024 N/A pytest >=7.0.0 - :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Nov 30, 2025 N/A pytest>=8.0; extra == "dev" + :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Dec 15, 2025 N/A pytest>=8.0; extra == "dev" :pypi:`pytest-chunks` Run only a chunk of your test suite Jul 05, 2022 N/A pytest (>=6.0.0) :pypi:`pytest_cid` Compare data structures containing matching CIDs of different versions and encoding Sep 01, 2023 4 - Beta pytest >= 5.0, < 7.0 :pypi:`pytest-circleci` py.test plugin for CircleCI May 03, 2019 N/A N/A @@ -471,7 +471,7 @@ This list contains 1784 plugins. :pypi:`pytest-docker-butla` Jun 16, 2019 3 - Alpha N/A :pypi:`pytest-dockerc` Run, manage and stop Docker Compose project from Docker API Oct 09, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) - :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 11, 2024 4 - Beta pytest>=7.2.2 + :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 17, 2025 4 - Beta pytest<10,>=7.2.2 :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) :pypi:`pytest-docker-fixtures` pytest docker fixtures Dec 01, 2025 3 - Alpha pytest :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest @@ -534,15 +534,15 @@ This list contains 1784 plugins. :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest - :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Nov 12, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Nov 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Nov 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Dec 19, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Dec 19, 2025 5 - Production/Stable N/A :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) @@ -706,7 +706,7 @@ This list contains 1784 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Nov 10, 2025 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Dec 16, 2025 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Oct 12, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -759,7 +759,7 @@ This list contains 1784 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Dec 09, 2025 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Dec 20, 2025 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -769,7 +769,7 @@ This list contains 1784 plugins. :pypi:`pytest-hoverfly-wrapper` Integrates the Hoverfly HTTP proxy into Pytest Feb 27, 2023 5 - Production/Stable pytest (>=3.7.0) :pypi:`pytest-hpfeeds` Helpers for testing hpfeeds in your python project Feb 28, 2023 4 - Beta pytest (>=6.2.4,<7.0.0) :pypi:`pytest-html` pytest plugin for generating HTML reports Nov 07, 2023 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-html5` the best report for pytest Dec 04, 2025 N/A N/A + :pypi:`pytest-html5` the best report for pytest Dec 18, 2025 N/A N/A :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) @@ -804,7 +804,7 @@ This list contains 1784 plugins. :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Oct 21, 2025 4 - Beta pytest + :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Dec 16, 2025 4 - Beta pytest :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest :pypi:`pytest-idapro` A pytest plugin for idapython. Allows a pytest setup to run tests outside and inside IDA in an automated manner by runnig pytest inside IDA and by mocking idapython api Nov 03, 2018 N/A N/A :pypi:`pytest-idem` A pytest plugin to help with testing idem projects Dec 13, 2023 5 - Production/Stable N/A @@ -843,7 +843,7 @@ This list contains 1784 plugins. :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Dec 08, 2025 4 - Beta pytest>=7.4 :pypi:`pytest-integration` Organizing pytests by integration or not Nov 17, 2022 N/A N/A :pypi:`pytest-integration-mark` Automatic integration test marking and excluding plugin for pytest May 22, 2023 N/A pytest (>=5.2) - :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 13, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 17, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Oct 09, 2025 4 - Beta pytest @@ -910,7 +910,7 @@ This list contains 1784 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 09, 2025 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 16, 2025 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -918,7 +918,7 @@ This list contains 1784 plugins. :pypi:`pytest-lazy-fixture` It helps to use fixtures in pytest.mark.parametrize Feb 01, 2020 4 - Beta pytest (>=3.2.5) :pypi:`pytest-lazy-fixtures` Allows you to use fixtures in @pytest.mark.parametrize. Sep 16, 2025 N/A pytest>=7 :pypi:`pytest-ldap` python-ldap fixtures for pytest Aug 18, 2020 N/A pytest - :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Feb 15, 2023 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A @@ -937,7 +937,7 @@ This list contains 1784 plugins. :pypi:`pytest-litter` Pytest plugin which verifies that tests do not modify file trees. Nov 23, 2023 4 - Beta pytest >=6.1 :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-llm-agent` Add your description here Dec 12, 2025 N/A N/A + :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) @@ -978,9 +978,9 @@ This list contains 1784 plugins. :pypi:`pytest-mark-manage` 用例标签化管理 Aug 15, 2024 N/A pytest :pypi:`pytest-mark-no-py3` pytest plugin and bowler codemod to help migrate tests to Python 3 May 17, 2019 N/A pytest :pypi:`pytest-marks` UNKNOWN Nov 23, 2012 3 - Alpha N/A - :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Dec 12, 2025 N/A N/A + :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Dec 17, 2025 N/A N/A :pypi:`pytest-matcher` Easy way to match captured \`pytest\` output against expectations stored in files Aug 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-matchers` Matchers for pytest Nov 19, 2025 N/A pytest<10.0,>=7.0 + :pypi:`pytest-matchers` Matchers for pytest Dec 19, 2025 N/A pytest<10.0,>=7.0 :pypi:`pytest-match-skip` Skip matching marks. Matches partial marks using wildcards. May 15, 2019 4 - Beta pytest (>=4.4.1) :pypi:`pytest-mat-report` this is report Jan 20, 2021 N/A N/A :pypi:`pytest-matrix` Provide tools for generating tests from combinations of fixtures. Jun 24, 2020 5 - Production/Stable pytest (>=5.4.3,<6.0.0) @@ -1129,7 +1129,7 @@ This list contains 1784 plugins. :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Dec 08, 2025 N/A pytest==9.0.2 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Dec 15, 2025 N/A pytest==9.0.2 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1175,14 +1175,14 @@ This list contains 1784 plugins. :pypi:`pytest-pickle-cache` A pytest plugin for caching test results using pickle. Feb 17, 2025 N/A pytest>=7 :pypi:`pytest-pigeonhole` Jun 25, 2018 5 - Production/Stable pytest (>=3.4) :pypi:`pytest-pikachu` Show surprise when tests are passing Aug 05, 2021 5 - Production/Stable pytest - :pypi:`pytest-pilot` Slice in your test base thanks to powerful markers. Oct 09, 2020 5 - Production/Stable N/A + :pypi:`pytest-pilot` Slice in your test base thanks to powerful markers. Dec 17, 2025 5 - Production/Stable N/A :pypi:`pytest-pingguo-pytest-plugin` pingguo test Oct 26, 2022 4 - Beta N/A :pypi:`pytest-pings` 🦊 The pytest plugin for Firefox Telemetry 📊 Jun 29, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-pinned` A simple pytest plugin for pinning tests Sep 17, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Dec 11, 2025 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Dec 15, 2025 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) @@ -1209,14 +1209,14 @@ This list contains 1784 plugins. :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A - :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Dec 12, 2025 N/A N/A + :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Dec 15, 2025 N/A N/A :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) :pypi:`pytest-poo` Visualize your crappy tests Mar 25, 2021 5 - Production/Stable pytest (>=2.3.4) :pypi:`pytest-poo-fail` Visualize your failed tests with poo Feb 12, 2015 5 - Production/Stable N/A :pypi:`pytest-pook` Pytest plugin for pook Feb 15, 2024 4 - Beta pytest :pypi:`pytest-pop` A pytest plugin to help with testing pop projects May 09, 2023 5 - Production/Stable pytest :pypi:`pytest-porcochu` Show surprise when tests are passing Nov 28, 2024 5 - Production/Stable N/A - :pypi:`pytest-portion` Select a portion of the collected tests Jan 28, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-portion` Select a portion of the collected tests Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-postgres` Run PostgreSQL in Docker container in Pytest. Mar 22, 2020 N/A pytest :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. May 17, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) @@ -1246,7 +1246,7 @@ This list contains 1784 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Dec 14, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Dec 18, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1330,7 +1330,7 @@ This list contains 1784 plugins. :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 11, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 14, 2025 N/A pytest>=7.0.0 :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 09, 2025 5 - Production/Stable pytest :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest @@ -1363,7 +1363,7 @@ This list contains 1784 plugins. :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A - :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Nov 23, 2025 4 - Beta pytest + :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 18, 2025 4 - Beta pytest :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 @@ -1388,6 +1388,7 @@ This list contains 1784 plugins. :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Nov 24, 2025 4 - Beta pytest<9,>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest :pypi:`pytest-rich-reporter` A pytest plugin using Rich for beautiful test result formatting. Feb 17, 2022 1 - Planning pytest (>=5.0.0) @@ -1402,6 +1403,7 @@ This list contains 1784 plugins. :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) + :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Dec 14, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rst` Test code from RST documents with pytest Jan 26, 2023 N/A N/A :pypi:`pytest-rt` pytest data collector plugin for Testgr May 05, 2022 N/A N/A :pypi:`pytest-rts` Coverage-based regression test selection (RTS) plugin for pytest May 17, 2021 N/A pytest @@ -1425,7 +1427,7 @@ This list contains 1784 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 13, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 18, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Dec 07, 2025 N/A N/A @@ -1438,7 +1440,7 @@ This list contains 1784 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 13, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 18, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1637,7 +1639,7 @@ This list contains 1784 plugins. :pypi:`pytest-test-tracer-for-pytest-bdd` A plugin that allows coll test data for use on Test Tracer Aug 20, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-test-utils` Feb 08, 2024 N/A pytest >=3.9 :pypi:`pytest-tesults` Tesults plugin for pytest Nov 12, 2024 5 - Production/Stable pytest>=3.5.0 - :pypi:`pytest-texts-score` Texts content similarity scoring plugin Dec 13, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-texts-score` Texts content similarity scoring plugin Dec 17, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-textual-snapshot` Snapshot testing for Textual apps Jan 23, 2025 5 - Production/Stable pytest>=8.0.0 :pypi:`pytest-tezos` pytest-ligo Jan 16, 2020 4 - Beta N/A :pypi:`pytest-tf` Test your OpenTofu and Terraform config using a PyTest plugin May 29, 2024 N/A pytest<9.0.0,>=8.2.1 @@ -1748,13 +1750,14 @@ This list contains 1784 plugins. :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A - :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Aug 28, 2024 4 - Beta N/A + :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Dec 20, 2025 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 + :pypi:`pytest-webtestpilot` Pytest plugin for running WebTestPilot JSON tests Dec 17, 2025 N/A pytest>=9.0.2 :pypi:`pytest-wetest` Welian API Automation test framework pytest plugin Nov 10, 2018 4 - Beta N/A :pypi:`pytest-when` Utility which makes mocking more readable and controllable Sep 25, 2025 N/A pytest>=7.3.1 :pypi:`pytest-whirlwind` Testing Tornado. Jun 12, 2020 N/A N/A @@ -2139,7 +2142,7 @@ This list contains 1784 plugins. Fixture to automate running Amaranth simulations :pypi:`pytest-ampel-core` - *last release*: Dec 12, 2025, + *last release*: Dec 17, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -2265,7 +2268,7 @@ This list contains 1784 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Dec 12, 2025, + *last release*: Dec 17, 2025, *status*: N/A, *requires*: pytest==7.2.2 @@ -2342,7 +2345,7 @@ This list contains 1784 plugins. pyest results colection plugin :pypi:`pytest-argus-reporter` - *last release*: Dec 08, 2025, + *last release*: Dec 17, 2025, *status*: 4 - Beta, *requires*: pytest~=9.0.0; extra == "dev" @@ -2853,7 +2856,7 @@ This list contains 1784 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Dec 12, 2025, + *last release*: Dec 17, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -2986,7 +2989,7 @@ This list contains 1784 plugins. pytest plugin to mark a test as blocker and skip all other tests :pypi:`pytest-b-logger` - *last release*: Dec 06, 2025, + *last release*: Dec 16, 2025, *status*: N/A, *requires*: pytest @@ -3280,9 +3283,9 @@ This list contains 1784 plugins. A clean, modern, wrapper for pytest.mark.parametrize :pypi:`pytest-case-provider` - *last release*: Dec 07, 2025, + *last release*: Dec 15, 2025, *status*: 3 - Alpha, - *requires*: pytest<9,>=8 + *requires*: pytest>=8 Advanced pytest parametrization plugin that generates test case instances from sync or async factories. @@ -3427,11 +3430,11 @@ This list contains 1784 plugins. check the README when running tests :pypi:`pytest-checkers` - *last release*: Dec 14, 2025, + *last release*: Dec 20, 2025, *status*: N/A, - *requires*: N/A + *requires*: pytest>=9.0.2 - Add your description here + Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing :pypi:`pytest-checkipdb` *last release*: Dec 04, 2023, @@ -3511,7 +3514,7 @@ This list contains 1784 plugins. Provide the pytest with the ability to collect use cases based on rules in text files :pypi:`pytest-chronicle` - *last release*: Nov 30, 2025, + *last release*: Dec 15, 2025, *status*: N/A, *requires*: pytest>=8.0; extra == "dev" @@ -4883,9 +4886,9 @@ This list contains 1784 plugins. Manages Docker containers during your integration tests :pypi:`pytest-docker-compose-v2` - *last release*: Dec 11, 2024, + *last release*: Dec 17, 2025, *status*: 4 - Beta, - *requires*: pytest>=7.2.2 + *requires*: pytest<10,>=7.2.2 Manages Docker containers during your integration tests @@ -5324,63 +5327,63 @@ This list contains 1784 plugins. Send execution result email :pypi:`pytest-embedded` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A pytest plugin that designed for embedded testing. :pypi:`pytest-embedded-arduino` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-idf` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with ESP-IDF. :pypi:`pytest-embedded-jtag` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with JTAG. :pypi:`pytest-embedded-nuttx` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with NuttX. :pypi:`pytest-embedded-qemu` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with QEMU. :pypi:`pytest-embedded-serial` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Serial. :pypi:`pytest-embedded-serial-esp` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Espressif target boards. :pypi:`pytest-embedded-wokwi` - *last release*: Nov 12, 2025, + *last release*: Dec 19, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -6528,7 +6531,7 @@ This list contains 1784 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Nov 10, 2025, + *last release*: Dec 16, 2025, *status*: N/A, *requires*: pytest>=3.6 @@ -6899,7 +6902,7 @@ This list contains 1784 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Dec 09, 2025, + *last release*: Dec 20, 2025, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -6969,7 +6972,7 @@ This list contains 1784 plugins. pytest plugin for generating HTML reports :pypi:`pytest-html5` - *last release*: Dec 04, 2025, + *last release*: Dec 18, 2025, *status*: N/A, *requires*: N/A @@ -7214,7 +7217,7 @@ This list contains 1784 plugins. A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite :pypi:`pytest-ibutsu` - *last release*: Oct 21, 2025, + *last release*: Dec 16, 2025, *status*: 4 - Beta, *requires*: pytest @@ -7487,7 +7490,7 @@ This list contains 1784 plugins. Automatic integration test marking and excluding plugin for pytest :pypi:`pytest-intent` - *last release*: Dec 13, 2025, + *last release*: Dec 17, 2025, *status*: N/A, *requires*: pytest<10.0.0,>=9.0.0 @@ -7956,7 +7959,7 @@ This list contains 1784 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Dec 09, 2025, + *last release*: Dec 16, 2025, *status*: 4 - Beta, *requires*: N/A @@ -8012,9 +8015,9 @@ This list contains 1784 plugins. python-ldap fixtures for pytest :pypi:`pytest-leak-finder` - *last release*: Feb 15, 2023, + *last release*: Dec 19, 2025, *status*: 4 - Beta, - *requires*: pytest (>=3.5.0) + *requires*: pytest>=3.5.0 Find the test that's leaking before the one that fails @@ -8145,11 +8148,11 @@ This list contains 1784 plugins. pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. :pypi:`pytest-llm-agent` - *last release*: Dec 12, 2025, + *last release*: Dec 16, 2025, *status*: N/A, - *requires*: N/A + *requires*: pytest>=9.0.2 - Add your description here + LLM Agent for working with pytest :pypi:`pytest-llmeval` *last release*: Mar 19, 2025, @@ -8432,7 +8435,7 @@ This list contains 1784 plugins. UNKNOWN :pypi:`pytest-mask-secrets` - *last release*: Dec 12, 2025, + *last release*: Dec 17, 2025, *status*: N/A, *requires*: N/A @@ -8446,7 +8449,7 @@ This list contains 1784 plugins. Easy way to match captured \`pytest\` output against expectations stored in files :pypi:`pytest-matchers` - *last release*: Nov 19, 2025, + *last release*: Dec 19, 2025, *status*: N/A, *requires*: pytest<10.0,>=7.0 @@ -9489,7 +9492,7 @@ This list contains 1784 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Dec 08, 2025, + *last release*: Dec 15, 2025, *status*: N/A, *requires*: pytest==9.0.2 @@ -9811,7 +9814,7 @@ This list contains 1784 plugins. Show surprise when tests are passing :pypi:`pytest-pilot` - *last release*: Oct 09, 2020, + *last release*: Dec 17, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -9860,7 +9863,7 @@ This list contains 1784 plugins. runs tests in an order such that coverage increases as fast as possible :pypi:`pytest-platform-adapter` - *last release*: Dec 11, 2025, + *last release*: Dec 15, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.5 @@ -10049,7 +10052,7 @@ This list contains 1784 plugins. Provides Polecat pytest fixtures :pypi:`pytest-polymeric-report` - *last release*: Dec 12, 2025, + *last release*: Dec 15, 2025, *status*: N/A, *requires*: N/A @@ -10098,9 +10101,9 @@ This list contains 1784 plugins. Show surprise when tests are passing :pypi:`pytest-portion` - *last release*: Jan 28, 2021, + *last release*: Dec 19, 2025, *status*: 4 - Beta, - *requires*: pytest (>=3.5.0) + *requires*: pytest>=3.5.0 Select a portion of the collected tests @@ -10308,7 +10311,7 @@ This list contains 1784 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Dec 14, 2025, + *last release*: Dec 18, 2025, *status*: N/A, *requires*: pytest==8.4.2 @@ -10896,7 +10899,7 @@ This list contains 1784 plugins. pytest plugin for repeating tests :pypi:`pytest-repeated` - *last release*: Dec 11, 2025, + *last release*: Dec 14, 2025, *status*: N/A, *requires*: pytest>=7.0.0 @@ -11127,7 +11130,7 @@ This list contains 1784 plugins. pytest plugin to re-run tests to eliminate flaky failures :pypi:`pytest-reserial` - *last release*: Nov 23, 2025, + *last release*: Dec 18, 2025, *status*: 4 - Beta, *requires*: pytest @@ -11301,6 +11304,13 @@ This list contains 1784 plugins. Pytest plugin to reverse test order. + :pypi:`pytest-review` + *last release*: Dec 19, 2025, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + A pytest plugin that reviews the quality of your tests + :pypi:`pytest-rich` *last release*: Dec 12, 2024, *status*: 4 - Beta, @@ -11399,6 +11409,13 @@ This list contains 1784 plugins. Extend py.test for RPC OpenStack testing. + :pypi:`pytest-r-snapshot` + *last release*: Dec 14, 2025, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + A pytest plugin for snapshot testing against R code outputs + :pypi:`pytest-rst` *last release*: Jan 26, 2023, *status*: N/A, @@ -11561,7 +11578,7 @@ This list contains 1784 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Dec 13, 2025, + *last release*: Dec 18, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11652,7 +11669,7 @@ This list contains 1784 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Dec 13, 2025, + *last release*: Dec 18, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -13045,7 +13062,7 @@ This list contains 1784 plugins. Tesults plugin for pytest :pypi:`pytest-texts-score` - *last release*: Dec 13, 2025, + *last release*: Dec 17, 2025, *status*: 4 - Beta, *requires*: pytest>=8.4.2 @@ -13822,7 +13839,7 @@ This list contains 1784 plugins. Local continuous test runner with pytest and watchdog. :pypi:`pytest-watcher` - *last release*: Aug 28, 2024, + *last release*: Dec 20, 2025, *status*: 4 - Beta, *requires*: N/A @@ -13870,6 +13887,13 @@ This list contains 1784 plugins. Test web apps with pytest + :pypi:`pytest-webtestpilot` + *last release*: Dec 17, 2025, + *status*: N/A, + *requires*: pytest>=9.0.2 + + Pytest plugin for running WebTestPilot JSON tests + :pypi:`pytest-wetest` *last release*: Nov 10, 2018, *status*: 4 - Beta, From cdb8366e634f429fccb3db5f566d3c57cc298b05 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Sat, 27 Dec 2025 20:16:46 -0300 Subject: [PATCH 113/307] Docs: pin sphinx to `<9.0` (#14067) Pinning to `<9.0` to fix doc building. Related to https://github.com/python-trio/sphinxcontrib-trio/issues/399. --- doc/en/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/en/requirements.txt b/doc/en/requirements.txt index fcaaee695c9..d672a9d7e15 100644 --- a/doc/en/requirements.txt +++ b/doc/en/requirements.txt @@ -2,7 +2,8 @@ pluggy>=1.5.0 pygments-pytest>=2.5.0 sphinx-removed-in>=0.2.0 -sphinx>=7 +# Pinning to <9.0 due to https://github.com/python-trio/sphinxcontrib-trio/issues/399. +sphinx>=7,<9.0 sphinxcontrib-trio sphinxcontrib-svg2pdfconverter furo From 7b97c2548bf4f8eb0dca0089a55b5e6387cf81fc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 23:40:10 +0000 Subject: [PATCH 114/307] [pre-commit.ci] pre-commit autoupdate (#14065) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.9 → v0.14.10](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.9...v0.14.10) - [github.com/woodruffw/zizmor-pre-commit: v1.18.0 → v1.19.0](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.18.0...v1.19.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cd435791da9..145a47264f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.9" + rev: "v0.14.10" hooks: - id: ruff-check args: ["--fix"] @@ -13,7 +13,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.18.0 + rev: v1.19.0 hooks: - id: zizmor args: ["--fix"] From 0bd0e9bfed9c255ba7cb6003935a522337e8a364 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 Dec 2025 10:07:18 -0300 Subject: [PATCH 115/307] [automated] Update plugin list (#14069) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 176 +++++++++++++++++++++---------- 1 file changed, 120 insertions(+), 56 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index d715aa1ec53..988a01a9ced 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.1.1,<8.0.0) + :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 24, 2025 N/A pytest :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-framework-alpha` Dec 17, 2025 N/A pytest==7.2.2 @@ -181,7 +182,7 @@ This list contains 1787 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 17, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 24, 2025 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -262,8 +263,8 @@ This list contains 1787 plugins. :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Nov 29, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-checkdocs` check the README when running tests Apr 30, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" - :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 20, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-checkdocs` check the README when running tests Dec 26, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" + :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 27, 2025 N/A pytest>=9.0.2 :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 :pypi:`pytest-check-library` check your missing library Jul 17, 2022 N/A N/A :pypi:`pytest-check-libs` check your missing library Jul 17, 2022 N/A N/A @@ -388,7 +389,7 @@ This list contains 1787 plugins. :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 - :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Nov 09, 2025 4 - Beta pytest<10,>=7.0.0 + :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Dec 22, 2025 4 - Beta pytest<10,>=7.0.0 :pypi:`pytest-dataplugin` A pytest plugin for managing an archive of test data. Sep 16, 2017 1 - Planning N/A :pypi:`pytest-datarecorder` A py.test plugin recording and comparing test output. Jul 31, 2024 5 - Production/Stable pytest :pypi:`pytest-dataset` Plugin for loading different datasets for pytest by prefix from json or yaml files Sep 01, 2023 5 - Production/Stable N/A @@ -663,7 +664,7 @@ This list contains 1787 plugins. :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Dec 09, 2025 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Dec 09, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Dec 27, 2025 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) @@ -678,6 +679,7 @@ This list contains 1787 plugins. :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-forbid` Mar 07, 2023 N/A pytest (>=7.2.2,<8.0.0) :pypi:`pytest-forcefail` py.test plugin to make the test failing regardless of pytest.mark.xfail May 15, 2018 4 - Beta N/A + :pypi:`pytest-forger` Automatic test scaffolding and mock generation for Python Dec 26, 2025 N/A pytest>=7.4.0 :pypi:`pytest-forward-compatability` A name to avoid typosquating pytest-foward-compatibility Sep 06, 2020 N/A N/A :pypi:`pytest-forward-compatibility` A pytest plugin to shim pytest commandline options for fowards compatibility Sep 29, 2020 N/A N/A :pypi:`pytest-frappe` Pytest Frappe Plugin - A set of pytest fixtures to test Frappe applications Jul 30, 2024 4 - Beta pytest>=7.0.0 @@ -688,7 +690,7 @@ This list contains 1787 plugins. :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) - :pypi:`pytest-funcnodes` Testing plugin for funcnodes Nov 27, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-funcnodes` Testing plugin for funcnodes Dec 21, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A @@ -733,7 +735,7 @@ This list contains 1787 plugins. :pypi:`pytest-gradescope` A pytest plugin for Gradescope integration Apr 29, 2025 N/A N/A :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A - :pypi:`pytest-greener` Pytest plugin for Greener Dec 06, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) @@ -746,7 +748,7 @@ This list contains 1787 plugins. :pypi:`pytest-hardware-test-report` A simple plugin to use with pytest Apr 01, 2024 4 - Beta pytest<9.0.0,>=8.0.0 :pypi:`pytest-harmony` Chain tests and data with pytest Jan 17, 2023 N/A pytest (>=7.2.1,<8.0.0) :pypi:`pytest-harvest` Store data created during your pytest tests execution, and retrieve it at the end of the session, e.g. for applicative benchmarking purposes. Mar 16, 2024 5 - Production/Stable N/A - :pypi:`pytest-helm-charts` A plugin to provide different types and configs of Kubernetes clusters that can be used for testing. Oct 31, 2024 4 - Beta pytest<9.0.0,>=8.0.0 + :pypi:`pytest-helm-charts` A plugin to provide different types and configs of Kubernetes clusters that can be used for testing. Dec 23, 2025 4 - Beta pytest<9,>=8.0.0 :pypi:`pytest-helm-templates` Pytest fixtures for unit testing the output of helm templates Aug 07, 2024 N/A pytest~=7.4.0; extra == "dev" :pypi:`pytest-helper` Functions to help in using the pytest testing framework May 31, 2019 5 - Production/Stable N/A :pypi:`pytest-helpers` pytest helpers May 17, 2020 N/A pytest @@ -853,7 +855,7 @@ This list contains 1787 plugins. :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Dec 05, 2025 N/A pytest + :pypi:`pytest-ipywidgets` Dec 22, 2025 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) @@ -910,7 +912,7 @@ This list contains 1787 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 16, 2025 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 24, 2025 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -1025,6 +1027,7 @@ This list contains 1787 plugins. :pypi:`pytest-mock-generator` A pytest fixture wrapper for https://pypi.org/project/mock-generator May 16, 2022 5 - Production/Stable N/A :pypi:`pytest-mock-helper` Help you mock HTTP call and generate mock code Jan 24, 2018 N/A pytest :pypi:`pytest-mockito` Base fixtures for mockito Nov 17, 2025 5 - Production/Stable pytest>=6 + :pypi:`pytest-mockllm` 🚀 Zero-config pytest plugin for mocking LLM APIs - OpenAI, Anthropic, Gemini, LangChain & more Dec 22, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-mockredis` An in-memory mock of a Redis server that runs in a separate thread. This is to be used for unit-tests that require a Redis database. Jan 02, 2018 2 - Pre-Alpha N/A :pypi:`pytest-mock-resources` A pytest plugin for easily instantiating reproducible mock resources. Sep 17, 2025 N/A pytest>=1.0 :pypi:`pytest-mock-server` Mock server plugin for pytest Jan 09, 2022 4 - Beta pytest (>=3.5.0) @@ -1049,11 +1052,12 @@ This list contains 1787 plugins. :pypi:`pytest-mp` A test batcher for multiprocessed Pytest runs May 23, 2018 4 - Beta pytest :pypi:`pytest-mpi` pytest plugin to collect information from tests Jan 08, 2022 3 - Alpha pytest :pypi:`pytest-mpiexec` pytest plugin for running individual tests with mpiexec Jul 29, 2024 3 - Alpha pytest + :pypi:`pytest-mpi-tmweigand` forked pytest plugin to collect information from tests Dec 27, 2025 3 - Alpha pytest :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) - :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Sep 10, 2025 5 - Production/Stable pytest<9; extra == "test" + :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Dec 24, 2025 5 - Production/Stable pytest<9; extra == "test" :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A - :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Sep 21, 2025 N/A pytest + :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 27, 2025 N/A pytest :pypi:`pytest-multithreading` a pytest plugin for th and concurrent testing Aug 05, 2024 N/A N/A :pypi:`pytest-multithreading-allure` pytest_multithreading_allure Nov 25, 2022 N/A N/A :pypi:`pytest-mutagen` Add the mutation testing feature to pytest Jul 24, 2020 N/A pytest (>=5.4) @@ -1095,6 +1099,7 @@ This list contains 1787 plugins. :pypi:`pytest-notice` Send pytest execution result email Nov 05, 2020 N/A N/A :pypi:`pytest-notification` A pytest plugin for sending a desktop notification and playing a sound upon completion of tests Jun 19, 2020 N/A pytest (>=4) :pypi:`pytest-notifier` A pytest plugin to notify test result Jun 12, 2020 3 - Alpha pytest + :pypi:`pytest-notifier-plugin` Pytest plugin для отправки нотификаций в различные каналы связи о статуе прохождения тестов. Dec 22, 2025 N/A pytest>=7.0 :pypi:`pytest_notify` Get notifications when your tests ends Jul 05, 2017 N/A pytest>=3.0.0 :pypi:`pytest-notimplemented` Pytest markers for not implemented features and tests. Aug 27, 2019 N/A pytest (>=5.1,<6.0) :pypi:`pytest-notion` A PyTest Reporter to send test runs to Notion.so Aug 07, 2019 N/A N/A @@ -1246,7 +1251,7 @@ This list contains 1787 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Dec 18, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Dec 23, 2025 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1308,7 +1313,7 @@ This list contains 1787 plugins. :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest :pypi:`pytest-reana` Pytest fixtures for REANA. Oct 10, 2025 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 - :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Oct 28, 2025 N/A pytest>=8.4.1 + :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Dec 23, 2025 N/A pytest>=8.4.1 :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A @@ -1332,14 +1337,14 @@ This list contains 1787 plugins. :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 14, 2025 N/A pytest>=7.0.0 :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A - :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 23, 2025 5 - Production/Stable pytest :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A :pypi:`pytest-reporter-html-dots` A basic HTML report for pytest using Jinja2 template engine. Apr 26, 2025 N/A N/A :pypi:`pytest-reporter-plus` Lightweight enhanced HTML reporter for Pytest Jul 16, 2025 N/A N/A - :pypi:`pytest-report-extras` Pytest plugin to enhance pytest-html and allure reports by adding comments, screenshots, webpage sources and attachments. Aug 08, 2025 N/A pytest>=8.4.0 + :pypi:`pytest-report-extras` Pytest plugin to enhance pytest-html and allure reports by adding comments, screenshots, webpage sources and attachments. Dec 24, 2025 N/A pytest>=8.4.0 :pypi:`pytest-reportinfra` Pytest plugin for reportinfra Aug 11, 2019 3 - Alpha N/A :pypi:`pytest-reporting` A plugin to report summarized results in a table format Oct 25, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest @@ -1381,12 +1386,13 @@ This list contains 1787 plugins. :pypi:`pytest-result-sender-lj` Default template for PDM package Dec 17, 2024 N/A pytest>=8.3.4 :pypi:`pytest-result-sender-lyt` Default template for PDM package Mar 14, 2025 N/A pytest>=8.3.5 :pypi:`pytest-result-sender-misszhang` Default template for PDM package Mar 21, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-result-sender-r` Default template for PDM package Dec 26, 2025 N/A pytest>=8.4.2 :pypi:`pytest-resume` A Pytest plugin to resuming from the last run test Apr 22, 2023 4 - Beta pytest (>=7.0) :pypi:`pytest-rethinkdb` A RethinkDB plugin for pytest. Jul 24, 2016 4 - Beta N/A :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A - :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Nov 24, 2025 4 - Beta pytest<9,>=7.0 + :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Dec 22, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 @@ -1398,7 +1404,7 @@ This list contains 1787 plugins. :pypi:`pytest-rmysql` This is a plugin which is able to connet MySQL easyly. Aug 17, 2025 N/A pytest>=8.4.1 :pypi:`pytest-rng` Fixtures for seeding tests and making randomness reproducible Aug 08, 2019 5 - Production/Stable pytest :pypi:`pytest-roast` pytest plugin for ROAST configuration override and fixtures Nov 09, 2022 5 - Production/Stable pytest - :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Dec 09, 2025 N/A pytest<10,>=7 + :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Dec 22, 2025 N/A pytest<10,>=7 :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 @@ -1410,7 +1416,7 @@ This list contains 1787 plugins. :pypi:`pytest-ruff` pytest plugin to check ruff requirements. Jun 19, 2025 4 - Beta pytest>=5 :pypi:`pytest-run-changed` Pytest plugin that runs changed tests only Apr 02, 2021 3 - Alpha pytest :pypi:`pytest-runfailed` implement a --failed option for pytest Mar 24, 2016 N/A N/A - :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Nov 24, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Dec 23, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-run-subprocess` Pytest Plugin for running and testing subprocesses. Nov 12, 2022 5 - Production/Stable pytest :pypi:`pytest-runtime-types` Checks type annotations on runtime while running tests. Feb 09, 2023 N/A pytest :pypi:`pytest-runtime-xfail` Call runtime_xfail() to mark running test as xfail. Oct 10, 2025 5 - Production/Stable pytest>=5.0.0 @@ -1427,7 +1433,7 @@ This list contains 1787 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 18, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 23, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Dec 07, 2025 N/A N/A @@ -1440,7 +1446,7 @@ This list contains 1787 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 18, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 23, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1451,7 +1457,7 @@ This list contains 1787 plugins. :pypi:`pytest-server` test server exec cmd Sep 09, 2024 N/A N/A :pypi:`pytest-server-fixtures` Extensible server fixtures for py.test Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-serverless` Automatically mocks resources from serverless.yml in pytest using moto. May 09, 2022 4 - Beta N/A - :pypi:`pytest-servers` pytest servers Aug 04, 2025 3 - Alpha pytest>=6.2 + :pypi:`pytest-servers` pytest servers Dec 21, 2025 3 - Alpha pytest>=6.2 :pypi:`pytest-service` Aug 06, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-services` Services plugin for pytest testing framework Jul 16, 2025 6 - Mature pytest :pypi:`pytest-session2file` pytest-session2file (aka: pytest-session_to_file for v0.1.0 - v0.1.2) is a py.test plugin for capturing and saving to file the stdout of py.test. Jan 26, 2021 3 - Alpha pytest @@ -1475,6 +1481,7 @@ This list contains 1787 plugins. :pypi:`pytest-simplehttpserver` Simple pytest fixture to spin up an HTTP server Jun 24, 2021 4 - Beta N/A :pypi:`pytest-simple-plugin` Simple pytest plugin Nov 27, 2019 N/A N/A :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest + :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Dec 21, 2025 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 @@ -1602,7 +1609,7 @@ This list contains 1787 plugins. :pypi:`pytest-terraform-fixture` generate terraform resources to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-test-analyzer` A powerful tool for analyzing pytest test files and generating detailed reports Jun 14, 2025 4 - Beta N/A :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A - :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Dec 04, 2025 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Dec 24, 2025 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest @@ -1720,10 +1727,11 @@ This list contains 1787 plugins. :pypi:`pytest-unmarked` Run only unmarked tests Aug 27, 2019 5 - Production/Stable N/A :pypi:`pytest-unordered` Test equality of unordered collections in pytest Jun 03, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-unstable` Set a test as unstable to return 0 even if it failed Sep 27, 2022 4 - Beta N/A - :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Dec 02, 2025 4 - Beta pytest>7.3.2 + :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Dec 23, 2025 4 - Beta pytest>7.3.2 :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) + :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Dec 27, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest :pypi:`pytest-valgrind` May 19, 2021 N/A N/A :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 @@ -1750,7 +1758,7 @@ This list contains 1787 plugins. :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A - :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Dec 20, 2025 4 - Beta N/A + :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Dec 25, 2025 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A @@ -1797,7 +1805,7 @@ This list contains 1787 plugins. :pypi:`pytest-xvfb` A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests. Mar 12, 2025 4 - Beta pytest>=2.8.1 :pypi:`pytest-xvirt` A pytest plugin to virtualize test. For example to transparently running them on a remote box. Dec 15, 2024 4 - Beta pytest>=7.2.2 :pypi:`pytest-yaml` This plugin is used to load yaml output to your test using pytest framework. Oct 05, 2018 N/A pytest - :pypi:`pytest-yaml-fei` a pytest yaml allure package Nov 21, 2025 N/A pytest + :pypi:`pytest-yaml-fei` a pytest yaml allure package Jul 27, 2025 N/A pytest :pypi:`pytest-yaml-sanmu` Pytest plugin for generating test cases with YAML. In test cases, you can use markers, fixtures, variables, and even call Python functions. Sep 16, 2025 N/A pytest>=8.2.2 :pypi:`pytest-yamltree` Create or check file/directory trees described by YAML Mar 02, 2020 4 - Beta pytest (>=3.1.1) :pypi:`pytest-yamlwsgi` Run tests against wsgi apps defined in yaml May 11, 2010 N/A N/A @@ -2253,6 +2261,13 @@ This list contains 1787 plugins. An ASGI middleware to populate OpenAPI Specification examples from pytest functions + :pypi:`pytest-apibean` + *last release*: Dec 24, 2025, + *status*: N/A, + *requires*: pytest + + Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. + :pypi:`pytest-api-cov` *last release*: Dec 02, 2025, *status*: N/A, @@ -2856,7 +2871,7 @@ This list contains 1787 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Dec 17, 2025, + *last release*: Dec 24, 2025, *status*: 3 - Alpha, *requires*: pytest @@ -3423,14 +3438,14 @@ This list contains 1787 plugins. A pytest plugin that allows multiple failures per test. :pypi:`pytest-checkdocs` - *last release*: Apr 30, 2024, + *last release*: Dec 26, 2025, *status*: 5 - Production/Stable, - *requires*: pytest!=8.1.*,>=6; extra == "testing" + *requires*: pytest!=8.1.*,>=6; extra == "test" check the README when running tests :pypi:`pytest-checkers` - *last release*: Dec 20, 2025, + *last release*: Dec 27, 2025, *status*: N/A, *requires*: pytest>=9.0.2 @@ -4305,7 +4320,7 @@ This list contains 1787 plugins. Data validation and integrity testing for your datasets using pytest. :pypi:`pytest-data-loader` - *last release*: Nov 09, 2025, + *last release*: Dec 22, 2025, *status*: 4 - Beta, *requires*: pytest<10,>=7.0.0 @@ -6230,7 +6245,7 @@ This list contains 1787 plugins. pytest plugin to check source code with pyflakes :pypi:`pytest-flakiness` - *last release*: Dec 09, 2025, + *last release*: Dec 27, 2025, *status*: N/A, *requires*: pytest>=9.0.2 @@ -6334,6 +6349,13 @@ This list contains 1787 plugins. py.test plugin to make the test failing regardless of pytest.mark.xfail + :pypi:`pytest-forger` + *last release*: Dec 26, 2025, + *status*: N/A, + *requires*: pytest>=7.4.0 + + Automatic test scaffolding and mock generation for Python + :pypi:`pytest-forward-compatability` *last release*: Sep 06, 2020, *status*: N/A, @@ -6405,7 +6427,7 @@ This list contains 1787 plugins. Pytest plugin for measuring function coverage :pypi:`pytest-funcnodes` - *last release*: Nov 27, 2025, + *last release*: Dec 21, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -6720,7 +6742,7 @@ This list contains 1787 plugins. Green progress dots :pypi:`pytest-greener` - *last release*: Dec 06, 2025, + *last release*: Dec 24, 2025, *status*: N/A, *requires*: pytest<9.0.0,>=8.3.3 @@ -6811,9 +6833,9 @@ This list contains 1787 plugins. Store data created during your pytest tests execution, and retrieve it at the end of the session, e.g. for applicative benchmarking purposes. :pypi:`pytest-helm-charts` - *last release*: Oct 31, 2024, + *last release*: Dec 23, 2025, *status*: 4 - Beta, - *requires*: pytest<9.0.0,>=8.0.0 + *requires*: pytest<9,>=8.0.0 A plugin to provide different types and configs of Kubernetes clusters that can be used for testing. @@ -7560,7 +7582,7 @@ This list contains 1787 plugins. Pytest plugin to run tests in Jupyter Notebooks :pypi:`pytest-ipywidgets` - *last release*: Dec 05, 2025, + *last release*: Dec 22, 2025, *status*: N/A, *requires*: pytest @@ -7959,7 +7981,7 @@ This list contains 1787 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Dec 16, 2025, + *last release*: Dec 24, 2025, *status*: 4 - Beta, *requires*: N/A @@ -8763,6 +8785,13 @@ This list contains 1787 plugins. Base fixtures for mockito + :pypi:`pytest-mockllm` + *last release*: Dec 22, 2025, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + 🚀 Zero-config pytest plugin for mocking LLM APIs - OpenAI, Anthropic, Gemini, LangChain & more + :pypi:`pytest-mockredis` *last release*: Jan 02, 2018, *status*: 2 - Pre-Alpha, @@ -8931,6 +8960,13 @@ This list contains 1787 plugins. pytest plugin for running individual tests with mpiexec + :pypi:`pytest-mpi-tmweigand` + *last release*: Dec 27, 2025, + *status*: 3 - Alpha, + *requires*: pytest + + forked pytest plugin to collect information from tests + :pypi:`pytest-mpl` *last release*: Nov 15, 2025, *status*: 5 - Production/Stable, @@ -8946,7 +8982,7 @@ This list contains 1787 plugins. low-startup-overhead, scalable, distributed-testing pytest plugin :pypi:`pytest-mqtt` - *last release*: Sep 10, 2025, + *last release*: Dec 24, 2025, *status*: 5 - Production/Stable, *requires*: pytest<9; extra == "test" @@ -8960,7 +8996,7 @@ This list contains 1787 plugins. Utility for writing multi-host tests for pytest :pypi:`pytest-multilog` - *last release*: Sep 21, 2025, + *last release*: Dec 27, 2025, *status*: N/A, *requires*: pytest @@ -9253,6 +9289,13 @@ This list contains 1787 plugins. A pytest plugin to notify test result + :pypi:`pytest-notifier-plugin` + *last release*: Dec 22, 2025, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin для отправки нотификаций в различные каналы связи о статуе прохождения тестов. + :pypi:`pytest_notify` *last release*: Jul 05, 2017, *status*: N/A, @@ -10311,7 +10354,7 @@ This list contains 1787 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Dec 18, 2025, + *last release*: Dec 23, 2025, *status*: N/A, *requires*: pytest==8.4.2 @@ -10745,7 +10788,7 @@ This list contains 1787 plugins. Capture your test sessions. Recap the results. :pypi:`pytest-recorder` - *last release*: Oct 28, 2025, + *last release*: Dec 23, 2025, *status*: N/A, *requires*: pytest>=8.4.1 @@ -10913,7 +10956,7 @@ This list contains 1787 plugins. py.test plugin for repeating single test multiple times. :pypi:`pytest-replay` - *last release*: Dec 09, 2025, + *last release*: Dec 23, 2025, *status*: 5 - Production/Stable, *requires*: pytest @@ -10962,7 +11005,7 @@ This list contains 1787 plugins. Lightweight enhanced HTML reporter for Pytest :pypi:`pytest-report-extras` - *last release*: Aug 08, 2025, + *last release*: Dec 24, 2025, *status*: N/A, *requires*: pytest>=8.4.0 @@ -11255,6 +11298,13 @@ This list contains 1787 plugins. Default template for PDM package + :pypi:`pytest-result-sender-r` + *last release*: Dec 26, 2025, + *status*: N/A, + *requires*: pytest>=8.4.2 + + Default template for PDM package + :pypi:`pytest-resume` *last release*: Apr 22, 2023, *status*: 4 - Beta, @@ -11291,9 +11341,9 @@ This list contains 1787 plugins. :pypi:`pytest-revealtype-injector` - *last release*: Nov 24, 2025, + *last release*: Dec 22, 2025, *status*: 4 - Beta, - *requires*: pytest<9,>=7.0 + *requires*: pytest>=7.0 Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. @@ -11375,7 +11425,7 @@ This list contains 1787 plugins. pytest plugin for ROAST configuration override and fixtures :pypi:`pytest_robotframework` - *last release*: Dec 09, 2025, + *last release*: Dec 22, 2025, *status*: N/A, *requires*: pytest<10,>=7 @@ -11459,7 +11509,7 @@ This list contains 1787 plugins. implement a --failed option for pytest :pypi:`pytest-run-parallel` - *last release*: Nov 24, 2025, + *last release*: Dec 23, 2025, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -11578,7 +11628,7 @@ This list contains 1787 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Dec 18, 2025, + *last release*: Dec 23, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11669,7 +11719,7 @@ This list contains 1787 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Dec 18, 2025, + *last release*: Dec 23, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11746,7 +11796,7 @@ This list contains 1787 plugins. Automatically mocks resources from serverless.yml in pytest using moto. :pypi:`pytest-servers` - *last release*: Aug 04, 2025, + *last release*: Dec 21, 2025, *status*: 3 - Alpha, *requires*: pytest>=6.2 @@ -11913,6 +11963,13 @@ This list contains 1787 plugins. simple-settings plugin for pytest + :pypi:`pytest-simplified` + *last release*: Dec 21, 2025, + *status*: 4 - Beta, + *requires*: pytest<9.0.0,>=8.3.5 + + A PyTest plugin to simplify testing classes. + :pypi:`pytest-single-file-logging` *last release*: May 05, 2016, *status*: 4 - Beta, @@ -12803,7 +12860,7 @@ This list contains 1787 plugins. A plugin to run tests written in Jupyter notebook :pypi:`pytest-test-categories` - *last release*: Dec 04, 2025, + *last release*: Dec 24, 2025, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -13629,7 +13686,7 @@ This list contains 1787 plugins. Set a test as unstable to return 0 even if it failed :pypi:`pytest-unused-fixtures` - *last release*: Dec 02, 2025, + *last release*: Dec 23, 2025, *status*: 4 - Beta, *requires*: pytest>7.3.2 @@ -13656,6 +13713,13 @@ This list contains 1787 plugins. Some helpers for pytest. + :pypi:`pytest-uuid` + *last release*: Dec 27, 2025, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + A pytest plugin for mocking uuid.uuid4() calls + :pypi:`pytest-vagrant` *last release*: Sep 07, 2021, *status*: 5 - Production/Stable, @@ -13839,7 +13903,7 @@ This list contains 1787 plugins. Local continuous test runner with pytest and watchdog. :pypi:`pytest-watcher` - *last release*: Dec 20, 2025, + *last release*: Dec 25, 2025, *status*: 4 - Beta, *requires*: N/A @@ -14168,7 +14232,7 @@ This list contains 1787 plugins. This plugin is used to load yaml output to your test using pytest framework. :pypi:`pytest-yaml-fei` - *last release*: Nov 21, 2025, + *last release*: Jul 27, 2025, *status*: N/A, *requires*: pytest From 8f5b07d87bf803622bb96227ed939f3c95f8809b Mon Sep 17 00:00:00 2001 From: Bubble-Interface Date: Sun, 28 Dec 2025 22:43:41 +0300 Subject: [PATCH 116/307] Docs: clarify capture fixture precedence over -s (#14053) Clarify in the capturing tutorial that using capture fixtures such as capsys or capfd re-enables capturing for the duration of the test, even when global capturing is disabled via `-s` or `--capture=no`. Closes #13731 --- changelog/13731.doc.rst | 1 + doc/en/how-to/capture-stdout-stderr.rst | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 changelog/13731.doc.rst diff --git a/changelog/13731.doc.rst b/changelog/13731.doc.rst new file mode 100644 index 00000000000..0cfdbebfc40 --- /dev/null +++ b/changelog/13731.doc.rst @@ -0,0 +1 @@ +Clarified that capture fixtures (e.g. ``capsys`` and ``capfd``) take precedence over the ``-s`` / ``--capture=no`` command-line options in :ref:`Accessing captured output from a test function `. diff --git a/doc/en/how-to/capture-stdout-stderr.rst b/doc/en/how-to/capture-stdout-stderr.rst index 14807b9b777..8a6a42d4134 100644 --- a/doc/en/how-to/capture-stdout-stderr.rst +++ b/doc/en/how-to/capture-stdout-stderr.rst @@ -109,6 +109,8 @@ of the failing function and hide the other one: FAILED test_module.py::test_func2 - assert False ======================= 1 failed, 1 passed in 0.12s ======================== +.. _accessing-captured-output: + Accessing captured output from a test function --------------------------------------------------- @@ -162,3 +164,13 @@ as a context manager, disabling capture inside the ``with`` block: with capsys.disabled(): print("output not captured, going directly to sys.stdout") print("this output is also captured") + +.. note:: + + When a capture fixture such as :fixture:`capsys` or :fixture:`capfd` is used, + it takes precedence over the global capturing configuration set via + command-line options such as ``-s`` or ``--capture=no``. + + This means that output produced within a test using a capture fixture will + still be captured and available via ``readouterr()``, even if global capturing + is disabled. From 004a96740fb990c7d6dc39bd305b08852635ec5d Mon Sep 17 00:00:00 2001 From: Bubble-Interface Date: Mon, 29 Dec 2025 14:16:10 +0300 Subject: [PATCH 117/307] Show better error when blocking conftest files via `-p` (#14018) Show a clear message when `-p` is used for a `conftest.py` file, instead of raising an internal assertion error. Fixes #13634 --- AUTHORS | 1 + changelog/13634.bugfix.rst | 5 +++++ src/_pytest/config/__init__.py | 6 ++++++ testing/test_config.py | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 changelog/13634.bugfix.rst diff --git a/AUTHORS b/AUTHORS index bf34f79c374..7d9ffb3b759 100644 --- a/AUTHORS +++ b/AUTHORS @@ -312,6 +312,7 @@ Michael Goerz Michael Krebs Michael Seifert Michael Vogt +Michael Reznik Michal Wajszczuk Michał Górny Michał Zięba diff --git a/changelog/13634.bugfix.rst b/changelog/13634.bugfix.rst new file mode 100644 index 00000000000..ee12aeafc3a --- /dev/null +++ b/changelog/13634.bugfix.rst @@ -0,0 +1,5 @@ +Blocking a ``conftest.py`` file using the ``-p no:`` option is now explicitly disallowed. + +Previously this resulted in an internal assertion failure during plugin loading. + +Pytest now raises a clear ``UsageError`` explaining that conftest files are not plugins and cannot be disabled via ``-p``. diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 51c99acd8e6..21dc35219d8 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -816,6 +816,12 @@ def consider_pluginarg(self, arg: str) -> None: if name in essential_plugins: raise UsageError(f"plugin {name} cannot be disabled") + if name.endswith("conftest.py"): + raise UsageError( + f"Blocking conftest files using -p is not supported: -p no:{name}\n" + "conftest.py files are not plugins and cannot be disabled via -p.\n" + ) + # PR #4304: remove stepwise if cacheprovider is blocked. if name == "cacheprovider": self.set_blocked("stepwise") diff --git a/testing/test_config.py b/testing/test_config.py index 44ac0ca2aa7..de11e3fa13a 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -2475,6 +2475,10 @@ def test_config_does_not_load_blocked_plugin_from_args(pytester: Pytester) -> No result.stderr.fnmatch_lines(["*: error: unrecognized arguments: -s"]) assert result.ret == ExitCode.USAGE_ERROR + result = pytester.runpytest(str(p), "-p no:/path/to/conftest.py", "-s") + result.stderr.fnmatch_lines(["ERROR:*Blocking conftest files*"]) + assert result.ret == ExitCode.USAGE_ERROR + def test_invocation_args(pytester: Pytester) -> None: """Ensure that Config.invocation_* arguments are correctly defined""" From 33d5a09a76c49e8fd6de440814cdc925c2fa1062 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 07:19:57 +0100 Subject: [PATCH 118/307] [automated] Update plugin list (#14085) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 176 +++++++++++++++++++++---------- 1 file changed, 120 insertions(+), 56 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 988a01a9ced..80829388854 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.1.1,<8.0.0) - :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 24, 2025 N/A pytest + :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Dec 17, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Dec 29, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -141,6 +141,7 @@ This list contains 1795 plugins. :pypi:`pytest-atf-allure` 基于allure-pytest进行自定义 Nov 29, 2023 N/A pytest (>=7.4.2,<8.0.0) :pypi:`pytest-atomic` Skip rest of tests if previous test failed. Nov 24, 2018 4 - Beta N/A :pypi:`pytest-atstack` A simple plugin to use with pytest Jan 02, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 03, 2026 N/A pytest>=7.0 :pypi:`pytest-attrib` pytest plugin to select tests based on attributes similar to the nose-attrib plugin May 24, 2016 4 - Beta N/A :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A @@ -151,7 +152,7 @@ This list contains 1795 plugins. :pypi:`pytest-automation` pytest plugin for building a test suite, using YAML files to extend pytest parameterize functionality. Apr 24, 2024 N/A pytest>=7.0.0 :pypi:`pytest-automock` Pytest plugin for automatical mocks creation May 16, 2023 N/A pytest ; extra == 'dev' :pypi:`pytest-auto-parametrize` pytest plugin: avoid repeating arguments in parametrize Oct 02, 2016 3 - Alpha N/A - :pypi:`pytest-autoprofile` \`line_profiler.autoprofile\`-ing your \`pytest\` test suite Aug 06, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-autoprofile` \`line_profiler.autoprofile\`-ing your \`pytest\` test suite Dec 30, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-autotest` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Aug 25, 2021 N/A pytest :pypi:`pytest-aviator` Aviator's Flakybot pytest plugin that automatically reruns flaky tests. Nov 04, 2022 4 - Beta pytest :pypi:`pytest-avoidance` Makes pytest skip tests that don not need rerunning May 23, 2019 4 - Beta pytest (>=3.5.0) @@ -175,7 +176,7 @@ This list contains 1795 plugins. :pypi:`pytest-bdd` BDD for pytest Dec 05, 2024 6 - Mature pytest>=7.0.0 :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 - :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Nov 23, 2025 N/A pytest>=7.1.3 + :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Dec 29, 2025 N/A pytest>=7.1.3 :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) @@ -223,7 +224,7 @@ This list contains 1795 plugins. :pypi:`pytest_browserstack` Py.test plugin for BrowserStack Jan 27, 2016 4 - Beta N/A :pypi:`pytest-browserstack-local` \`\`py.test\`\` plugin to run \`\`BrowserStackLocal\`\` in background. Feb 09, 2018 N/A N/A :pypi:`pytest-budosystems` Budo Systems is a martial arts school management system. This module is the Budo Systems Pytest Plugin. May 07, 2023 3 - Alpha pytest - :pypi:`pytest-bug` Pytest plugin for marking tests as a bug Jun 17, 2025 5 - Production/Stable pytest>=8.4.0 + :pypi:`pytest-bug` Pytest plugin for marking tests as a bug Dec 30, 2025 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-bugtong-tag` pytest-bugtong-tag is a plugin for pytest Jan 16, 2022 N/A N/A :pypi:`pytest-bugzilla` py.test bugzilla integration plugin May 05, 2010 4 - Beta N/A :pypi:`pytest-bugzilla-notifier` A plugin that allows you to execute create, update, and read information from BugZilla bugs Jun 15, 2018 4 - Beta pytest (>=2.9.2) @@ -291,6 +292,7 @@ This list contains 1795 plugins. :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 + :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Jan 02, 2026 N/A N/A :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) @@ -298,7 +300,7 @@ This list contains 1795 plugins. :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cmake` Provide CMake module for Pytest Dec 08, 2025 N/A pytest<10,>=4 + :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A :pypi:`pytest-cobra` PyTest plugin for testing Smart Contracts for Ethereum blockchain. Jun 29, 2019 3 - Alpha pytest (<4.0.0,>=3.7.1) @@ -710,7 +712,7 @@ This list contains 1795 plugins. :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Dec 16, 2025 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Oct 12, 2025 4 - Beta pytest>=7.1.2 + :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-git-diff` Pytest plugin that allows the user to select the tests affected by a range of git commits Apr 02, 2024 N/A N/A :pypi:`pytest-git-fixtures` Pytest fixtures for testing with git. Mar 11, 2021 4 - Beta pytest @@ -761,7 +763,7 @@ This list contains 1795 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Dec 20, 2025 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 02, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -778,7 +780,7 @@ This list contains 1795 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Dec 03, 2025 N/A N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Dec 29, 2025 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -824,7 +826,7 @@ This list contains 1795 plugins. :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Dec 05, 2025 4 - Beta pytest~=9.0 + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Dec 29, 2025 4 - Beta pytest~=9.0 :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 @@ -876,7 +878,7 @@ This list contains 1795 plugins. :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. May 15, 2019 5 - Production/Stable pytest :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A - :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Oct 10, 2024 N/A pytest>6.0.0 + :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Dec 28, 2025 N/A pytest>6.0.0 :pypi:`pytest-json-fixtures` JSON output for the --fixtures flag Mar 14, 2023 4 - Beta N/A :pypi:`pytest-jsonlint` UNKNOWN Aug 04, 2016 N/A N/A :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) @@ -912,7 +914,7 @@ This list contains 1795 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Dec 24, 2025 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Jan 01, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -973,6 +975,7 @@ This list contains 1795 plugins. :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Apr 09, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 03, 2026 N/A pytest>=7.0 :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 :pypi:`pytest-mark-filter` Filter pytest marks by name using match kw May 11, 2025 N/A pytest>=8.3.0 @@ -1000,7 +1003,7 @@ This list contains 1795 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Dec 01, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Dec 29, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1034,6 +1037,7 @@ This list contains 1795 plugins. :pypi:`pytest-mockservers` A set of fixtures to test your requests to HTTP/UDP servers Mar 31, 2020 N/A pytest (>=4.3.0) :pypi:`pytest-mocktcp` A pytest plugin for testing TCP clients Oct 11, 2022 N/A pytest :pypi:`pytest-modalt` Massively distributed pytest runs using modal.com Feb 27, 2024 4 - Beta pytest >=6.2.0 + :pypi:`pytest-model-lib` Dec 29, 2025 N/A N/A :pypi:`pytest-modern` A more modern pytest Aug 19, 2025 4 - Beta pytest>=8 :pypi:`pytest-modified-env` Pytest plugin to fail a test if it leaves modified \`os.environ\` afterwards. Jan 29, 2022 4 - Beta N/A :pypi:`pytest-modifyjunit` Utility for adding additional properties to junit xml for IDM QE Jan 10, 2019 N/A N/A @@ -1057,7 +1061,7 @@ This list contains 1795 plugins. :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Dec 24, 2025 5 - Production/Stable pytest<9; extra == "test" :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A - :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 27, 2025 N/A pytest + :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 28, 2025 N/A pytest :pypi:`pytest-multithreading` a pytest plugin for th and concurrent testing Aug 05, 2024 N/A N/A :pypi:`pytest-multithreading-allure` pytest_multithreading_allure Nov 25, 2022 N/A N/A :pypi:`pytest-mutagen` Add the mutation testing feature to pytest Jul 24, 2020 N/A pytest (>=5.4) @@ -1134,7 +1138,7 @@ This list contains 1795 plugins. :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Dec 15, 2025 N/A pytest==9.0.2 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Jan 02, 2026 N/A pytest==9.0.2 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1226,6 +1230,7 @@ This list contains 1795 plugins. :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. May 17, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 + :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Dec 29, 2025 3 - Alpha pytest :pypi:`pytest-prefer-nested-dup-tests` A Pytest plugin to drop duplicated tests during collection, but will prefer keeping nested packages. Apr 27, 2022 4 - Beta pytest (>=7.1.1,<8.0.0) :pypi:`pytest-pretty` pytest plugin for printing summary data as I want it Jun 04, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-pretty-terminal` pytest plugin for generating prettier terminal output Jan 31, 2022 N/A pytest (>=3.4.1) @@ -1251,7 +1256,7 @@ This list contains 1795 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Dec 23, 2025 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Jan 03, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1368,7 +1373,7 @@ This list contains 1795 plugins. :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A - :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 18, 2025 4 - Beta pytest + :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 30, 2025 4 - Beta pytest :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 @@ -1378,6 +1383,7 @@ This list contains 1795 plugins. :pypi:`pytest-responses` py.test integration for responses Oct 11, 2022 N/A pytest (>=2.5) :pypi:`pytest-rest-api` Aug 08, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-restrict` Pytest plugin to restrict the test types allowed Sep 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-resttest` A REST API testing framework for Python, as plugin for pytest. Uses simple and readable YAML files for specifying test cases. Jan 01, 2026 5 - Production/Stable N/A :pypi:`pytest-result-log` A pytest plugin that records the start, end, and result information of each use case in a log file Jan 10, 2024 N/A pytest>=7.2.0 :pypi:`pytest-result-notify` Default template for PDM package Apr 27, 2025 N/A pytest>=8.3.5 :pypi:`pytest-results` Easily spot regressions in your tests. Oct 08, 2025 4 - Beta pytest @@ -1392,7 +1398,7 @@ This list contains 1795 plugins. :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A - :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Dec 22, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Dec 31, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 @@ -1409,7 +1415,7 @@ This list contains 1795 plugins. :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) - :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Dec 14, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Jan 02, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rst` Test code from RST documents with pytest Jan 26, 2023 N/A N/A :pypi:`pytest-rt` pytest data collector plugin for Testgr May 05, 2022 N/A N/A :pypi:`pytest-rts` Coverage-based regression test selection (RTS) plugin for pytest May 17, 2021 N/A pytest @@ -1433,10 +1439,10 @@ This list contains 1795 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 23, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 30, 2025 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 - :pypi:`pytest-scenarios` Add your description here Dec 07, 2025 N/A N/A + :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest Nov 14, 2025 4 - Beta pytest>=8.3.4 @@ -1446,7 +1452,7 @@ This list contains 1795 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 23, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 30, 2025 5 - Production/Stable N/A :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 @@ -1616,6 +1622,7 @@ This list contains 1795 plugins. :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Jan 03, 2026 4 - Beta pytest>=7 :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A @@ -1731,7 +1738,7 @@ This list contains 1795 plugins. :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Dec 27, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Dec 29, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest :pypi:`pytest-valgrind` May 19, 2021 N/A N/A :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 @@ -1758,20 +1765,21 @@ This list contains 1795 plugins. :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A - :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Dec 25, 2025 4 - Beta N/A + :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Dec 28, 2025 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 - :pypi:`pytest-webtestpilot` Pytest plugin for running WebTestPilot JSON tests Dec 17, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-webtestpilot` Pytest plugin for running WebTestPilot JSON tests Dec 28, 2025 N/A pytest>=9.0.2 :pypi:`pytest-wetest` Welian API Automation test framework pytest plugin Nov 10, 2018 4 - Beta N/A :pypi:`pytest-when` Utility which makes mocking more readable and controllable Sep 25, 2025 N/A pytest>=7.3.1 :pypi:`pytest-whirlwind` Testing Tornado. Jun 12, 2020 N/A N/A :pypi:`pytest-wholenodeid` pytest addon for displaying the whole node id for failures Aug 26, 2015 4 - Beta pytest (>=2.0) :pypi:`pytest-win32consoletitle` Pytest progress in console title (Win32 only) Aug 08, 2021 N/A N/A :pypi:`pytest-winnotify` Windows tray notifications for py.test results. Apr 22, 2016 N/A N/A + :pypi:`pytest-wirefracture` Pytest fixtures for wirefracture Dec 31, 2025 N/A N/A :pypi:`pytest-wiremock` A pytest plugin for programmatically using wiremock in integration tests Mar 27, 2022 N/A pytest (>=7.1.1,<8.0.0) :pypi:`pytest-wiretap` \`pytest\` plugin for recording call stacks Mar 18, 2025 N/A pytest :pypi:`pytest-with-docker` pytest with docker helpers. Nov 09, 2021 N/A pytest @@ -1782,7 +1790,7 @@ This list contains 1795 plugins. :pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0) :pypi:`pytest-xdist-gnumake` A small example package Jun 22, 2025 N/A pytest :pypi:`pytest-xdist-load-testing` xdist scheduler to repeately run tests Nov 22, 2025 4 - Beta pytest>=8.4.2 - :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Nov 24, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Dec 31, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 @@ -1828,7 +1836,7 @@ This list contains 1795 plugins. :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 - :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Nov 05, 2025 5 - Production/Stable pytest>=8.3.5 + :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Jan 02, 2026 5 - Production/Stable pytest>=8.3.5 =============================================== ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ .. only:: latex @@ -2262,7 +2270,7 @@ This list contains 1795 plugins. An ASGI middleware to populate OpenAPI Specification examples from pytest functions :pypi:`pytest-apibean` - *last release*: Dec 24, 2025, + *last release*: Dec 30, 2025, *status*: N/A, *requires*: pytest @@ -2283,7 +2291,7 @@ This list contains 1795 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Dec 17, 2025, + *last release*: Dec 29, 2025, *status*: N/A, *requires*: pytest==7.2.2 @@ -2583,6 +2591,13 @@ This list contains 1795 plugins. A simple plugin to use with pytest + :pypi:`pytest-attempt-summary` + *last release*: Jan 03, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Enhanced Allure Attempt Summary for Playwright + Pytest + :pypi:`pytest-attrib` *last release*: May 24, 2016, *status*: 4 - Beta, @@ -2654,7 +2669,7 @@ This list contains 1795 plugins. pytest plugin: avoid repeating arguments in parametrize :pypi:`pytest-autoprofile` - *last release*: Aug 06, 2025, + *last release*: Dec 30, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -2822,7 +2837,7 @@ This list contains 1795 plugins. BDD for pytest :pypi:`pytest-bdd-report` - *last release*: Nov 23, 2025, + *last release*: Dec 29, 2025, *status*: N/A, *requires*: pytest>=7.1.3 @@ -3158,9 +3173,9 @@ This list contains 1795 plugins. Budo Systems is a martial arts school management system. This module is the Budo Systems Pytest Plugin. :pypi:`pytest-bug` - *last release*: Jun 17, 2025, + *last release*: Dec 30, 2025, *status*: 5 - Production/Stable, - *requires*: pytest>=8.4.0 + *requires*: pytest>=9.0.0 Pytest plugin for marking tests as a bug @@ -3633,6 +3648,13 @@ This list contains 1795 plugins. A set of pytest fixtures to help with integration testing with Clerk. + :pypi:`pytest-clerk-mock` + *last release*: Jan 02, 2026, + *status*: N/A, + *requires*: N/A + + A pytest plugin for mocking Clerk authentication + :pypi:`pytest-cli2-ansible` *last release*: Mar 05, 2025, *status*: N/A, @@ -3683,7 +3705,7 @@ This list contains 1795 plugins. Distribute tests to cloud machines without fuss :pypi:`pytest-cmake` - *last release*: Dec 08, 2025, + *last release*: Jan 03, 2026, *status*: N/A, *requires*: pytest<10,>=4 @@ -6567,7 +6589,7 @@ This list contains 1795 plugins. Git repository fixture for py.test :pypi:`pytest-gitconfig` - *last release*: Oct 12, 2025, + *last release*: Dec 28, 2025, *status*: 4 - Beta, *requires*: pytest>=7.1.2 @@ -6924,7 +6946,7 @@ This list contains 1795 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Dec 20, 2025, + *last release*: Jan 02, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7043,7 +7065,7 @@ This list contains 1795 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Dec 03, 2025, + *last release*: Dec 29, 2025, *status*: N/A, *requires*: N/A @@ -7365,7 +7387,7 @@ This list contains 1795 plugins. display more node ininformation. :pypi:`pytest-infrahouse` - *last release*: Dec 05, 2025, + *last release*: Dec 29, 2025, *status*: 4 - Beta, *requires*: pytest~=9.0 @@ -7729,7 +7751,7 @@ This list contains 1795 plugins. Generate JSON test reports :pypi:`pytest-json-ctrf` - *last release*: Oct 10, 2024, + *last release*: Dec 28, 2025, *status*: N/A, *requires*: pytest>6.0.0 @@ -7981,7 +8003,7 @@ This list contains 1795 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Dec 24, 2025, + *last release*: Jan 01, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8407,6 +8429,13 @@ This list contains 1795 plugins. Run markdown code fences through pytest + :pypi:`pytest-markdown-report` + *last release*: Jan 03, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Token-efficient markdown test reports for LLM-based TDD agents + :pypi:`pytest-marker-bugzilla` *last release*: Apr 02, 2025, *status*: 5 - Production/Stable, @@ -8597,7 +8626,7 @@ This list contains 1795 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Dec 01, 2025, + *last release*: Dec 29, 2025, *status*: N/A, *requires*: pytest>=6.0.0 @@ -8834,6 +8863,13 @@ This list contains 1795 plugins. Massively distributed pytest runs using modal.com + :pypi:`pytest-model-lib` + *last release*: Dec 29, 2025, + *status*: N/A, + *requires*: N/A + + + :pypi:`pytest-modern` *last release*: Aug 19, 2025, *status*: 4 - Beta, @@ -8996,7 +9032,7 @@ This list contains 1795 plugins. Utility for writing multi-host tests for pytest :pypi:`pytest-multilog` - *last release*: Dec 27, 2025, + *last release*: Dec 28, 2025, *status*: N/A, *requires*: pytest @@ -9535,7 +9571,7 @@ This list contains 1795 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Dec 15, 2025, + *last release*: Jan 02, 2026, *status*: N/A, *requires*: pytest==9.0.2 @@ -10178,6 +10214,13 @@ This list contains 1795 plugins. A plugin containing extra batteries for pytest + :pypi:`pytest-prairielearn-grader` + *last release*: Dec 29, 2025, + *status*: 3 - Alpha, + *requires*: pytest + + A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. + :pypi:`pytest-prefer-nested-dup-tests` *last release*: Apr 27, 2022, *status*: 4 - Beta, @@ -10354,7 +10397,7 @@ This list contains 1795 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Dec 23, 2025, + *last release*: Jan 03, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -11173,7 +11216,7 @@ This list contains 1795 plugins. pytest plugin to re-run tests to eliminate flaky failures :pypi:`pytest-reserial` - *last release*: Dec 18, 2025, + *last release*: Dec 30, 2025, *status*: 4 - Beta, *requires*: pytest @@ -11242,6 +11285,13 @@ This list contains 1795 plugins. Pytest plugin to restrict the test types allowed + :pypi:`pytest-resttest` + *last release*: Jan 01, 2026, + *status*: 5 - Production/Stable, + *requires*: N/A + + A REST API testing framework for Python, as plugin for pytest. Uses simple and readable YAML files for specifying test cases. + :pypi:`pytest-result-log` *last release*: Jan 10, 2024, *status*: N/A, @@ -11341,7 +11391,7 @@ This list contains 1795 plugins. :pypi:`pytest-revealtype-injector` - *last release*: Dec 22, 2025, + *last release*: Dec 31, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -11460,7 +11510,7 @@ This list contains 1795 plugins. Extend py.test for RPC OpenStack testing. :pypi:`pytest-r-snapshot` - *last release*: Dec 14, 2025, + *last release*: Jan 02, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -11628,7 +11678,7 @@ This list contains 1795 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Dec 23, 2025, + *last release*: Dec 30, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -11649,7 +11699,7 @@ This list contains 1795 plugins. A pytest plugin that generates unit test scenarios from data files. :pypi:`pytest-scenarios` - *last release*: Dec 07, 2025, + *last release*: Jan 03, 2026, *status*: N/A, *requires*: N/A @@ -11719,7 +11769,7 @@ This list contains 1795 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Dec 23, 2025, + *last release*: Dec 30, 2025, *status*: 5 - Production/Stable, *requires*: N/A @@ -12908,6 +12958,13 @@ This list contains 1795 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. + :pypi:`pytest-testinel` + *last release*: Jan 03, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7 + + Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. + :pypi:`pytest-testinfra` *last release*: Mar 30, 2025, *status*: 5 - Production/Stable, @@ -13714,7 +13771,7 @@ This list contains 1795 plugins. Some helpers for pytest. :pypi:`pytest-uuid` - *last release*: Dec 27, 2025, + *last release*: Dec 29, 2025, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -13903,7 +13960,7 @@ This list contains 1795 plugins. Local continuous test runner with pytest and watchdog. :pypi:`pytest-watcher` - *last release*: Dec 25, 2025, + *last release*: Dec 28, 2025, *status*: 4 - Beta, *requires*: N/A @@ -13952,7 +14009,7 @@ This list contains 1795 plugins. Test web apps with pytest :pypi:`pytest-webtestpilot` - *last release*: Dec 17, 2025, + *last release*: Dec 28, 2025, *status*: N/A, *requires*: pytest>=9.0.2 @@ -14000,6 +14057,13 @@ This list contains 1795 plugins. Windows tray notifications for py.test results. + :pypi:`pytest-wirefracture` + *last release*: Dec 31, 2025, + *status*: N/A, + *requires*: N/A + + Pytest fixtures for wirefracture + :pypi:`pytest-wiremock` *last release*: Mar 27, 2022, *status*: N/A, @@ -14071,7 +14135,7 @@ This list contains 1795 plugins. xdist scheduler to repeately run tests :pypi:`pytest-xdist-rate-limit` - *last release*: Nov 24, 2025, + *last release*: Dec 31, 2025, *status*: 4 - Beta, *requires*: pytest>=8.4.2 @@ -14393,7 +14457,7 @@ This list contains 1795 plugins. 接口自动化测试框架 :pypi:`tursu` - *last release*: Nov 05, 2025, + *last release*: Jan 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.3.5 From 0e9db5fa5a8de151ab43e5d71e0e8192e0456b9d Mon Sep 17 00:00:00 2001 From: Liam DeVoe Date: Tue, 6 Jan 2026 06:50:21 -0500 Subject: [PATCH 119/307] Clarify `pytest_collection_finish` occurs after setting `session.items` (#14088) --- .gitignore | 1 + changelog/14088.doc.rst | 1 + doc/en/reference/reference.rst | 1 + src/_pytest/hookspec.py | 4 ++-- 4 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 changelog/14088.doc.rst diff --git a/.gitignore b/.gitignore index c4557b33a1c..d0e8dc54ba1 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ coverage.xml .vscode __pycache__/ .python-version +.claude/settings.local.json # generated by pip pip-wheel-metadata/ diff --git a/changelog/14088.doc.rst b/changelog/14088.doc.rst new file mode 100644 index 00000000000..3f3a0963516 --- /dev/null +++ b/changelog/14088.doc.rst @@ -0,0 +1 @@ +Clarified that the default :hook:`pytest_collection` hook sets ``session.items`` before it calls :hook:`pytest_collection_finish`, not after. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 8b3ae9fec1b..b4c8feef479 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -757,6 +757,7 @@ items, delete or otherwise amend the test items: If this hook is implemented in ``conftest.py`` files, it always receives all collected items, not only those under the ``conftest.py`` where it is implemented. +.. hook:: pytest_collection_finish .. autofunction:: pytest_collection_finish Test running (runtest) hooks diff --git a/src/_pytest/hookspec.py b/src/_pytest/hookspec.py index 8c4333810e7..4688c056141 100644 --- a/src/_pytest/hookspec.py +++ b/src/_pytest/hookspec.py @@ -248,8 +248,8 @@ def pytest_collection(session: Session) -> object | None: 1. ``pytest_deselected(items)`` for any deselected items (may be called multiple times) - 3. ``pytest_collection_finish(session)`` - 4. Set ``session.items`` to the list of collected items + 3. Set ``session.items`` to the list of collected items + 4. ``pytest_collection_finish(session)`` 5. Set ``session.testscollected`` to the number of collected items You can implement this hook to only perform some action before collection, From abd0154c21cadce4bf3d0d7584f2e9f45a3eae54 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Jan 2026 13:05:35 +0100 Subject: [PATCH 120/307] [automated] Update plugin list (#14102) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 228 +++++++++++++++++++++---------- 1 file changed, 154 insertions(+), 74 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 80829388854..f91151bd949 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A @@ -98,7 +99,7 @@ This list contains 1803 plugins. :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Dec 29, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Jan 07, 2026 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -141,7 +142,7 @@ This list contains 1803 plugins. :pypi:`pytest-atf-allure` 基于allure-pytest进行自定义 Nov 29, 2023 N/A pytest (>=7.4.2,<8.0.0) :pypi:`pytest-atomic` Skip rest of tests if previous test failed. Nov 24, 2018 4 - Beta N/A :pypi:`pytest-atstack` A simple plugin to use with pytest Jan 02, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 03, 2026 N/A pytest>=7.0 + :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 04, 2026 N/A pytest>=7.0 :pypi:`pytest-attrib` pytest plugin to select tests based on attributes similar to the nose-attrib plugin May 24, 2016 4 - Beta N/A :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A @@ -183,7 +184,7 @@ This list contains 1803 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Dec 24, 2025 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 07, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -251,7 +252,7 @@ This list contains 1803 plugins. :pypi:`pytest-cassandra` Cassandra CCM Test Fixtures for pytest Nov 04, 2017 1 - Planning N/A :pypi:`pytest-catchlog` py.test plugin to catch log messages. This is a fork of pytest-capturelog. Jan 24, 2016 4 - Beta pytest (>=2.6) :pypi:`pytest-catch-server` Pytest plugin with server for catching HTTP requests. Dec 12, 2019 5 - Production/Stable N/A - :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Nov 26, 2025 N/A pytest>=8 + :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Jan 08, 2026 N/A pytest>=8 :pypi:`pytest-celery` Pytest plugin for Celery Jul 30, 2025 5 - Production/Stable N/A :pypi:`pytest-celery-py37` Pytest plugin for Celery (compatible with python 3.7) May 23, 2025 5 - Production/Stable N/A :pypi:`pytest-celery-utils` Pytest plugin for inspecting Celery task queues in Redis during tests Nov 26, 2025 N/A pytest>=9.0.1 @@ -306,6 +307,7 @@ This list contains 1803 plugins. :pypi:`pytest-cobra` PyTest plugin for testing Smart Contracts for Ethereum blockchain. Jun 29, 2019 3 - Alpha pytest (<4.0.0,>=3.7.1) :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Dec 06, 2025 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 @@ -324,6 +326,7 @@ This list contains 1803 plugins. :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Dec 13, 2025 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-colordots` Colorizes the progress indicators Oct 06, 2017 5 - Production/Stable N/A + :pypi:`pytest-comfyui` Integration testing framework for ComfyUI nodes and workflows. Jan 09, 2026 N/A N/A :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) :pypi:`pytest-common-subject` pytest framework for testing different aspects of a common method Oct 22, 2025 N/A pytest<9,>=3.6 :pypi:`pytest-compare` pytest plugin for comparing call arguments. Jun 22, 2023 5 - Production/Stable N/A @@ -354,7 +357,7 @@ This list contains 1803 plugins. :pypi:`pytest-cram` Run cram tests with pytest. Aug 08, 2020 N/A N/A :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Dec 02, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-crate` Manages CrateDB instances during your integration tests May 28, 2019 3 - Alpha pytest (>=4.0) - :pypi:`pytest-cratedb` Manage CrateDB instances for integration tests Oct 08, 2024 4 - Beta pytest<9 + :pypi:`pytest-cratedb` Manage CrateDB instances for integration tests Jan 05, 2026 4 - Beta pytest<10 :pypi:`pytest-cratedb-reporter` A pytest plugin for reporting test results to CrateDB Mar 11, 2025 N/A pytest>=6.0.0 :pypi:`pytest-crayons` A pytest plugin for colorful print statements Oct 14, 2025 5 - Production/Stable pytest :pypi:`pytest-cream` The cream of test execution - smooth pytest workflows with intelligent orchestration Oct 26, 2025 N/A pytest @@ -379,7 +382,7 @@ This list contains 1803 plugins. :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 :pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A - :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Oct 06, 2025 4 - Beta pytest + :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Jan 05, 2026 4 - Beta pytest :pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest :pypi:`pytest-datadir` pytest plugin for test data directories and files Jul 30, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1) @@ -387,7 +390,7 @@ This list contains 1803 plugins. :pypi:`pytest-datadir-nng` Fixtures for pytest allowing test functions/methods to easily retrieve test resources from the local filesystem. Nov 09, 2022 5 - Production/Stable pytest (>=7.0.0,<8.0.0) :pypi:`pytest-data-extractor` A pytest plugin to extract relevant metadata about tests into an external file (currently only json support) Jul 19, 2022 N/A pytest (>=7.0.1) :pypi:`pytest-data-file` Fixture "data" and "case_data" for test from yaml file Dec 04, 2019 N/A N/A - :pypi:`pytest-datafiles` py.test plugin to create a 'tmp_path' containing predefined files/directories. Feb 24, 2023 5 - Production/Stable pytest (>=3.6) + :pypi:`pytest-datafiles` py.test plugin to create a 'tmp_path' containing predefined files/directories. Jan 04, 2026 5 - Production/Stable pytest>=6.2.0 :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 @@ -414,7 +417,7 @@ This list contains 1803 plugins. :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 - :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Nov 21, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Jan 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) @@ -493,7 +496,7 @@ This list contains 1803 plugins. :pypi:`pytest-doctest-import` A simple pytest plugin to import names and add them to the doctest namespace. Nov 13, 2018 4 - Beta pytest (>=3.3.0) :pypi:`pytest-doctest-mkdocstrings` Run pytest --doctest-modules with markdown docstrings in code blocks (\`\`\`) Mar 02, 2024 N/A pytest :pypi:`pytest-doctest-only` A plugin to run only doctest Jul 30, 2025 4 - Beta pytest>=8.3.0 - :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Nov 20, 2025 5 - Production/Stable pytest>=4.6 + :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Jan 08, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-documentary` A simple pytest plugin to generate test documentation Jul 11, 2024 N/A pytest :pypi:`pytest-dogu-report` pytest plugin for dogu report Jul 07, 2023 N/A N/A :pypi:`pytest-dogu-sdk` pytest plugin for the Dogu Dec 14, 2023 N/A N/A @@ -638,6 +641,7 @@ This list contains 1803 plugins. :pypi:`pytest-filemarker` A pytest plugin that runs marked tests when files change. Dec 01, 2020 N/A pytest :pypi:`pytest-file-watcher` Pytest-File-Watcher is a CLI tool that watches for changes in your code and runs pytest on the changed files. Mar 23, 2023 N/A pytest :pypi:`pytest-filter-case` run test cases filter by mark Nov 05, 2020 N/A N/A + :pypi:`pytest-filterfixtures` pytest plugin to execute or ignore tests based on fixtures Jan 09, 2026 N/A pytest>=9.0.2 :pypi:`pytest-filter-subpackage` Pytest plugin for filtering based on sub-packages Mar 04, 2024 5 - Production/Stable pytest >=4.6 :pypi:`pytest-find-dependencies` A pytest plugin to find dependencies between tests Jul 16, 2025 5 - Production/Stable pytest>=6.2.4 :pypi:`pytest-finer-verdicts` A pytest plugin to treat non-assertion failures as test errors. Jun 18, 2020 N/A pytest (>=5.4.3) @@ -659,11 +663,12 @@ This list contains 1803 plugins. :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite, with execution tracing Jan 05, 2026 N/A pytest>=6.0.0 :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Dec 09, 2025 N/A pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 05, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Dec 27, 2025 N/A pytest>=9.0.2 @@ -675,7 +680,7 @@ This list contains 1803 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Jun 07, 2025 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer Jan 05, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -710,7 +715,7 @@ This list contains 1803 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Dec 16, 2025 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Jan 09, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -729,7 +734,7 @@ This list contains 1803 plugins. :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jul 20, 2025 4 - Beta pytest<=8.4.1 :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest - :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Nov 23, 2025 5 - Production/Stable pytest>=6.1.2 + :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 :pypi:`pytest-goldie` A plugin to support golden tests with pytest. May 23, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-google-chat` Notify google chat channel for test results Mar 27, 2022 4 - Beta pytest :pypi:`pytest-google-cloud-storage` Pytest custom features, e.g. fixtures and various tests. Aimed to emulate Google Cloud Storage service Sep 11, 2025 N/A pytest>=8.0.0 @@ -763,7 +768,7 @@ This list contains 1803 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 02, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 08, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -780,7 +785,7 @@ This list contains 1803 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Dec 29, 2025 N/A N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Jan 06, 2026 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -789,12 +794,12 @@ This list contains 1803 plugins. :pypi:`pytest-htmlx` Custom HTML report plugin for Pytest with charts and tables Sep 09, 2025 4 - Beta pytest :pypi:`pytest-http` Fixture "http" for http requests Aug 22, 2024 N/A pytest :pypi:`pytest-httpbin` Easily test your HTTP library against a local copy of httpbin Sep 18, 2024 5 - Production/Stable pytest; extra == "test" - :pypi:`pytest-httpchain` pytest plugin for HTTP testing using JSON files Aug 16, 2025 5 - Production/Stable N/A - :pypi:`pytest-httpchain-jsonref` JSON reference ($ref) support for pytest-httpchain Aug 16, 2025 N/A N/A - :pypi:`pytest-httpchain-mcp` MCP server for pytest-httpchain Aug 16, 2025 N/A N/A - :pypi:`pytest-httpchain-models` Pydantic models for pytest-httpchain Aug 16, 2025 N/A N/A - :pypi:`pytest-httpchain-templates` Templating support for pytest-httpchain Aug 16, 2025 N/A N/A - :pypi:`pytest-httpchain-userfunc` User functions support for pytest-httpchain Aug 16, 2025 N/A N/A + :pypi:`pytest-httpchain` pytest plugin for HTTP testing using JSON files Jan 09, 2026 5 - Production/Stable N/A + :pypi:`pytest-httpchain-jsonref` JSON reference ($ref) support for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-mcp` MCP server for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-models` Pydantic models for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-templates` Templating support for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-userfunc` User functions support for pytest-httpchain Jan 09, 2026 N/A N/A :pypi:`pytest-httpdbg` A pytest plugin to record HTTP(S) requests with stack trace. Oct 26, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-http-mocker` Pytest plugin for http mocking (via https://github.com/vilus/mocker) Oct 20, 2019 N/A N/A :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A @@ -891,12 +896,13 @@ This list contains 1803 plugins. :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest - :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Oct 24, 2025 3 - Alpha pytest>=7.4 + :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) + :pypi:`pytest-kedge` Agent-friendly structured test data collector for pytest Jan 10, 2026 N/A pytest>=7.0.0 :pypi:`pytest-keep-together` Pytest plugin to customize test ordering by running all 'related' tests together Dec 07, 2022 5 - Production/Stable pytest :pypi:`pytest-kexi` Apr 29, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-keyring` A Pytest plugin to access the system's keyring to provide credentials for tests Dec 08, 2024 N/A pytest>=8.0.2 @@ -975,7 +981,7 @@ This list contains 1803 plugins. :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Apr 09, 2025 N/A pytest>=7.0.0 - :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 03, 2026 N/A pytest>=7.0 + :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 10, 2026 N/A pytest>=7.0 :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 :pypi:`pytest-mark-filter` Filter pytest marks by name using match kw May 11, 2025 N/A pytest>=8.3.0 @@ -1003,7 +1009,7 @@ This list contains 1803 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Dec 29, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 09, 2026 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1089,7 +1095,7 @@ This list contains 1803 plugins. :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) - :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Oct 29, 2025 N/A pytest<9.0.0,>=8.2.0 + :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Jan 09, 2026 N/A pytest<9.0.0,>=8.2.0 :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A @@ -1124,6 +1130,7 @@ This list contains 1803 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A + :pypi:`pytest-openapi` Jan 05, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1200,7 +1207,7 @@ This list contains 1803 plugins. :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Nov 01, 2025 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Dec 08, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A @@ -1256,7 +1263,7 @@ This list contains 1803 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Jan 03, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Jan 10, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1316,7 +1323,7 @@ This list contains 1803 plugins. :pypi:`pytest-ranking` A Pytest plugin for faster fault detection via regression test prioritization Apr 08, 2025 4 - Beta pytest>=7.4.3 :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest - :pypi:`pytest-reana` Pytest fixtures for REANA. Oct 10, 2025 3 - Alpha N/A + :pypi:`pytest-reana` Pytest fixtures for REANA. Jan 06, 2026 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Dec 23, 2025 N/A pytest>=8.4.1 :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 @@ -1329,7 +1336,7 @@ This list contains 1803 plugins. :pypi:`pytest-reference-formatter` Conveniently run pytest with a dot-formatted test reference. Oct 01, 2019 4 - Beta N/A :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest - :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Sep 05, 2025 5 - Production/Stable pytest>=6.2.0 + :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Jan 09, 2026 5 - Production/Stable pytest>=6.2.0 :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Oct 11, 2025 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest @@ -1398,7 +1405,7 @@ This list contains 1803 plugins. :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A - :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Dec 31, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 @@ -1439,7 +1446,7 @@ This list contains 1803 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Dec 30, 2025 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 07, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1452,11 +1459,13 @@ This list contains 1803 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Dec 30, 2025 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 07, 2026 5 - Production/Stable N/A + :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 :pypi:`pytest-semantic` A pytest plugin for testing LLM outputs using semantic similarity matching Nov 11, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-semantic-assert` Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. Jan 09, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-send-email` Send pytest execution result email Sep 02, 2024 N/A pytest :pypi:`pytest-sentry` A pytest plugin to send testrun information to Sentry.io Jul 01, 2025 N/A pytest :pypi:`pytest-sequence-markers` Pytest plugin for sequencing markers for execution of tests May 23, 2023 5 - Production/Stable N/A @@ -1542,6 +1551,7 @@ This list contains 1803 plugins. :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Oct 16, 2024 4 - Beta pytest<9,>=5 :pypi:`pytest-split-ext` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Sep 23, 2023 4 - Beta pytest (>=5,<8) :pypi:`pytest-splitio` Split.io SDK integration for e2e tests Sep 22, 2020 N/A pytest (<7,>=5.0) + :pypi:`pytest-split-ng` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 05, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 @@ -1738,7 +1748,7 @@ This list contains 1803 plugins. :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Dec 29, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Jan 09, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest :pypi:`pytest-valgrind` May 19, 2021 N/A N/A :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 @@ -1765,7 +1775,7 @@ This list contains 1803 plugins. :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A - :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Dec 28, 2025 4 - Beta N/A + :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Jan 10, 2026 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A @@ -1797,7 +1807,7 @@ This list contains 1803 plugins. :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 - :pypi:`pytest-xhtml` pytest plugin for generating HTML reports Oct 18, 2025 5 - Production/Stable pytest>=7 + :pypi:`pytest-xhtml` pytest plugin for generating HTML reports Jan 08, 2026 5 - Production/Stable pytest>=7 :pypi:`pytest-xiuyu` This is a pytest plugin Jul 25, 2023 5 - Production/Stable N/A :pypi:`pytest-xlog` Extended logging for test and decorators May 31, 2020 4 - Beta N/A :pypi:`pytest-xlsx` pytest plugin for generating test cases by xlsx(excel) Aug 07, 2024 N/A pytest~=8.2.2 @@ -1947,6 +1957,13 @@ This list contains 1803 plugins. Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. + :pypi:`pytest-agents` + *last release*: Jan 10, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0.0 + + Pytest plugin framework with AI agent capabilities for multi-agent testing + :pypi:`pytest-aggreport` *last release*: Mar 07, 2021, *status*: 4 - Beta, @@ -2291,7 +2308,7 @@ This list contains 1803 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Dec 29, 2025, + *last release*: Jan 07, 2026, *status*: N/A, *requires*: pytest==7.2.2 @@ -2592,7 +2609,7 @@ This list contains 1803 plugins. A simple plugin to use with pytest :pypi:`pytest-attempt-summary` - *last release*: Jan 03, 2026, + *last release*: Jan 04, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -2886,7 +2903,7 @@ This list contains 1803 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Dec 24, 2025, + *last release*: Jan 07, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3362,7 +3379,7 @@ This list contains 1803 plugins. Pytest plugin with server for catching HTTP requests. :pypi:`pytest-cdist` - *last release*: Nov 26, 2025, + *last release*: Jan 08, 2026, *status*: N/A, *requires*: pytest>=8 @@ -3746,6 +3763,13 @@ This list contains 1803 plugins. Pytest plugin for measuring HDL coverage. + :pypi:`pytest-cocotb-fusesoc` + *last release*: Jan 07, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest + + Pytest plugin to integrate FuseSoC with Cocotb. + :pypi:`pytest-cocotb-pyuvm` *last release*: Nov 09, 2025, *status*: 5 - Production/Stable, @@ -3872,6 +3896,13 @@ This list contains 1803 plugins. Colorizes the progress indicators + :pypi:`pytest-comfyui` + *last release*: Jan 09, 2026, + *status*: N/A, + *requires*: N/A + + Integration testing framework for ComfyUI nodes and workflows. + :pypi:`pytest-commander` *last release*: Aug 17, 2021, *status*: N/A, @@ -4083,9 +4114,9 @@ This list contains 1803 plugins. Manages CrateDB instances during your integration tests :pypi:`pytest-cratedb` - *last release*: Oct 08, 2024, + *last release*: Jan 05, 2026, *status*: 4 - Beta, - *requires*: pytest<9 + *requires*: pytest<10 Manage CrateDB instances for integration tests @@ -4258,7 +4289,7 @@ This list contains 1803 plugins. Useful functions for managing data for pytest fixtures :pypi:`pytest-databases` - *last release*: Oct 06, 2025, + *last release*: Jan 05, 2026, *status*: 4 - Beta, *requires*: pytest @@ -4314,9 +4345,9 @@ This list contains 1803 plugins. Fixture "data" and "case_data" for test from yaml file :pypi:`pytest-datafiles` - *last release*: Feb 24, 2023, + *last release*: Jan 04, 2026, *status*: 5 - Production/Stable, - *requires*: pytest (>=3.6) + *requires*: pytest>=6.2.0 py.test plugin to create a 'tmp_path' containing predefined files/directories. @@ -4503,7 +4534,7 @@ This list contains 1803 plugins. A 'defer' fixture for pytest :pypi:`pytest-delta` - *last release*: Nov 21, 2025, + *last release*: Jan 07, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -5056,9 +5087,9 @@ This list contains 1803 plugins. A plugin to run only doctest :pypi:`pytest-doctestplus` - *last release*: Nov 20, 2025, + *last release*: Jan 08, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=4.6 + *requires*: pytest>=7.0 Pytest plugin with advanced doctest features. @@ -6070,6 +6101,13 @@ This list contains 1803 plugins. run test cases filter by mark + :pypi:`pytest-filterfixtures` + *last release*: Jan 09, 2026, + *status*: N/A, + *requires*: pytest>=9.0.2 + + pytest plugin to execute or ignore tests based on fixtures + :pypi:`pytest-filter-subpackage` *last release*: Mar 04, 2024, *status*: 5 - Production/Stable, @@ -6217,6 +6255,13 @@ This list contains 1803 plugins. A pytest plugin to assert type annotations at runtime. + :pypi:`pytest-fkit` + *last release*: Jan 05, 2026, + *status*: N/A, + *requires*: pytest>=6.0.0 + + A pytest plugin that prevents crashes from killing your test suite, with execution tracing + :pypi:`pytest-flake8` *last release*: Nov 09, 2024, *status*: 5 - Production/Stable, @@ -6246,7 +6291,7 @@ This list contains 1803 plugins. Continuously runs your tests to detect flaky tests :pypi:`pytest-flakefighters` - *last release*: Dec 09, 2025, + *last release*: Jan 05, 2026, *status*: N/A, *requires*: pytest>=6.2.0 @@ -6330,7 +6375,7 @@ This list contains 1803 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Jun 07, 2025, + *last release*: Jan 05, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -6575,7 +6620,7 @@ This list contains 1803 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Dec 16, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -6708,7 +6753,7 @@ This list contains 1803 plugins. Pytest fixtures for testing with gnupg. :pypi:`pytest-golden` - *last release*: Nov 23, 2025, + *last release*: Jan 06, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.1.2 @@ -6946,7 +6991,7 @@ This list contains 1803 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Jan 02, 2026, + *last release*: Jan 08, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7065,7 +7110,7 @@ This list contains 1803 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Dec 29, 2025, + *last release*: Jan 06, 2026, *status*: N/A, *requires*: N/A @@ -7128,42 +7173,42 @@ This list contains 1803 plugins. Easily test your HTTP library against a local copy of httpbin :pypi:`pytest-httpchain` - *last release*: Aug 16, 2025, + *last release*: Jan 09, 2026, *status*: 5 - Production/Stable, *requires*: N/A pytest plugin for HTTP testing using JSON files :pypi:`pytest-httpchain-jsonref` - *last release*: Aug 16, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: N/A JSON reference ($ref) support for pytest-httpchain :pypi:`pytest-httpchain-mcp` - *last release*: Aug 16, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: N/A MCP server for pytest-httpchain :pypi:`pytest-httpchain-models` - *last release*: Aug 16, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: N/A Pydantic models for pytest-httpchain :pypi:`pytest-httpchain-templates` - *last release*: Aug 16, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: N/A Templating support for pytest-httpchain :pypi:`pytest-httpchain-userfunc` - *last release*: Aug 16, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: N/A @@ -7842,7 +7887,7 @@ This list contains 1803 plugins. A reusable JupyterHub pytest plugin :pypi:`pytest-jux` - *last release*: Oct 24, 2025, + *last release*: Jan 08, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.4 @@ -7883,6 +7928,13 @@ This list contains 1803 plugins. Display horizontal lines above and below the captured standard output for easy viewing. + :pypi:`pytest-kedge` + *last release*: Jan 10, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0 + + Agent-friendly structured test data collector for pytest + :pypi:`pytest-keep-together` *last release*: Dec 07, 2022, *status*: 5 - Production/Stable, @@ -8430,7 +8482,7 @@ This list contains 1803 plugins. Run markdown code fences through pytest :pypi:`pytest-markdown-report` - *last release*: Jan 03, 2026, + *last release*: Jan 10, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -8626,7 +8678,7 @@ This list contains 1803 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Dec 29, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -9228,7 +9280,7 @@ This list contains 1803 plugins. pytest ngs fixtures :pypi:`pytest-nhsd-apim` - *last release*: Oct 29, 2025, + *last release*: Jan 09, 2026, *status*: N/A, *requires*: pytest<9.0.0,>=8.2.0 @@ -9472,6 +9524,13 @@ This list contains 1803 plugins. Run object-oriented tests in a simple format + :pypi:`pytest-openapi` + *last release*: Jan 05, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0 + + + :pypi:`pytest-openfiles` *last release*: Jun 05, 2024, *status*: 3 - Alpha, @@ -10005,7 +10064,7 @@ This list contains 1803 plugins. A pytest plugin for playwright python :pypi:`pytest-playwright-json` - *last release*: Dec 08, 2025, + *last release*: Jan 06, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -10397,7 +10456,7 @@ This list contains 1803 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Jan 03, 2026, + *last release*: Jan 10, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -10817,7 +10876,7 @@ This list contains 1803 plugins. Test your README.md file :pypi:`pytest-reana` - *last release*: Oct 10, 2025, + *last release*: Jan 06, 2026, *status*: 3 - Alpha, *requires*: N/A @@ -10908,7 +10967,7 @@ This list contains 1803 plugins. Management of Pytest dependencies via regex patterns :pypi:`pytest-regressions` - *last release*: Sep 05, 2025, + *last release*: Jan 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.0 @@ -11391,7 +11450,7 @@ This list contains 1803 plugins. :pypi:`pytest-revealtype-injector` - *last release*: Dec 31, 2025, + *last release*: Jan 09, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -11678,7 +11737,7 @@ This list contains 1803 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Dec 30, 2025, + *last release*: Jan 07, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -11769,12 +11828,19 @@ This list contains 1803 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Dec 30, 2025, + *last release*: Jan 07, 2026, *status*: 5 - Production/Stable, *requires*: N/A A complete web automation framework for end-to-end testing. + :pypi:`pytest-selenium-driver` + *last release*: Jan 09, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + A zero-boilerplate Selenium WebDriver fixture for pytest + :pypi:`pytest-selenium-enhancer` *last release*: Apr 29, 2022, *status*: 5 - Production/Stable, @@ -11803,6 +11869,13 @@ This list contains 1803 plugins. A pytest plugin for testing LLM outputs using semantic similarity matching + :pypi:`pytest-semantic-assert` + *last release*: Jan 09, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. + :pypi:`pytest-send-email` *last release*: Sep 02, 2024, *status*: N/A, @@ -12398,6 +12471,13 @@ This list contains 1803 plugins. Split.io SDK integration for e2e tests + :pypi:`pytest-split-ng` + *last release*: Jan 05, 2026, + *status*: 4 - Beta, + *requires*: pytest<10,>=5 + + Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. + :pypi:`pytest-split-tests` *last release*: Jul 30, 2021, *status*: 5 - Production/Stable, @@ -13771,7 +13851,7 @@ This list contains 1803 plugins. Some helpers for pytest. :pypi:`pytest-uuid` - *last release*: Dec 29, 2025, + *last release*: Jan 09, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -13960,7 +14040,7 @@ This list contains 1803 plugins. Local continuous test runner with pytest and watchdog. :pypi:`pytest-watcher` - *last release*: Dec 28, 2025, + *last release*: Jan 10, 2026, *status*: 4 - Beta, *requires*: N/A @@ -14184,7 +14264,7 @@ This list contains 1803 plugins. A simple plugin to use with pytest :pypi:`pytest-xhtml` - *last release*: Oct 18, 2025, + *last release*: Jan 08, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7 From 6762f5a1cd813a4c0147bf93cd27418f6bfe2d3b Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Sun, 11 Jan 2026 23:41:52 +0100 Subject: [PATCH 121/307] [truncate explanation] Fix edge case when we truncate due to max_chars Previousely the added test case would output: "...Full output truncated (0 lines hidden), use '-vv' to show" --- src/_pytest/assertion/truncate.py | 7 +++---- testing/test_assertion.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index 5820e6e8a80..ba08ef2dfa1 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -101,16 +101,15 @@ def _truncate_explanation( # No truncation happened, so we do not need to add any explanations return truncated_explanation - truncated_line_count = len(input_lines) - len(truncated_explanation) if truncated_explanation[-1]: # Add ellipsis and take into account part-truncated final line truncated_explanation[-1] = truncated_explanation[-1] + "..." - if truncated_char: - # It's possible that we did not remove any char from this line - truncated_line_count += 1 else: # Add proper ellipsis when we were able to fit a full line exactly truncated_explanation[-1] = "..." + truncated_line_count = ( + len(input_lines) - len(truncated_explanation) + int(truncated_char) + ) return [ *truncated_explanation, "", diff --git a/testing/test_assertion.py b/testing/test_assertion.py index 5179b13b0e9..9c9881cf8ed 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -1394,6 +1394,17 @@ def test_truncates_at_8_lines_when_there_is_one_line_to_remove(self) -> None: assert result == expl assert "truncated" not in result[-1] + def test_truncates_full_line_because_of_max_chars(self) -> None: + """A line is fully truncated because of the max_chars value.""" + expl = ["a" * 10, "b" * 71] + result = truncate._truncate_explanation(expl, max_lines=10, max_chars=10) + assert result == [ + "a" * 10, + "...", + "", + "...Full output truncated (1 line hidden), use '-vv' to show", + ] + def test_truncates_edgecase_when_truncation_message_makes_the_result_longer_for_chars( self, ) -> None: From 2c8225a071d429c361aed544baf914759bef50c0 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Mon, 12 Jan 2026 12:12:25 +0100 Subject: [PATCH 122/307] fix: default for xfail condition is `True` --- src/_pytest/mark/structures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 3edf6ab1163..9743f673adc 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -509,7 +509,7 @@ def __call__(self, arg: Markable) -> Markable: ... @overload def __call__( self, - condition: str | bool = False, + condition: str | bool = True, *conditions: str | bool, reason: str = ..., run: bool = ..., From c6f7d54996a0b7dde57c57801f92ef3d7f827b07 Mon Sep 17 00:00:00 2001 From: Denis Cherednichenko Date: Mon, 12 Jan 2026 15:00:34 +0300 Subject: [PATCH 123/307] doc: use new-style dict/tuple annotations in simple.rst examples (#14100) --- AUTHORS | 1 + doc/en/example/simple.rst | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/AUTHORS b/AUTHORS index 7d9ffb3b759..09c5872fe07 100644 --- a/AUTHORS +++ b/AUTHORS @@ -130,6 +130,7 @@ David Szotten David Vierra Daw-Ran Liou Debi Mishra +Denis Cherednichenko Denis Kirisov Denivy Braiam Rück Deysha Rivera diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index 8b35f0ebca5..0640160e3bb 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -553,12 +553,10 @@ an ``incremental`` marker which is to be used on classes: # content of conftest.py - from typing import Dict, Tuple - import pytest # store history of failures per test class name and per index in parametrize (if parametrize used) - _test_failed_incremental: Dict[str, Dict[Tuple[int, ...], str]] = {} + _test_failed_incremental: dict[str, dict[tuple[int, ...], str]] = {} def pytest_runtest_makereport(item, call): @@ -883,11 +881,10 @@ here is a little example implemented via a local plugin: .. code-block:: python # content of conftest.py - from typing import Dict import pytest from pytest import StashKey, CollectReport - phase_report_key = StashKey[Dict[str, CollectReport]]() + phase_report_key = StashKey[dict[str, CollectReport]]() @pytest.hookimpl(wrapper=True, tryfirst=True) From fe7e4d5690f691d87cc7adf8cb974c9e614fe51c Mon Sep 17 00:00:00 2001 From: Vladimir <51440383+even-even@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:13:44 +0300 Subject: [PATCH 124/307] docs: actualize pytest_version (#14099) --- doc/en/backwards-compatibility.rst | 7 ++++--- doc/en/reference/reference.rst | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/en/backwards-compatibility.rst b/doc/en/backwards-compatibility.rst index d79d112df2d..b62046ae2ac 100644 --- a/doc/en/backwards-compatibility.rst +++ b/doc/en/backwards-compatibility.rst @@ -83,9 +83,10 @@ Released pytest versions support all Python versions that are actively maintaine ============== =================== pytest version min. Python version ============== =================== -8.4+ 3.9+ -8.0+ 3.8+ -7.1+ 3.7+ +9.0+ 3.10+ +8.4 3.9+ +8.0 - 8.3 3.8+ +7.1 - 7.4 3.7+ 6.2 - 7.0 3.6+ 5.0 - 6.1 3.5+ 3.3 - 4.6 2.7, 3.4+ diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index b4c8feef479..62ae3564e18 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -18,7 +18,7 @@ The current pytest version, as a string:: >>> import pytest >>> pytest.__version__ - '7.0.0' + '9.0.2' .. _`hidden-param`: @@ -2544,7 +2544,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: truncation_limit_lines - Controls maximum number of linesto truncate assertion message contents. + Controls maximum number of lines to truncate assertion message contents. Setting value to ``0`` disables the lines limit for truncation. From f27a339073d63847a12437a40bc7129650439d4c Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Mon, 12 Jan 2026 15:09:56 +0100 Subject: [PATCH 125/307] [doc] Better documentation in _truncate_explanation --- src/_pytest/assertion/truncate.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index ba08ef2dfa1..c4d8a5c40cd 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -59,6 +59,12 @@ def _truncate_explanation( Truncates to either max_lines, or max_chars - whichever the input reaches first, taking the truncation explanation into account. The remaining lines will be replaced by a usage message. + + If max_chars=0, no truncation by character count is performed. + If max_lines=0, no truncation by line count is performed. + + When this function is launched we know max_lines > 0 or max_chars > 0 + because _get_truncation_parameters was called first. """ # Check if truncation required input_char_count = len("".join(input_lines)) From 48087fd9d61f1eb0828d03f2b8bb46b9912ccedc Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Mon, 12 Jan 2026 15:10:37 +0100 Subject: [PATCH 126/307] [truncate explanation] Simplification of the '...' adding mechanism --- src/_pytest/assertion/truncate.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index c4d8a5c40cd..fe006c6325c 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -107,12 +107,8 @@ def _truncate_explanation( # No truncation happened, so we do not need to add any explanations return truncated_explanation - if truncated_explanation[-1]: - # Add ellipsis and take into account part-truncated final line - truncated_explanation[-1] = truncated_explanation[-1] + "..." - else: - # Add proper ellipsis when we were able to fit a full line exactly - truncated_explanation[-1] = "..." + # Something was truncated, adding '...' at the end to show that + truncated_explanation[-1] += "..." truncated_line_count = ( len(input_lines) - len(truncated_explanation) + int(truncated_char) ) From 4e543e816bb52cc58e76cce4b4a67af1b3a7e0cc Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Mon, 12 Jan 2026 15:11:54 +0100 Subject: [PATCH 127/307] [truncate explanation] Refactor the logic to simplify the code --- src/_pytest/assertion/truncate.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index fe006c6325c..8a58d806f97 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -94,14 +94,14 @@ def _truncate_explanation( truncated_explanation = input_lines[:max_lines] else: truncated_explanation = input_lines - truncated_char = True # We reevaluate the need to truncate chars following removal of some lines - if len("".join(truncated_explanation)) > tolerable_max_chars and max_chars > 0: + need_to_truncate_char = ( + max_chars > 0 and len("".join(truncated_explanation)) > tolerable_max_chars + ) + if need_to_truncate_char: truncated_explanation = _truncate_by_char_count( truncated_explanation, max_chars ) - else: - truncated_char = False if truncated_explanation == input_lines: # No truncation happened, so we do not need to add any explanations @@ -110,7 +110,7 @@ def _truncate_explanation( # Something was truncated, adding '...' at the end to show that truncated_explanation[-1] += "..." truncated_line_count = ( - len(input_lines) - len(truncated_explanation) + int(truncated_char) + len(input_lines) - len(truncated_explanation) + int(need_to_truncate_char) ) return [ *truncated_explanation, From 49bb9878a275bf8388c7972d425a10f018bd37eb Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Mon, 12 Jan 2026 15:43:26 +0100 Subject: [PATCH 128/307] [truncate explanation] Optimize the string length calculation sum(len(x for s in strings) is consistentely faster than len(''.join(strings)), see https://claude.ai/public/artifacts/6a4c33e7-9ad5-4078-8ee7-e343984ce087 --- src/_pytest/assertion/truncate.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index 8a58d806f97..dbf55fd2594 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -67,7 +67,7 @@ def _truncate_explanation( because _get_truncation_parameters was called first. """ # Check if truncation required - input_char_count = len("".join(input_lines)) + input_char_count = sum(len(line) for line in input_lines) # The length of the truncation explanation depends on the number of lines # removed but is at least 68 characters: # The real value is @@ -96,7 +96,8 @@ def _truncate_explanation( truncated_explanation = input_lines # We reevaluate the need to truncate chars following removal of some lines need_to_truncate_char = ( - max_chars > 0 and len("".join(truncated_explanation)) > tolerable_max_chars + max_chars > 0 + and sum(len(e) for e in truncated_explanation) > tolerable_max_chars ) if need_to_truncate_char: truncated_explanation = _truncate_by_char_count( From b86c6f4893c9ca48faf8d4a0eb3717360f9790fb Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Mon, 12 Jan 2026 16:22:02 +0100 Subject: [PATCH 129/307] [truncate_explanation] Cut short by checking if we're going to truncate Better check the theory and the len of the string to know if we're going to truncate rather than checking the full length of the result after the fact. --- src/_pytest/assertion/truncate.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index dbf55fd2594..cb08ddfb490 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -66,8 +66,6 @@ def _truncate_explanation( When this function is launched we know max_lines > 0 or max_chars > 0 because _get_truncation_parameters was called first. """ - # Check if truncation required - input_char_count = sum(len(line) for line in input_lines) # The length of the truncation explanation depends on the number of lines # removed but is at least 68 characters: # The real value is @@ -82,11 +80,11 @@ def _truncate_explanation( tolerable_max_chars = ( max_chars + 70 # 64 + 1 (for plural) + 2 (for '99') + 3 for '...' ) - # The truncation explanation add two lines to the output - tolerable_max_lines = max_lines + 2 if ( - len(input_lines) <= tolerable_max_lines - and input_char_count <= tolerable_max_chars + # The truncation explanation add two lines to the output + max_lines == 0 or len(input_lines) <= max_lines + 2 + ) and ( + max_chars == 0 or sum(len(line) for line in input_lines) <= tolerable_max_chars ): return input_lines # Truncate first to max_lines, and then truncate to max_chars if necessary @@ -103,11 +101,6 @@ def _truncate_explanation( truncated_explanation = _truncate_by_char_count( truncated_explanation, max_chars ) - - if truncated_explanation == input_lines: - # No truncation happened, so we do not need to add any explanations - return truncated_explanation - # Something was truncated, adding '...' at the end to show that truncated_explanation[-1] += "..." truncated_line_count = ( From c454d2fb0b8f701e7e31684ef8bd52d55c805fc9 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Tue, 13 Jan 2026 14:13:09 +0100 Subject: [PATCH 130/307] [truncate explanation] Remove some redundant checks by grouping them together --- src/_pytest/assertion/truncate.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/_pytest/assertion/truncate.py b/src/_pytest/assertion/truncate.py index cb08ddfb490..d62ca33cc4b 100644 --- a/src/_pytest/assertion/truncate.py +++ b/src/_pytest/assertion/truncate.py @@ -80,18 +80,14 @@ def _truncate_explanation( tolerable_max_chars = ( max_chars + 70 # 64 + 1 (for plural) + 2 (for '99') + 3 for '...' ) - if ( - # The truncation explanation add two lines to the output - max_lines == 0 or len(input_lines) <= max_lines + 2 - ) and ( - max_chars == 0 or sum(len(line) for line in input_lines) <= tolerable_max_chars - ): - return input_lines - # Truncate first to max_lines, and then truncate to max_chars if necessary - if max_lines > 0: - truncated_explanation = input_lines[:max_lines] - else: + # The truncation explanation add two lines to the output + if max_lines == 0 or len(input_lines) <= max_lines + 2: + if max_chars == 0 or sum(len(s) for s in input_lines) <= tolerable_max_chars: + return input_lines truncated_explanation = input_lines + else: + # Truncate first to max_lines, and then truncate to max_chars if necessary + truncated_explanation = input_lines[:max_lines] # We reevaluate the need to truncate chars following removal of some lines need_to_truncate_char = ( max_chars > 0 From d794da357b43b2a455df4628f1534fcd8c75ea8d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 19:14:45 +0100 Subject: [PATCH 131/307] [pre-commit.ci] pre-commit autoupdate (#14110) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit zizmor] Make zizmor output legible in pre-commit.ci * [zizmor] Set 'actions/setup-python''s version by hash * [zizmor] Set 'actions/checkout''s version by hash * [zizmor] Set 'actions/download-artifact''s version by hash * [zizmor] Set 'actions/upload-artifact''s version by hash * [zizmor] Set 'actions/stale''s version by hash * [zizmor] Set 'actions/cache''s version by hash * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.10 → v0.14.11](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.10...v0.14.11) - [github.com/woodruffw/zizmor-pre-commit: v1.19.0 → v1.20.0](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.19.0...v1.20.0) - [github.com/RobertCraigie/pyright-python: v1.1.407 → v1.1.408](https://github.com/RobertCraigie/pyright-python/compare/v1.1.407...v1.1.408) Co-authored-by: Pierre Sassoulas --- .github/workflows/deploy.yml | 16 ++++++++-------- .github/workflows/doc-check-links.yml | 4 ++-- .github/workflows/prepare-release-pr.yml | 4 ++-- .github/workflows/stale.yml | 2 +- .github/workflows/test.yml | 8 ++++---- .github/workflows/update-plugin-list.yml | 6 +++--- .pre-commit-config.yaml | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ef94adcffce..be0519a16e2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: attestations: write steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: false @@ -42,13 +42,13 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: false - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: "3.13" @@ -64,7 +64,7 @@ jobs: tox -e generate-gh-release-notes -- "$VERSION" gh-release-notes.md - name: Upload release notes - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: release-notes path: gh-release-notes.md @@ -82,7 +82,7 @@ jobs: id-token: write steps: - name: Download Package - uses: actions/download-artifact@v7 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: Packages path: dist @@ -99,7 +99,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: true @@ -121,13 +121,13 @@ jobs: contents: write steps: - name: Download Package - uses: actions/download-artifact@v7 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: Packages path: dist - name: Download release notes - uses: actions/download-artifact@v7 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: release-notes path: . diff --git a/.github/workflows/doc-check-links.yml b/.github/workflows/doc-check-links.yml index 6d31b9903c1..029b4dc699f 100644 --- a/.github/workflows/doc-check-links.yml +++ b/.github/workflows/doc-check-links.yml @@ -17,13 +17,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: false - name: Setup Python - uses: actions/setup-python@v6 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: "3.13" cache: pip diff --git a/.github/workflows/prepare-release-pr.yml b/.github/workflows/prepare-release-pr.yml index 715392e1b01..1c0e869a512 100644 --- a/.github/workflows/prepare-release-pr.yml +++ b/.github/workflows/prepare-release-pr.yml @@ -27,14 +27,14 @@ jobs: pull-requests: write steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 # persist-credentials is needed in order for us to push the release branch. persist-credentials: true - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: "3.13" diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index aeac36cea60..82178a67594 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -10,7 +10,7 @@ jobs: permissions: issues: write steps: - - uses: actions/stale@v10 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.0 with: debug-only: false days-before-issue-stale: 14 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 133e9991f70..d9dca4964ae 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,7 +37,7 @@ jobs: package: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: false @@ -251,19 +251,19 @@ jobs: continue-on-error: ${{ matrix.xfail && true || false }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: false - name: Download Package - uses: actions/download-artifact@v7 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: Packages path: dist - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@v6 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python }} check-latest: true diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 7c02a7c95eb..bc1e1dd5923 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -20,18 +20,18 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 persist-credentials: false - name: Setup Python - uses: actions/setup-python@v6 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: "3.13" - name: requests-cache - uses: actions/cache@v5 + uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 with: path: ~/.cache/pytest-plugin-list/ key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 145a47264f2..b6ac238aca8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.10" + rev: "v0.14.11" hooks: - id: ruff-check args: ["--fix"] @@ -13,10 +13,10 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.19.0 + rev: v1.20.0 hooks: - id: zizmor - args: ["--fix"] + args: ["--fix", "--no-progress"] - repo: https://github.com/adamchainz/blacken-docs rev: 1.20.0 hooks: @@ -50,7 +50,7 @@ repos: # on <3.11 - exceptiongroup>=1.0.0rc8 - repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.407 + rev: v1.1.408 hooks: - id: pyright files: ^(src/|scripts/) From 6d0aff14ef1aea1636b543c173124a18e61772ee Mon Sep 17 00:00:00 2001 From: Tejas Verma <98054444+Dooopinder@users.noreply.github.com> Date: Sat, 17 Jan 2026 16:38:53 +0530 Subject: [PATCH 132/307] Docs: clarify -p vs PYTEST_PLUGINS plugin loading (#14113) Closes #13388 --- changelog/13388.doc.rst | 1 + doc/en/how-to/plugins.rst | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 changelog/13388.doc.rst diff --git a/changelog/13388.doc.rst b/changelog/13388.doc.rst new file mode 100644 index 00000000000..bade402a60d --- /dev/null +++ b/changelog/13388.doc.rst @@ -0,0 +1 @@ +Clarified documentation for ``-p`` vs ``PYTEST_PLUGINS`` plugin loading and fixed an incorrect ``-p`` example. diff --git a/doc/en/how-to/plugins.rst b/doc/en/how-to/plugins.rst index 48a45619324..c6641eb8484 100644 --- a/doc/en/how-to/plugins.rst +++ b/doc/en/how-to/plugins.rst @@ -158,7 +158,7 @@ manually specify each plugin with :option:`-p` or :envvar:`PYTEST_PLUGINS`, you .. code-block:: bash - pytest --disable-plugin-autoload -p NAME,NAME2 + pytest --disable-plugin-autoload -p NAME -p NAME2 .. tab:: toml @@ -180,3 +180,31 @@ manually specify each plugin with :option:`-p` or :envvar:`PYTEST_PLUGINS`, you .. versionadded:: 8.4 The :option:`--disable-plugin-autoload` command-line flag. + +.. note:: + + :option:`-p` and :envvar:`PYTEST_PLUGINS` are both ways to explicitly control which + plugins are loaded, but they serve slightly different use-cases. + + * :option:`-p` loads (or disables with ``-p no:``) a plugin by name or entry point + for a specific pytest invocation, and is processed early during startup. + * :envvar:`PYTEST_PLUGINS` is a comma-separated list of Python modules that are imported + and registered as plugins during startup. This mechanism is commonly used by test + suites, for example when testing a plugin. + + When explicitly controlling plugin loading (especially with + :envvar:`PYTEST_DISABLE_PLUGIN_AUTOLOAD` or :option:`--disable-plugin-autoload`), + avoid specifying the same plugin via multiple mechanisms. Registering the same plugin + more than once can lead to errors during plugin registration. + +Examples: + +.. code-block:: bash + + # Disable auto-loading and load only specific plugins for this invocation + PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -p xdist + +.. code-block:: bash + + # Disable auto-loading and load plugin modules during startup + PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 PYTEST_PLUGINS=mymodule.plugin,xdist pytest From 3d27ab94849019eb8b3eaabac71c486f9edd4128 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sat, 17 Jan 2026 21:01:12 +0100 Subject: [PATCH 133/307] add: nodes.norm_sep helper for nodeid path separator normalization (#14120) Consolidates scattered inline implementations into a single consistent helper. Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4 --- src/_pytest/fixtures.py | 4 ++-- src/_pytest/nodes.py | 20 +++++++++++++++++--- src/_pytest/terminal.py | 4 +--- testing/test_nodes.py | 31 +++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index d8d19fcac6d..84f90f946be 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1635,8 +1635,8 @@ def pytest_plugin_registered(self, plugin: _PluggyPlugin, plugin_name: str) -> N nodeid = "" if nodeid == ".": nodeid = "" - if os.sep != nodes.SEP: - nodeid = nodeid.replace(os.sep, nodes.SEP) + elif nodeid: + nodeid = nodes.norm_sep(nodeid) else: nodeid = None diff --git a/src/_pytest/nodes.py b/src/_pytest/nodes.py index 6690f6ab1f8..bc1dfc90d96 100644 --- a/src/_pytest/nodes.py +++ b/src/_pytest/nodes.py @@ -51,6 +51,20 @@ SEP = "/" + +def norm_sep(path: str | os.PathLike[str]) -> str: + """Normalize path separators to forward slashes for nodeid compatibility. + + Replaces backslashes with forward slashes. This handles both Windows native + paths and cross-platform data (e.g., Windows paths in serialized test reports + when running on Linux). + + :param path: A path string or PathLike object. + :returns: String with all backslashes replaced by forward slashes. + """ + return os.fspath(path).replace("\\", SEP) + + tracebackcutdir = Path(_pytest.__file__).parent @@ -589,7 +603,7 @@ def __init__( pass else: name = str(rel) - name = name.replace(os.sep, SEP) + name = norm_sep(name) self.path = path if session is None: @@ -602,8 +616,8 @@ def __init__( except ValueError: nodeid = _check_initialpaths_for_relpath(session._initialpaths, path) - if nodeid and os.sep != SEP: - nodeid = nodeid.replace(os.sep, SEP) + if nodeid: + nodeid = norm_sep(nodeid) super().__init__( name=name, diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 837a78cc568..bb6f35633b9 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -1034,9 +1034,7 @@ def mkrel(nodeid: str) -> str: # fspath comes from testid which has a "/"-normalized path. if fspath: res = mkrel(nodeid) - if self.verbosity >= 2 and nodeid.split("::")[0] != fspath.replace( - "\\", nodes.SEP - ): + if self.verbosity >= 2 and nodeid.split("::")[0] != nodes.norm_sep(fspath): res += " <- " + bestrelpath(self.startpath, Path(fspath)) else: res = "[location]" diff --git a/testing/test_nodes.py b/testing/test_nodes.py index de7875ca427..f66a11ce5c8 100644 --- a/testing/test_nodes.py +++ b/testing/test_nodes.py @@ -98,6 +98,37 @@ def test(): items[0].warn(Exception("ok")) # type: ignore[arg-type] +class TestNormSep: + """Tests for the norm_sep helper function.""" + + def test_forward_slashes_unchanged(self) -> None: + """Forward slashes pass through unchanged.""" + assert nodes.norm_sep("a/b/c") == "a/b/c" + + def test_backslashes_converted(self) -> None: + """Backslashes are converted to forward slashes.""" + assert nodes.norm_sep("a\\b\\c") == "a/b/c" + + def test_mixed_separators(self) -> None: + """Mixed separators are all normalized to forward slashes.""" + assert nodes.norm_sep("a\\b/c\\d") == "a/b/c/d" + + def test_pathlike_input(self, tmp_path: Path) -> None: + """PathLike objects are converted to string with normalized separators.""" + # Create a path and verify it's normalized + result = nodes.norm_sep(tmp_path / "subdir" / "file.py") + assert "\\" not in result + assert "subdir/file.py" in result + + def test_empty_string(self) -> None: + """Empty string returns empty string.""" + assert nodes.norm_sep("") == "" + + def test_windows_absolute_path(self) -> None: + """Windows absolute paths have backslashes converted.""" + assert nodes.norm_sep("C:\\Users\\test\\project") == "C:/Users/test/project" + + def test__check_initialpaths_for_relpath() -> None: """Ensure that it handles dirs, and does not always use dirname.""" cwd = Path.cwd() From 21896851f496d89890d7bb4ec02710e168e5a493 Mon Sep 17 00:00:00 2001 From: pytest bot Date: Sun, 18 Jan 2026 00:33:41 +0000 Subject: [PATCH 134/307] [automated] Update plugin list --- doc/en/reference/plugin_list.rst | 182 +++++++++++++++++++------------ 1 file changed, 115 insertions(+), 67 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index f91151bd949..fc769913f23 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 11, 2026 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) - :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Dec 17, 2025 4 - Beta pytest~=9.0.0; extra == "dev" + :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Jan 12, 2026 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 24, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 @@ -184,7 +184,7 @@ This list contains 1813 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 07, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 15, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -324,7 +324,7 @@ This list contains 1813 plugins. :pypi:`pytest-collect-interface-info-plugin` Get executed interface information in pytest interface automation framework Sep 25, 2023 4 - Beta N/A :pypi:`pytest-collector` Python package for collecting pytest. Aug 02, 2022 N/A pytest (>=7.0,<8.0) :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A - :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Dec 13, 2025 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Jan 15, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-colordots` Colorizes the progress indicators Oct 06, 2017 5 - Production/Stable N/A :pypi:`pytest-comfyui` Integration testing framework for ComfyUI nodes and workflows. Jan 09, 2026 N/A N/A :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) @@ -349,6 +349,7 @@ This list contains 1813 plugins. :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A + :pypi:`pytest-coverage-impact` Sensoria: High-fidelity coverage impact analysis for Python. Jan 16, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-coveragemarkers` Using pytest markers to track functional coverage and filtering of tests May 15, 2025 N/A pytest<8.0.0,>=7.1.2 :pypi:`pytest-cov-exclude` Pytest plugin for excluding tests based on coverage data Apr 29, 2016 4 - Beta pytest (>=2.8.0,<2.9.0); extra == 'dev' :pypi:`pytest_covid` Too many faillure, less tests. Jun 24, 2020 N/A N/A @@ -412,12 +413,12 @@ This list contains 1813 plugins. :pypi:`pytest-dbus-notification` D-BUS notifications for pytest results. Mar 05, 2014 5 - Production/Stable N/A :pypi:`pytest-dbx` Pytest plugin to run unit tests for dbx (Databricks CLI extensions) related code Nov 29, 2022 N/A pytest (>=7.1.3,<8.0.0) :pypi:`pytest-dc` Manages Docker containers during your integration tests Aug 16, 2023 5 - Production/Stable pytest >=3.3 - :pypi:`pytest-deadfixtures` A simple plugin to list unused fixtures in pytest Nov 08, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-deadfixtures` A simple plugin to list unused fixtures in pytest Jan 15, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-deduplicate` Identifies duplicate unit tests Aug 12, 2023 4 - Beta pytest :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 - :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Jan 07, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Jan 15, 2026 4 - Beta pytest<10.0.0,>=9.0.2 :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) @@ -515,14 +516,14 @@ This list contains 1813 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Dec 09, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Jan 16, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 - :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Dec 11, 2025 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Jan 15, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A @@ -540,15 +541,15 @@ This list contains 1813 plugins. :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest - :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Dec 19, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Dec 19, 2025 5 - Production/Stable N/A - :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Dec 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Jan 16, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Jan 16, 2026 5 - Production/Stable N/A :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) @@ -612,7 +613,7 @@ This list contains 1813 plugins. :pypi:`pytest_extra` Some helpers for writing tests with pytest. Aug 14, 2014 N/A N/A :pypi:`pytest-extra-durations` A pytest plugin to get durations on a per-function basis and per module basis. Apr 21, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-extra-markers` Additional pytest markers to dynamically enable/disable tests viia CLI flags Mar 05, 2023 4 - Beta pytest - :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Jul 15, 2025 N/A pytest<8.0.0,>=7.2.1 + :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Jan 15, 2026 N/A pytest<8.0.0,>=7.2.1 :pypi:`pytest-fabric` Provides test utilities to run fabric task tests by using docker containers Sep 12, 2018 5 - Production/Stable N/A :pypi:`pytest-factory` Use factories for test setup with py.test Sep 06, 2020 3 - Alpha pytest (>4.3) :pypi:`pytest-factoryboy` Factory Boy support for pytest. Jul 01, 2025 6 - Mature pytest>=7.0 @@ -671,7 +672,7 @@ This list contains 1813 plugins. :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 05, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Dec 27, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Jan 13, 2026 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) @@ -768,7 +769,7 @@ This list contains 1813 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 08, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 17, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -785,7 +786,7 @@ This list contains 1813 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Jan 06, 2026 N/A N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Jan 16, 2026 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -864,6 +865,7 @@ This list contains 1813 plugins. :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest :pypi:`pytest-ipywidgets` Dec 22, 2025 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest + :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Jan 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A @@ -920,7 +922,7 @@ This list contains 1813 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Jan 01, 2026 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Jan 17, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -949,6 +951,7 @@ This list contains 1813 plugins. :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 14, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest @@ -986,6 +989,7 @@ This list contains 1813 plugins. :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 :pypi:`pytest-mark-filter` Filter pytest marks by name using match kw May 11, 2025 N/A pytest>=8.3.0 :pypi:`pytest-markfiltration` UNKNOWN Nov 08, 2011 3 - Alpha N/A + :pypi:`pytest-mark-integration` Pytest plugin for automatic integration test marking and management Jan 13, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-mark-manage` 用例标签化管理 Aug 15, 2024 N/A pytest :pypi:`pytest-mark-no-py3` pytest plugin and bowler codemod to help migrate tests to Python 3 May 17, 2019 N/A pytest :pypi:`pytest-marks` UNKNOWN Nov 23, 2012 3 - Alpha N/A @@ -1009,7 +1013,7 @@ This list contains 1813 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 09, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 12, 2026 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1081,6 +1085,7 @@ This list contains 1813 plugins. :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output. Mar 04, 2024 N/A pytest>=7,<9 :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 + :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Jan 16, 2026 N/A pytest<9.1.0,>=7.0.0; python_version < "3.14" :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Nov 05, 2025 2 - Pre-Alpha pytest>=8.3.2; extra == "dev" :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) @@ -1103,7 +1108,7 @@ This list contains 1813 plugins. :pypi:`pytest-node-dependency` pytest plugin for controlling execution flow Apr 10, 2024 5 - Production/Stable N/A :pypi:`pytest-nodev` Test-driven source code search for Python. Jul 21, 2016 4 - Beta pytest (>=2.8.1) :pypi:`pytest-nogarbage` Ensure a test produces no garbage Feb 24, 2025 5 - Production/Stable pytest>=4.6.0 - :pypi:`pytest-no-problem` Pytest plugin to tell you when there's no problem Oct 18, 2025 N/A pytest>=7.0 + :pypi:`pytest-no-problem` Pytest plugin to tell you when there's no problem Jan 11, 2026 N/A pytest>=7.0 :pypi:`pytest-nose-attrib` pytest plugin to use nose @attrib marks decorators and pick tests based on attributes and partially uses nose-attrib plugin approach Aug 13, 2023 N/A N/A :pypi:`pytest_notebook` A pytest plugin for testing Jupyter Notebooks. Nov 28, 2023 4 - Beta pytest>=3.5.0 :pypi:`pytest-notice` Send pytest execution result email Nov 05, 2020 N/A N/A @@ -1130,7 +1135,7 @@ This list contains 1813 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` Jan 05, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` Jan 17, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1205,7 +1210,7 @@ This list contains 1813 plugins. :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Nov 01, 2025 5 - Production/Stable N/A + :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A @@ -1263,7 +1268,7 @@ This list contains 1813 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Jan 10, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Jan 13, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1429,7 +1434,7 @@ This list contains 1813 plugins. :pypi:`pytest-ruff` pytest plugin to check ruff requirements. Jun 19, 2025 4 - Beta pytest>=5 :pypi:`pytest-run-changed` Pytest plugin that runs changed tests only Apr 02, 2021 3 - Alpha pytest :pypi:`pytest-runfailed` implement a --failed option for pytest Mar 24, 2016 N/A N/A - :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Dec 23, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Jan 14, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-run-subprocess` Pytest Plugin for running and testing subprocesses. Nov 12, 2022 5 - Production/Stable pytest :pypi:`pytest-runtime-types` Checks type annotations on runtime while running tests. Feb 09, 2023 N/A pytest :pypi:`pytest-runtime-xfail` Call runtime_xfail() to mark running test as xfail. Oct 10, 2025 5 - Production/Stable pytest>=5.0.0 @@ -1446,7 +1451,7 @@ This list contains 1813 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 07, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 16, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1459,7 +1464,7 @@ This list contains 1813 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 07, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 16, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1554,6 +1559,7 @@ This list contains 1813 plugins. :pypi:`pytest-split-ng` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 05, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A + :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 24, 2025 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) @@ -1583,7 +1589,7 @@ This list contains 1813 plugins. :pypi:`pytest-stoq` A plugin to pytest stoq Feb 09, 2021 4 - Beta N/A :pypi:`pytest-storage` Pytest plugin to store test artifacts Sep 12, 2025 3 - Alpha pytest>=8.4.2 :pypi:`pytest-store` Pytest plugin to store values from test runs Jul 30, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-streaming` Plugin for testing pubsub, pulsar, and kafka systems with pytest locally and in ci/cd May 28, 2025 5 - Production/Stable pytest>=8.3.5 + :pypi:`pytest-streaming` Plugin for testing pubsub, pulsar, and kafka systems with pytest locally and in ci/cd Jan 14, 2026 5 - Production/Stable pytest>=8.3.5 :pypi:`pytest-stress` A Pytest plugin that allows you to loop tests for a user defined amount of time. Dec 07, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-structlog` Structured logging assertions Sep 10, 2025 N/A pytest :pypi:`pytest-structmpd` provide structured temporary directory Oct 17, 2018 N/A N/A @@ -1846,7 +1852,7 @@ This list contains 1813 plugins. :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 - :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Jan 02, 2026 5 - Production/Stable pytest>=8.3.5 + :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Jan 17, 2026 5 - Production/Stable pytest>=8.3.5 =============================================== ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ .. only:: latex @@ -2350,7 +2356,7 @@ This list contains 1813 plugins. Pytest plugin for appium :pypi:`pytest-approval` - *last release*: Nov 11, 2025, + *last release*: Jan 11, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -2385,7 +2391,7 @@ This list contains 1813 plugins. pyest results colection plugin :pypi:`pytest-argus-reporter` - *last release*: Dec 17, 2025, + *last release*: Jan 12, 2026, *status*: 4 - Beta, *requires*: pytest~=9.0.0; extra == "dev" @@ -2903,7 +2909,7 @@ This list contains 1813 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Jan 07, 2026, + *last release*: Jan 15, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3883,7 +3889,7 @@ This list contains 1813 plugins. A simple plugin to use with pytest :pypi:`pytest-collect-requirements` - *last release*: Dec 13, 2025, + *last release*: Jan 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -4057,6 +4063,13 @@ This list contains 1813 plugins. Coverage dynamic context support for PyTest, including sub-processes + :pypi:`pytest-coverage-impact` + *last release*: Jan 16, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + Sensoria: High-fidelity coverage impact analysis for Python. + :pypi:`pytest-coveragemarkers` *last release*: May 15, 2025, *status*: N/A, @@ -4499,7 +4512,7 @@ This list contains 1813 plugins. Manages Docker containers during your integration tests :pypi:`pytest-deadfixtures` - *last release*: Nov 08, 2025, + *last release*: Jan 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -4534,9 +4547,9 @@ This list contains 1813 plugins. A 'defer' fixture for pytest :pypi:`pytest-delta` - *last release*: Jan 07, 2026, + *last release*: Jan 15, 2026, *status*: 4 - Beta, - *requires*: pytest>=7.0 + *requires*: pytest<10.0.0,>=9.0.2 Run only tests impacted by your code changes (delta-based selection) for pytest. @@ -5220,7 +5233,7 @@ This list contains 1813 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Dec 09, 2025, + *last release*: Jan 16, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5269,7 +5282,7 @@ This list contains 1813 plugins. Pytest plugin reporting fixtures and test functions execution time. :pypi:`pytest-dynamic-parameterize` - *last release*: Dec 11, 2025, + *last release*: Jan 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -5395,63 +5408,63 @@ This list contains 1813 plugins. Send execution result email :pypi:`pytest-embedded` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A pytest plugin that designed for embedded testing. :pypi:`pytest-embedded-arduino` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-idf` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with ESP-IDF. :pypi:`pytest-embedded-jtag` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with JTAG. :pypi:`pytest-embedded-nuttx` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with NuttX. :pypi:`pytest-embedded-qemu` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with QEMU. :pypi:`pytest-embedded-serial` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Serial. :pypi:`pytest-embedded-serial-esp` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Espressif target boards. :pypi:`pytest-embedded-wokwi` - *last release*: Dec 19, 2025, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -5899,7 +5912,7 @@ This list contains 1813 plugins. Additional pytest markers to dynamically enable/disable tests viia CLI flags :pypi:`pytest-f3ts` - *last release*: Jul 15, 2025, + *last release*: Jan 15, 2026, *status*: N/A, *requires*: pytest<8.0.0,>=7.2.1 @@ -6312,7 +6325,7 @@ This list contains 1813 plugins. pytest plugin to check source code with pyflakes :pypi:`pytest-flakiness` - *last release*: Dec 27, 2025, + *last release*: Jan 13, 2026, *status*: N/A, *requires*: pytest>=9.0.2 @@ -6991,7 +7004,7 @@ This list contains 1813 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Jan 08, 2026, + *last release*: Jan 17, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7110,11 +7123,11 @@ This list contains 1813 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Jan 06, 2026, + *last release*: Jan 16, 2026, *status*: N/A, *requires*: N/A - Generate Actionable, automatic screenshots, unified Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. + Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. :pypi:`pytest-html-profiling` *last release*: Feb 11, 2020, @@ -7662,6 +7675,13 @@ This list contains 1813 plugins. Run pytest tests in isolated subprocesses + :pypi:`pytest-isolated` + *last release*: Jan 13, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + Run marked pytest tests in grouped subprocesses (cross-platform). + :pypi:`pytest-isolate-mpi` *last release*: Feb 24, 2025, *status*: 4 - Beta, @@ -8055,7 +8075,7 @@ This list contains 1813 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Jan 01, 2026, + *last release*: Jan 17, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8257,6 +8277,13 @@ This list contains 1813 plugins. A pytest plugin to evaluate/benchmark LLM prompts + :pypi:`pytest-llm-report` + *last release*: Jan 14, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + Human-friendly pytest test reports with optional LLM annotations + :pypi:`pytest-lobster` *last release*: Jul 26, 2025, *status*: N/A, @@ -8516,6 +8543,13 @@ This list contains 1813 plugins. UNKNOWN + :pypi:`pytest-mark-integration` + *last release*: Jan 13, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + Pytest plugin for automatic integration test marking and management + :pypi:`pytest-mark-manage` *last release*: Aug 15, 2024, *status*: N/A, @@ -8678,7 +8712,7 @@ This list contains 1813 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Jan 09, 2026, + *last release*: Jan 12, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -9181,6 +9215,13 @@ This list contains 1813 plugins. Seedable Jupyter Notebook testing tool + :pypi:`pytest-nb-as-test` + *last release*: Jan 16, 2026, + *status*: N/A, + *requires*: pytest<9.1.0,>=7.0.0; python_version < "3.14" + + Use notebooks as pytests. Keep your notebooks working. + :pypi:`pytest-nbgrader` *last release*: Nov 05, 2025, *status*: 2 - Pre-Alpha, @@ -9336,7 +9377,7 @@ This list contains 1813 plugins. Ensure a test produces no garbage :pypi:`pytest-no-problem` - *last release*: Oct 18, 2025, + *last release*: Jan 11, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -9525,7 +9566,7 @@ This list contains 1813 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Jan 05, 2026, + *last release*: Jan 17, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10050,7 +10091,7 @@ This list contains 1813 plugins. A pytest wrapper with async fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-axe` - *last release*: Nov 01, 2025, + *last release*: Jan 12, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -10456,7 +10497,7 @@ This list contains 1813 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Jan 10, 2026, + *last release*: Jan 13, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -11618,7 +11659,7 @@ This list contains 1813 plugins. implement a --failed option for pytest :pypi:`pytest-run-parallel` - *last release*: Dec 23, 2025, + *last release*: Jan 14, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -11737,7 +11778,7 @@ This list contains 1813 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Jan 07, 2026, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -11828,7 +11869,7 @@ This list contains 1813 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Jan 07, 2026, + *last release*: Jan 16, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12492,6 +12533,13 @@ This list contains 1813 plugins. + :pypi:`pytest-split-v2` + *last release*: Jan 14, 2026, + *status*: 4 - Beta, + *requires*: pytest<10,>=5 + + Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. + :pypi:`pytest-splunk-addon` *last release*: Aug 19, 2025, *status*: N/A, @@ -12696,7 +12744,7 @@ This list contains 1813 plugins. Pytest plugin to store values from test runs :pypi:`pytest-streaming` - *last release*: May 28, 2025, + *last release*: Jan 14, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.3.5 @@ -14537,7 +14585,7 @@ This list contains 1813 plugins. 接口自动化测试框架 :pypi:`tursu` - *last release*: Jan 02, 2026, + *last release*: Jan 17, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.3.5 From ca714a7bfcf3eca8ed0102c979e28d9a23891814 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 18 Jan 2026 19:03:22 +0200 Subject: [PATCH 135/307] doc/how-to/fixtures: update `usefixture` on a fixture is now an error --- doc/en/how-to/fixtures.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 5c5a239e8d4..f26723f19e1 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1746,8 +1746,8 @@ into a configuration file: .. warning:: - Note this mark has no effect in **fixture functions**. For example, - this **will not work as expected**: + ``@pytest.mark.usefixtures`` cannot be used on **fixture functions**. For example, + this is an error: .. code-block:: python @@ -1755,8 +1755,6 @@ into a configuration file: @pytest.fixture def my_fixture_that_sadly_wont_use_my_other_fixture(): ... - This generates a deprecation warning, and will become an error in Pytest 8. - .. _`override fixtures`: Overriding fixtures on various levels From 578fd03598759ce8f0332c7dd2f2002ac09b538d Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 18 Jan 2026 19:04:56 +0200 Subject: [PATCH 136/307] doc/how-to/fixtures: rework confusing usage of backticks Using backticks on the words "override", "global", "root", "locally" makes it look like they are code keywords. I went ahead and also reworded it a bit, as overriding is not only for global fixtures, and not necessarily "locally". --- doc/en/how-to/fixtures.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index f26723f19e1..86adeafe1b9 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1760,8 +1760,8 @@ into a configuration file: Overriding fixtures on various levels ------------------------------------- -In relatively large test suite, you most likely need to ``override`` a ``global`` or ``root`` fixture with a ``locally`` -defined one, keeping the test code readable and maintainable. +In relatively large test suite, you may want to *override* a fixture, to augment +or change its behavior inside of certain test modules or folders. Override a fixture on a folder (conftest) level ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 5d0c52b6d0a011772fdf388d8f79757ea1821a3e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 18 Jan 2026 19:20:40 +0200 Subject: [PATCH 137/307] Change uses of "folder" to "directory" It's good to use consistent terminology, especially in the docs. "Directory" is more popular and more ingrained (e.g. in pathlib, `Dir`/`Directory` nodes, etc.). so let's go with that. --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- doc/en/changelog.rst | 2 +- doc/en/explanation/fixtures.rst | 2 +- doc/en/explanation/goodpractices.rst | 2 +- doc/en/explanation/pythonpath.rst | 6 +++--- doc/en/how-to/fixtures.rst | 16 ++++++++-------- doc/en/reference/customize.rst | 2 +- src/_pytest/pathlib.py | 8 ++++---- testing/example_scripts/README.rst | 2 +- testing/plugins_integration/README.rst | 2 +- testing/test_collection.py | 6 +++--- testing/test_pathlib.py | 12 ++++++------ testing/test_tmpdir.py | 8 ++++---- 13 files changed, 35 insertions(+), 35 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5e7282bfd77..6f638ba853b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -13,7 +13,7 @@ If this change fixes an issue, please: Unless your change is trivial or a small documentation fix (e.g., a typo or reword of a small section) please: -- [ ] Create a new changelog file in the `changelog` folder, with a name like `..rst`. See [changelog/README.rst](https://github.com/pytest-dev/pytest/blob/main/changelog/README.rst) for details. +- [ ] Create a new changelog file in the `changelog` directory, with a name like `..rst`. See [changelog/README.rst](https://github.com/pytest-dev/pytest/blob/main/changelog/README.rst) for details. Write sentences in the **past or present tense**, examples: diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index b4e5cee694e..4695a70e623 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -16,7 +16,7 @@ with advance notice in the **Deprecations** section of releases. fix problems like typo corrections or such. To add a new change log entry, please see https://pip.pypa.io/en/latest/development/contributing/#news-entries - we named the news folder changelog + but note that in pytest the "news/" directory is named "changelog/". .. only:: not is_release diff --git a/doc/en/explanation/fixtures.rst b/doc/en/explanation/fixtures.rst index 53d4796c825..bac3fa02723 100644 --- a/doc/en/explanation/fixtures.rst +++ b/doc/en/explanation/fixtures.rst @@ -152,7 +152,7 @@ If you want to make test data from files available to your tests, a good way to do this is by loading these data in a fixture for use by your tests. This makes use of the automatic caching mechanisms of pytest. -Another good approach is by adding the data files in the ``tests`` folder. +Another good approach is by adding the data files in the ``tests`` directory. There are also community plugins available to help to manage this aspect of testing, e.g. :pypi:`pytest-datadir` and :pypi:`pytest-datafiles`. diff --git a/doc/en/explanation/goodpractices.rst b/doc/en/explanation/goodpractices.rst index bbc64ec662d..7c589b57033 100644 --- a/doc/en/explanation/goodpractices.rst +++ b/doc/en/explanation/goodpractices.rst @@ -240,7 +240,7 @@ This results in a drawback compared to the import mode ``importlib``: your test files must have **unique names**. If you need to have test modules with the same name, -as a workaround you might add ``__init__.py`` files to your ``tests`` folder and subfolders, +as a workaround you might add ``__init__.py`` files to your ``tests`` directory and subdirectories, changing them to packages: .. code-block:: text diff --git a/doc/en/explanation/pythonpath.rst b/doc/en/explanation/pythonpath.rst index cb3ae67216a..dd3aec3d235 100644 --- a/doc/en/explanation/pythonpath.rst +++ b/doc/en/explanation/pythonpath.rst @@ -143,8 +143,8 @@ When executing: pytest root/ pytest will find ``foo/bar/tests/test_foo.py`` and realize it is part of a package given that -there's an ``__init__.py`` file in the same folder. It will then search upwards until it can find the -last folder which still contains an ``__init__.py`` file in order to find the package *root* (in +there's an ``__init__.py`` file in the same directory. It will then search upwards until it can find the +last directory which still contains an ``__init__.py`` file in order to find the package *root* (in this case ``foo/``). To load the module, it will insert ``root/`` to the front of :py:data:`sys.path` (if not there already) in order to load ``test_foo.py`` as the *module* ``foo.bar.tests.test_foo``. @@ -175,7 +175,7 @@ When executing: pytest root/ pytest will find ``foo/bar/tests/test_foo.py`` and realize it is NOT part of a package given that -there's no ``__init__.py`` file in the same folder. It will then add ``root/foo/bar/tests`` to +there's no ``__init__.py`` file in the same directory. It will then add ``root/foo/bar/tests`` to :py:data:`sys.path` in order to import ``test_foo.py`` as the *module* ``test_foo``. The same is done with the ``conftest.py`` file by adding ``root/foo`` to :py:data:`sys.path` to import it as ``conftest``. diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 86adeafe1b9..14949994598 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1761,10 +1761,10 @@ Overriding fixtures on various levels ------------------------------------- In relatively large test suite, you may want to *override* a fixture, to augment -or change its behavior inside of certain test modules or folders. +or change its behavior inside of certain test modules or directories. -Override a fixture on a folder (conftest) level -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Override a fixture on a directory (conftest) level +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Given the tests file structure is: @@ -1784,9 +1784,9 @@ Given the tests file structure is: def test_username(username): assert username == 'username' - subfolder/ + subdir/ conftest.py - # content of tests/subfolder/conftest.py + # content of tests/subdir/conftest.py import pytest @pytest.fixture @@ -1794,11 +1794,11 @@ Given the tests file structure is: return 'overridden-' + username test_something_else.py - # content of tests/subfolder/test_something_else.py + # content of tests/subdir/test_something_else.py def test_username(username): assert username == 'overridden-username' -As you can see, a fixture with the same name can be overridden for certain test folder level. +As you can see, a fixture with the same name can be overridden for certain test directory level. Note that the ``base`` or ``super`` fixture can be accessed from the ``overriding`` fixture easily - used in the example above. @@ -1927,7 +1927,7 @@ Given the tests file structure is: In the example above, a parametrized fixture is overridden with a non-parametrized version, and a non-parametrized fixture is overridden with a parametrized version for certain test module. -The same applies for the test folder level obviously. +The same applies for the test directory level obviously. Using fixtures from other projects diff --git a/doc/en/reference/customize.rst b/doc/en/reference/customize.rst index b2e7d64cc26..9b954bdcab1 100644 --- a/doc/en/reference/customize.rst +++ b/doc/en/reference/customize.rst @@ -272,7 +272,7 @@ check for configuration files as follows: Custom pytest plugin commandline arguments may include a path, as in ``pytest --log-output ../../test.log args``. Then ``args`` is mandatory, - otherwise pytest uses the folder of test.log for rootdir determination + otherwise pytest uses the directory of test.log for rootdir determination (see also :issue:`1435`). A dot ``.`` for referencing to the current working directory is also possible. diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index cd15434605d..3619d8cd3fc 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -225,7 +225,7 @@ def _force_symlink(root: Path, target: str | PurePath, link_to: str | Path) -> N def make_numbered_dir(root: Path, prefix: str, mode: int = 0o700) -> Path: """Create a directory with an increased number as suffix for the given prefix.""" for i in range(10): - # try up to 10 times to create the folder + # try up to 10 times to create the directory max_existing = max(map(parse_num, find_suffixes(root, prefix)), default=-1) new_number = max_existing + 1 new_path = root.joinpath(f"{prefix}{new_number}") @@ -244,7 +244,7 @@ def make_numbered_dir(root: Path, prefix: str, mode: int = 0o700) -> Path: def create_cleanup_lock(p: Path) -> Path: - """Create a lock to prevent premature folder cleanup.""" + """Create a lock to prevent premature directory cleanup.""" lock_path = get_lock_path(p) try: fd = os.open(str(lock_path), os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o644) @@ -294,7 +294,7 @@ def maybe_delete_a_numbered_dir(path: Path) -> None: except OSError: # known races: # * other process did a cleanup at the same time - # * deletable folder was found + # * deletable directory was found # * process cwd (Windows) return finally: @@ -336,7 +336,7 @@ def ensure_deletable(path: Path, consider_lock_dead_if_created_before: float) -> def try_cleanup(path: Path, consider_lock_dead_if_created_before: float) -> None: - """Try to cleanup a folder if we can ensure it's deletable.""" + """Try to cleanup a directory if we can ensure it's deletable.""" if ensure_deletable(path, consider_lock_dead_if_created_before): maybe_delete_a_numbered_dir(path) diff --git a/testing/example_scripts/README.rst b/testing/example_scripts/README.rst index 97d0fda5c5d..324673443a3 100644 --- a/testing/example_scripts/README.rst +++ b/testing/example_scripts/README.rst @@ -2,7 +2,7 @@ Example test scripts ===================== -The files in this folder are not direct tests, but rather example test suites that demonstrate certain issues/behaviours. +The files in this directory are not direct tests, but rather example test suites that demonstrate certain issues/behaviours. In the future we will move part of the content of the acceptance tests here in order to have directly testable code instead of writing out things and then running them in nested pytest sessions/subprocesses. diff --git a/testing/plugins_integration/README.rst b/testing/plugins_integration/README.rst index 8f027c3bd35..7d813c5026e 100644 --- a/testing/plugins_integration/README.rst +++ b/testing/plugins_integration/README.rst @@ -1,4 +1,4 @@ -This folder contains tests and support files for smoke testing popular plugins against the current pytest version. +This directory contains tests and support files for smoke testing popular plugins against the current pytest version. The objective is to gauge if any intentional or unintentional changes in pytest break plugins. diff --git a/testing/test_collection.py b/testing/test_collection.py index 39753d80cac..f83bfd9a712 100644 --- a/testing/test_collection.py +++ b/testing/test_collection.py @@ -1659,7 +1659,7 @@ def test_check(): result.stdout.fnmatch_lines(["* 1 passed in *"]) def setup_conftest_and_foo(self, pytester: Pytester) -> None: - """Setup a tests folder to be used to test if modules in that folder can be imported + """Setup a tests directory to be used to test if modules in that directory can be imported due to side-effects of --import-mode or not.""" pytester.makepyfile( **{ @@ -1676,14 +1676,14 @@ def test_check(): ) def test_modules_importable_as_side_effect(self, pytester: Pytester) -> None: - """In import-modes `prepend` and `append`, we are able to import modules from folders + """In import-modes `prepend` and `append`, we are able to import modules from directories containing conftest.py files due to the side effect of changing sys.path.""" self.setup_conftest_and_foo(pytester) result = pytester.runpytest("-v", "--import-mode=prepend") result.stdout.fnmatch_lines(["* 1 passed in *"]) def test_modules_not_importable_as_side_effect(self, pytester: Pytester) -> None: - """In import-mode `importlib`, modules in folders containing conftest.py are not + """In import-mode `importlib`, modules in directories containing conftest.py are not importable, as don't change sys.path or sys.modules as side effect of importing the conftest.py file. """ diff --git a/testing/test_pathlib.py b/testing/test_pathlib.py index 1dec3c6ec78..be20f3fea48 100644 --- a/testing/test_pathlib.py +++ b/testing/test_pathlib.py @@ -1177,24 +1177,24 @@ def test_import_path_imports_correct_file( # Create another x.py module, but in some subdirectories to ensure it is not # accessible from sys.path. - x_in_sub_folder = pytester.path / "a/b/x.py" - x_in_sub_folder.parent.mkdir(parents=True) - x_in_sub_folder.write_text("X = 'a/b/x'", encoding="ascii") + x_in_sub_dir = pytester.path / "a/b/x.py" + x_in_sub_dir.parent.mkdir(parents=True) + x_in_sub_dir.write_text("X = 'a/b/x'", encoding="ascii") # Import our x.py module from the subdirectories. # The 'x.py' module from sys.path was not imported for sure because # otherwise we would get an AssertionError. mod = import_path( - x_in_sub_folder, + x_in_sub_dir, mode=ImportMode.importlib, root=pytester.path, consider_namespace_packages=ns_param, ) - assert mod.__file__ and Path(mod.__file__) == x_in_sub_folder + assert mod.__file__ and Path(mod.__file__) == x_in_sub_dir assert mod.X == "a/b/x" mod2 = import_path( - x_in_sub_folder, + x_in_sub_dir, mode=ImportMode.importlib, root=pytester.path, consider_namespace_packages=ns_param, diff --git a/testing/test_tmpdir.py b/testing/test_tmpdir.py index 363172110d3..12891d81488 100644 --- a/testing/test_tmpdir.py +++ b/testing/test_tmpdir.py @@ -450,10 +450,10 @@ def test_cleanup_ignores_symlink(self, tmp_path): self._do_cleanup(tmp_path) def test_removal_accepts_lock(self, tmp_path): - folder = make_numbered_dir(root=tmp_path, prefix=self.PREFIX) - create_cleanup_lock(folder) - maybe_delete_a_numbered_dir(folder) - assert folder.is_dir() + dir = make_numbered_dir(root=tmp_path, prefix=self.PREFIX) + create_cleanup_lock(dir) + maybe_delete_a_numbered_dir(dir) + assert dir.is_dir() class TestRmRf: From eb0061b74e730a9ac38adc591a8f12312300d4bc Mon Sep 17 00:00:00 2001 From: jxramos Date: Sun, 18 Jan 2026 12:38:58 -0800 Subject: [PATCH 138/307] Update changelog to state the removal of the `pytest_cmdline_preparse` hook (#14124) --- doc/en/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index b4e5cee694e..2133c1b33e3 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -2805,6 +2805,7 @@ Breaking Changes - `#8246 `_: ``--version`` now writes version information to ``stdout`` rather than ``stderr``. +- `#8592 `_: The ``pytest_cmdline_preparse`` hook has been removed following its deprecation. See :ref:`the deprecation note ` for more details. - `#8733 `_: Drop a workaround for `pyreadline `__ that made it work with ``--pdb``. From 27469b99c7e220a8a143fa8aabbaf08e023b5f97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jan 2026 07:18:00 +0100 Subject: [PATCH 139/307] build(deps): Bump anyio[trio] in /testing/plugins_integration (#14131) Bumps [anyio[trio]](https://github.com/agronholm/anyio) from 4.12.0 to 4.12.1. - [Release notes](https://github.com/agronholm/anyio/releases) - [Commits](https://github.com/agronholm/anyio/compare/4.12.0...4.12.1) --- updated-dependencies: - dependency-name: anyio[trio] dependency-version: 4.12.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index 9797ee83f57..e858904b452 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,4 +1,4 @@ -anyio[trio]==4.12.0 +anyio[trio]==4.12.1 django==6.0 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 From 68cb37e58b32e6ef9d0f0decfa87f3bb31d65d89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:32:12 +0100 Subject: [PATCH 140/307] build(deps): Bump django in /testing/plugins_integration (#14132) Bumps [django](https://github.com/django/django) from 6.0 to 6.0.1. - [Commits](https://github.com/django/django/compare/6.0...6.0.1) --- updated-dependencies: - dependency-name: django dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index e858904b452..dfd95639564 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.12.1 -django==6.0 +django==6.0.1 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 From 9650b4c5b4d1cb129fe1d2f09ebc5c6cd7cb95d0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 00:07:07 +0100 Subject: [PATCH 141/307] [pre-commit.ci] pre-commit autoupdate (#14136) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.11 → v0.14.13](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.11...v0.14.13) - [github.com/woodruffw/zizmor-pre-commit: v1.20.0 → v1.22.0](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.20.0...v1.22.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b6ac238aca8..f65179eb686 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.11" + rev: "v0.14.13" hooks: - id: ruff-check args: ["--fix"] @@ -13,7 +13,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.20.0 + rev: v1.22.0 hooks: - id: zizmor args: ["--fix", "--no-progress"] From 374ff2ea60c7be3ff1cc5c76212d1f51c5469894 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 25 Jan 2026 06:54:32 +0000 Subject: [PATCH 142/307] [automated] Update plugin list (#14141) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 170 +++++++++++++++++++------------ 1 file changed, 105 insertions(+), 65 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index fc769913f23..3dbed1cacbf 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =3.5.0) :pypi:`pytest-adf-azure-identity` Pytest plugin for writing Azure Data Factory integration tests Mar 06, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-ads-testplan` Azure DevOps Test Case reporting for pytest tests Sep 15, 2022 N/A N/A + :pypi:`pytest-adversarial` Generate adversarial pytest tests using LLM Jan 22, 2026 N/A pytest>=7.0.0 :pypi:`pytest-affected` Nov 06, 2023 N/A N/A :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Jan 10, 2026 3 - Alpha pytest>=8.0.0 @@ -86,7 +87,7 @@ This list contains 1819 plugins. :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 - :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Dec 02, 2025 5 - Production/Stable pytest>=6 + :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Jan 23, 2026 5 - Production/Stable pytest>=6 :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A @@ -105,7 +106,7 @@ This list contains 1819 plugins. :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 11, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 23, 2026 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 @@ -184,7 +185,7 @@ This list contains 1819 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 15, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 23, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -211,7 +212,7 @@ This list contains 1819 plugins. :pypi:`pytest-bonsai` Apr 08, 2025 N/A pytest>=6 :pypi:`pytest-boost-xml` Plugin for pytest to generate boost xml reports Nov 30, 2022 4 - Beta N/A :pypi:`pytest-bootstrap` Mar 04, 2022 N/A N/A - :pypi:`pytest-boto-mock` Thin-wrapper around the mock package for easier use with pytest Jul 16, 2024 5 - Production/Stable pytest>=8.2.0 + :pypi:`pytest-boto-mock` Thin-wrapper around the mock package for easier use with pytest Jan 20, 2026 5 - Production/Stable pytest>=8.2.0 :pypi:`pytest-bpdb` A py.test plug-in to enable drop to bpdb debugger on test failure. Jan 19, 2015 2 - Pre-Alpha N/A :pypi:`pytest-bq` BigQuery fixtures and fixture factories for Pytest. May 08, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-bravado` Pytest-bravado automatically generates from OpenAPI specification client fixtures. Feb 15, 2022 N/A N/A @@ -287,6 +288,7 @@ This list contains 1819 plugins. :pypi:`pytest-ckan` Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 Apr 28, 2020 4 - Beta pytest :pypi:`pytest-clarity` A plugin providing an alternative, colourful diff output for failing assertions. Jun 11, 2021 N/A N/A :pypi:`pytest-class-fixtures` Class as PyTest fixtures (and BDD steps) Nov 15, 2024 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-claude-agent-sdk` Use Claude Code in your pytests, or pytest your own Claude Code agents — or both Jan 19, 2026 3 - Alpha pytest>=6.0 :pypi:`pytest-cldf` Easy quality control for CLDF datasets using pytest Nov 07, 2022 N/A pytest (>=3.6) :pypi:`pytest-clean-database` A pytest plugin that cleans your database up after every test. Mar 14, 2025 3 - Alpha pytest<9,>=7.0 :pypi:`pytest-cleanslate` Collects and executes pytest tests separately Apr 10, 2025 N/A pytest @@ -309,7 +311,7 @@ This list contains 1819 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Dec 06, 2025 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Jan 22, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -322,6 +324,7 @@ This list contains 1819 plugins. :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A :pypi:`pytest-collect-interface-info-plugin` Get executed interface information in pytest interface automation framework Sep 25, 2023 4 - Beta N/A + :pypi:`pytest-collect-markers` A pytest plugin to collect and output test markers to JSON Jan 24, 2026 N/A pytest>=7.0.0 :pypi:`pytest-collector` Python package for collecting pytest. Aug 02, 2022 N/A pytest (>=7.0,<8.0) :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Jan 15, 2026 5 - Production/Stable pytest>=9.0.1 @@ -383,7 +386,7 @@ This list contains 1819 plugins. :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 :pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A - :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Jan 05, 2026 4 - Beta pytest + :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Jan 20, 2026 4 - Beta pytest :pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest :pypi:`pytest-datadir` pytest plugin for test data directories and files Jul 30, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1) @@ -408,7 +411,7 @@ This list contains 1819 plugins. :pypi:`pytest-dbt-adapter` A pytest plugin for testing dbt adapter plugins Nov 24, 2021 N/A pytest (<7,>=6) :pypi:`pytest-dbt-conventions` A pytest plugin for linting a dbt project's conventions Mar 02, 2022 N/A pytest (>=6.2.5,<7.0.0) :pypi:`pytest-dbt-core` Pytest extension for dbt. Jun 04, 2024 N/A pytest>=6.2.5; extra == "test" - :pypi:`pytest-dbt-duckdb` Fearless testing for dbt models, powered by DuckDB. Oct 28, 2025 4 - Beta pytest>=8.3.4 + :pypi:`pytest-dbt-duckdb` Fearless testing for dbt models, powered by DuckDB. Jan 23, 2026 4 - Beta pytest>=8.3.4 :pypi:`pytest-dbt-postgres` Pytest tooling to unittest DBT & Postgres models Sep 03, 2024 N/A pytest<9.0.0,>=8.3.2 :pypi:`pytest-dbus-notification` D-BUS notifications for pytest results. Mar 05, 2014 5 - Production/Stable N/A :pypi:`pytest-dbx` Pytest plugin to run unit tests for dbx (Databricks CLI extensions) related code Nov 29, 2022 N/A pytest (>=7.1.3,<8.0.0) @@ -669,7 +672,7 @@ This list contains 1819 plugins. :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 05, 2026 N/A pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 23, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Jan 13, 2026 N/A pytest>=9.0.2 @@ -681,7 +684,7 @@ This list contains 1819 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Jan 05, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer Jan 21, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -769,7 +772,7 @@ This list contains 1819 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 17, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 24, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -778,7 +781,7 @@ This list contains 1819 plugins. :pypi:`pytest-hoverfly` Simplify working with Hoverfly from pytest Jan 30, 2023 N/A pytest (>=5.0) :pypi:`pytest-hoverfly-wrapper` Integrates the Hoverfly HTTP proxy into Pytest Feb 27, 2023 5 - Production/Stable pytest (>=3.7.0) :pypi:`pytest-hpfeeds` Helpers for testing hpfeeds in your python project Feb 28, 2023 4 - Beta pytest (>=6.2.4,<7.0.0) - :pypi:`pytest-html` pytest plugin for generating HTML reports Nov 07, 2023 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-html` pytest plugin for generating HTML reports Jan 19, 2026 5 - Production/Stable pytest>=7 :pypi:`pytest-html5` the best report for pytest Dec 18, 2025 N/A N/A :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 @@ -810,7 +813,7 @@ This list contains 1819 plugins. :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A - :pypi:`pytest-human` A beautiful nested pytest HTML test report Dec 07, 2025 4 - Beta pytest>=8 + :pypi:`pytest-human` A beautiful nested pytest HTML test report Jan 20, 2026 4 - Beta pytest>=8 :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 @@ -863,7 +866,7 @@ This list contains 1819 plugins. :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Dec 22, 2025 N/A pytest + :pypi:`pytest-ipywidgets` Jan 21, 2026 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Jan 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 @@ -951,7 +954,7 @@ This list contains 1819 plugins. :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 14, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest @@ -970,7 +973,7 @@ This list contains 1819 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Dec 11, 2025 5 - Production/Stable pytest==9.0.1 + :pypi:`pytest-logikal` Common testing environment Jan 21, 2026 5 - Production/Stable pytest==9.0.2 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -1013,7 +1016,7 @@ This list contains 1819 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 12, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 20, 2026 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1090,6 +1093,7 @@ This list contains 1819 plugins. :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) + :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Jan 23, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-neos` Pytest plugin for neos Sep 10, 2024 5 - Production/Stable pytest<8.0,>=7.2; extra == "dev" :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Nov 03, 2025 N/A N/A :pypi:`pytest-netdut` "Automated software testing for switches using pytest" Oct 09, 2025 N/A pytest>=3.5.0 @@ -1100,7 +1104,7 @@ This list contains 1819 plugins. :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) - :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Jan 09, 2026 N/A pytest<9.0.0,>=8.2.0 + :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Jan 23, 2026 N/A pytest<9.0.0,>=8.2.0 :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A @@ -1135,7 +1139,7 @@ This list contains 1819 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` Jan 17, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Jan 24, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1221,10 +1225,10 @@ This list contains 1819 plugins. :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Dec 05, 2025 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Jan 18, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A - :pypi:`pytest-pogo` Pytest plugin for pogo-migrate May 05, 2025 4 - Beta pytest<9,>=7 + :pypi:`pytest-pogo` Pytest plugin for pogo-migrate Jan 20, 2026 4 - Beta pytest>=7 :pypi:`pytest-pointers` Pytest plugin to define functions you test with special marks for better navigation and reports Dec 26, 2022 N/A N/A :pypi:`pytest-pokie` Pokie plugin for pytest Oct 19, 2023 5 - Production/Stable N/A :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A @@ -1239,7 +1243,7 @@ This list contains 1819 plugins. :pypi:`pytest-porcochu` Show surprise when tests are passing Nov 28, 2024 5 - Production/Stable N/A :pypi:`pytest-portion` Select a portion of the collected tests Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-postgres` Run PostgreSQL in Docker container in Pytest. Mar 22, 2020 N/A pytest - :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. May 17, 2025 5 - Production/Stable pytest>=7.2 + :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. Jan 23, 2026 5 - Production/Stable pytest>=8.2 :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Dec 29, 2025 3 - Alpha pytest @@ -1268,7 +1272,7 @@ This list contains 1819 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Jan 13, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Jan 23, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1370,7 +1374,7 @@ This list contains 1819 plugins. :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Dec 02, 2025 N/A pytest>=4.6.10 :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A - :pypi:`pytest-req` pytest requests plugin Dec 09, 2025 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-req` pytest requests plugin Jan 19, 2026 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-reqcov` A pytest plugin for requirement coverage tracking Jul 04, 2025 3 - Alpha pytest>=6.0 :pypi:`pytest-reqs` pytest plugin to check pinned requirements May 12, 2019 N/A pytest (>=2.4.2) :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) @@ -1451,7 +1455,7 @@ This list contains 1819 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 20, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1464,7 +1468,7 @@ This list contains 1819 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 16, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 20, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1501,7 +1505,7 @@ This list contains 1819 plugins. :pypi:`pytest-simplehttpserver` Simple pytest fixture to spin up an HTTP server Jun 24, 2021 4 - Beta N/A :pypi:`pytest-simple-plugin` Simple pytest plugin Nov 27, 2019 N/A N/A :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest - :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Dec 21, 2025 4 - Beta pytest<9.0.0,>=8.3.5 + :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 @@ -1549,11 +1553,12 @@ This list contains 1819 plugins. :pypi:`pytest-spec` Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION. Oct 08, 2025 N/A pytest; extra == "test" :pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0 :pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7 - :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Apr 13, 2024 4 - Beta pytest>=8.1.1 + :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Jan 21, 2026 4 - Beta pytest>=8.1.1 :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Jan 01, 2024 N/A N/A :pypi:`pytest-splinter` Splinter plugin for pytest testing framework Sep 09, 2022 6 - Mature pytest (>=3.0.0) :pypi:`pytest-splinter4` Pytest plugin for the splinter automation library Feb 01, 2024 6 - Mature pytest >=8.0.0 :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Oct 16, 2024 4 - Beta pytest<9,>=5 + :pypi:`pytest-split-ct` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 23, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-split-ext` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Sep 23, 2023 4 - Beta pytest (>=5,<8) :pypi:`pytest-splitio` Split.io SDK integration for e2e tests Sep 22, 2020 N/A pytest (<7,>=5.0) :pypi:`pytest-split-ng` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 05, 2026 4 - Beta pytest<10,>=5 @@ -1638,7 +1643,7 @@ This list contains 1819 plugins. :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Jan 03, 2026 4 - Beta pytest>=7 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Jan 22, 2026 4 - Beta pytest>=7 :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A @@ -1727,7 +1732,7 @@ This list contains 1819 plugins. :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A :pypi:`pytest-twisted` A twisted plugin for pytest. Sep 10, 2024 5 - Production/Stable pytest>=2.3 - :pypi:`pytest-ty` A pytest plugin to run the ty type checker Oct 10, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-ty` A pytest plugin to run the ty type checker Jan 19, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-typechecker` Run type checkers on specified test files Feb 04, 2022 N/A pytest (>=6.2.5,<7.0.0) :pypi:`pytest-typed-schema-shot` Pytest plugin for automatic JSON Schema generation and validation from examples Jun 14, 2025 N/A pytest :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A @@ -1949,6 +1954,13 @@ This list contains 1819 plugins. Azure DevOps Test Case reporting for pytest tests + :pypi:`pytest-adversarial` + *last release*: Jan 22, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0 + + Generate adversarial pytest tests using LLM + :pypi:`pytest-affected` *last release*: Nov 06, 2023, *status*: N/A, @@ -2223,7 +2235,7 @@ This list contains 1819 plugins. Pytest plugin to allow use of Annotated in tests to resolve fixtures :pypi:`pytest-ansible` - *last release*: Dec 02, 2025, + *last release*: Jan 23, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6 @@ -2356,7 +2368,7 @@ This list contains 1819 plugins. Pytest plugin for appium :pypi:`pytest-approval` - *last release*: Jan 11, 2026, + *last release*: Jan 23, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -2909,7 +2921,7 @@ This list contains 1819 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Jan 15, 2026, + *last release*: Jan 23, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3098,7 +3110,7 @@ This list contains 1819 plugins. :pypi:`pytest-boto-mock` - *last release*: Jul 16, 2024, + *last release*: Jan 20, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.2.0 @@ -3629,6 +3641,13 @@ This list contains 1819 plugins. Class as PyTest fixtures (and BDD steps) + :pypi:`pytest-claude-agent-sdk` + *last release*: Jan 19, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=6.0 + + Use Claude Code in your pytests, or pytest your own Claude Code agents — or both + :pypi:`pytest-cldf` *last release*: Nov 07, 2022, *status*: N/A, @@ -3784,7 +3803,7 @@ This list contains 1819 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Dec 06, 2025, + *last release*: Jan 22, 2026, *status*: 4 - Beta, *requires*: pytest @@ -3874,6 +3893,13 @@ This list contains 1819 plugins. Get executed interface information in pytest interface automation framework + :pypi:`pytest-collect-markers` + *last release*: Jan 24, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0 + + A pytest plugin to collect and output test markers to JSON + :pypi:`pytest-collector` *last release*: Aug 02, 2022, *status*: N/A, @@ -4302,7 +4328,7 @@ This list contains 1819 plugins. Useful functions for managing data for pytest fixtures :pypi:`pytest-databases` - *last release*: Jan 05, 2026, + *last release*: Jan 20, 2026, *status*: 4 - Beta, *requires*: pytest @@ -4477,7 +4503,7 @@ This list contains 1819 plugins. Pytest extension for dbt. :pypi:`pytest-dbt-duckdb` - *last release*: Oct 28, 2025, + *last release*: Jan 23, 2026, *status*: 4 - Beta, *requires*: pytest>=8.3.4 @@ -6304,7 +6330,7 @@ This list contains 1819 plugins. Continuously runs your tests to detect flaky tests :pypi:`pytest-flakefighters` - *last release*: Jan 05, 2026, + *last release*: Jan 23, 2026, *status*: N/A, *requires*: pytest>=6.2.0 @@ -6388,7 +6414,7 @@ This list contains 1819 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Jan 05, 2026, + *last release*: Jan 21, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -7004,7 +7030,7 @@ This list contains 1819 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Jan 17, 2026, + *last release*: Jan 24, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7067,9 +7093,9 @@ This list contains 1819 plugins. Helpers for testing hpfeeds in your python project :pypi:`pytest-html` - *last release*: Nov 07, 2023, + *last release*: Jan 19, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=7.0.0 + *requires*: pytest>=7 pytest plugin for generating HTML reports @@ -7291,7 +7317,7 @@ This list contains 1819 plugins. Visualise PyTest status via your Phillips Hue lights :pypi:`pytest-human` - *last release*: Dec 07, 2025, + *last release*: Jan 20, 2026, *status*: 4 - Beta, *requires*: pytest>=8 @@ -7662,7 +7688,7 @@ This list contains 1819 plugins. Pytest plugin to run tests in Jupyter Notebooks :pypi:`pytest-ipywidgets` - *last release*: Dec 22, 2025, + *last release*: Jan 21, 2026, *status*: N/A, *requires*: pytest @@ -8278,7 +8304,7 @@ This list contains 1819 plugins. A pytest plugin to evaluate/benchmark LLM prompts :pypi:`pytest-llm-report` - *last release*: Jan 14, 2026, + *last release*: Jan 21, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -8411,9 +8437,9 @@ This list contains 1819 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Dec 11, 2025, + *last release*: Jan 21, 2026, *status*: 5 - Production/Stable, - *requires*: pytest==9.0.1 + *requires*: pytest==9.0.2 Common testing environment @@ -8712,7 +8738,7 @@ This list contains 1819 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Jan 12, 2026, + *last release*: Jan 20, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -9250,6 +9276,13 @@ This list contains 1819 plugins. pytest-neo is a plugin for pytest that shows tests like screen of Matrix. + :pypi:`pytest-neon` + *last release*: Jan 23, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + Pytest plugin for Neon database branch isolation in tests + :pypi:`pytest-neos` *last release*: Sep 10, 2024, *status*: 5 - Production/Stable, @@ -9321,7 +9354,7 @@ This list contains 1819 plugins. pytest ngs fixtures :pypi:`pytest-nhsd-apim` - *last release*: Jan 09, 2026, + *last release*: Jan 23, 2026, *status*: N/A, *requires*: pytest<9.0.0,>=8.2.0 @@ -9566,11 +9599,11 @@ This list contains 1819 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Jan 17, 2026, + *last release*: Jan 24, 2026, *status*: N/A, *requires*: pytest>=7.0.0 - + \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth :pypi:`pytest-openfiles` *last release*: Jun 05, 2024, @@ -10168,7 +10201,7 @@ This list contains 1819 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Dec 05, 2025, + *last release*: Jan 18, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -10189,9 +10222,9 @@ This list contains 1819 plugins. :pypi:`pytest-pogo` - *last release*: May 05, 2025, + *last release*: Jan 20, 2026, *status*: 4 - Beta, - *requires*: pytest<9,>=7 + *requires*: pytest>=7 Pytest plugin for pogo-migrate @@ -10294,9 +10327,9 @@ This list contains 1819 plugins. Run PostgreSQL in Docker container in Pytest. :pypi:`pytest-postgresql` - *last release*: May 17, 2025, + *last release*: Jan 23, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=7.2 + *requires*: pytest>=8.2 Postgresql fixtures and fixture factories for Pytest. @@ -10497,7 +10530,7 @@ This list contains 1819 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Jan 13, 2026, + *last release*: Jan 23, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -11211,7 +11244,7 @@ This list contains 1819 plugins. Pytest Repo Structure :pypi:`pytest-req` - *last release*: Dec 09, 2025, + *last release*: Jan 19, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -11778,7 +11811,7 @@ This list contains 1819 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Jan 16, 2026, + *last release*: Jan 20, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -11869,7 +11902,7 @@ This list contains 1819 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Jan 16, 2026, + *last release*: Jan 20, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12128,7 +12161,7 @@ This list contains 1819 plugins. simple-settings plugin for pytest :pypi:`pytest-simplified` - *last release*: Dec 21, 2025, + *last release*: Jan 19, 2026, *status*: 4 - Beta, *requires*: pytest<9.0.0,>=8.3.5 @@ -12464,7 +12497,7 @@ This list contains 1819 plugins. Modern benchmarking library for python with pytest integration. :pypi:`pytest-sphinx` - *last release*: Apr 13, 2024, + *last release*: Jan 21, 2026, *status*: 4 - Beta, *requires*: pytest>=8.1.1 @@ -12498,6 +12531,13 @@ This list contains 1819 plugins. Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. + :pypi:`pytest-split-ct` + *last release*: Jan 23, 2026, + *status*: 4 - Beta, + *requires*: pytest<10,>=5 + + Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. + :pypi:`pytest-split-ext` *last release*: Sep 23, 2023, *status*: 4 - Beta, @@ -13087,7 +13127,7 @@ This list contains 1819 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. :pypi:`pytest-testinel` - *last release*: Jan 03, 2026, + *last release*: Jan 22, 2026, *status*: 4 - Beta, *requires*: pytest>=7 @@ -13710,8 +13750,8 @@ This list contains 1819 plugins. A twisted plugin for pytest. :pypi:`pytest-ty` - *last release*: Oct 10, 2025, - *status*: 3 - Alpha, + *last release*: Jan 19, 2026, + *status*: 4 - Beta, *requires*: pytest>=7.0.0 A pytest plugin to run the ty type checker From e95a843a5dbf8af618d0714705bbf97dfdb04044 Mon Sep 17 00:00:00 2001 From: Charles-Meldhine Madi Mnemoi <63333367+cmnemoi@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:01:35 +0100 Subject: [PATCH 143/307] Fix pytest.approx to correctly take account Mapping keys order to compare them (#13815) This fixes an issue with `pytest.approx` where the error message incorrectly reported all elements as mismatched when comparing mappings with different key orders, even when only some values differed. The original code paired values by position rather than by key. This caused incorrect mismatch reporting when dictionary keys were in different orders. Fixes #12444 --- changelog/12444.bugfix.rst | 1 + src/_pytest/python_api.py | 7 +++---- testing/python/approx.py | 40 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 changelog/12444.bugfix.rst diff --git a/changelog/12444.bugfix.rst b/changelog/12444.bugfix.rst new file mode 100644 index 00000000000..146cfc7ab24 --- /dev/null +++ b/changelog/12444.bugfix.rst @@ -0,0 +1 @@ +Fixed :func:`pytest.approx` which now correctly takes account Mapping keys order to compare them. diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index 1e389eb0663..bab70aa4a8c 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -242,7 +242,7 @@ def _repr_compare(self, other_side: Mapping[object, float]) -> list[str]: f"Lengths: {len(self.expected)} and {len(other_side)}", ] - if set(self.expected.keys()) != set(other_side.keys()): + if self.expected.keys() != other_side.keys(): return [ "comparison failed.", f"Mappings has different keys: expected {self.expected.keys()} but got {other_side.keys()}", @@ -256,9 +256,8 @@ def _repr_compare(self, other_side: Mapping[object, float]) -> list[str]: max_abs_diff = -math.inf max_rel_diff = -math.inf different_ids = [] - for (approx_key, approx_value), other_value in zip( - approx_side_as_map.items(), other_side.values(), strict=True - ): + for approx_key, approx_value in approx_side_as_map.items(): + other_value = other_side[approx_key] if approx_value != other_value: if approx_value.expected is not None and other_value is not None: try: diff --git a/testing/python/approx.py b/testing/python/approx.py index f870b9bd4d8..481df80565c 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -1062,6 +1062,46 @@ def test_approx_dicts_with_mismatch_on_keys(self) -> None: ): assert actual == approx(expected) + def test_approx_on_unordered_mapping_with_mismatch( + self, pytester: Pytester + ) -> None: + """https://github.com/pytest-dev/pytest/issues/12444""" + pytester.makepyfile( + """ + import pytest + + def test_approx_on_unordered_mapping_with_mismatch(): + expected = {"a": 1, "b": 2, "c": 3, "d": 4} + actual = {"d": 4, "c": 5, "a": 8, "b": 2} + assert actual == pytest.approx(expected) + """ + ) + result = pytester.runpytest() + result.assert_outcomes(failed=1) + result.stdout.fnmatch_lines( + [ + "*comparison failed.**Mismatched elements: 2 / 4:*", + "*Max absolute difference: 7*", + "*Index | Obtained | Expected *", + "* a * | 8 * | 1 *", + "* c * | 5 * | 3 *", + ] + ) + + def test_approx_on_unordered_mapping_matching(self, pytester: Pytester) -> None: + """https://github.com/pytest-dev/pytest/issues/12444""" + pytester.makepyfile( + """ + import pytest + def test_approx_on_unordered_mapping_matching(): + expected = {"a": 1, "b": 2, "c": 3, "d": 4} + actual = {"d": 4, "c": 3, "a": 1, "b": 2} + assert actual == pytest.approx(expected) + """ + ) + result = pytester.runpytest() + result.assert_outcomes(passed=1) + class MyVec3: # incomplete """sequence like""" From 14ac82d7b6678459d2bc4e5a35a3f744f0a4c483 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 07:31:10 +0100 Subject: [PATCH 144/307] build(deps): Bump actions/checkout from 6.0.1 to 6.0.2 (#14144) Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 6 +++--- .github/workflows/doc-check-links.yml | 2 +- .github/workflows/prepare-release-pr.yml | 2 +- .github/workflows/test.yml | 4 ++-- .github/workflows/update-plugin-list.yml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index be0519a16e2..5f04f0c5fd8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: attestations: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -42,7 +42,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -99,7 +99,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: true diff --git a/.github/workflows/doc-check-links.yml b/.github/workflows/doc-check-links.yml index 029b4dc699f..91dbe5a2f20 100644 --- a/.github/workflows/doc-check-links.yml +++ b/.github/workflows/doc-check-links.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/prepare-release-pr.yml b/.github/workflows/prepare-release-pr.yml index 1c0e869a512..4bf573179b2 100644 --- a/.github/workflows/prepare-release-pr.yml +++ b/.github/workflows/prepare-release-pr.yml @@ -27,7 +27,7 @@ jobs: pull-requests: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 # persist-credentials is needed in order for us to push the release branch. diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d9dca4964ae..bbb2174cacf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,7 +37,7 @@ jobs: package: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -251,7 +251,7 @@ jobs: continue-on-error: ${{ matrix.xfail && true || false }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index bc1e1dd5923..4828d315040 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false From e7ff0f6e7b6ba65bd3f9ac4d6119f14601cb3408 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sat, 17 Jan 2026 17:08:05 +0100 Subject: [PATCH 145/307] cacheprovider: simplify cache directory creation Refactor _ensure_cache_dir_and_supporting_files to use a dedicated _make_cachedir function that atomically creates the cache directory with its supporting files (README.md, .gitignore, CACHEDIR.TAG). - Store all file contents as bytes in CACHEDIR_FILES dict - Use tempfile.mkdtemp + shutil.rmtree instead of TemporaryDirectory - Simplify cleanup logic for race conditions Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4 --- src/_pytest/cacheprovider.py | 90 +++++++++++++++++------------------ testing/test_cacheprovider.py | 4 +- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/src/_pytest/cacheprovider.py b/src/_pytest/cacheprovider.py index 4383f105af6..eb8cb59d3ef 100644 --- a/src/_pytest/cacheprovider.py +++ b/src/_pytest/cacheprovider.py @@ -12,6 +12,7 @@ import json import os from pathlib import Path +import shutil import tempfile from typing import final @@ -33,7 +34,8 @@ from _pytest.reports import TestReport -README_CONTENT = """\ +CACHEDIR_FILES: dict[str, bytes] = { + "README.md": b"""\ # pytest cache directory # This directory contains data from the pytest's cache plugin, @@ -42,14 +44,48 @@ **Do not** commit this to version control. See [the docs](https://docs.pytest.org/en/stable/how-to/cache.html) for more information. -""" - -CACHEDIR_TAG_CONTENT = b"""\ +""", + ".gitignore": b"# Created by pytest automatically.\n*\n", + "CACHEDIR.TAG": b"""\ Signature: 8a477f597d28d172789f06886806bc55 # This file is a cache directory tag created by pytest. # For information about cache directory tags, see: # https://bford.info/cachedir/spec.html -""" +""", +} + + +def _make_cachedir(target: Path) -> None: + """Create the pytest cache directory atomically with supporting files. + + Creates a temporary directory with README.md, .gitignore, and CACHEDIR.TAG, + then atomically renames it to the target location. If another process wins + the race, the temporary directory is cleaned up. + """ + target.parent.mkdir(parents=True, exist_ok=True) + path = Path(tempfile.mkdtemp(prefix="pytest-cache-files-", dir=target.parent)) + try: + # Reset permissions to the default, see #12308. + # Note: there's no way to get the current umask atomically, eek. + umask = os.umask(0o022) + os.umask(umask) + path.chmod(0o777 - umask) + + for name, content in CACHEDIR_FILES.items(): + path.joinpath(name).write_bytes(content) + + path.rename(target) + except OSError as e: + # If 2 concurrent pytests both race to the rename, the loser + # gets "Directory not empty" from the rename. In this case, + # everything is handled so just continue after cleanup. + # On Windows, the error is a FileExistsError which translates to EEXIST. + shutil.rmtree(path, ignore_errors=True) + if e.errno not in (errno.ENOTEMPTY, errno.EEXIST): + raise + except BaseException: + shutil.rmtree(path, ignore_errors=True) + raise @final @@ -202,48 +238,8 @@ def set(self, key: str, value: object) -> None: def _ensure_cache_dir_and_supporting_files(self) -> None: """Create the cache dir and its supporting files.""" - if self._cachedir.is_dir(): - return - - self._cachedir.parent.mkdir(parents=True, exist_ok=True) - with tempfile.TemporaryDirectory( - prefix="pytest-cache-files-", - dir=self._cachedir.parent, - ) as newpath: - path = Path(newpath) - - # Reset permissions to the default, see #12308. - # Note: there's no way to get the current umask atomically, eek. - umask = os.umask(0o022) - os.umask(umask) - path.chmod(0o777 - umask) - - with open(path.joinpath("README.md"), "x", encoding="UTF-8") as f: - f.write(README_CONTENT) - with open(path.joinpath(".gitignore"), "x", encoding="UTF-8") as f: - f.write("# Created by pytest automatically.\n*\n") - with open(path.joinpath("CACHEDIR.TAG"), "xb") as f: - f.write(CACHEDIR_TAG_CONTENT) - - try: - path.rename(self._cachedir) - except OSError as e: - # If 2 concurrent pytests both race to the rename, the loser - # gets "Directory not empty" from the rename. In this case, - # everything is handled so just continue (while letting the - # temporary directory be cleaned up). - # On Windows, the error is a FileExistsError which translates to EEXIST. - if e.errno not in (errno.ENOTEMPTY, errno.EEXIST): - raise - else: - # Create a directory in place of the one we just moved so that - # `TemporaryDirectory`'s cleanup doesn't complain. - # - # TODO: pass ignore_cleanup_errors=True when we no longer support python < 3.10. - # See https://github.com/python/cpython/issues/74168. Note that passing - # delete=False would do the wrong thing in case of errors and isn't supported - # until python 3.12. - path.mkdir() + if not self._cachedir.is_dir(): + _make_cachedir(self._cachedir) class LFPluginCollWrapper: diff --git a/testing/test_cacheprovider.py b/testing/test_cacheprovider.py index ca417e86ee5..7d65ef78089 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -1348,13 +1348,13 @@ def test_does_not_create_boilerplate_in_existing_dirs(pytester: Pytester) -> Non def test_cachedir_tag(pytester: Pytester) -> None: """Ensure we automatically create CACHEDIR.TAG file in the pytest_cache directory (#4278).""" from _pytest.cacheprovider import Cache - from _pytest.cacheprovider import CACHEDIR_TAG_CONTENT + from _pytest.cacheprovider import CACHEDIR_FILES config = pytester.parseconfig() cache = Cache.for_config(config, _ispytest=True) cache.set("foo", "bar") cachedir_tag_path = cache._cachedir.joinpath("CACHEDIR.TAG") - assert cachedir_tag_path.read_bytes() == CACHEDIR_TAG_CONTENT + assert cachedir_tag_path.read_bytes() == CACHEDIR_FILES["CACHEDIR.TAG"] def test_clioption_with_cacheshow_and_help(pytester: Pytester) -> None: From 841fe47a88203e7acd9f4ea34893c576aae6eb2d Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sun, 18 Jan 2026 18:05:18 +0100 Subject: [PATCH 146/307] test: add test for _make_cachedir BaseException cleanup Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4.5 --- testing/test_cacheprovider.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/testing/test_cacheprovider.py b/testing/test_cacheprovider.py index 7d65ef78089..35ea85f10f5 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -1360,3 +1360,36 @@ def test_cachedir_tag(pytester: Pytester) -> None: def test_clioption_with_cacheshow_and_help(pytester: Pytester) -> None: result = pytester.runpytest("--cache-show", "--help") assert result.ret == 0 + + +def test_make_cachedir_cleans_up_on_base_exception( + tmp_path: Path, + monkeypatch: MonkeyPatch, +) -> None: + """Ensure _make_cachedir cleans up the temp directory on BaseException. + + When a BaseException (like KeyboardInterrupt) is raised during cache + directory creation, the temporary directory should be cleaned up before + re-raising the exception. + """ + from _pytest.cacheprovider import _make_cachedir + + target = tmp_path / ".pytest_cache" + + def raise_keyboard_interrupt(self: Path, target: Path) -> None: + raise KeyboardInterrupt("simulated interrupt") + + # Patch Path.rename only for the duration of the _make_cachedir call + with monkeypatch.context() as m: + m.setattr(Path, "rename", raise_keyboard_interrupt) + + # Verify the exception is re-raised + with pytest.raises(KeyboardInterrupt, match="simulated interrupt"): + _make_cachedir(target) + + # Verify no temp directories were left behind + temp_dirs = list(tmp_path.glob("pytest-cache-files-*")) + assert temp_dirs == [], f"Temp directories not cleaned up: {temp_dirs}" + + # Verify the target directory was not created + assert not target.exists() From f499184d166f1e003a4c952cb51f7adf2c3069da Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Thu, 29 Jan 2026 15:38:55 +0100 Subject: [PATCH 147/307] cacheprovider: simplify _make_cachedir cleanup with finally Use a single finally block instead of duplicating cleanup logic in separate except blocks. The finally block always runs, ensuring cleanup whether the operation succeeds (rename moves dir away, rmtree is no-op), fails with a race condition (ENOTEMPTY/EEXIST), or any other exception. Co-authored-by: Bruno Oliveira Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4.5 --- src/_pytest/cacheprovider.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/_pytest/cacheprovider.py b/src/_pytest/cacheprovider.py index eb8cb59d3ef..6bcac1ad97a 100644 --- a/src/_pytest/cacheprovider.py +++ b/src/_pytest/cacheprovider.py @@ -80,12 +80,10 @@ def _make_cachedir(target: Path) -> None: # gets "Directory not empty" from the rename. In this case, # everything is handled so just continue after cleanup. # On Windows, the error is a FileExistsError which translates to EEXIST. - shutil.rmtree(path, ignore_errors=True) if e.errno not in (errno.ENOTEMPTY, errno.EEXIST): raise - except BaseException: + finally: shutil.rmtree(path, ignore_errors=True) - raise @final From 3fc824a62cd5f724ff2ae9a3aff721cee7cb4cbf Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Thu, 29 Jan 2026 18:19:19 +0100 Subject: [PATCH 148/307] fix(parametrize): handle trailing comma in string argnames (#719) Make `"arg,"` behave like `("arg",)` by detecting trailing comma and not wrapping tuple values. This allows users to use trailing comma syntax in string argnames for single-parameter parametrize. Fixes #719 Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4.5 --- changelog/719.bugfix.rst | 3 ++ src/_pytest/mark/structures.py | 6 ++- testing/python/metafunc.py | 75 ++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 changelog/719.bugfix.rst diff --git a/changelog/719.bugfix.rst b/changelog/719.bugfix.rst new file mode 100644 index 00000000000..c2063ad0503 --- /dev/null +++ b/changelog/719.bugfix.rst @@ -0,0 +1,3 @@ +Fixed :ref:`@pytest.mark.parametrize ` not unpacking single-element tuple values when using a string argnames with a trailing comma (e.g., ``"arg,"``). + +The trailing comma form now correctly behaves like the tuple form ``("arg",)``, treating argvalues as a list of tuples to unpack. diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 9743f673adc..0fa6e8babba 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -170,8 +170,12 @@ def _parse_parametrize_args( **kwargs, ) -> tuple[Sequence[str], bool]: if isinstance(argnames, str): + # A trailing comma indicates tuple-style: "arg," is equivalent to ("arg",) + # In this case, argvalues should be a list of tuples, not wrapped values. + # See https://github.com/pytest-dev/pytest/issues/719 + has_trailing_comma = argnames.rstrip().endswith(",") argnames = [x.strip() for x in argnames.split(",") if x.strip()] - force_tuple = len(argnames) == 1 + force_tuple = len(argnames) == 1 and not has_trailing_comma else: force_tuple = False return argnames, force_tuple diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index 7217c80c03d..b48de293ede 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -76,6 +76,46 @@ def func(arg1, arg2="qwe"): assert metafunc.function is func assert metafunc.cls is None + def test_parametrize_single_arg_trailing_comma(self) -> None: + """Test that trailing comma in string argnames behaves like tuple argnames. + + Regression test for https://github.com/pytest-dev/pytest/issues/719 + + When using a single argument with: + - "arg" (string, no comma): argvalues is a list of values + - "arg," (string, trailing comma): argvalues is a list of tuples (like tuple form) + - ("arg",) (tuple): argvalues is a list of tuples + """ + + def func(arg): + pass # pragma: no cover + + scenarios = [("a",), ("b",)] + + # Tuple form: argvalues are tuples, unpacked to get the value + metafunc = self.Metafunc(func) + metafunc.parametrize(("arg",), scenarios) + assert metafunc._calls[0].params == {"arg": "a"} + assert metafunc._calls[1].params == {"arg": "b"} + + # String with trailing comma: should behave like tuple form + metafunc = self.Metafunc(func) + metafunc.parametrize("arg,", scenarios) + assert metafunc._calls[0].params == {"arg": "a"} + assert metafunc._calls[1].params == {"arg": "b"} + + # String without comma: argvalues are values directly (tuples are passed as-is) + metafunc = self.Metafunc(func) + metafunc.parametrize("arg", scenarios) + assert metafunc._calls[0].params == {"arg": ("a",)} + assert metafunc._calls[1].params == {"arg": ("b",)} + + # String without comma with plain values: values are used directly + metafunc = self.Metafunc(func) + metafunc.parametrize("arg", ["a", "b"]) + assert metafunc._calls[0].params == {"arg": "a"} + assert metafunc._calls[1].params == {"arg": "b"} + def test_parametrize_error(self) -> None: def func(x, y): pass @@ -1256,6 +1296,41 @@ def test_hello(arg1, arg2): ["*(1, 4)*", "*(1, 5)*", "*(2, 4)*", "*(2, 5)*", "*4 failed*"] ) + def test_parametrize_single_arg_trailing_comma_functional( + self, pytester: Pytester + ) -> None: + """Test that trailing comma in string argnames behaves like tuple argnames. + + Regression test for https://github.com/pytest-dev/pytest/issues/719 + """ + pytester.makepyfile( + """ + import pytest + + scenarios = [('a',), ('b',)] + + @pytest.mark.parametrize(("arg",), scenarios) + def test_tuple_form(arg): + # Tuple argnames: values are unpacked from tuples + assert arg in ('a', 'b') + assert isinstance(arg, str) + + @pytest.mark.parametrize("arg,", scenarios) + def test_string_trailing_comma(arg): + # String with trailing comma: should behave like tuple form + assert arg in ('a', 'b') + assert isinstance(arg, str) + + @pytest.mark.parametrize("arg", scenarios) + def test_string_no_comma(arg): + # String without comma: tuples are passed as-is + assert arg in (('a',), ('b',)) + assert isinstance(arg, tuple) + """ + ) + result = pytester.runpytest("-v") + result.assert_outcomes(passed=6) + def test_parametrize_and_inner_getfixturevalue(self, pytester: Pytester) -> None: p = pytester.makepyfile( """ From 73c379092d581277a2cb95b7be978a9beb2dab3f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 08:03:50 +0100 Subject: [PATCH 149/307] [automated] Update plugin list (#14152) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 234 ++++++++++++++++++++++--------- 1 file changed, 165 insertions(+), 69 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 3dbed1cacbf..339da057bda 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.0.0 :pypi:`pytest-affected` Nov 06, 2023 N/A N/A :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A - :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Jan 10, 2026 3 - Alpha pytest>=8.0.0 + :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Jan 30, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Jan 31, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A @@ -106,7 +107,7 @@ This list contains 1824 plugins. :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 23, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 27, 2026 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 @@ -177,6 +178,7 @@ This list contains 1824 plugins. :pypi:`pytest-bazel` A pytest runner with bazel support Oct 31, 2025 4 - Beta pytest :pypi:`pytest-bdd` BDD for pytest Dec 05, 2024 6 - Mature pytest>=7.0.0 :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) + :pypi:`pytest-bdd-md-report` Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support Jan 31, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Dec 29, 2025 N/A pytest>=7.1.3 :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 @@ -185,7 +187,7 @@ This list contains 1824 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 23, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 30, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -256,7 +258,7 @@ This list contains 1824 plugins. :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Jan 08, 2026 N/A pytest>=8 :pypi:`pytest-celery` Pytest plugin for Celery Jul 30, 2025 5 - Production/Stable N/A :pypi:`pytest-celery-py37` Pytest plugin for Celery (compatible with python 3.7) May 23, 2025 5 - Production/Stable N/A - :pypi:`pytest-celery-utils` Pytest plugin for inspecting Celery task queues in Redis during tests Nov 26, 2025 N/A pytest>=9.0.1 + :pypi:`pytest-celery-utils` Pytest plugin for inspecting Celery task queues in Redis during tests Jan 28, 2026 N/A pytest>=9.0.1 :pypi:`pytest-cfg-fetcher` Pass config options to your unit tests. Feb 26, 2024 N/A N/A :pypi:`pytest-chainmaker` pytest plugin for chainmaker Oct 15, 2021 N/A N/A :pypi:`pytest-chalice` A set of py.test fixtures for AWS Chalice Jul 01, 2020 4 - Beta N/A @@ -295,7 +297,7 @@ This list contains 1824 plugins. :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 - :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Jan 02, 2026 N/A N/A + :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Jan 25, 2026 N/A N/A :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) @@ -311,7 +313,7 @@ This list contains 1824 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Jan 22, 2026 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Jan 30, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -430,6 +432,7 @@ This list contains 1824 plugins. :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-describe` Describe-style plugin for pytest Dec 12, 2025 5 - Production/Stable pytest<10,>=6 + :pypi:`pytest-describe-beautifully` Beautiful terminal and HTML output for pytest-describe. Jan 28, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest @@ -500,7 +503,7 @@ This list contains 1824 plugins. :pypi:`pytest-doctest-import` A simple pytest plugin to import names and add them to the doctest namespace. Nov 13, 2018 4 - Beta pytest (>=3.3.0) :pypi:`pytest-doctest-mkdocstrings` Run pytest --doctest-modules with markdown docstrings in code blocks (\`\`\`) Mar 02, 2024 N/A pytest :pypi:`pytest-doctest-only` A plugin to run only doctest Jul 30, 2025 4 - Beta pytest>=8.3.0 - :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Jan 08, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Jan 26, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-documentary` A simple pytest plugin to generate test documentation Jul 11, 2024 N/A pytest :pypi:`pytest-dogu-report` pytest plugin for dogu report Jul 07, 2023 N/A N/A :pypi:`pytest-dogu-sdk` pytest plugin for the Dogu Dec 14, 2023 N/A N/A @@ -650,6 +653,7 @@ This list contains 1824 plugins. :pypi:`pytest-find-dependencies` A pytest plugin to find dependencies between tests Jul 16, 2025 5 - Production/Stable pytest>=6.2.4 :pypi:`pytest-finer-verdicts` A pytest plugin to treat non-assertion failures as test errors. Jun 18, 2020 N/A pytest (>=5.4.3) :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A + :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A :pypi:`pytest-fixture-collect` A utility to collect pytest fixture file paths. Jul 25, 2025 N/A pytest; extra == "test" @@ -672,7 +676,7 @@ This list contains 1824 plugins. :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 23, 2026 N/A pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 28, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Jan 13, 2026 N/A pytest>=9.0.2 @@ -695,6 +699,7 @@ This list contains 1824 plugins. :pypi:`pytest-forward-compatibility` A pytest plugin to shim pytest commandline options for fowards compatibility Sep 29, 2020 N/A N/A :pypi:`pytest-frappe` Pytest Frappe Plugin - A set of pytest fixtures to test Frappe applications Jul 30, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-freethreaded` pytest plugin for running parallel tests Oct 03, 2024 5 - Production/Stable pytest + :pypi:`pytest-freeze` Pytest plugin to simplify writing freeze tests. Jan 27, 2026 N/A N/A :pypi:`pytest-freezeblaster` Wrap tests with fixtures in freeze_time Oct 13, 2025 N/A pytest>=6.2.5 :pypi:`pytest-freezegun` Wrap tests with fixtures in freeze_time Jul 19, 2020 4 - Beta pytest (>=3.0.0) :pypi:`pytest-freezer` Pytest plugin providing a fixture interface for spulec/freezegun Dec 12, 2024 N/A pytest>=3.6 @@ -735,7 +740,7 @@ This list contains 1824 plugins. :pypi:`pytest-gitlab-fold` Folds output sections in GitLab CI build log Dec 31, 2023 4 - Beta pytest >=2.6.0 :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A - :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jul 20, 2025 4 - Beta pytest<=8.4.1 + :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 @@ -749,6 +754,7 @@ This list contains 1824 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Jan 27, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) @@ -772,7 +778,7 @@ This list contains 1824 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 24, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 31, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -813,11 +819,11 @@ This list contains 1824 plugins. :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A - :pypi:`pytest-human` A beautiful nested pytest HTML test report Jan 20, 2026 4 - Beta pytest>=8 + :pypi:`pytest-human` A beautiful nested pytest HTML test report Jan 25, 2026 4 - Beta pytest>=8 :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Dec 16, 2025 4 - Beta pytest + :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Jan 27, 2026 4 - Beta pytest :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest :pypi:`pytest-idapro` A pytest plugin for idapython. Allows a pytest setup to run tests outside and inside IDA in an automated manner by runnig pytest inside IDA and by mocking idapython api Nov 03, 2018 N/A N/A :pypi:`pytest-idem` A pytest plugin to help with testing idem projects Dec 13, 2023 5 - Production/Stable N/A @@ -835,7 +841,7 @@ This list contains 1824 plugins. :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Dec 29, 2025 4 - Beta pytest~=9.0 + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Jan 29, 2026 4 - Beta pytest~=9.0 :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 @@ -843,7 +849,7 @@ This list contains 1824 plugins. :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest - :pypi:`pytest-inmanta-extensions` Inmanta tests package Nov 04, 2025 5 - Production/Stable N/A + :pypi:`pytest-inmanta-extensions` Inmanta tests package Jan 30, 2026 5 - Production/Stable N/A :pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Nov 19, 2025 5 - Production/Stable N/A :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest @@ -860,7 +866,7 @@ This list contains 1824 plugins. :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Oct 09, 2025 4 - Beta pytest - :pypi:`pytest-invenio` Pytest fixtures for Invenio. Jul 09, 2025 5 - Production/Stable pytest<9.0.0,>=6 + :pypi:`pytest-invenio` Pytest fixtures for Invenio. Jan 27, 2026 5 - Production/Stable pytest<9.0.0,>=6 :pypi:`pytest-involve` Run tests covering a specific file or changeset Feb 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-iovis` A Pytest plugin to enable Jupyter Notebook testing with Papermill Nov 06, 2024 4 - Beta pytest>=7.1.0 :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A @@ -868,7 +874,7 @@ This list contains 1824 plugins. :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest :pypi:`pytest-ipywidgets` Jan 21, 2026 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest - :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Jan 13, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Jan 30, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A @@ -904,6 +910,7 @@ This list contains 1824 plugins. :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest + :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Jan 31, 2026 N/A N/A :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) @@ -953,6 +960,7 @@ This list contains 1824 plugins. :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Jan 31, 2026 3 - Alpha pytest>=8.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 @@ -982,11 +990,11 @@ This list contains 1824 plugins. :pypi:`pytest-lw-realtime-result` Pytest plugin to generate realtime test results to a file Mar 13, 2025 N/A pytest>=3.5.0 :pypi:`pytest-manifest` PyTest plugin for recording and asserting against a manifest file Apr 07, 2025 N/A pytest :pypi:`pytest-manual-marker` pytest marker for marking manual tests Aug 04, 2022 3 - Alpha pytest>=7 - :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Nov 17, 2025 5 - Production/Stable pytest~=8.4 + :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Jan 30, 2026 5 - Production/Stable pytest~=8.4 :pypi:`pytest-mark-count` Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers Nov 13, 2024 4 - Beta pytest>=8.0.0 :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) - :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Apr 09, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Jan 28, 2026 N/A pytest>=7.0.0 :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 10, 2026 N/A pytest>=7.0 :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 @@ -1016,7 +1024,7 @@ This list contains 1824 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 20, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 26, 2026 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1072,7 +1080,7 @@ This list contains 1824 plugins. :pypi:`pytest-mpi-tmweigand` forked pytest plugin to collect information from tests Dec 27, 2025 3 - Alpha pytest :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) - :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Dec 24, 2025 5 - Production/Stable pytest<9; extra == "test" + :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Jan 28, 2026 5 - Production/Stable pytest<10; extra == "test" :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 28, 2025 N/A pytest :pypi:`pytest-multithreading` a pytest plugin for th and concurrent testing Aug 05, 2024 N/A N/A @@ -1085,7 +1093,7 @@ This list contains 1824 plugins. :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Dec 21, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 - :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output. Mar 04, 2024 N/A pytest>=7,<9 + :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Jan 16, 2026 N/A pytest<9.1.0,>=7.0.0; python_version < "3.14" @@ -1093,7 +1101,7 @@ This list contains 1824 plugins. :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) - :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Jan 23, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Jan 29, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-neos` Pytest plugin for neos Sep 10, 2024 5 - Production/Stable pytest<8.0,>=7.2; extra == "dev" :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Nov 03, 2025 N/A N/A :pypi:`pytest-netdut` "Automated software testing for switches using pytest" Oct 09, 2025 N/A pytest>=3.5.0 @@ -1139,7 +1147,7 @@ This list contains 1824 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Jan 24, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Jan 31, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1212,6 +1220,7 @@ This list contains 1824 plugins. :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 + :pypi:`pytest-playwright-artifacts` Pytest plugin that captures HTML, screenshots, and console logs on Playwright test failures Jan 29, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A @@ -1220,7 +1229,7 @@ This list contains 1824 plugins. :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A - :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Nov 04, 2025 N/A N/A + :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Jan 26, 2026 N/A N/A :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 12, 2025 3 - Alpha pytest :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest @@ -1246,7 +1255,7 @@ This list contains 1824 plugins. :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. Jan 23, 2026 5 - Production/Stable pytest>=8.2 :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 - :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Dec 29, 2025 3 - Alpha pytest + :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Jan 27, 2026 3 - Alpha pytest :pypi:`pytest-prefer-nested-dup-tests` A Pytest plugin to drop duplicated tests during collection, but will prefer keeping nested packages. Apr 27, 2022 4 - Beta pytest (>=7.1.1,<8.0.0) :pypi:`pytest-pretty` pytest plugin for printing summary data as I want it Jun 04, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-pretty-terminal` pytest plugin for generating prettier terminal output Jan 31, 2022 N/A pytest (>=3.4.1) @@ -1272,7 +1281,7 @@ This list contains 1824 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Jan 23, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Jan 29, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1350,6 +1359,9 @@ This list contains 1824 plugins. :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 + :pypi:`pytest_relay` A plugin to relay test information and control from and to pytest Jan 31, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-relay-run` A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. Jan 31, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest_relay_ws` An extension plugin to pytest-relay to relay pytest information via websockets Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) @@ -1455,7 +1467,7 @@ This list contains 1824 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 20, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 27, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1468,7 +1480,7 @@ This list contains 1824 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 20, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 27, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1655,7 +1667,7 @@ This list contains 1824 plugins. :pypi:`pytest-testmon-skip-libraries` selects tests affected by changed files and methods Mar 03, 2023 4 - Beta pytest (<8,>=5) :pypi:`pytest-testobject` Plugin to use TestObject Suites with Pytest Sep 24, 2019 4 - Beta pytest (>=3.1.1) :pypi:`pytest-testpluggy` set your encoding Jan 07, 2022 N/A pytest - :pypi:`pytest-testrail` pytest plugin for creating TestRail runs and adding results Aug 27, 2020 N/A pytest (>=3.6) + :pypi:`pytest-testrail` A pytest plugin for creating TestRail runs and adding results Jan 25, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-testrail2` A pytest plugin to upload results to TestRail. Feb 10, 2023 N/A pytest (<8.0,>=7.2.0) :pypi:`pytest-testrail-api` TestRail Api Python Client Mar 17, 2025 N/A pytest :pypi:`pytest-testrail-api-client` TestRail Api Python Client Dec 14, 2021 N/A pytest @@ -1857,7 +1869,7 @@ This list contains 1824 plugins. :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 - :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Jan 17, 2026 5 - Production/Stable pytest>=8.3.5 + :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Jan 28, 2026 5 - Production/Stable pytest>=8.3.5 =============================================== ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ .. only:: latex @@ -1975,8 +1987,15 @@ This list contains 1824 plugins. Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. + :pypi:`pytest-agent-evals` + *last release*: Jan 30, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + Pytest plugin for evaluating AI Agents + :pypi:`pytest-agents` - *last release*: Jan 10, 2026, + *last release*: Jan 31, 2026, *status*: 3 - Alpha, *requires*: pytest>=8.0.0 @@ -2368,7 +2387,7 @@ This list contains 1824 plugins. Pytest plugin for appium :pypi:`pytest-approval` - *last release*: Jan 23, 2026, + *last release*: Jan 27, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -2864,6 +2883,13 @@ This list contains 1824 plugins. pytest plugin to display BDD info in HTML test report + :pypi:`pytest-bdd-md-report` + *last release*: Jan 31, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support + :pypi:`pytest-bdd-ng` *last release*: Nov 26, 2024, *status*: 4 - Beta, @@ -2921,7 +2947,7 @@ This list contains 1824 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Jan 23, 2026, + *last release*: Jan 30, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3418,7 +3444,7 @@ This list contains 1824 plugins. Pytest plugin for Celery (compatible with python 3.7) :pypi:`pytest-celery-utils` - *last release*: Nov 26, 2025, + *last release*: Jan 28, 2026, *status*: N/A, *requires*: pytest>=9.0.1 @@ -3691,7 +3717,7 @@ This list contains 1824 plugins. A set of pytest fixtures to help with integration testing with Clerk. :pypi:`pytest-clerk-mock` - *last release*: Jan 02, 2026, + *last release*: Jan 25, 2026, *status*: N/A, *requires*: N/A @@ -3803,7 +3829,7 @@ This list contains 1824 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Jan 22, 2026, + *last release*: Jan 30, 2026, *status*: 4 - Beta, *requires*: pytest @@ -4635,6 +4661,13 @@ This list contains 1824 plugins. Describe-style plugin for pytest + :pypi:`pytest-describe-beautifully` + *last release*: Jan 28, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + Beautiful terminal and HTML output for pytest-describe. + :pypi:`pytest-describe-it` *last release*: Jul 19, 2019, *status*: 4 - Beta, @@ -5126,7 +5159,7 @@ This list contains 1824 plugins. A plugin to run only doctest :pypi:`pytest-doctestplus` - *last release*: Jan 08, 2026, + *last release*: Jan 26, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 @@ -6175,6 +6208,13 @@ This list contains 1824 plugins. + :pypi:`pytest-fixture-cache` + *last release*: Jan 25, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + Smart fixture caching for pytest with SQLite storage + :pypi:`pytest-fixturecheck` *last release*: Jun 02, 2025, *status*: 3 - Alpha, @@ -6330,7 +6370,7 @@ This list contains 1824 plugins. Continuously runs your tests to detect flaky tests :pypi:`pytest-flakefighters` - *last release*: Jan 23, 2026, + *last release*: Jan 28, 2026, *status*: N/A, *requires*: pytest>=6.2.0 @@ -6490,6 +6530,13 @@ This list contains 1824 plugins. pytest plugin for running parallel tests + :pypi:`pytest-freeze` + *last release*: Jan 27, 2026, + *status*: N/A, + *requires*: N/A + + Pytest plugin to simplify writing freeze tests. + :pypi:`pytest-freezeblaster` *last release*: Oct 13, 2025, *status*: N/A, @@ -6771,9 +6818,9 @@ This list contains 1824 plugins. Utility to select tests that have had its dependencies modified (as identified by git diff) :pypi:`pytest-glamor-allure` - *last release*: Jul 20, 2025, - *status*: 4 - Beta, - *requires*: pytest<=8.4.1 + *last release*: Jan 30, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest<=9.0.2 Extends allure-pytest functionality @@ -6868,6 +6915,13 @@ This list contains 1824 plugins. + :pypi:`pytest-gremlins` + *last release*: Jan 27, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. + :pypi:`pytest-group-by-class` *last release*: Jun 27, 2023, *status*: 5 - Production/Stable, @@ -7030,7 +7084,7 @@ This list contains 1824 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Jan 24, 2026, + *last release*: Jan 31, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7317,7 +7371,7 @@ This list contains 1824 plugins. Visualise PyTest status via your Phillips Hue lights :pypi:`pytest-human` - *last release*: Jan 20, 2026, + *last release*: Jan 25, 2026, *status*: 4 - Beta, *requires*: pytest>=8 @@ -7345,7 +7399,7 @@ This list contains 1824 plugins. A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite :pypi:`pytest-ibutsu` - *last release*: Dec 16, 2025, + *last release*: Jan 27, 2026, *status*: 4 - Beta, *requires*: pytest @@ -7471,7 +7525,7 @@ This list contains 1824 plugins. display more node ininformation. :pypi:`pytest-infrahouse` - *last release*: Dec 29, 2025, + *last release*: Jan 29, 2026, *status*: 4 - Beta, *requires*: pytest~=9.0 @@ -7527,7 +7581,7 @@ This list contains 1824 plugins. A py.test plugin providing fixtures to simplify inmanta modules testing. :pypi:`pytest-inmanta-extensions` - *last release*: Nov 04, 2025, + *last release*: Jan 30, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -7646,7 +7700,7 @@ This list contains 1824 plugins. Pytest plugin for checking charm relation interface protocol compliance. :pypi:`pytest-invenio` - *last release*: Jul 09, 2025, + *last release*: Jan 27, 2026, *status*: 5 - Production/Stable, *requires*: pytest<9.0.0,>=6 @@ -7702,7 +7756,7 @@ This list contains 1824 plugins. Run pytest tests in isolated subprocesses :pypi:`pytest-isolated` - *last release*: Jan 13, 2026, + *last release*: Jan 30, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -7953,6 +8007,13 @@ This list contains 1824 plugins. Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest + :pypi:`pytest-kafka-broker` + *last release*: Jan 31, 2026, + *status*: N/A, + *requires*: N/A + + Pytest plugin to run a single-broker Kafka cluster + :pypi:`pytest-kafkavents` *last release*: Sep 08, 2021, *status*: 4 - Beta, @@ -8296,6 +8357,13 @@ This list contains 1824 plugins. LLM Agent for working with pytest + :pypi:`pytest-llm-assert` + *last release*: Jan 31, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0 + + Simple LLM-powered assertions for any pytest test + :pypi:`pytest-llmeval` *last release*: Mar 19, 2025, *status*: 4 - Beta, @@ -8500,7 +8568,7 @@ This list contains 1824 plugins. pytest marker for marking manual tests :pypi:`pytest-mark-ac` - *last release*: Nov 17, 2025, + *last release*: Jan 30, 2026, *status*: 5 - Production/Stable, *requires*: pytest~=8.4 @@ -8528,7 +8596,7 @@ This list contains 1824 plugins. Test your markdown docs with pytest :pypi:`pytest-markdown-docs` - *last release*: Apr 09, 2025, + *last release*: Jan 28, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -8738,7 +8806,7 @@ This list contains 1824 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Jan 20, 2026, + *last release*: Jan 26, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -9130,9 +9198,9 @@ This list contains 1824 plugins. low-startup-overhead, scalable, distributed-testing pytest plugin :pypi:`pytest-mqtt` - *last release*: Dec 24, 2025, + *last release*: Jan 28, 2026, *status*: 5 - Production/Stable, - *requires*: pytest<9; extra == "test" + *requires*: pytest<10; extra == "test" pytest-mqtt supports testing systems based on MQTT @@ -9221,11 +9289,11 @@ This list contains 1824 plugins. Run the mypy static type checker as a pytest test case :pypi:`pytest-mypy-testing` - *last release*: Mar 04, 2024, + *last release*: Jan 26, 2026, *status*: N/A, - *requires*: pytest>=7,<9 + *requires*: pytest>=8 - Pytest plugin to check mypy output. + Pytest plugin to check mypy output :pypi:`pytest-mysql` *last release*: Dec 10, 2024, @@ -9277,7 +9345,7 @@ This list contains 1824 plugins. pytest-neo is a plugin for pytest that shows tests like screen of Matrix. :pypi:`pytest-neon` - *last release*: Jan 23, 2026, + *last release*: Jan 29, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -9599,7 +9667,7 @@ This list contains 1824 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Jan 24, 2026, + *last release*: Jan 31, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10109,6 +10177,13 @@ This list contains 1824 plugins. A pytest wrapper with fixtures for Playwright to automate web browsers + :pypi:`pytest-playwright-artifacts` + *last release*: Jan 29, 2026, + *status*: N/A, + *requires*: N/A + + Pytest plugin that captures HTML, screenshots, and console logs on Playwright test failures + :pypi:`pytest_playwright_async` *last release*: Sep 28, 2024, *status*: N/A, @@ -10166,7 +10241,7 @@ This list contains 1824 plugins. A pytest fixture for visual testing with Playwright :pypi:`pytest-playwright-visual-snapshot` - *last release*: Nov 04, 2025, + *last release*: Jan 26, 2026, *status*: N/A, *requires*: N/A @@ -10348,7 +10423,7 @@ This list contains 1824 plugins. A plugin containing extra batteries for pytest :pypi:`pytest-prairielearn-grader` - *last release*: Dec 29, 2025, + *last release*: Jan 27, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -10530,7 +10605,7 @@ This list contains 1824 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Jan 23, 2026, + *last release*: Jan 29, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -11075,6 +11150,27 @@ This list contains 1824 plugins. Relaxed test discovery/organization for pytest + :pypi:`pytest_relay` + *last release*: Jan 31, 2026, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + A plugin to relay test information and control from and to pytest + + :pypi:`pytest-relay-run` + *last release*: Jan 31, 2026, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. + + :pypi:`pytest_relay_ws` + *last release*: Jan 31, 2026, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + An extension plugin to pytest-relay to relay pytest information via websockets + :pypi:`pytest-remfiles` *last release*: Jul 01, 2019, *status*: 5 - Production/Stable, @@ -11811,7 +11907,7 @@ This list contains 1824 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Jan 20, 2026, + *last release*: Jan 27, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -11902,7 +11998,7 @@ This list contains 1824 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Jan 20, 2026, + *last release*: Jan 27, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -13211,11 +13307,11 @@ This list contains 1824 plugins. set your encoding :pypi:`pytest-testrail` - *last release*: Aug 27, 2020, - *status*: N/A, - *requires*: pytest (>=3.6) + *last release*: Jan 25, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=7.0.0 - pytest plugin for creating TestRail runs and adding results + A pytest plugin for creating TestRail runs and adding results :pypi:`pytest-testrail2` *last release*: Feb 10, 2023, @@ -14625,7 +14721,7 @@ This list contains 1824 plugins. 接口自动化测试框架 :pypi:`tursu` - *last release*: Jan 17, 2026, + *last release*: Jan 28, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.3.5 From b9db384c9c7a4c22437a1917f7abf32aac1ae6db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:20:03 +0100 Subject: [PATCH 150/307] build(deps): Bump actions/cache from 5.0.1 to 5.0.2 (#14143) Bumps [actions/cache](https://github.com/actions/cache) from 5.0.1 to 5.0.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/9255dc7a253b0ccc959486e2bca901246202afeb...8b402f58fbc84540c8b491a91e594a4576fec3d7) --- updated-dependencies: - dependency-name: actions/cache dependency-version: 5.0.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 4828d315040..88bedf418e6 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -31,7 +31,7 @@ jobs: python-version: "3.13" - name: requests-cache - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 + uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2 with: path: ~/.cache/pytest-plugin-list/ key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well From 029f2ffc8d07b035149d554de5daa817594e76df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 03:06:29 +0000 Subject: [PATCH 151/307] build(deps): Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.0.0 to 8.1.0. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/98357b18bf14b5342f975ff684046ec3b2a07725...c0f553fe549906ede9cf27b5156039d195d2ece0) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 8.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 88bedf418e6..d1ca5de0d24 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -47,7 +47,7 @@ jobs: - name: Create Pull Request id: pr - uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 with: commit-message: '[automated] Update plugin list' author: 'pytest bot ' From 0ac68056b791384eeec832598fcfccf5cb07f904 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 07:03:37 +0100 Subject: [PATCH 152/307] build(deps): Bump actions/setup-python from 6.1.0 to 6.2.0 (#14155) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.1.0 to 6.2.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/83679a892e2d95755f2dac6acb0bfd1e9ac5d548...a309ff8b426b58ec0e2a45f0f869d46889d02405) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: 6.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- .github/workflows/doc-check-links.yml | 2 +- .github/workflows/prepare-release-pr.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/update-plugin-list.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5f04f0c5fd8..ace50c4d666 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -48,7 +48,7 @@ jobs: persist-credentials: false - name: Set up Python - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.13" diff --git a/.github/workflows/doc-check-links.yml b/.github/workflows/doc-check-links.yml index 91dbe5a2f20..1c2b6397e95 100644 --- a/.github/workflows/doc-check-links.yml +++ b/.github/workflows/doc-check-links.yml @@ -23,7 +23,7 @@ jobs: persist-credentials: false - name: Setup Python - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.13" cache: pip diff --git a/.github/workflows/prepare-release-pr.yml b/.github/workflows/prepare-release-pr.yml index 4bf573179b2..33cf2977425 100644 --- a/.github/workflows/prepare-release-pr.yml +++ b/.github/workflows/prepare-release-pr.yml @@ -34,7 +34,7 @@ jobs: persist-credentials: true - name: Set up Python - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.13" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bbb2174cacf..9dbfbf4b2a3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -263,7 +263,7 @@ jobs: path: dist - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ matrix.python }} check-latest: true diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 88bedf418e6..e52f82b03b1 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -26,7 +26,7 @@ jobs: persist-credentials: false - name: Setup Python - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.13" From 0d9450d24b0f15b555a824ebc8cc221acff6c813 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 07:04:36 +0100 Subject: [PATCH 153/307] build(deps): Bump pytest-html in /testing/plugins_integration (#14153) Bumps [pytest-html](https://github.com/pytest-dev/pytest-html) from 4.1.1 to 4.2.0. - [Release notes](https://github.com/pytest-dev/pytest-html/releases) - [Changelog](https://github.com/pytest-dev/pytest-html/blob/master/docs/changelog.rst) - [Commits](https://github.com/pytest-dev/pytest-html/compare/4.1.1...4.2.0) --- updated-dependencies: - dependency-name: pytest-html dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index dfd95639564..947df68e4b2 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -5,7 +5,7 @@ pytest-bdd==8.1.0 pytest-cov==7.0.0 pytest-django==4.11.1 pytest-flakes==4.0.5 -pytest-html==4.1.1 +pytest-html==4.2.0 pytest-mock==3.15.1 pytest-rerunfailures==16.1 pytest-sugar==1.1.1 From 00f121d9cf9d9e0562776f0b763b4816ef4d234c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 20:47:00 +0000 Subject: [PATCH 154/307] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.13 → v0.14.14](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.13...v0.14.14) - [github.com/tox-dev/pyproject-fmt: v2.11.1 → v2.12.1](https://github.com/tox-dev/pyproject-fmt/compare/v2.11.1...v2.12.1) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f65179eb686..d53253810c5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.13" + rev: "v0.14.14" hooks: - id: ruff-check args: ["--fix"] @@ -68,7 +68,7 @@ repos: # Manual because passing pyright is a work in progress. stages: [manual] - repo: https://github.com/tox-dev/pyproject-fmt - rev: "v2.11.1" + rev: "v2.12.1" hooks: - id: pyproject-fmt # https://pyproject-fmt.readthedocs.io/en/latest/#calculating-max-supported-python-version From b6f9a96c8a106d3ef18331fac21bcd7a0ad1b600 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 20:47:30 +0000 Subject: [PATCH 155/307] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pyproject.toml | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5956eff9f68..d0aa0edef93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,13 +16,13 @@ keywords = [ license = "MIT" license-files = [ "LICENSE" ] authors = [ - { name = "Holger Krekel" }, - { name = "Bruno Oliveira" }, - { name = "Ronny Pfannschmidt" }, - { name = "Floris Bruynooghe" }, { name = "Brianna Laugher" }, + { name = "Bruno Oliveira" }, { name = "Florian Bruhin" }, + { name = "Floris Bruynooghe" }, + { name = "Holger Krekel" }, { name = "Others (See AUTHORS)" }, + { name = "Ronny Pfannschmidt" }, ] requires-python = ">=3.10" classifiers = [ @@ -432,24 +432,6 @@ markers = [ "keep_ci_var", ] -[tool.coverage.run] -include = [ - 'src/*', - 'testing/*', - '*/lib/python*/site-packages/_pytest/*', - '*/lib/python*/site-packages/pytest.py', - '*/pypy*/site-packages/_pytest/*', - '*/pypy*/site-packages/pytest.py', - '*\Lib\site-packages\_pytest\*', - '*\Lib\site-packages\pytest.py', -] -parallel = true -branch = true -patch = [ "subprocess" ] -# The sysmon core (default since Python 3.14) is much slower. -# Perhaps: https://github.com/coveragepy/coveragepy/issues/2082 -core = "ctrace" - [tool.coverage.paths] source = [ 'src/', @@ -474,6 +456,24 @@ exclude_lines = [ '^\s*@pytest\.mark\.xfail', ] +[tool.coverage.run] +include = [ + 'src/*', + 'testing/*', + '*/lib/python*/site-packages/_pytest/*', + '*/lib/python*/site-packages/pytest.py', + '*/pypy*/site-packages/_pytest/*', + '*/pypy*/site-packages/pytest.py', + '*\Lib\site-packages\_pytest\*', + '*\Lib\site-packages\pytest.py', +] +parallel = true +branch = true +patch = [ "subprocess" ] +# The sysmon core (default since Python 3.14) is much slower. +# Perhaps: https://github.com/coveragepy/coveragepy/issues/2082 +core = "ctrace" + [tool.towncrier] package = "pytest" package_dir = "src" From c894fa0ffead0b69994c41ab3eeed9708adb511e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:47:36 +0100 Subject: [PATCH 156/307] build(deps): Bump django in /testing/plugins_integration (#14163) Bumps [django](https://github.com/django/django) from 6.0.1 to 6.0.2. - [Commits](https://github.com/django/django/compare/6.0.1...6.0.2) --- updated-dependencies: - dependency-name: django dependency-version: 6.0.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index 947df68e4b2..23fd33e9bd5 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.12.1 -django==6.0.1 +django==6.0.2 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 From c5da826eade567608cb7bbca8834bab564e70482 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 8 Feb 2026 06:39:22 +0000 Subject: [PATCH 157/307] [automated] Update plugin list (#14168) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 214 +++++++++++++++++++------------ 1 file changed, 131 insertions(+), 83 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 339da057bda..4f864469b8d 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.3.4 :pypi:`pytest-airflow` pytest support for airflow. Apr 03, 2019 3 - Alpha pytest (>=4.4.0) :pypi:`pytest-airflow-utils` Nov 15, 2021 N/A N/A + :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 07, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-alembic` A pytest plugin for verifying alembic migrations. May 27, 2025 N/A pytest>=7.0 :pypi:`pytest-alerts` A pytest plugin for sending test results to Slack and Telegram Feb 21, 2025 4 - Beta pytest>=7.4.0 :pypi:`pytest-allclose` Pytest fixture extending Numpy's allclose function Jul 30, 2019 5 - Production/Stable pytest @@ -99,7 +100,7 @@ This list contains 1836 plugins. :pypi:`pytest-aoreporter` pytest report Jun 27, 2022 N/A N/A :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest - :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Dec 02, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-framework-alpha` Jan 07, 2026 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A @@ -112,7 +113,7 @@ This list contains 1836 plugins. :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) - :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Jan 12, 2026 4 - Beta pytest~=9.0.0; extra == "dev" + :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Feb 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 24, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 @@ -178,7 +179,7 @@ This list contains 1836 plugins. :pypi:`pytest-bazel` A pytest runner with bazel support Oct 31, 2025 4 - Beta pytest :pypi:`pytest-bdd` BDD for pytest Dec 05, 2024 6 - Mature pytest>=7.0.0 :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) - :pypi:`pytest-bdd-md-report` Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support Jan 31, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-bdd-md-report` Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support Feb 07, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Dec 29, 2025 N/A pytest>=7.1.3 :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 @@ -187,7 +188,7 @@ This list contains 1836 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Jan 30, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 06, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -296,7 +297,7 @@ This list contains 1836 plugins. :pypi:`pytest-cleanslate` Collects and executes pytest tests separately Apr 10, 2025 N/A pytest :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A - :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 + :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Feb 04, 2026 N/A pytest<10.0.0,>=8.0.0 :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Jan 25, 2026 N/A N/A :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) @@ -313,7 +314,7 @@ This list contains 1836 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Jan 30, 2026 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 07, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -329,7 +330,7 @@ This list contains 1836 plugins. :pypi:`pytest-collect-markers` A pytest plugin to collect and output test markers to JSON Jan 24, 2026 N/A pytest>=7.0.0 :pypi:`pytest-collector` Python package for collecting pytest. Aug 02, 2022 N/A pytest (>=7.0,<8.0) :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A - :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Jan 15, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-colordots` Colorizes the progress indicators Oct 06, 2017 5 - Production/Stable N/A :pypi:`pytest-comfyui` Integration testing framework for ComfyUI nodes and workflows. Jan 09, 2026 N/A N/A :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) @@ -382,7 +383,7 @@ This list contains 1836 plugins. :pypi:`pytest-custom-report` Configure the symbols displayed for test outcomes Jan 30, 2019 N/A pytest :pypi:`pytest-custom-scheduling` Custom grouping for pytest-xdist, rename test cases name and test cases nodeid, support allure report Mar 01, 2021 N/A N/A :pypi:`pytest-custom-timeout` Use custom logic when a test times out. Based on pytest-timeout. Jan 08, 2025 4 - Beta pytest>=8.0.0 - :pypi:`pytest-cython` A plugin for testing Cython extension modules Apr 05, 2024 5 - Production/Stable pytest>=8 + :pypi:`pytest-cython` A plugin for testing Cython extension modules Feb 07, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest :pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1 :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A @@ -427,7 +428,7 @@ This list contains 1836 plugins. :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) - :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Dec 05, 2025 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 @@ -522,14 +523,14 @@ This list contains 1836 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Jan 16, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Feb 07, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 - :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Jan 15, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A @@ -591,7 +592,7 @@ This list contains 1836 plugins. :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 :pypi:`pytest-exasol-backend` Dec 10, 2025 N/A pytest<9,>=7 - :pypi:`pytest-exasol-extension` Dec 11, 2025 N/A pytest<9,>=7 + :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-slc` Dec 12, 2025 N/A pytest<9,>=7 @@ -671,12 +672,12 @@ This list contains 1836 plugins. :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest - :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite, with execution tracing Jan 05, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite, with execution tracing Feb 03, 2026 N/A pytest>=6.0.0 :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Jan 28, 2026 N/A pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Feb 06, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Jan 13, 2026 N/A pytest>=9.0.2 @@ -778,7 +779,7 @@ This list contains 1836 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Jan 31, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Feb 07, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -795,7 +796,7 @@ This list contains 1836 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Jan 16, 2026 N/A N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Feb 06, 2026 N/A N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -835,6 +836,7 @@ This list contains 1836 plugins. :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by codechanges via git introspection, ASL parsing, and dependency graph analysis. Sep 11, 2025 4 - Beta pytest>=8.0.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A + :pypi:`pytest-in-docker` Seamlessly run pytest tests inside docker containers Feb 07, 2026 N/A pytest>=9.0.2 :pypi:`pytest-infinity` Jun 09, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-influx` Pytest plugin for managing your influx instance between test runs Oct 16, 2024 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-influxdb` Plugin for influxdb and pytest integration. Apr 20, 2021 N/A N/A @@ -872,9 +874,9 @@ This list contains 1836 plugins. :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Jan 21, 2026 N/A pytest + :pypi:`pytest-ipywidgets` Feb 03, 2026 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest - :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Jan 30, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Feb 05, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A @@ -891,7 +893,7 @@ This list contains 1836 plugins. :pypi:`pytest-jira-xfail` Plugin skips (xfail) tests if unresolved Jira issue(s) linked Jul 09, 2024 N/A pytest>=7.2.0 :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Oct 11, 2025 4 - Beta pytest>=6.2.4 :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. May 15, 2019 5 - Production/Stable pytest + :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. Feb 02, 2026 5 - Production/Stable pytest :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Dec 28, 2025 N/A pytest>6.0.0 @@ -900,7 +902,7 @@ This list contains 1836 plugins. :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Nov 26, 2025 N/A pytest + :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Feb 04, 2026 N/A pytest :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 :pypi:`pytest-jubilant` Add your description here Jul 28, 2025 N/A pytest>=8.3.5 :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 @@ -910,7 +912,7 @@ This list contains 1836 plugins. :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest - :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Jan 31, 2026 N/A N/A + :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Feb 05, 2026 N/A N/A :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) @@ -960,7 +962,7 @@ This list contains 1836 plugins. :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 - :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Jan 31, 2026 3 - Alpha pytest>=8.0 + :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 @@ -981,7 +983,7 @@ This list contains 1836 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Jan 21, 2026 5 - Production/Stable pytest==9.0.2 + :pypi:`pytest-logikal` Common testing environment Feb 02, 2026 5 - Production/Stable pytest==9.0.2 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -992,6 +994,7 @@ This list contains 1836 plugins. :pypi:`pytest-manual-marker` pytest marker for marking manual tests Aug 04, 2022 3 - Alpha pytest>=7 :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Jan 30, 2026 5 - Production/Stable pytest~=8.4 :pypi:`pytest-mark-count` Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers Nov 13, 2024 4 - Beta pytest>=8.0.0 + :pypi:`pytest-markdir` Feb 01, 2026 N/A pytest<10,>=8.0 :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Jan 28, 2026 N/A pytest>=7.0.0 @@ -1064,7 +1067,7 @@ This list contains 1836 plugins. :pypi:`pytest-modifyjunit` Utility for adding additional properties to junit xml for IDM QE Jan 10, 2019 N/A N/A :pypi:`pytest-molecule` PyTest Molecule Plugin :: discover and run molecule tests Mar 29, 2022 5 - Production/Stable pytest (>=7.0.0) :pypi:`pytest-molecule-JC` PyTest Molecule Plugin :: discover and run molecule tests Jul 18, 2023 5 - Production/Stable pytest (>=7.0.0) - :pypi:`pytest-mongo` MongoDB process and client fixtures plugin for Pytest. Aug 01, 2025 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-mongo` MongoDB process and client fixtures plugin for Pytest. Feb 04, 2026 5 - Production/Stable pytest>=8.4 :pypi:`pytest-mongodb` pytest plugin for MongoDB fixtures May 16, 2023 5 - Production/Stable N/A :pypi:`pytest-mongodb-nono` pytest plugin for MongoDB Jan 07, 2025 N/A N/A :pypi:`pytest-mongodb-ry` pytest plugin for MongoDB Sep 25, 2025 N/A N/A @@ -1101,7 +1104,7 @@ This list contains 1836 plugins. :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) - :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Jan 29, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Feb 05, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-neos` Pytest plugin for neos Sep 10, 2024 5 - Production/Stable pytest<8.0,>=7.2; extra == "dev" :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Nov 03, 2025 N/A N/A :pypi:`pytest-netdut` "Automated software testing for switches using pytest" Oct 09, 2025 N/A pytest>=3.5.0 @@ -1147,7 +1150,7 @@ This list contains 1836 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Jan 31, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Feb 04, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1205,7 +1208,7 @@ This list contains 1836 plugins. :pypi:`pytest-phmdoctest` pytest plugin to test Python examples in Markdown using phmdoctest. Apr 15, 2022 4 - Beta pytest (>=5.4.3) :pypi:`pytest-phoenix-interface` Pytest extension tool for phoenix projects. Mar 19, 2025 N/A N/A :pypi:`pytest-picked` Run the tests related to the changed files Nov 06, 2024 N/A pytest>=3.7.0 - :pypi:`pytest-pickle-cache` A pytest plugin for caching test results using pickle. Feb 17, 2025 N/A pytest>=7 + :pypi:`pytest-pickle-cache` A pytest plugin for caching test results using pickle. Feb 06, 2026 4 - Beta pytest>=9 :pypi:`pytest-pigeonhole` Jun 25, 2018 5 - Production/Stable pytest (>=3.4) :pypi:`pytest-pikachu` Show surprise when tests are passing Aug 05, 2021 5 - Production/Stable pytest :pypi:`pytest-pilot` Slice in your test base thanks to powerful markers. Dec 17, 2025 5 - Production/Stable N/A @@ -1215,7 +1218,7 @@ This list contains 1836 plugins. :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Dec 15, 2025 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Feb 04, 2026 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) @@ -1229,14 +1232,15 @@ This list contains 1836 plugins. :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A - :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Jan 26, 2026 N/A N/A + :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Feb 05, 2026 N/A N/A :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 12, 2025 3 - Alpha pytest :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Jan 18, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A + :pypi:`pytest-podman` Pytest plugin for Podman integration Feb 03, 2026 N/A N/A :pypi:`pytest-pogo` Pytest plugin for pogo-migrate Jan 20, 2026 4 - Beta pytest>=7 :pypi:`pytest-pointers` Pytest plugin to define functions you test with special marks for better navigation and reports Dec 26, 2022 N/A N/A :pypi:`pytest-pokie` Pokie plugin for pytest Oct 19, 2023 5 - Production/Stable N/A @@ -1281,7 +1285,7 @@ This list contains 1836 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Jan 29, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pve-cloud` Feb 04, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1355,7 +1359,7 @@ This list contains 1836 plugins. :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Jan 09, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Oct 11, 2025 N/A pytest>7.2 + :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 06, 2026 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 @@ -1426,7 +1430,7 @@ This list contains 1836 plugins. :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A - :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Jan 09, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Feb 03, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 @@ -1467,7 +1471,7 @@ This list contains 1836 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Jan 27, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 02, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1480,7 +1484,7 @@ This list contains 1836 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Jan 27, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 02, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1566,10 +1570,10 @@ This list contains 1836 plugins. :pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0 :pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7 :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Jan 21, 2026 4 - Beta pytest>=8.1.1 - :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Jan 01, 2024 N/A N/A + :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Feb 08, 2026 N/A pytest>=3.0.0 :pypi:`pytest-splinter` Splinter plugin for pytest testing framework Sep 09, 2022 6 - Mature pytest (>=3.0.0) :pypi:`pytest-splinter4` Pytest plugin for the splinter automation library Feb 01, 2024 6 - Mature pytest >=8.0.0 - :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Oct 16, 2024 4 - Beta pytest<9,>=5 + :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Feb 03, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-split-ct` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 23, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-split-ext` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Sep 23, 2023 4 - Beta pytest (>=5,<8) :pypi:`pytest-splitio` Split.io SDK integration for e2e tests Sep 22, 2020 N/A pytest (<7,>=5.0) @@ -1650,12 +1654,13 @@ This list contains 1836 plugins. :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Dec 24, 2025 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 04, 2026 N/A N/A :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Jan 22, 2026 4 - Beta pytest>=7 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Feb 06, 2026 4 - Beta pytest>=7 :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A @@ -1783,6 +1788,7 @@ This list contains 1836 plugins. :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A + :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Feb 06, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 @@ -2113,6 +2119,13 @@ This list contains 1836 plugins. + :pypi:`pytest-aitest` + *last release*: Feb 07, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=9.0 + + Pytest plugin for testing AI agents with MCP and CLI servers + :pypi:`pytest-alembic` *last release*: May 27, 2025, *status*: N/A, @@ -2331,7 +2344,7 @@ This list contains 1836 plugins. Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. :pypi:`pytest-api-cov` - *last release*: Dec 02, 2025, + *last release*: Feb 05, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -2422,7 +2435,7 @@ This list contains 1836 plugins. pyest results colection plugin :pypi:`pytest-argus-reporter` - *last release*: Jan 12, 2026, + *last release*: Feb 03, 2026, *status*: 4 - Beta, *requires*: pytest~=9.0.0; extra == "dev" @@ -2884,7 +2897,7 @@ This list contains 1836 plugins. pytest plugin to display BDD info in HTML test report :pypi:`pytest-bdd-md-report` - *last release*: Jan 31, 2026, + *last release*: Feb 07, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -2947,7 +2960,7 @@ This list contains 1836 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Jan 30, 2026, + *last release*: Feb 06, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3710,7 +3723,7 @@ This list contains 1836 plugins. A cleanup plugin for pytest :pypi:`pytest-clerk` - *last release*: Nov 11, 2025, + *last release*: Feb 04, 2026, *status*: N/A, *requires*: pytest<10.0.0,>=8.0.0 @@ -3829,7 +3842,7 @@ This list contains 1836 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Jan 30, 2026, + *last release*: Feb 07, 2026, *status*: 4 - Beta, *requires*: pytest @@ -3941,7 +3954,7 @@ This list contains 1836 plugins. A simple plugin to use with pytest :pypi:`pytest-collect-requirements` - *last release*: Jan 15, 2026, + *last release*: Feb 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -4312,7 +4325,7 @@ This list contains 1836 plugins. Use custom logic when a test times out. Based on pytest-timeout. :pypi:`pytest-cython` - *last release*: Apr 05, 2024, + *last release*: Feb 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8 @@ -4627,7 +4640,7 @@ This list contains 1836 plugins. Tests that depend on other tests :pypi:`pytest-depends-on` - *last release*: Dec 05, 2025, + *last release*: Feb 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -5292,7 +5305,7 @@ This list contains 1836 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Jan 16, 2026, + *last release*: Feb 07, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5341,7 +5354,7 @@ This list contains 1836 plugins. Pytest plugin reporting fixtures and test functions execution time. :pypi:`pytest-dynamic-parameterize` - *last release*: Jan 15, 2026, + *last release*: Feb 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -5775,7 +5788,7 @@ This list contains 1836 plugins. :pypi:`pytest-exasol-extension` - *last release*: Dec 11, 2025, + *last release*: Feb 06, 2026, *status*: N/A, *requires*: pytest<9,>=7 @@ -6335,7 +6348,7 @@ This list contains 1836 plugins. A pytest plugin to assert type annotations at runtime. :pypi:`pytest-fkit` - *last release*: Jan 05, 2026, + *last release*: Feb 03, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -6370,7 +6383,7 @@ This list contains 1836 plugins. Continuously runs your tests to detect flaky tests :pypi:`pytest-flakefighters` - *last release*: Jan 28, 2026, + *last release*: Feb 06, 2026, *status*: N/A, *requires*: pytest>=6.2.0 @@ -7084,7 +7097,7 @@ This list contains 1836 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Jan 31, 2026, + *last release*: Feb 07, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7203,7 +7216,7 @@ This list contains 1836 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Jan 16, 2026, + *last release*: Feb 06, 2026, *status*: N/A, *requires*: N/A @@ -7482,6 +7495,13 @@ This list contains 1836 plugins. an incremental test runner (pytest plugin) + :pypi:`pytest-in-docker` + *last release*: Feb 07, 2026, + *status*: N/A, + *requires*: pytest>=9.0.2 + + Seamlessly run pytest tests inside docker containers + :pypi:`pytest-infinity` *last release*: Jun 09, 2024, *status*: N/A, @@ -7742,7 +7762,7 @@ This list contains 1836 plugins. Pytest plugin to run tests in Jupyter Notebooks :pypi:`pytest-ipywidgets` - *last release*: Jan 21, 2026, + *last release*: Feb 03, 2026, *status*: N/A, *requires*: pytest @@ -7756,7 +7776,7 @@ This list contains 1836 plugins. Run pytest tests in isolated subprocesses :pypi:`pytest-isolated` - *last release*: Jan 30, 2026, + *last release*: Feb 05, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -7875,7 +7895,7 @@ This list contains 1836 plugins. A pytest plugin for load balancing test suites :pypi:`pytest-jobserver` - *last release*: May 15, 2019, + *last release*: Feb 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -7938,7 +7958,7 @@ This list contains 1836 plugins. A pytest plugin to perform JSONSchema validations :pypi:`pytest-jsonschema-snapshot` - *last release*: Nov 26, 2025, + *last release*: Feb 04, 2026, *status*: N/A, *requires*: pytest @@ -8008,7 +8028,7 @@ This list contains 1836 plugins. Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest :pypi:`pytest-kafka-broker` - *last release*: Jan 31, 2026, + *last release*: Feb 05, 2026, *status*: N/A, *requires*: N/A @@ -8358,9 +8378,9 @@ This list contains 1836 plugins. LLM Agent for working with pytest :pypi:`pytest-llm-assert` - *last release*: Jan 31, 2026, + *last release*: Feb 03, 2026, *status*: 3 - Alpha, - *requires*: pytest>=8.0 + *requires*: pytest>=9.0 Simple LLM-powered assertions for any pytest test @@ -8505,7 +8525,7 @@ This list contains 1836 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Jan 21, 2026, + *last release*: Feb 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest==9.0.2 @@ -8581,6 +8601,13 @@ This list contains 1836 plugins. Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers + :pypi:`pytest-markdir` + *last release*: Feb 01, 2026, + *status*: N/A, + *requires*: pytest<10,>=8.0 + + + :pypi:`pytest-markdoctest` *last release*: Jul 22, 2022, *status*: 4 - Beta, @@ -9086,9 +9113,9 @@ This list contains 1836 plugins. PyTest Molecule Plugin :: discover and run molecule tests :pypi:`pytest-mongo` - *last release*: Aug 01, 2025, + *last release*: Feb 04, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=6.2 + *requires*: pytest>=8.4 MongoDB process and client fixtures plugin for Pytest. @@ -9345,7 +9372,7 @@ This list contains 1836 plugins. pytest-neo is a plugin for pytest that shows tests like screen of Matrix. :pypi:`pytest-neon` - *last release*: Jan 29, 2026, + *last release*: Feb 05, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -9667,7 +9694,7 @@ This list contains 1836 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Jan 31, 2026, + *last release*: Feb 04, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10073,9 +10100,9 @@ This list contains 1836 plugins. Run the tests related to the changed files :pypi:`pytest-pickle-cache` - *last release*: Feb 17, 2025, - *status*: N/A, - *requires*: pytest>=7 + *last release*: Feb 06, 2026, + *status*: 4 - Beta, + *requires*: pytest>=9 A pytest plugin for caching test results using pickle. @@ -10143,7 +10170,7 @@ This list contains 1836 plugins. runs tests in an order such that coverage increases as fast as possible :pypi:`pytest-platform-adapter` - *last release*: Dec 15, 2025, + *last release*: Feb 04, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.5 @@ -10241,7 +10268,7 @@ This list contains 1836 plugins. A pytest fixture for visual testing with Playwright :pypi:`pytest-playwright-visual-snapshot` - *last release*: Jan 26, 2026, + *last release*: Feb 05, 2026, *status*: N/A, *requires*: N/A @@ -10276,7 +10303,7 @@ This list contains 1836 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Jan 18, 2026, + *last release*: Feb 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -10296,6 +10323,13 @@ This list contains 1836 plugins. + :pypi:`pytest-podman` + *last release*: Feb 03, 2026, + *status*: N/A, + *requires*: N/A + + Pytest plugin for Podman integration + :pypi:`pytest-pogo` *last release*: Jan 20, 2026, *status*: 4 - Beta, @@ -10605,7 +10639,7 @@ This list contains 1836 plugins. pytest plugin for push report to minio :pypi:`pytest-pve-cloud` - *last release*: Jan 29, 2026, + *last release*: Feb 04, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -11123,7 +11157,7 @@ This list contains 1836 plugins. Easy to use fixtures to write regression tests. :pypi:`pytest-regtest` - *last release*: Oct 11, 2025, + *last release*: Feb 06, 2026, *status*: N/A, *requires*: pytest>7.2 @@ -11620,7 +11654,7 @@ This list contains 1836 plugins. :pypi:`pytest-revealtype-injector` - *last release*: Jan 09, 2026, + *last release*: Feb 03, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -11907,7 +11941,7 @@ This list contains 1836 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Jan 27, 2026, + *last release*: Feb 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -11998,7 +12032,7 @@ This list contains 1836 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Jan 27, 2026, + *last release*: Feb 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12600,9 +12634,9 @@ This list contains 1836 plugins. Doctest plugin for pytest with support for Sphinx-specific doctest-directives :pypi:`pytest-spiratest` - *last release*: Jan 01, 2024, + *last release*: Feb 08, 2026, *status*: N/A, - *requires*: N/A + *requires*: pytest>=3.0.0 Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) @@ -12621,9 +12655,9 @@ This list contains 1836 plugins. Pytest plugin for the splinter automation library :pypi:`pytest-split` - *last release*: Oct 16, 2024, + *last release*: Feb 03, 2026, *status*: 4 - Beta, - *requires*: pytest<9,>=5 + *requires*: pytest<10,>=5 Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. @@ -13187,6 +13221,13 @@ This list contains 1836 plugins. Test configuration plugin for pytest. + :pypi:`pytest-testcontainers-compose` + *last release*: Feb 04, 2026, + *status*: N/A, + *requires*: N/A + + Pytest plugin for Docker Compose + :pypi:`pytest-testdata` *last release*: Aug 30, 2024, *status*: N/A, @@ -13223,7 +13264,7 @@ This list contains 1836 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. :pypi:`pytest-testinel` - *last release*: Jan 22, 2026, + *last release*: Feb 06, 2026, *status*: 4 - Beta, *requires*: pytest>=7 @@ -14118,6 +14159,13 @@ This list contains 1836 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. + :pypi:`pytest-vigil` + *last release*: Feb 06, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=9.0.0 + + A pytest plugin for enhanced test reliability and monitoring + :pypi:`pytest-vimqf` *last release*: Feb 08, 2021, *status*: 4 - Beta, From d2d6a424f9a4e66d1944469995dc7d7d28cc527c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 03:04:15 +0000 Subject: [PATCH 158/307] build(deps): Bump re-actors/alls-green Bumps [re-actors/alls-green](https://github.com/re-actors/alls-green) from 2765efec08f0fd63e83ad900f5fd75646be69ff6 to a638d6464689bbb24c325bb3fe9404d63a913030. - [Release notes](https://github.com/re-actors/alls-green/releases) - [Commits](https://github.com/re-actors/alls-green/compare/2765efec08f0fd63e83ad900f5fd75646be69ff6...a638d6464689bbb24c325bb3fe9404d63a913030) --- updated-dependencies: - dependency-name: re-actors/alls-green dependency-version: a638d6464689bbb24c325bb3fe9404d63a913030 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9dbfbf4b2a3..e755f52ca65 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -302,6 +302,6 @@ jobs: steps: - name: Decide whether the needed jobs succeeded or failed - uses: re-actors/alls-green@2765efec08f0fd63e83ad900f5fd75646be69ff6 + uses: re-actors/alls-green@a638d6464689bbb24c325bb3fe9404d63a913030 with: jobs: ${{ toJSON(needs) }} From 3076cbc087cb5f208515cbceb2f6e2e6529fa02a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 07:49:11 +0100 Subject: [PATCH 159/307] build(deps): Bump actions/cache from 5.0.2 to 5.0.3 (#14172) Bumps [actions/cache](https://github.com/actions/cache) from 5.0.2 to 5.0.3. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/8b402f58fbc84540c8b491a91e594a4576fec3d7...cdf6c1fa76f9f475f3d7449005a359c84ca0f306) --- updated-dependencies: - dependency-name: actions/cache dependency-version: 5.0.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index e52f82b03b1..adbee786a2f 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -31,7 +31,7 @@ jobs: python-version: "3.13" - name: requests-cache - uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2 + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: ~/.cache/pytest-plugin-list/ key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well From 2a522af6169e014a76871ff1820ed96160ebfb25 Mon Sep 17 00:00:00 2001 From: Freya Bruhin Date: Tue, 10 Feb 2026 15:59:41 +0100 Subject: [PATCH 160/307] Change my name --- .mailmap | 2 ++ AUTHORS | 2 +- CITATION | 8 ++++---- CODE_OF_CONDUCT.md | 2 +- doc/en/announce/release-2.8.2.rst | 2 +- doc/en/announce/release-2.8.3.rst | 2 +- doc/en/announce/release-2.8.4.rst | 6 +++--- doc/en/announce/release-2.8.6.rst | 2 +- doc/en/announce/release-2.9.0.rst | 2 +- doc/en/announce/release-2.9.1.rst | 2 +- doc/en/announce/release-2.9.2.rst | 2 +- doc/en/announce/release-3.0.0.rst | 2 +- doc/en/announce/release-3.0.1.rst | 2 +- doc/en/announce/release-3.0.2.rst | 2 +- doc/en/announce/release-3.0.3.rst | 2 +- doc/en/announce/release-3.0.4.rst | 2 +- doc/en/announce/release-3.0.7.rst | 2 +- doc/en/announce/release-3.1.0.rst | 2 +- doc/en/announce/release-3.1.1.rst | 2 +- doc/en/announce/release-3.1.2.rst | 2 +- doc/en/announce/release-3.2.0.rst | 2 +- doc/en/announce/release-3.2.1.rst | 2 +- doc/en/announce/release-3.2.4.rst | 2 +- doc/en/announce/release-3.3.0.rst | 2 +- doc/en/announce/release-3.3.1.rst | 2 +- doc/en/announce/release-3.3.2.rst | 2 +- doc/en/announce/release-3.4.0.rst | 2 +- doc/en/announce/release-3.4.1.rst | 2 +- doc/en/announce/release-3.4.2.rst | 2 +- doc/en/announce/release-3.5.0.rst | 2 +- doc/en/announce/release-5.0.0.rst | 2 +- doc/en/announce/release-5.0.1.rst | 2 +- doc/en/announce/release-5.1.0.rst | 2 +- doc/en/announce/release-5.1.1.rst | 2 +- doc/en/announce/release-5.2.1.rst | 2 +- doc/en/announce/release-5.2.2.rst | 2 +- doc/en/announce/release-5.2.3.rst | 2 +- doc/en/announce/release-5.3.1.rst | 2 +- doc/en/announce/release-6.0.0rc1.rst | 2 +- doc/en/announce/release-6.1.0.rst | 2 +- doc/en/announce/release-6.2.0.rst | 2 +- doc/en/announce/release-6.2.4.rst | 2 +- doc/en/announce/release-6.2.5.rst | 2 +- doc/en/announce/release-7.0.0.rst | 2 +- doc/en/announce/release-7.0.0rc1.rst | 2 +- doc/en/announce/release-7.1.0.rst | 2 +- doc/en/announce/release-7.2.0.rst | 2 +- doc/en/announce/release-7.3.0.rst | 2 +- doc/en/announce/release-7.4.0.rst | 2 +- doc/en/announce/release-7.4.1.rst | 2 +- doc/en/announce/release-8.0.0rc1.rst | 2 +- doc/en/announce/release-8.1.0.rst | 2 +- doc/en/announce/release-8.2.0.rst | 2 +- doc/en/announce/release-8.3.0.rst | 2 +- doc/en/announce/release-8.3.3.rst | 2 +- doc/en/announce/release-8.3.4.rst | 2 +- doc/en/announce/release-8.3.5.rst | 2 +- doc/en/announce/release-8.4.0.rst | 2 +- doc/en/announce/release-8.4.2.rst | 2 +- doc/en/announce/release-9.0.0.rst | 2 +- doc/en/announce/release-9.0.2.rst | 2 +- doc/en/changelog.rst | 12 ++++++------ doc/en/contact.rst | 4 ++-- doc/en/talks.rst | 12 ++++++------ pyproject.toml | 2 +- 65 files changed, 82 insertions(+), 80 deletions(-) create mode 100644 .mailmap diff --git a/.mailmap b/.mailmap new file mode 100644 index 00000000000..682334c7430 --- /dev/null +++ b/.mailmap @@ -0,0 +1,2 @@ +Freya Bruhin +Freya Bruhin diff --git a/AUTHORS b/AUTHORS index 09c5872fe07..06b64d73d46 100644 --- a/AUTHORS +++ b/AUTHORS @@ -171,11 +171,11 @@ faph Felix Hofstätter Felix Nieuwenhuizen Feng Ma -Florian Bruhin Florian Dahlitz Floris Bruynooghe Frank Hoffmann Fraser Stark +Freya Bruhin Gabriel Landau Gabriel Reis Garvit Shubham diff --git a/CITATION b/CITATION index 98beee72209..ac7c5d6f312 100644 --- a/CITATION +++ b/CITATION @@ -10,19 +10,19 @@ BibLaTeX: @software{pytest, title = {pytest x.y}, - author = {Holger Krekel and Bruno Oliveira and Ronny Pfannschmidt and Floris Bruynooghe and Brianna Laugher and Florian Bruhin}, + author = {Holger Krekel and Bruno Oliveira and Ronny Pfannschmidt and Floris Bruynooghe and Brianna Laugher and Freya Bruhin}, year = {2004}, version = {x.y}, url = {https://github.com/pytest-dev/pytest}, - note = {Contributors: Holger Krekel and Bruno Oliveira and Ronny Pfannschmidt and Floris Bruynooghe and Brianna Laugher and Florian Bruhin and others} + note = {Contributors: Holger Krekel and Bruno Oliveira and Ronny Pfannschmidt and Floris Bruynooghe and Brianna Laugher and Freya Bruhin and others} } BibTeX: @misc{pytest, - author = {Holger Krekel and Bruno Oliveira and Ronny Pfannschmidt and Floris Bruynooghe and Brianna Laugher and Florian Bruhin}, + author = {Holger Krekel and Bruno Oliveira and Ronny Pfannschmidt and Floris Bruynooghe and Brianna Laugher and Freya Bruhin}, title = {pytest x.y}, year = {2004}, howpublished = {\url{https://github.com/pytest-dev/pytest}}, - note = {Version x.y. Contributors include Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin, and others.} + note = {Version x.y. Contributors include Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Freya Bruhin, and others.} } diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index f0ca304be4e..14d56263449 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -70,7 +70,7 @@ contacted individually: - Brianna Laugher ([@pfctdayelise](https://github.com/pfctdayelise)): brianna@laugher.id.au - Bruno Oliveira ([@nicoddemus](https://github.com/nicoddemus)): nicoddemus@gmail.com -- Florian Bruhin ([@the-compiler](https://github.com/the-compiler)): pytest@the-compiler.org +- Freya Bruhin ([@the-compiler](https://github.com/the-compiler)): pytest@the-compiler.org ## Attribution diff --git a/doc/en/announce/release-2.8.2.rst b/doc/en/announce/release-2.8.2.rst index e4726338852..f64ea9bb29a 100644 --- a/doc/en/announce/release-2.8.2.rst +++ b/doc/en/announce/release-2.8.2.rst @@ -17,7 +17,7 @@ Thanks to all who contributed to this release, among them: Bruno Oliveira Demian Brecht - Florian Bruhin + Freya Bruhin Ionel Cristian Mărieș Raphael Pierzina Ronny Pfannschmidt diff --git a/doc/en/announce/release-2.8.3.rst b/doc/en/announce/release-2.8.3.rst index 3f357252bb6..1ea7aac6d74 100644 --- a/doc/en/announce/release-2.8.3.rst +++ b/doc/en/announce/release-2.8.3.rst @@ -16,7 +16,7 @@ As usual, you can upgrade from pypi via:: Thanks to all who contributed to this release, among them: Bruno Oliveira - Florian Bruhin + Freya Bruhin Gabe Hollombe Gabriel Reis Hartmut Goebel diff --git a/doc/en/announce/release-2.8.4.rst b/doc/en/announce/release-2.8.4.rst index adbdecc87ea..0605c986928 100644 --- a/doc/en/announce/release-2.8.4.rst +++ b/doc/en/announce/release-2.8.4.rst @@ -16,7 +16,7 @@ As usual, you can upgrade from pypi via:: Thanks to all who contributed to this release, among them: Bruno Oliveira - Florian Bruhin + Freya Bruhin Jeff Widman Mehdy Khoshnoody Nicholas Chammas @@ -43,10 +43,10 @@ The py.test Development Team non-ascii characters. Thanks Bruno Oliveira for the PR. - fix #1204: another error when collecting with a nasty __getattr__(). - Thanks Florian Bruhin for the PR. + Thanks Freya Bruhin for the PR. - fix the summary printed when no tests did run. - Thanks Florian Bruhin for the PR. + Thanks Freya Bruhin for the PR. - a number of documentation modernizations wrt good practices. Thanks Bruno Oliveira for the PR. diff --git a/doc/en/announce/release-2.8.6.rst b/doc/en/announce/release-2.8.6.rst index 5d6565b16a3..a63c7f1e38d 100644 --- a/doc/en/announce/release-2.8.6.rst +++ b/doc/en/announce/release-2.8.6.rst @@ -18,7 +18,7 @@ Thanks to all who contributed to this release, among them: AMiT Kumar Bruno Oliveira Erik M. Bray - Florian Bruhin + Freya Bruhin Georgy Dyuldin Jeff Widman Kartik Singhal diff --git a/doc/en/announce/release-2.9.0.rst b/doc/en/announce/release-2.9.0.rst index 753bb7bf6f0..9477f0a9ba3 100644 --- a/doc/en/announce/release-2.9.0.rst +++ b/doc/en/announce/release-2.9.0.rst @@ -18,7 +18,7 @@ Thanks to all who contributed to this release, among them: Bruno Oliveira Buck Golemon David Vierra - Florian Bruhin + Freya Bruhin Galaczi Endre Georgy Dyuldin Lukas Bednar diff --git a/doc/en/announce/release-2.9.1.rst b/doc/en/announce/release-2.9.1.rst index 7a46d2ae690..3880218d233 100644 --- a/doc/en/announce/release-2.9.1.rst +++ b/doc/en/announce/release-2.9.1.rst @@ -17,7 +17,7 @@ Thanks to all who contributed to this release, among them: Bruno Oliveira Daniel Hahler Dmitry Malinovsky - Florian Bruhin + Freya Bruhin Floris Bruynooghe Matt Bachmann Ronny Pfannschmidt diff --git a/doc/en/announce/release-2.9.2.rst b/doc/en/announce/release-2.9.2.rst index 3e75af7fe69..3dc00b46729 100644 --- a/doc/en/announce/release-2.9.2.rst +++ b/doc/en/announce/release-2.9.2.rst @@ -17,7 +17,7 @@ Thanks to all who contributed to this release, among them: Adam Chainz Benjamin Dopplinger Bruno Oliveira - Florian Bruhin + Freya Bruhin John Towler Martin Prusse Meng Jue diff --git a/doc/en/announce/release-3.0.0.rst b/doc/en/announce/release-3.0.0.rst index 5de38911482..b201b901eb7 100644 --- a/doc/en/announce/release-3.0.0.rst +++ b/doc/en/announce/release-3.0.0.rst @@ -39,7 +39,7 @@ Thanks to all who contributed to this release, among them: Dmitry Dygalo Edoardo Batini Eli Boyarski - Florian Bruhin + Freya Bruhin Floris Bruynooghe Greg Price Guyzmo diff --git a/doc/en/announce/release-3.0.1.rst b/doc/en/announce/release-3.0.1.rst index 8f5cfe411aa..b36587f983a 100644 --- a/doc/en/announce/release-3.0.1.rst +++ b/doc/en/announce/release-3.0.1.rst @@ -17,7 +17,7 @@ Thanks to all who contributed to this release, among them: Bruno Oliveira Daniel Hahler Dmitry Dygalo - Florian Bruhin + Freya Bruhin Marcin Bachry Ronny Pfannschmidt matthiasha diff --git a/doc/en/announce/release-3.0.2.rst b/doc/en/announce/release-3.0.2.rst index 86ba82ca6e6..9b1f2acd60d 100644 --- a/doc/en/announce/release-3.0.2.rst +++ b/doc/en/announce/release-3.0.2.rst @@ -14,7 +14,7 @@ Thanks to all who contributed to this release, among them: * Ahn Ki-Wook * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Jordan Guymon * Raphael Pierzina * Ronny Pfannschmidt diff --git a/doc/en/announce/release-3.0.3.rst b/doc/en/announce/release-3.0.3.rst index 89a2e0c744e..05bdf4dcd16 100644 --- a/doc/en/announce/release-3.0.3.rst +++ b/doc/en/announce/release-3.0.3.rst @@ -13,7 +13,7 @@ The changelog is available at http://doc.pytest.org/en/stable/changelog.html. Thanks to all who contributed to this release, among them: * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Floris Bruynooghe * Huayi Zhang * Lev Maximov diff --git a/doc/en/announce/release-3.0.4.rst b/doc/en/announce/release-3.0.4.rst index 72c2d29464d..ba37bba2111 100644 --- a/doc/en/announce/release-3.0.4.rst +++ b/doc/en/announce/release-3.0.4.rst @@ -14,7 +14,7 @@ Thanks to all who contributed to this release, among them: * Bruno Oliveira * Dan Wandschneider -* Florian Bruhin +* Freya Bruhin * Georgy Dyuldin * Grigorii Eremeev * Jason R. Coombs diff --git a/doc/en/announce/release-3.0.7.rst b/doc/en/announce/release-3.0.7.rst index 4b7e075e76a..782910ae6a4 100644 --- a/doc/en/announce/release-3.0.7.rst +++ b/doc/en/announce/release-3.0.7.rst @@ -14,7 +14,7 @@ Thanks to all who contributed to this release, among them: * Anthony Sottile * Barney Gale * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Floris Bruynooghe * Ionel Cristian Mărieș * Katerina Koukiou diff --git a/doc/en/announce/release-3.1.0.rst b/doc/en/announce/release-3.1.0.rst index 55277067948..454c04c6430 100644 --- a/doc/en/announce/release-3.1.0.rst +++ b/doc/en/announce/release-3.1.0.rst @@ -27,7 +27,7 @@ Thanks to all who contributed to this release, among them: * David Giese * David Szotten * Dmitri Pribysh -* Florian Bruhin +* Freya Bruhin * Florian Schulze * Floris Bruynooghe * John Towler diff --git a/doc/en/announce/release-3.1.1.rst b/doc/en/announce/release-3.1.1.rst index 135b2fe8443..99fb0d0f801 100644 --- a/doc/en/announce/release-3.1.1.rst +++ b/doc/en/announce/release-3.1.1.rst @@ -12,7 +12,7 @@ The full changelog is available at http://doc.pytest.org/en/stable/changelog.htm Thanks to all who contributed to this release, among them: * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Floris Bruynooghe * Jason R. Coombs * Ronny Pfannschmidt diff --git a/doc/en/announce/release-3.1.2.rst b/doc/en/announce/release-3.1.2.rst index a9b85c4715c..3e988b17e84 100644 --- a/doc/en/announce/release-3.1.2.rst +++ b/doc/en/announce/release-3.1.2.rst @@ -14,7 +14,7 @@ Thanks to all who contributed to this release, among them: * Andreas Pelme * ApaDoctor * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Ronny Pfannschmidt * Segev Finer diff --git a/doc/en/announce/release-3.2.0.rst b/doc/en/announce/release-3.2.0.rst index edc66a28e78..68694493907 100644 --- a/doc/en/announce/release-3.2.0.rst +++ b/doc/en/announce/release-3.2.0.rst @@ -25,7 +25,7 @@ Thanks to all who contributed to this release, among them: * Andras Tim * Bruno Oliveira * Daniel Hahler -* Florian Bruhin +* Freya Bruhin * Floris Bruynooghe * John Still * Jordan Moldow diff --git a/doc/en/announce/release-3.2.1.rst b/doc/en/announce/release-3.2.1.rst index c40217d311d..a492390fa58 100644 --- a/doc/en/announce/release-3.2.1.rst +++ b/doc/en/announce/release-3.2.1.rst @@ -13,7 +13,7 @@ Thanks to all who contributed to this release, among them: * Alex Gaynor * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Ronny Pfannschmidt * Srinivas Reddy Thatiparthy diff --git a/doc/en/announce/release-3.2.4.rst b/doc/en/announce/release-3.2.4.rst index ff0b35781b1..9bde3afab3b 100644 --- a/doc/en/announce/release-3.2.4.rst +++ b/doc/en/announce/release-3.2.4.rst @@ -15,7 +15,7 @@ Thanks to all who contributed to this release, among them: * Christian Boelsen * Christoph Buchner * Daw-Ran Liou -* Florian Bruhin +* Freya Bruhin * Franck Michea * Leonard Lausen * Matty G diff --git a/doc/en/announce/release-3.3.0.rst b/doc/en/announce/release-3.3.0.rst index 1cbf2c448c8..d54910bea4c 100644 --- a/doc/en/announce/release-3.3.0.rst +++ b/doc/en/announce/release-3.3.0.rst @@ -27,7 +27,7 @@ Thanks to all who contributed to this release, among them: * Daniel Hahler * Dirk Thomas * Dmitry Malinovsky -* Florian Bruhin +* Freya Bruhin * George Y. Kussumoto * Hugo * Jesús Espino diff --git a/doc/en/announce/release-3.3.1.rst b/doc/en/announce/release-3.3.1.rst index 98b6fa6c1ba..a1a0a6d6f45 100644 --- a/doc/en/announce/release-3.3.1.rst +++ b/doc/en/announce/release-3.3.1.rst @@ -14,7 +14,7 @@ Thanks to all who contributed to this release, among them: * Bruno Oliveira * Daniel Hahler * Eugene Prikazchikov -* Florian Bruhin +* Freya Bruhin * Roland Puntaier * Ronny Pfannschmidt * Sebastian Rahlf diff --git a/doc/en/announce/release-3.3.2.rst b/doc/en/announce/release-3.3.2.rst index 7a2577d1ff8..8c4110cc350 100644 --- a/doc/en/announce/release-3.3.2.rst +++ b/doc/en/announce/release-3.3.2.rst @@ -15,7 +15,7 @@ Thanks to all who contributed to this release, among them: * Antony Lee * Austin * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Floris Bruynooghe * Henk-Jaap Wagenaar * Jurko Gospodnetić diff --git a/doc/en/announce/release-3.4.0.rst b/doc/en/announce/release-3.4.0.rst index 6ab5b124a25..8a8582f7a00 100644 --- a/doc/en/announce/release-3.4.0.rst +++ b/doc/en/announce/release-3.4.0.rst @@ -30,7 +30,7 @@ Thanks to all who contributed to this release, among them: * Brian Maissy * Bruno Oliveira * Cyrus Maden -* Florian Bruhin +* Freya Bruhin * Henk-Jaap Wagenaar * Ian Lesperance * Jon Dufresne diff --git a/doc/en/announce/release-3.4.1.rst b/doc/en/announce/release-3.4.1.rst index d83949453a2..bef05752698 100644 --- a/doc/en/announce/release-3.4.1.rst +++ b/doc/en/announce/release-3.4.1.rst @@ -16,7 +16,7 @@ Thanks to all who contributed to this release, among them: * Andy Freeland * Brian Maissy * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Jason R. Coombs * Marcin Bachry * Pedro Algarvio diff --git a/doc/en/announce/release-3.4.2.rst b/doc/en/announce/release-3.4.2.rst index 07cd9d3a8ba..5ab73986617 100644 --- a/doc/en/announce/release-3.4.2.rst +++ b/doc/en/announce/release-3.4.2.rst @@ -13,7 +13,7 @@ Thanks to all who contributed to this release, among them: * Allan Feldman * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Jason R. Coombs * Kyle Altendorf * Maik Figura diff --git a/doc/en/announce/release-3.5.0.rst b/doc/en/announce/release-3.5.0.rst index 6bc2f3cd0cb..7ce2fe3dfe0 100644 --- a/doc/en/announce/release-3.5.0.rst +++ b/doc/en/announce/release-3.5.0.rst @@ -26,7 +26,7 @@ Thanks to all who contributed to this release, among them: * Bruno Oliveira * Carlos Jenkins * Daniel Hahler -* Florian Bruhin +* Freya Bruhin * Jason R. Coombs * Jeffrey Rackauckas * Jordan Speicher diff --git a/doc/en/announce/release-5.0.0.rst b/doc/en/announce/release-5.0.0.rst index f5e593e9d88..166d4e565c3 100644 --- a/doc/en/announce/release-5.0.0.rst +++ b/doc/en/announce/release-5.0.0.rst @@ -26,7 +26,7 @@ Thanks to all who contributed to this release, among them: * Daniel Hahler * Dirk Thomas * Evan Kepner -* Florian Bruhin +* Freya Bruhin * Hugo * Kevin J. Foley * Pulkit Goyal diff --git a/doc/en/announce/release-5.0.1.rst b/doc/en/announce/release-5.0.1.rst index e16a8f716f1..f0ffb791545 100644 --- a/doc/en/announce/release-5.0.1.rst +++ b/doc/en/announce/release-5.0.1.rst @@ -15,7 +15,7 @@ Thanks to all who contributed to this release, among them: * Andreu Vallbona Plazas * Anthony Sottile * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Michael Moore * Niklas Meinzer * Thomas Grainger diff --git a/doc/en/announce/release-5.1.0.rst b/doc/en/announce/release-5.1.0.rst index 9ab54ff9730..6170023604a 100644 --- a/doc/en/announce/release-5.1.0.rst +++ b/doc/en/announce/release-5.1.0.rst @@ -27,7 +27,7 @@ Thanks to all who contributed to this release, among them: * Bruno Oliveira * Daniel Hahler * David Röthlisberger -* Florian Bruhin +* Freya Bruhin * Ilya Stepin * Jon Dufresne * Kaiqi diff --git a/doc/en/announce/release-5.1.1.rst b/doc/en/announce/release-5.1.1.rst index bb8de48014a..1262e94fd00 100644 --- a/doc/en/announce/release-5.1.1.rst +++ b/doc/en/announce/release-5.1.1.rst @@ -14,7 +14,7 @@ Thanks to all who contributed to this release, among them: * Anthony Sottile * Bruno Oliveira * Daniel Hahler -* Florian Bruhin +* Freya Bruhin * Hugo van Kemenade * Ran Benita * Ronny Pfannschmidt diff --git a/doc/en/announce/release-5.2.1.rst b/doc/en/announce/release-5.2.1.rst index fe42b9bf15f..904e1b59893 100644 --- a/doc/en/announce/release-5.2.1.rst +++ b/doc/en/announce/release-5.2.1.rst @@ -13,7 +13,7 @@ Thanks to all who contributed to this release, among them: * Anthony Sottile * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Hynek Schlawack * Kevin J. Foley * tadashigaki diff --git a/doc/en/announce/release-5.2.2.rst b/doc/en/announce/release-5.2.2.rst index 89fd6a534d4..015baba52e7 100644 --- a/doc/en/announce/release-5.2.2.rst +++ b/doc/en/announce/release-5.2.2.rst @@ -16,7 +16,7 @@ Thanks to all who contributed to this release, among them: * Anthony Sottile * Bruno Oliveira * Daniel Hahler -* Florian Bruhin +* Freya Bruhin * Nattaphoom Chaipreecha * Oliver Bestwalter * Philipp Loose diff --git a/doc/en/announce/release-5.2.3.rst b/doc/en/announce/release-5.2.3.rst index bab174495d9..8c89e04540a 100644 --- a/doc/en/announce/release-5.2.3.rst +++ b/doc/en/announce/release-5.2.3.rst @@ -17,7 +17,7 @@ Thanks to all who contributed to this release, among them: * Daniel Hahler * Daniil Galiev * David Szotten -* Florian Bruhin +* Freya Bruhin * Patrick Harmon * Ran Benita * Zac Hatfield-Dodds diff --git a/doc/en/announce/release-5.3.1.rst b/doc/en/announce/release-5.3.1.rst index d575bb70e3f..5dc82ab7d88 100644 --- a/doc/en/announce/release-5.3.1.rst +++ b/doc/en/announce/release-5.3.1.rst @@ -15,7 +15,7 @@ Thanks to all who contributed to this release, among them: * Bruno Oliveira * Daniel Hahler * Felix Yan -* Florian Bruhin +* Freya Bruhin * Mark Dickinson * Nikolay Kondratyev * Steffen Schroeder diff --git a/doc/en/announce/release-6.0.0rc1.rst b/doc/en/announce/release-6.0.0rc1.rst index 5690b514baf..6f0a745cd00 100644 --- a/doc/en/announce/release-6.0.0rc1.rst +++ b/doc/en/announce/release-6.0.0rc1.rst @@ -25,7 +25,7 @@ Thanks to all who contributed to this release, among them: * David Diaz Barquero * Fabio Zadrozny * Felix Nieuwenhuizen -* Florian Bruhin +* Freya Bruhin * Florian Dahlitz * Gleb Nikonorov * Hugo van Kemenade diff --git a/doc/en/announce/release-6.1.0.rst b/doc/en/announce/release-6.1.0.rst index f4b571ae846..0c787d0bd15 100644 --- a/doc/en/announce/release-6.1.0.rst +++ b/doc/en/announce/release-6.1.0.rst @@ -23,7 +23,7 @@ Thanks to all of the contributors to this release: * C. Titus Brown * Drew Devereux * Faris A Chugthai -* Florian Bruhin +* Freya Bruhin * Hugo van Kemenade * Hynek Schlawack * Joseph Lucas diff --git a/doc/en/announce/release-6.2.0.rst b/doc/en/announce/release-6.2.0.rst index af16b830ddd..8e99d8fcda5 100644 --- a/doc/en/announce/release-6.2.0.rst +++ b/doc/en/announce/release-6.2.0.rst @@ -30,7 +30,7 @@ Thanks to all of the contributors to this release: * Cserna Zsolt * Dominic Mortlock * Emiel van de Laar -* Florian Bruhin +* Freya Bruhin * Garvit Shubham * Gustavo Camargo * Hugo Martins diff --git a/doc/en/announce/release-6.2.4.rst b/doc/en/announce/release-6.2.4.rst index fa2e3e78132..129368e73cd 100644 --- a/doc/en/announce/release-6.2.4.rst +++ b/doc/en/announce/release-6.2.4.rst @@ -14,7 +14,7 @@ Thanks to all of the contributors to this release: * Anthony Sottile * Bruno Oliveira * Christian Maurer -* Florian Bruhin +* Freya Bruhin * Ran Benita diff --git a/doc/en/announce/release-6.2.5.rst b/doc/en/announce/release-6.2.5.rst index bc6b4cf4222..daf9731c800 100644 --- a/doc/en/announce/release-6.2.5.rst +++ b/doc/en/announce/release-6.2.5.rst @@ -15,7 +15,7 @@ Thanks to all of the contributors to this release: * Bruno Oliveira * Brylie Christopher Oxley * Daniel Asztalos -* Florian Bruhin +* Freya Bruhin * Jason Haugen * MapleCCC * Michał Górny diff --git a/doc/en/announce/release-7.0.0.rst b/doc/en/announce/release-7.0.0.rst index 3ce4335564f..934064df745 100644 --- a/doc/en/announce/release-7.0.0.rst +++ b/doc/en/announce/release-7.0.0.rst @@ -34,7 +34,7 @@ Thanks to all of the contributors to this release: * Emmanuel Arias * Emmanuel Meric de Bellefon * Eric Liu -* Florian Bruhin +* Freya Bruhin * GergelyKalmar * Graeme Smecher * Harshna diff --git a/doc/en/announce/release-7.0.0rc1.rst b/doc/en/announce/release-7.0.0rc1.rst index a5bf0ed3c44..dd6ecdd131b 100644 --- a/doc/en/announce/release-7.0.0rc1.rst +++ b/doc/en/announce/release-7.0.0rc1.rst @@ -38,7 +38,7 @@ Thanks to all the contributors to this release: * Emmanuel Arias * Emmanuel Meric de Bellefon * Eric Liu -* Florian Bruhin +* Freya Bruhin * GergelyKalmar * Graeme Smecher * Harshna diff --git a/doc/en/announce/release-7.1.0.rst b/doc/en/announce/release-7.1.0.rst index 3361e1c8a32..f138524c564 100644 --- a/doc/en/announce/release-7.1.0.rst +++ b/doc/en/announce/release-7.1.0.rst @@ -28,7 +28,7 @@ Thanks to all of the contributors to this release: * Elijah DeLee * Emmanuel Arias * Fabian Egli -* Florian Bruhin +* Freya Bruhin * Gabor Szabo * Hasan Ramezani * Hugo van Kemenade diff --git a/doc/en/announce/release-7.2.0.rst b/doc/en/announce/release-7.2.0.rst index eca84aeb669..44cd553ec0f 100644 --- a/doc/en/announce/release-7.2.0.rst +++ b/doc/en/announce/release-7.2.0.rst @@ -33,7 +33,7 @@ Thanks to all of the contributors to this release: * EmptyRabbit * Ezio Melotti * Florian Best -* Florian Bruhin +* Freya Bruhin * Fredrik Berndtsson * Gabriel Landau * Gergely Kalmár diff --git a/doc/en/announce/release-7.3.0.rst b/doc/en/announce/release-7.3.0.rst index 33258dabade..b6d8379d5b5 100644 --- a/doc/en/announce/release-7.3.0.rst +++ b/doc/en/announce/release-7.3.0.rst @@ -42,7 +42,7 @@ Thanks to all of the contributors to this release: * Ezio Melotti * Felix Hofstätter * Florian Best -* Florian Bruhin +* Freya Bruhin * Fredrik Berndtsson * Gabriel Landau * Garvit Shubham diff --git a/doc/en/announce/release-7.4.0.rst b/doc/en/announce/release-7.4.0.rst index 5a0d18267d3..fef2ad6cb3d 100644 --- a/doc/en/announce/release-7.4.0.rst +++ b/doc/en/announce/release-7.4.0.rst @@ -27,7 +27,7 @@ Thanks to all of the contributors to this release: * Bryan Ricker * Chris Mahoney * Facundo Batista -* Florian Bruhin +* Freya Bruhin * Jarrett Keifer * Kenny Y * Miro Hrončok diff --git a/doc/en/announce/release-7.4.1.rst b/doc/en/announce/release-7.4.1.rst index efadcf919e8..4e22d3ead66 100644 --- a/doc/en/announce/release-7.4.1.rst +++ b/doc/en/announce/release-7.4.1.rst @@ -12,7 +12,7 @@ The full changelog is available at https://docs.pytest.org/en/stable/changelog.h Thanks to all of the contributors to this release: * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Ran Benita diff --git a/doc/en/announce/release-8.0.0rc1.rst b/doc/en/announce/release-8.0.0rc1.rst index 547c8cbc53b..0cbfc3dad59 100644 --- a/doc/en/announce/release-8.0.0rc1.rst +++ b/doc/en/announce/release-8.0.0rc1.rst @@ -31,7 +31,7 @@ Thanks to all of the contributors to this release: * Christoph Anton Mitterer * DetachHead * Erik Hasse -* Florian Bruhin +* Freya Bruhin * Fraser Stark * Ha Pam * Hugo van Kemenade diff --git a/doc/en/announce/release-8.1.0.rst b/doc/en/announce/release-8.1.0.rst index 62cafdd78bb..6762bd412fe 100644 --- a/doc/en/announce/release-8.1.0.rst +++ b/doc/en/announce/release-8.1.0.rst @@ -28,7 +28,7 @@ Thanks to all of the contributors to this release: * Eric Larson * Fabian Sturm * Faisal Fawad -* Florian Bruhin +* Freya Bruhin * Franck Charras * Joachim B Haga * John Litborn diff --git a/doc/en/announce/release-8.2.0.rst b/doc/en/announce/release-8.2.0.rst index 2a63c8d8722..7aba492d7da 100644 --- a/doc/en/announce/release-8.2.0.rst +++ b/doc/en/announce/release-8.2.0.rst @@ -20,7 +20,7 @@ Thanks to all of the contributors to this release: * Bruno Oliveira * Daniel Miller -* Florian Bruhin +* Freya Bruhin * HolyMagician03-UMich * John Litborn * Levon Saldamli diff --git a/doc/en/announce/release-8.3.0.rst b/doc/en/announce/release-8.3.0.rst index ec5cd3d0db9..0589aedfa89 100644 --- a/doc/en/announce/release-8.3.0.rst +++ b/doc/en/announce/release-8.3.0.rst @@ -24,7 +24,7 @@ Thanks to all of the contributors to this release: * Bruno Oliveira * Cornelius Riemenschneider * Farbod Ahmadian -* Florian Bruhin +* Freya Bruhin * Hynek Schlawack * James Frost * Jason R. Coombs diff --git a/doc/en/announce/release-8.3.3.rst b/doc/en/announce/release-8.3.3.rst index 5e3eb36b921..6e73714d4f9 100644 --- a/doc/en/announce/release-8.3.3.rst +++ b/doc/en/announce/release-8.3.3.rst @@ -16,7 +16,7 @@ Thanks to all of the contributors to this release: * Bruno Oliveira * Christian Clauss * Eugene Mwangi -* Florian Bruhin +* Freya Bruhin * GTowers1 * Nauman Ahmed * Pierre Sassoulas diff --git a/doc/en/announce/release-8.3.4.rst b/doc/en/announce/release-8.3.4.rst index f76d60396dc..3ec21d73f5e 100644 --- a/doc/en/announce/release-8.3.4.rst +++ b/doc/en/announce/release-8.3.4.rst @@ -12,7 +12,7 @@ The full changelog is available at https://docs.pytest.org/en/stable/changelog.h Thanks to all of the contributors to this release: * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * Frank Hoffmann * Jakob van Santen * Leonardus Chen diff --git a/doc/en/announce/release-8.3.5.rst b/doc/en/announce/release-8.3.5.rst index 3de02c1d7a4..21bae869180 100644 --- a/doc/en/announce/release-8.3.5.rst +++ b/doc/en/announce/release-8.3.5.rst @@ -10,7 +10,7 @@ The full changelog is available at https://docs.pytest.org/en/stable/changelog.h Thanks to all of the contributors to this release: * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * John Litborn * Kenny Y * Ran Benita diff --git a/doc/en/announce/release-8.4.0.rst b/doc/en/announce/release-8.4.0.rst index 65e80a55919..f492d45070a 100644 --- a/doc/en/announce/release-8.4.0.rst +++ b/doc/en/announce/release-8.4.0.rst @@ -38,7 +38,7 @@ Thanks to all of the contributors to this release: * Deysha Rivera * Emil Hjelm * Eugene Mwangi -* Florian Bruhin +* Freya Bruhin * Frank Hoffmann * GTowers1 * Guillaume Gauvrit diff --git a/doc/en/announce/release-8.4.2.rst b/doc/en/announce/release-8.4.2.rst index 58a842c4d4b..3111e85bd0f 100644 --- a/doc/en/announce/release-8.4.2.rst +++ b/doc/en/announce/release-8.4.2.rst @@ -12,7 +12,7 @@ Thanks to all of the contributors to this release: * AD * Aditi De * Bruno Oliveira -* Florian Bruhin +* Freya Bruhin * John Litborn * Liam DeVoe * Marc Mueller diff --git a/doc/en/announce/release-9.0.0.rst b/doc/en/announce/release-9.0.0.rst index 86dd828f045..67d4f95a56d 100644 --- a/doc/en/announce/release-9.0.0.rst +++ b/doc/en/announce/release-9.0.0.rst @@ -27,7 +27,7 @@ Thanks to all of the contributors to this release: * CoretexShadow * Cornelius Roemer * Eero Vaher -* Florian Bruhin +* Freya Bruhin * Harsha Sai * Hossein * Israël Hallé diff --git a/doc/en/announce/release-9.0.2.rst b/doc/en/announce/release-9.0.2.rst index f15a2dc8e13..f184e1aa4b2 100644 --- a/doc/en/announce/release-9.0.2.rst +++ b/doc/en/announce/release-9.0.2.rst @@ -12,7 +12,7 @@ Thanks to all of the contributors to this release: * Alex Waygood * Bruno Oliveira * Fazeel Usmani -* Florian Bruhin +* Freya Bruhin * Ran Benita * Tom Most * 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index b2699f4e0cc..e33a68a5015 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -9374,10 +9374,10 @@ time or change existing behaviors in order to make them less surprising/more use non-ascii characters. Thanks Bruno Oliveira for the PR. - fix #1204: another error when collecting with a nasty __getattr__(). - Thanks Florian Bruhin for the PR. + Thanks Freya Bruhin for the PR. - fix the summary printed when no tests did run. - Thanks Florian Bruhin for the PR. + Thanks Freya Bruhin for the PR. - fix #1185 - ensure MANIFEST.in exactly matches what should go to a sdist - a number of documentation modernizations wrt good practices. @@ -9499,7 +9499,7 @@ time or change existing behaviors in order to make them less surprising/more use - fix issue934: when string comparison fails and a diff is too large to display without passing -vv, still show a few lines of the diff. - Thanks Florian Bruhin for the report and Bruno Oliveira for the PR. + Thanks Freya Bruhin for the report and Bruno Oliveira for the PR. - fix issue736: Fix a bug where fixture params would be discarded when combined with parametrization markers. @@ -9512,7 +9512,7 @@ time or change existing behaviors in order to make them less surprising/more use - parametrize now also generates meaningful test IDs for enum, regex and class objects (as opposed to class instances). - Thanks to Florian Bruhin for the PR. + Thanks to Freya Bruhin for the PR. - Add 'warns' to assert that warnings are thrown (like 'raises'). Thanks to Eric Hunsberger for the PR. @@ -9639,7 +9639,7 @@ time or change existing behaviors in order to make them less surprising/more use one will also have a "reprec" attribute with the recorded events/reports. - fix monkeypatch.setattr("x.y", raising=False) to actually not raise - if "y" is not a preexisting attribute. Thanks Florian Bruhin. + if "y" is not a preexisting attribute. Thanks Freya Bruhin. - fix issue741: make running output from testdir.run copy/pasteable Thanks Bruno Oliveira. @@ -9699,7 +9699,7 @@ time or change existing behaviors in order to make them less surprising/more use - fix issue833: --fixtures now shows all fixtures of collected test files, instead of just the fixtures declared on the first one. - Thanks Florian Bruhin for reporting and Bruno Oliveira for the PR. + Thanks Freya Bruhin for reporting and Bruno Oliveira for the PR. - fix issue863: skipped tests now report the correct reason when a skip/xfail condition is met when using multiple markers. diff --git a/doc/en/contact.rst b/doc/en/contact.rst index b2a1368eaba..311224eeef0 100644 --- a/doc/en/contact.rst +++ b/doc/en/contact.rst @@ -40,7 +40,7 @@ Mail in the pytest core team, who can also be contacted individually: * Bruno Oliveira (:user:`nicoddemus`, `bruno@pytest.org `_) - * Florian Bruhin (:user:`The-Compiler`, `florian@pytest.org `_) + * Freya Bruhin (:user:`The-Compiler`, `freya@pytest.org `_) * Pierre Sassoulas (:user:`Pierre-Sassoulas`, `pierre@pytest.org `_) * Ran Benita (:user:`bluetech`, `ran@pytest.org `_) * Ronny Pfannschmidt (:user:`RonnyPfannschmidt`, `ronny@pytest.org `_) @@ -51,7 +51,7 @@ Other - The :doc:`contribution guide ` for help on submitting pull requests to GitHub. -- Florian Bruhin (:user:`The-Compiler`) offers pytest professional teaching and +- Freya Bruhin (:user:`The-Compiler`) offers pytest professional teaching and consulting via `Bruhin Software `_. .. _`pytest issue tracker`: https://github.com/pytest-dev/pytest/issues diff --git a/doc/en/talks.rst b/doc/en/talks.rst index b9b153a792e..a45c05c6f2f 100644 --- a/doc/en/talks.rst +++ b/doc/en/talks.rst @@ -17,19 +17,19 @@ Books Talks and blog postings --------------------------------------------- -- Training: `pytest - simple, rapid and fun testing with Python `_, Florian Bruhin, PyConDE 2022 +- Training: `pytest - simple, rapid and fun testing with Python `_, Freya Bruhin, PyConDE 2022 -- `pytest: Simple, rapid and fun testing with Python, `_ (@ 4:22:32), Florian Bruhin, WeAreDevelopers World Congress 2021 +- `pytest: Simple, rapid and fun testing with Python, `_ (@ 4:22:32), Freya Bruhin, WeAreDevelopers World Congress 2021 -- Webinar: `pytest: Test Driven Development für Python (German) `_, Florian Bruhin, via mylearning.ch, 2020 +- Webinar: `pytest: Test Driven Development für Python (German) `_, Freya Bruhin, via mylearning.ch, 2020 - Webinar: `Simplify Your Tests with Fixtures `_, Oliver Bestwalter, via JetBrains, 2020 -- Training: `Introduction to pytest - simple, rapid and fun testing with Python `_, Florian Bruhin, PyConDE 2019 +- Training: `Introduction to pytest - simple, rapid and fun testing with Python `_, Freya Bruhin, PyConDE 2019 - Abridged metaprogramming classics - this episode: pytest, Oliver Bestwalter, PyConDE 2019 (`repository `__, `recording `__) -- Testing PySide/PyQt code easily using the pytest framework, Florian Bruhin, Qt World Summit 2019 (`slides `__, `recording `__) +- Testing PySide/PyQt code easily using the pytest framework, Freya Bruhin, Qt World Summit 2019 (`slides `__, `recording `__) - `pytest: recommendations, basic packages for testing in Python and Django, Andreu Vallbona, PyBCN June 2019 `_. @@ -41,7 +41,7 @@ Talks and blog postings - `Pythonic testing, Igor Starikov (Russian, PyNsk, November 2016) `_. -- `pytest - Rapid Simple Testing, Florian Bruhin, Swiss Python Summit 2016 +- `pytest - Rapid Simple Testing, Freya Bruhin, Swiss Python Summit 2016 `_. - `Improve your testing with Pytest and Mock, Gabe Hollombe, PyCon SG 2015 diff --git a/pyproject.toml b/pyproject.toml index d0aa0edef93..4b55d1bf1f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ license-files = [ "LICENSE" ] authors = [ { name = "Brianna Laugher" }, { name = "Bruno Oliveira" }, - { name = "Florian Bruhin" }, + { name = "Freya Bruhin" }, { name = "Floris Bruynooghe" }, { name = "Holger Krekel" }, { name = "Others (See AUTHORS)" }, From f1bd1e5f0165eaeade903edbde89720fbbb970ff Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:01:57 +0000 Subject: [PATCH 161/307] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4b55d1bf1f0..7ae76a3c8dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,8 +18,8 @@ license-files = [ "LICENSE" ] authors = [ { name = "Brianna Laugher" }, { name = "Bruno Oliveira" }, - { name = "Freya Bruhin" }, { name = "Floris Bruynooghe" }, + { name = "Freya Bruhin" }, { name = "Holger Krekel" }, { name = "Others (See AUTHORS)" }, { name = "Ronny Pfannschmidt" }, From e77b9a403f94b4a70d588b62ca4dfb66060b84b4 Mon Sep 17 00:00:00 2001 From: Freya Date: Tue, 10 Feb 2026 16:31:37 +0100 Subject: [PATCH 162/307] doc: Adjust training info (#14174) The training will be remote-only due to lack of on-site signups --- doc/en/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/index.rst b/doc/en/index.rst index b98c886d981..77b502e3e41 100644 --- a/doc/en/index.rst +++ b/doc/en/index.rst @@ -2,7 +2,7 @@ .. sidebar:: **Next Open Trainings and Events** - - `Professional Testing with Python `_, via `Python Academy `_ (3 day in-depth training), **March 3th -- 5th 2026**, Leipzig (DE) / Remote + - `Professional Testing with Python `_, via `Python Academy `_ (3 day in-depth training), **March 3th -- 5th 2026**, Remote Also see :doc:`previous talks and blogposts ` From bda18de6ab84023bd08baf620bc2430f41eb4b5c Mon Sep 17 00:00:00 2001 From: Alejandro Villate <145073504+aleguy02@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:28:01 -0500 Subject: [PATCH 163/307] Upload junit reports codecov (#13778) Automate uploading JUnit reports to codecov in the test pipeline. An example pipeline run with the changes can be found here (https://github.com/aleguy02/fork-pytest/actions/runs/18184970357). An example of what the codecov UI looks like with these changes can be found here (https://app.codecov.io/gh/aleguy02/fork-pytest/tests). Closes #12689 --- .github/workflows/test.yml | 12 ++++++++++++ AUTHORS | 1 + changelog/12689.contrib.rst | 5 +++++ tox.ini | 4 ++-- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 changelog/12689.contrib.rst diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e755f52ca65..94b14299191 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -277,11 +277,15 @@ jobs: - name: Test without coverage if: "! matrix.use_coverage" shell: bash + env: + _PYTEST_TOX_POSARGS_JUNIT: --junitxml=junit.xml run: tox run -e ${{ matrix.tox_env }} --installpkg `find dist/*.tar.gz` - name: Test with coverage if: "matrix.use_coverage" shell: bash + env: + _PYTEST_TOX_POSARGS_JUNIT: --junitxml=junit.xml run: tox run -e ${{ matrix.tox_env }}-coverage --installpkg `find dist/*.tar.gz` - name: Upload coverage to Codecov @@ -292,6 +296,14 @@ jobs: files: ./coverage.xml verbose: true + - name: Upload JUnit report to Codecov + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 + with: + fail_ci_if_error: false + files: junit.xml + report_type: test_results + verbose: true + check: # This job does nothing and is only used for the branch protection if: always() diff --git a/AUTHORS b/AUTHORS index 06b64d73d46..81e08c07488 100644 --- a/AUTHORS +++ b/AUTHORS @@ -14,6 +14,7 @@ Ahn Ki-Wook Akhilesh Ramakrishnan Akiomi Kamakura Alan Velasco +Alejandro Villate Alessio Izzo Alex Jones Alex Lambson diff --git a/changelog/12689.contrib.rst b/changelog/12689.contrib.rst new file mode 100644 index 00000000000..81bb5577d97 --- /dev/null +++ b/changelog/12689.contrib.rst @@ -0,0 +1,5 @@ +The test reports are now published to Codecov from GitHub Actions. +The test statistics is visible `on the web interface +`__. + +-- by :user:`aleguy02` diff --git a/tox.ini b/tox.ini index 35f337cdc71..5a8fa240898 100644 --- a/tox.ini +++ b/tox.ini @@ -62,7 +62,7 @@ description = doctesting: including doctests commands = {env:_PYTEST_TOX_COVERAGE_RUN:} pytest {posargs:{env:_PYTEST_TOX_DEFAULT_POSARGS:}} - doctesting: {env:_PYTEST_TOX_COVERAGE_RUN:} pytest --doctest-modules --pyargs _pytest + doctesting: {env:_PYTEST_TOX_COVERAGE_RUN:} pytest --doctest-modules {env:_PYTEST_TOX_POSARGS_JUNIT:} --pyargs _pytest coverage: coverage combine coverage: coverage report -m # Run `coverage xml` only on CI. @@ -73,7 +73,7 @@ passenv = TERM CI setenv = - _PYTEST_TOX_DEFAULT_POSARGS={env:_PYTEST_TOX_POSARGS_DOCTESTING:} {env:_PYTEST_TOX_POSARGS_LSOF:} {env:_PYTEST_TOX_POSARGS_XDIST:} {env:_PYTEST_FILES:} + _PYTEST_TOX_DEFAULT_POSARGS={env:_PYTEST_TOX_POSARGS_DOCTESTING:} {env:_PYTEST_TOX_POSARGS_JUNIT:} {env:_PYTEST_TOX_POSARGS_LSOF:} {env:_PYTEST_TOX_POSARGS_XDIST:} {env:_PYTEST_FILES:} # See https://docs.python.org/3/library/io.html#io-encoding-warning # If we don't enable this, neither can any of our downstream users! From 7c17051c3496a88d13fab693eb914a6a0085fd11 Mon Sep 17 00:00:00 2001 From: ron Date: Wed, 11 Feb 2026 12:49:09 -0500 Subject: [PATCH 164/307] doc: add seealso link to src-layout vs flat-layout discussion Add a ``.. seealso::`` cross-reference to the packaging.python.org discussion on src layout vs flat layout, using intersphinx rather than a raw URL. --- doc/en/explanation/goodpractices.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/en/explanation/goodpractices.rst b/doc/en/explanation/goodpractices.rst index 7c589b57033..d44c1623de0 100644 --- a/doc/en/explanation/goodpractices.rst +++ b/doc/en/explanation/goodpractices.rst @@ -150,6 +150,11 @@ which are better explained in this excellent `blog post`_ by Ionel Cristian Măr See :ref:`pytest vs python -m pytest` for more information about the difference between calling ``pytest`` and ``python -m pytest``. +.. seealso:: + + :doc:`packaging:discussions/src-layout-vs-flat-layout` + The Python Packaging User Guide discusses the trade-offs between the ``src`` layout and flat layout. + Tests as part of application code ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From b2310f28314249e4bfa1e0b9817dbef5cb968f4d Mon Sep 17 00:00:00 2001 From: Ronald Eddy Jr Date: Wed, 11 Feb 2026 13:14:51 -0500 Subject: [PATCH 165/307] doc: fix ~75 typos and grammar issues across documentation (#14179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix typos, grammar errors, and broken RST directives found across 37 documentation files including how-to guides, reference docs, examples, explanations, and project root files. Notable fixes: - Broken RST directives (``.. note:`` → ``.. note::``) - Subject-verb agreement errors - Missing/incorrect articles and prepositions - Incorrect verb forms ("teared down" → "torn down") - Duplicate words and extra spaces - Wrong URL in changelog (pytest → pytest-xdist) - Ordinal typo ("3th" → "3rd") --- CONTRIBUTING.rst | 18 +++++++++--------- RELEASING.rst | 2 +- changelog/12444.bugfix.rst | 2 +- changelog/13963.bugfix.rst | 2 +- changelog/README.rst | 4 ++-- doc/en/backwards-compatibility.rst | 4 ++-- doc/en/deprecations.rst | 10 +++++----- doc/en/example/attic.rst | 2 +- doc/en/example/customdirectory.rst | 2 +- doc/en/example/markers.rst | 2 +- doc/en/example/parametrize.rst | 4 ++-- doc/en/example/pythoncollection.rst | 2 +- doc/en/example/simple.rst | 6 +++--- doc/en/explanation/ci.rst | 8 ++++---- doc/en/explanation/flaky.rst | 2 +- doc/en/explanation/goodpractices.rst | 4 ++-- doc/en/funcarg_compare.rst | 8 ++++---- doc/en/historical-notes.rst | 2 +- doc/en/how-to/assert.rst | 2 +- doc/en/how-to/cache.rst | 2 +- doc/en/how-to/capture-stdout-stderr.rst | 4 ++-- doc/en/how-to/capture-warnings.rst | 2 +- doc/en/how-to/doctest.rst | 2 +- doc/en/how-to/fixtures.rst | 12 ++++++------ doc/en/how-to/logging.rst | 8 ++++---- doc/en/how-to/monkeypatch.rst | 2 +- doc/en/how-to/output.rst | 2 +- doc/en/how-to/skipping.rst | 2 +- doc/en/how-to/subtests.rst | 2 +- doc/en/how-to/writing_hook_functions.rst | 2 +- doc/en/how-to/writing_plugins.rst | 2 +- doc/en/index.rst | 2 +- doc/en/reference/customize.rst | 6 +++--- doc/en/reference/exit-codes.rst | 2 +- doc/en/reference/fixtures.rst | 10 +++++----- doc/en/reference/reference.rst | 9 ++++----- doc/en/sponsor.rst | 4 ++-- 37 files changed, 80 insertions(+), 81 deletions(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 86d4231fedf..0f929162c65 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -146,7 +146,7 @@ the following: - PyPI presence with packaging metadata that contains a ``pytest-`` prefixed name, version number, authors, short and long description. -- a `tox configuration `_ +- a `tox configuration `_ for running tests using `tox `_. - a ``README`` describing how to use the plugin and on which @@ -280,7 +280,7 @@ Here is a simple overview, with pytest-specific bits: #. You can now edit your local working copy and run the tests again as necessary. Please follow `PEP-8 `_ for naming. You can pass different options to ``tox``. For example, to run tests on Python 3.13 and pass options to pytest - (e.g. enter pdb on failure) to pytest you can do:: + (e.g. enter pdb on failure) you can do:: $ tox -e py313 -- --pdb @@ -346,7 +346,7 @@ For example, to ensure a simple test passes you can write: result.assert_outcomes(failed=0, passed=1) -Alternatively, it is possible to make checks based on the actual output of the termal using +Alternatively, it is possible to make checks based on the actual output of the terminal using *glob-like* expressions: .. code-block:: python @@ -479,10 +479,10 @@ above? to do the backport. 2. However, often the merge is done by another maintainer, in which case it is nice of them to do the backport procedure if they have the time. -3. For bugs submitted by non-maintainers, it is expected that a core developer will to do +3. For bugs submitted by non-maintainers, it is expected that a core developer will do the backport, normally the one that merged the PR on ``main``. -4. If a non-maintainers notices a bug which is fixed on ``main`` but has not been backported - (due to maintainers forgetting to apply the *needs backport* label, or just plain missing it), +4. If a non-maintainer notices a bug which is fixed on ``main`` but has not been backported + (due to maintainers forgetting to apply the *needs backport* or *backport x.x.x* labels, or just plain missing it), they are also welcome to open a PR with the backport. The procedure is simple and really helps with the maintenance of the project. @@ -512,7 +512,7 @@ can always reopen the issue/pull request in their own time later if it makes sen When to close ~~~~~~~~~~~~~ -Here are a few general rules the maintainers use deciding when to close issues/PRs because +Here are a few general rules the maintainers use to decide when to close issues/PRs because of lack of inactivity: * Issues labeled ``question`` or ``needs information``: closed after 14 days inactive. @@ -524,7 +524,7 @@ The above are **not hard rules**, but merely **guidelines**, and can be (and oft Closing pull requests ~~~~~~~~~~~~~~~~~~~~~ -When closing a Pull Request, it needs to be acknowledging the time, effort, and interest demonstrated by the person which submitted it. As mentioned previously, it is not the intent of the team to dismiss a stalled pull request entirely but to merely to clear up our queue, so a message like the one below is warranted when closing a pull request that went stale: +When closing a Pull Request, we should acknowledge the time, effort, and interest demonstrated by the person who submitted it. As mentioned previously, it is not the intent of the team to dismiss a stalled pull request entirely but to merely to clear up our queue, so a message like the one below is warranted when closing a pull request that went stale: Hi , @@ -532,7 +532,7 @@ When closing a Pull Request, it needs to be acknowledging the time, effort, and We noticed it has been awhile since you have updated this PR, however. pytest is a high activity project, with many issues/PRs being opened daily, so it is hard for us maintainers to track which PRs are ready for merging, for review, or need more attention. - So for those reasons we, think it is best to close the PR for now, but with the only intention to clean up our queue, it is by no means a rejection of your changes. We still encourage you to re-open this PR (it is just a click of a button away) when you are ready to get back to it. + So for those reasons, we think it is best to close the PR for now, but with the only intention to clean up our queue, it is by no means a rejection of your changes. We still encourage you to re-open this PR (it is just a click of a button away) when you are ready to get back to it. Again we appreciate your time for working on this, and hope you might get back to this at a later time! diff --git a/RELEASING.rst b/RELEASING.rst index 5723fe197c2..76929ef7043 100644 --- a/RELEASING.rst +++ b/RELEASING.rst @@ -117,7 +117,7 @@ To release a version ``MAJOR.MINOR.PATCH``, follow these steps: #. Create a branch ``release-MAJOR.MINOR.PATCH`` from the ``MAJOR.MINOR.x`` branch. - Ensure your are updated and in a clean working tree. + Ensure your local checkout is up to date and in a clean working tree. #. Using ``tox``, generate docs, changelog, announcements:: diff --git a/changelog/12444.bugfix.rst b/changelog/12444.bugfix.rst index 146cfc7ab24..d4e804ac613 100644 --- a/changelog/12444.bugfix.rst +++ b/changelog/12444.bugfix.rst @@ -1 +1 @@ -Fixed :func:`pytest.approx` which now correctly takes account Mapping keys order to compare them. +Fixed :func:`pytest.approx` which now correctly takes into account :class:`~collections.abc.Mapping` keys order to compare them. diff --git a/changelog/13963.bugfix.rst b/changelog/13963.bugfix.rst index a5f7ebe5c03..8717b265c72 100644 --- a/changelog/13963.bugfix.rst +++ b/changelog/13963.bugfix.rst @@ -1,3 +1,3 @@ -Fixed subtests running with `pytest-xdist `__ when their contexts contain objects that are not JSON-serializable. +Fixed subtests running with :pypi:`pytest-xdist` when their contexts contain objects that are not JSON-serializable. Fixes `pytest-dev/pytest-xdist#1273 `__. diff --git a/changelog/README.rst b/changelog/README.rst index fdaa573d427..f1ba2cbd0bd 100644 --- a/changelog/README.rst +++ b/changelog/README.rst @@ -16,12 +16,12 @@ Each file should be named like ``..rst``, where * ``feature``: new user facing features, like new command-line options and new behavior. * ``improvement``: improvement of existing functionality, usually without requiring user intervention (for example, new fields being written in ``--junit-xml``, improved colors in terminal, etc). * ``bugfix``: fixes a bug. -* ``doc``: documentation improvement, like rewording an entire session or adding missing docs. +* ``doc``: documentation improvement, like rewording an entire section or adding missing docs. * ``deprecation``: feature deprecation. * ``breaking``: a change which may break existing suites, such as feature removal or behavior change. * ``vendor``: changes in packages vendored in pytest. * ``packaging``: notes for downstreams about unobvious side effects - and tooling. changes in the test invocation considerations and + and tooling. Changes in the test invocation considerations and runtime assumptions. * ``contrib``: stuff that affects the contributor experience. e.g. Running tests, building the docs, setting up the development diff --git a/doc/en/backwards-compatibility.rst b/doc/en/backwards-compatibility.rst index b62046ae2ac..a7ee2253d67 100644 --- a/doc/en/backwards-compatibility.rst +++ b/doc/en/backwards-compatibility.rst @@ -53,8 +53,8 @@ History ========= -Focus primary on smooth transition - stance (pre 6.0) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Focus primarily on smooth transition - stance (pre 6.0) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Keeping backwards compatibility has a very high priority in the pytest project. Although we have deprecated functionality over the years, most of it is still supported. All deprecations in pytest were done because simpler or more efficient ways of accomplishing the same tasks have emerged, making the old way of doing things unnecessary. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index e607b7f26dc..ea11696b47a 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -90,7 +90,7 @@ Example of problematic code: def test_2(self, n): pass -You can fix it by convert generators and iterators to lists or tuples: +You can fix it by converting generators and iterators to lists or tuples: .. code-block:: python @@ -167,7 +167,7 @@ In ``8.2`` the ``exc_type`` parameter has been added, giving users the ability o to skip tests only if the module cannot really be found, and not because of some other error. Catching only :class:`ModuleNotFoundError` by default (and letting other errors propagate) would be the best solution, -however for backward compatibility, pytest will keep the existing behavior but raise an warning if: +however for backward compatibility, pytest will keep the existing behavior but raise a warning if: 1. The captured exception is of type :class:`ImportError`, and: 2. The user does not pass ``exc_type`` explicitly. @@ -342,7 +342,7 @@ The ``yield_fixture`` function/decorator ``pytest.yield_fixture`` is a deprecated alias for :func:`pytest.fixture`. -It has been so for a very long time, so can be search/replaced safely. +It has been so for a very long time, so it can be searched/replaced safely. Removed Features and Breaking Changes @@ -876,7 +876,7 @@ The ``pytest._fillfuncargs`` function This function was kept for backward compatibility with an older plugin. -It's functionality is not meant to be used directly, but if you must replace +Its functionality is not meant to be used directly, but if you must replace it, use `function._request._fillfixtures()` instead, though note this is not a public API and may break in the future. @@ -907,7 +907,7 @@ The ``--result-log`` option produces a stream of test reports which can be analysed at runtime, but it uses a custom format which requires users to implement their own parser. -The `pytest-reportlog `__ plugin provides a ``--report-log`` option, a more standard and extensible alternative, producing +The :pypi:`pytest-reportlog` plugin provides a ``--report-log`` option, a more standard and extensible alternative, producing one JSON object per-line, and should cover the same use cases. Please try it out and provide feedback. The ``pytest-reportlog`` plugin might even be merged into the core diff --git a/doc/en/example/attic.rst b/doc/en/example/attic.rst index 2b1f2766dce..3a2e228337e 100644 --- a/doc/en/example/attic.rst +++ b/doc/en/example/attic.rst @@ -75,7 +75,7 @@ decorate its result. This mechanism allows us to stay ignorant of how/where the function argument is provided - in our example from a `conftest plugin`_. -sidenote: the temporary directory used here are instances of +Side note: the temporary directories used here are instances of the `py.path.local`_ class which provides many of the os.path methods in a convenient way. diff --git a/doc/en/example/customdirectory.rst b/doc/en/example/customdirectory.rst index 6e326352a7e..705a3373654 100644 --- a/doc/en/example/customdirectory.rst +++ b/doc/en/example/customdirectory.rst @@ -36,7 +36,7 @@ You can create a ``manifest.json`` file and some test files: .. include:: customdirectory/tests/test_third.py :literal: -An you can now execute the test specification: +And you can now execute the test specification: .. code-block:: pytest diff --git a/doc/en/example/markers.rst b/doc/en/example/markers.rst index 4f6738207e1..c8e4172a696 100644 --- a/doc/en/example/markers.rst +++ b/doc/en/example/markers.rst @@ -411,7 +411,7 @@ A test file using this local plugin: def test_basic_db_operation(): pass -and an example invocations specifying a different environment than what +and an example invocation specifying a different environment than what the test needs: .. code-block:: pytest diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index 7aec1364953..b25b822618a 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -4,7 +4,7 @@ Parametrizing tests ================================================= -``pytest`` allows to easily parametrize test functions. +``pytest`` allows you to easily parametrize test functions. For basic docs, see :ref:`parametrize-basics`. In the following we provide some examples using @@ -642,7 +642,7 @@ As the result: - Four tests were collected - One test was deselected because it doesn't have the ``basic`` mark. -- Three tests with the ``basic`` mark was selected. +- Three tests with the ``basic`` mark were selected. - The test ``test_eval[1+7-8]`` passed, but the name is autogenerated and confusing. - The test ``test_eval[basic_2+4]`` passed. - The test ``test_eval[basic_6*9]`` was expected to fail and did fail. diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index 339944c4758..26fdb68b08f 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -161,7 +161,7 @@ You can check for multiple glob patterns by adding a space between the patterns: .. note:: - the ``python_functions`` and ``python_classes`` options has no effect + the ``python_functions`` and ``python_classes`` options have no effect for ``unittest.TestCase`` test discovery because pytest delegates discovery of test case methods to unittest code. diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index 0640160e3bb..a07927280ae 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -416,10 +416,10 @@ running from a test you can do this: if os.environ.get("PYTEST_VERSION") is not None: - # Things you want to to do if your code is called by pytest. + # Things you want to do if your code is called by pytest. ... else: - # Things you want to to do if your code is not called by pytest. + # Things you want to do if your code is not called by pytest. ... @@ -773,7 +773,7 @@ The two test modules in the ``a`` directory see the same ``db`` fixture instance while the one test in the sister-directory ``b`` doesn't see it. We could of course also define a ``db`` fixture in that sister directory's ``conftest.py`` file. Note that each fixture is only instantiated if there is a test actually needing -it (unless you use "autouse" fixture which are always executed ahead of the first test +it (unless you use "autouse" fixtures which are always executed ahead of the first test executing). diff --git a/doc/en/explanation/ci.rst b/doc/en/explanation/ci.rst index 6f6734f395b..16f55be81c0 100644 --- a/doc/en/explanation/ci.rst +++ b/doc/en/explanation/ci.rst @@ -8,7 +8,7 @@ Rationale The goal of testing in a CI pipeline is different from testing locally. Indeed, you can quickly edit some code and run your tests again on your computer, but -it is not possible with CI pipeline. They run on a separate server and are +it is not possible with CI pipelines. They run on a separate server and are triggered by specific actions. From that observation, pytest can detect when it is in a CI environment and @@ -17,10 +17,10 @@ adapt some of its behaviours. How CI is detected ------------------ -Pytest knows it is in a CI environment when either one of these environment variables are set to a non-empty value: +Pytest knows it is in a CI environment when either one of these environment variables is set to a non-empty value: -* `CI`: used by many CI systems. -* `BUILD_NUMBER`: used by Jenkins. +* :envvar:`CI`: used by many CI systems. +* :envvar:`BUILD_NUMBER`: used by Jenkins. Effects on CI ------------- diff --git a/doc/en/explanation/flaky.rst b/doc/en/explanation/flaky.rst index 8369e1d9311..918d6f10b36 100644 --- a/doc/en/explanation/flaky.rst +++ b/doc/en/explanation/flaky.rst @@ -42,7 +42,7 @@ It is of course possible (and common) for tests and fixtures to spawn threads th * Make sure to eventually wait on any spawned threads -- for example at the end of a test, or during the teardown of a fixture. * Avoid using primitives provided by pytest (:func:`pytest.warns`, :func:`pytest.raises`, etc) from multiple threads, as they are not thread-safe. -If your test suite uses threads and your are seeing flaky test results, do not discount the possibility that the test is implicitly using global state in pytest itself. +If your test suite uses threads and you are seeing flaky test results, do not discount the possibility that the test is implicitly using global state in pytest itself. Related features ^^^^^^^^^^^^^^^^ diff --git a/doc/en/explanation/goodpractices.rst b/doc/en/explanation/goodpractices.rst index 7c589b57033..fb12f890ead 100644 --- a/doc/en/explanation/goodpractices.rst +++ b/doc/en/explanation/goodpractices.rst @@ -143,7 +143,7 @@ which are better explained in this excellent `blog post`_ by Ionel Cristian Măr .. note:: - If you do not use an editable install and not use the ``src`` layout (``mypkg`` directly in the root + If you do not use an editable install and do not use the ``src`` layout (``mypkg`` directly in the root directory) you can rely on the fact that Python by default puts the current directory in ``sys.path`` to import your package and run ``python -m pytest`` to execute the tests against the local copy directly. @@ -376,7 +376,7 @@ If you don't want to automatically pick up new options, you can enable options i strict_parametrization_ids = true strict_xfail = true -If you want to use strict mode but having trouble with a specific option, you can turn it off individually: +If you want to use strict mode but are having trouble with a specific option, you can turn it off individually: .. tab:: toml diff --git a/doc/en/funcarg_compare.rst b/doc/en/funcarg_compare.rst index bc5e7d3c515..7cd4c0f1676 100644 --- a/doc/en/funcarg_compare.rst +++ b/doc/en/funcarg_compare.rst @@ -18,7 +18,7 @@ The pre pytest-2.3 funcarg mechanism calls a factory each time a funcarg for a test function is required. If a factory wants to reuse a resource across different scopes, it often used the ``request.cached_setup()`` helper to manage caching of -resources. Here is a basic example how we could implement +resources. Here is a basic example of how we could implement a per-session Database object: .. code-block:: python @@ -39,10 +39,10 @@ a per-session Database object: There are several limitations and difficulties with this approach: -1. Scoping funcarg resource creation is not straight forward, instead one must +1. Scoping funcarg resource creation is not straightforward, instead one must understand the intricate cached_setup() method mechanics. -2. parametrizing the "db" resource is not straight forward: +2. parametrizing the "db" resource is not straightforward: you need to apply a "parametrize" decorator or implement a :hook:`pytest_generate_tests` hook calling :py:func:`~pytest.Metafunc.parametrize` which @@ -55,7 +55,7 @@ There are several limitations and difficulties with this approach: at the same time, making it hard for them to affect global state of the application under test. -4. there is no way how you can make use of funcarg factories +4. there is no way you can make use of funcarg factories in xUnit setup methods. 5. A non-parametrized fixture function cannot use a parametrized diff --git a/doc/en/historical-notes.rst b/doc/en/historical-notes.rst index be67036d6ca..600aed4c17b 100644 --- a/doc/en/historical-notes.rst +++ b/doc/en/historical-notes.rst @@ -304,7 +304,7 @@ For more details see :ref:`breakpoints`. -Access of ``Module``, ``Function``, ``Class``, ``Instance``, ``File`` and ``Item`` through ``Node`` instances have long +Access of ``Module``, ``Function``, ``Class``, ``Instance``, ``File`` and ``Item`` through ``Node`` instances has long been documented as deprecated, but started to emit warnings from pytest ``3.9`` and onward. Users should just ``import pytest`` and access those objects using the ``pytest`` module. diff --git a/doc/en/how-to/assert.rst b/doc/en/how-to/assert.rst index 4ef2664b1d5..f8144a08109 100644 --- a/doc/en/how-to/assert.rst +++ b/doc/en/how-to/assert.rst @@ -218,7 +218,7 @@ To specify more details about the contained exception you can use :class:`pytest with pytest.RaisesGroup(pytest.RaisesExc(ValueError, match="foo")): raise ExceptionGroup("", (ValueError("foo"))) -They both supply a method :meth:`pytest.RaisesGroup.matches` :meth:`pytest.RaisesExc.matches` if you want to do matching outside of using it as a contextmanager. This can be helpful when checking ``.__context__`` or ``.__cause__``. +They both supply a method :meth:`pytest.RaisesGroup.matches` :meth:`pytest.RaisesExc.matches` if you want to do matching outside of using it as a :external+python:std:ref:`context manager `. This can be helpful when checking ``.__context__`` or ``.__cause__``. .. code-block:: python diff --git a/doc/en/how-to/cache.rst b/doc/en/how-to/cache.rst index 4271ab469dc..ca345916fc5 100644 --- a/doc/en/how-to/cache.rst +++ b/doc/en/how-to/cache.rst @@ -33,7 +33,7 @@ Other plugins may access the `config.cache`_ object to set/get Rerunning only failures or failures first ----------------------------------------------- -First, let's create 50 test invocation of which only 2 fail: +First, let's create 50 test invocations of which only 2 fail: .. code-block:: python diff --git a/doc/en/how-to/capture-stdout-stderr.rst b/doc/en/how-to/capture-stdout-stderr.rst index 8a6a42d4134..5de89bc0e3f 100644 --- a/doc/en/how-to/capture-stdout-stderr.rst +++ b/doc/en/how-to/capture-stdout-stderr.rst @@ -6,7 +6,7 @@ How to capture stdout/stderr output Pytest intercepts stdout and stderr as configured by the :option:`--capture=` command-line argument or by using fixtures. The ``--capture=`` flag configures -reporting, whereas the fixtures offer more granular control and allows +reporting, whereas the fixtures offer more granular control and allow inspection of output during testing. The reports can be customized with the :option:`-r` flag. @@ -23,7 +23,7 @@ fail on attempts to read from it because it is rarely desired to wait for interactive input when running automated tests. By default capturing is done by intercepting writes to low level -file descriptors. This allows to capture output from simple +file descriptors. This allows capturing output from simple print statements as well as output from a subprocess started by a test. diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index ae9e71a2750..02da2dd7669 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -220,7 +220,7 @@ This plugin is enabled by default but can be disabled entirely in your configura [pytest] addopts = -p no:warnings -Or passing ``-p no:warnings`` in the command-line. This might be useful if your test suites handles warnings +Or passing ``-p no:warnings`` in the command-line. This might be useful if your test suite handles warnings using an external system. diff --git a/doc/en/how-to/doctest.rst b/doc/en/how-to/doctest.rst index 433b35b61ce..59d1033ed4f 100644 --- a/doc/en/how-to/doctest.rst +++ b/doc/en/how-to/doctest.rst @@ -185,7 +185,7 @@ Output format ------------- You can change the diff output format on failure for your doctests -by using one of standard doctest modules format in options +by using one of the standard doctest module's format options (see :data:`python:doctest.REPORT_UDIFF`, :data:`python:doctest.REPORT_CDIFF`, :data:`python:doctest.REPORT_NDIFF`, :data:`python:doctest.REPORT_ONLY_FIRST_FAILURE`): diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 14949994598..991256e7473 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -471,7 +471,7 @@ marked ``smtp_connection`` fixture function. Running the test looks like this: ============================ 2 failed in 0.12s ============================= You see the two ``assert 0`` failing and more importantly you can also see -that the **exactly same** ``smtp_connection`` object was passed into the +that the **exact same** ``smtp_connection`` object was passed into the two test functions because pytest shows the incoming argument values in the traceback. As a result, the two test functions using ``smtp_connection`` run as quick as a single one because they reuse the same instance. @@ -1645,7 +1645,7 @@ Let's run the tests in verbose mode and with looking at the print-output: ============================ 8 passed in 0.12s ============================= You can see that the parametrized module-scoped ``modarg`` resource caused an -ordering of test execution that lead to the fewest possible "active" resources. +ordering of test execution that led to the fewest possible "active" resources. The finalizer for the ``mod1`` parametrized resource was executed before the ``mod2`` resource was setup. @@ -1654,7 +1654,7 @@ Then test_1 is executed with ``mod1``, then test_2 with ``mod1``, then test_1 with ``mod2`` and finally test_2 with ``mod2``. The ``otherarg`` parametrized resource (having function scope) was set up before -and teared down after every test that used it. +and torn down after every test that used it. .. _`usefixtures`: @@ -1760,7 +1760,7 @@ into a configuration file: Overriding fixtures on various levels ------------------------------------- -In relatively large test suite, you may want to *override* a fixture, to augment +In a relatively large test suite, you may want to *override* a fixture, to augment or change its behavior inside of certain test modules or directories. Override a fixture on a directory (conftest) level @@ -1798,7 +1798,7 @@ Given the tests file structure is: def test_username(username): assert username == 'overridden-username' -As you can see, a fixture with the same name can be overridden for certain test directory level. +As you can see, a fixture with the same name can be overridden for a certain test directory level. Note that the ``base`` or ``super`` fixture can be accessed from the ``overriding`` fixture easily - used in the example above. @@ -1840,7 +1840,7 @@ Given the tests file structure is: def test_username(username): assert username == 'overridden-else-username' -In the example above, a fixture with the same name can be overridden for certain test module. +In the example above, a fixture with the same name can be overridden for a certain test module. Override a fixture with direct test parametrization diff --git a/doc/en/how-to/logging.rst b/doc/en/how-to/logging.rst index c0762e60928..25b4e9017e2 100644 --- a/doc/en/how-to/logging.rst +++ b/doc/en/how-to/logging.rst @@ -216,8 +216,8 @@ option names are: * :confval:`log_cli_date_format` If you need to record the whole test suite logging calls to a file, you can pass -:option:`--log-file=/path/to/log/file`. This log file is opened in write mode by default which -means that it will be overwritten at each run tests session. +:option:`--log-file=/path/to/log/file`. This log file is opened in write mode by default, which +means that it will be overwritten at each test session. If you'd like the file opened in append mode instead, then you can pass :option:`--log-file-mode=a`. Note that relative paths for the log-file location, whether passed on the CLI or declared in a config file, are always resolved relative to the current working directory. @@ -312,7 +312,7 @@ made in ``3.4`` after community feedback: * :ref:`Live Logs ` are now sent to ``sys.stdout`` and no longer require the :option:`-s` command-line option to work. -If you want to partially restore the logging behavior of version ``3.3``, you can add this options to your configuration +If you want to partially restore the logging behavior of version ``3.3``, you can add these options to your configuration file: .. tab:: toml @@ -331,4 +331,4 @@ file: log_cli = true log_level = NOTSET -More details about the discussion that lead to this changes can be read in :issue:`3013`. +More details about the discussion that led to these changes can be read in :issue:`3013`. diff --git a/doc/en/how-to/monkeypatch.rst b/doc/en/how-to/monkeypatch.rst index ad0c6e0e1c5..7442a85c10e 100644 --- a/doc/en/how-to/monkeypatch.rst +++ b/doc/en/how-to/monkeypatch.rst @@ -382,7 +382,7 @@ You can use the :py:meth:`monkeypatch.delitem ` to remove v def test_missing_user(monkeypatch): - # patch the DEFAULT_CONFIG t be missing the 'user' key + # patch the DEFAULT_CONFIG to be missing the 'user' key monkeypatch.delitem(app.DEFAULT_CONFIG, "user", raising=False) # Key error expected because a config is not passed, and the diff --git a/doc/en/how-to/output.rst b/doc/en/how-to/output.rst index d92b2131701..a594fcb3aab 100644 --- a/doc/en/how-to/output.rst +++ b/doc/en/how-to/output.rst @@ -771,7 +771,7 @@ record_testsuite_property .. versionadded:: 4.5 -If you want to add a properties node at the test-suite level, which may contains properties +If you want to add a properties node at the test-suite level, which may contain properties that are relevant to all tests, you can use the ``record_testsuite_property`` session-scoped fixture: The ``record_testsuite_property`` session-scoped fixture can be used to add properties relevant diff --git a/doc/en/how-to/skipping.rst b/doc/en/how-to/skipping.rst index 3b4d412843d..488f71b09f9 100644 --- a/doc/en/how-to/skipping.rst +++ b/doc/en/how-to/skipping.rst @@ -311,7 +311,7 @@ even executed, use the ``run`` parameter as ``False``: @pytest.mark.xfail(run=False) def test_function(): ... -This is specially useful for xfailing tests that are crashing the interpreter and should be +This is particularly useful for xfailing tests that are crashing the interpreter and should be investigated later. .. _`xfail strict tutorial`: diff --git a/doc/en/how-to/subtests.rst b/doc/en/how-to/subtests.rst index 5a08dbc4769..93b9d052afd 100644 --- a/doc/en/how-to/subtests.rst +++ b/doc/en/how-to/subtests.rst @@ -136,4 +136,4 @@ Subtests This feature was originally implemented as a separate plugin in `pytest-subtests `__, but since ``9.0`` has been merged into the core. - The core implementation should be compatible to the plugin implementation, except it does not contain custom command-line options to control subtest output. + The core implementation should be compatible with the plugin implementation, except it does not contain custom command-line options to control subtest output. diff --git a/doc/en/how-to/writing_hook_functions.rst b/doc/en/how-to/writing_hook_functions.rst index cd18301ce84..d5d6d2ae4f7 100644 --- a/doc/en/how-to/writing_hook_functions.rst +++ b/doc/en/how-to/writing_hook_functions.rst @@ -94,7 +94,7 @@ around the actual hook implementations, in which case it can return the result value of the ``yield``. The simplest (though useless) hook wrapper is ``return (yield)``. -In other cases, the wrapper wants the adjust or adapt the result, in which case +In other cases, the wrapper wants to adjust or adapt the result, in which case it can return a new value. If the result of the underlying hook is a mutable object, the wrapper may modify that result, but it's probably better to avoid it. diff --git a/doc/en/how-to/writing_plugins.rst b/doc/en/how-to/writing_plugins.rst index 6b7e2a7e496..56043a14f97 100644 --- a/doc/en/how-to/writing_plugins.rst +++ b/doc/en/how-to/writing_plugins.rst @@ -48,7 +48,7 @@ Plugin discovery order at tool startup 5. by loading all plugins specified through the :envvar:`PYTEST_PLUGINS` environment variable. -6. by loading all "initial ":file:`conftest.py` files: +6. by loading all "initial" :file:`conftest.py` files: - determine the test paths: specified on the command line, otherwise in :confval:`testpaths` if defined and running from the rootdir, otherwise the diff --git a/doc/en/index.rst b/doc/en/index.rst index 77b502e3e41..fa05b3a0c48 100644 --- a/doc/en/index.rst +++ b/doc/en/index.rst @@ -2,7 +2,7 @@ .. sidebar:: **Next Open Trainings and Events** - - `Professional Testing with Python `_, via `Python Academy `_ (3 day in-depth training), **March 3th -- 5th 2026**, Remote + - `Professional Testing with Python `_, via `Python Academy `_ (3 day in-depth training), **March 3rd -- 5th 2026**, Remote Also see :doc:`previous talks and blogposts ` diff --git a/doc/en/reference/customize.rst b/doc/en/reference/customize.rst index 9b954bdcab1..54cf86d2e3d 100644 --- a/doc/en/reference/customize.rst +++ b/doc/en/reference/customize.rst @@ -160,7 +160,7 @@ the command line arguments (specified test files, paths) and on the existence of configuration files. The determined ``rootdir`` and ``configfile`` are printed as part of the pytest header during startup. -Here's a summary what ``pytest`` uses ``rootdir`` for: +Here's a summary of what ``pytest`` uses ``rootdir`` for: * Construct *nodeids* during collection; each test is assigned a unique *nodeid* which is rooted at the ``rootdir`` and takes into account @@ -204,7 +204,7 @@ Here is the algorithm which finds the rootdir from ``args``: directory. This allows the use of pytest in structures that are not part of a package and don't have any particular configuration file. -If no ``args`` are given, pytest collects test below the current working +If no ``args`` are given, pytest collects tests below the current working directory and also starts determining the ``rootdir`` from there. Files will only be matched for configuration if: @@ -274,7 +274,7 @@ check for configuration files as follows: ``pytest --log-output ../../test.log args``. Then ``args`` is mandatory, otherwise pytest uses the directory of test.log for rootdir determination (see also :issue:`1435`). - A dot ``.`` for referencing to the current working directory is also + A dot ``.`` for referencing the current working directory is also possible. diff --git a/doc/en/reference/exit-codes.rst b/doc/en/reference/exit-codes.rst index b695ca3702e..49aaca19121 100644 --- a/doc/en/reference/exit-codes.rst +++ b/doc/en/reference/exit-codes.rst @@ -20,7 +20,7 @@ They are represented by the :class:`pytest.ExitCode` enum. The exit codes being .. note:: - If you would like to customize the exit code in some scenarios, specially when + If you would like to customize the exit code in some scenarios, specifically when no tests are collected, consider using the `pytest-custom_exit_code `__ plugin. diff --git a/doc/en/reference/fixtures.rst b/doc/en/reference/fixtures.rst index b0fa8660f9b..c4a8d01ff0e 100644 --- a/doc/en/reference/fixtures.rst +++ b/doc/en/reference/fixtures.rst @@ -277,10 +277,10 @@ the test's search for fixtures would look like: pytest will only search for ``a_fix`` and ``b_fix`` in the plugins after searching for them first in the scopes inside ``tests/``. -.. note: +.. note:: pytest can tell you what fixtures are available for a given test if you call - ``pytests`` along with the test's name (or the scope it's in), and provide + ``pytest`` along with the test's name (or the scope it's in), and provide the :option:`--fixtures` flag, e.g. ``pytest --fixtures test_something.py`` (fixtures with names that start with ``_`` will only be shown if you also provide the :option:`-v` flag). @@ -354,7 +354,7 @@ an order of operations for a given test. If there's any ambiguity, and the order of operations can be interpreted more than one way, you should assume pytest could go with any one of those interpretations at any point. -For example, if ``d`` didn't request ``c``, i.e.the graph would look like this: +For example, if ``d`` didn't request ``c``, i.e. the graph would look like this: .. image:: /example/fixtures/test_fixtures_order_dependencies_unclear.* :align: center @@ -448,10 +448,10 @@ for the tests inside ``TestClassWithoutAutouse``, since they can reference can't see ``c3``. -.. note: +.. note:: pytest can tell you what order the fixtures will execute in for a given test - if you call ``pytests`` along with the test's name (or the scope it's in), + if you call ``pytest`` along with the test's name (or the scope it's in), and provide the :option:`--setup-plan` flag, e.g. ``pytest --setup-plan test_something.py`` (fixtures with names that start with ``_`` will only be shown if you also provide the :option:`-v` flag). diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 62ae3564e18..aa419d59ec5 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1179,11 +1179,11 @@ Environment variables that can be used to change pytest's behavior. .. envvar:: CI -When set to a non-empty value, pytest acknowledges that is running in a CI process. See also :ref:`ci-pipelines`. +When set to a non-empty value, pytest acknowledges that it is running in a CI process. See also :ref:`ci-pipelines`. .. envvar:: BUILD_NUMBER -When set to a non-empty value, pytest acknowledges that is running in a CI process. Alternative to :envvar:`CI`. See also :ref:`ci-pipelines`. +When set to a non-empty value, pytest acknowledges that it is running in a CI process. Alternative to :envvar:`CI`. See also :ref:`ci-pipelines`. .. envvar:: PYTEST_ADDOPTS @@ -1315,7 +1315,7 @@ Configuration Options Here is a list of builtin configuration options that may be written in a ``pytest.ini`` (or ``.pytest.ini``), ``pyproject.toml``, ``tox.ini``, or ``setup.cfg`` file, usually located at the root of your repository. -To see each file format in details, see :ref:`config file formats`. +To see each file format in detail, see :ref:`config file formats`. .. warning:: Usage of ``setup.cfg`` is not recommended except for very simple use cases. ``.cfg`` @@ -1586,7 +1586,6 @@ passed multiple times. The expected format is ``name=value``. For example:: faulthandler_timeout = 5 For more information please refer to :ref:`faulthandler`. - For more information please refer to :ref:`faulthandler`. .. confval:: filterwarnings @@ -3180,7 +3179,7 @@ See :ref:`logging` for a guide on using these flags. .. option:: --log-file=PATH - Path to a file when logging will be written to. + Path to a file logging will be written to. .. option:: --log-file-mode diff --git a/doc/en/sponsor.rst b/doc/en/sponsor.rst index 8362a7f0a3a..6ad722be94c 100644 --- a/doc/en/sponsor.rst +++ b/doc/en/sponsor.rst @@ -2,7 +2,7 @@ Sponsor ======= pytest is maintained by a team of volunteers from all around the world in their free time. While -we work on pytest because we love the project and use it daily at our daily jobs, monetary +we work on pytest because we love the project and use it daily in our jobs, monetary compensation when possible is welcome to justify time away from friends, family and personal time. Money is also used to fund local sprints, merchandising (stickers to distribute in conferences for example) @@ -12,7 +12,7 @@ OpenCollective -------------- `Open Collective`_ is an online funding platform for open and transparent communities. -It provide tools to raise money and share your finances in full transparency. +It provides tools to raise money and share your finances in full transparency. It is the platform of choice for individuals and companies that want to make one-time or monthly donations directly to the project. From b2e93bc7ab8aee781785290ee07d3fc26d8cc67e Mon Sep 17 00:00:00 2001 From: ron Date: Wed, 11 Feb 2026 13:51:54 -0500 Subject: [PATCH 166/307] doc: use literal markup for "flat" layout for consistency --- doc/en/explanation/goodpractices.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/explanation/goodpractices.rst b/doc/en/explanation/goodpractices.rst index d44c1623de0..d8f68f56faf 100644 --- a/doc/en/explanation/goodpractices.rst +++ b/doc/en/explanation/goodpractices.rst @@ -153,7 +153,7 @@ which are better explained in this excellent `blog post`_ by Ionel Cristian Măr .. seealso:: :doc:`packaging:discussions/src-layout-vs-flat-layout` - The Python Packaging User Guide discusses the trade-offs between the ``src`` layout and flat layout. + The Python Packaging User Guide discusses the trade-offs between the ``src`` layout and ``flat`` layout. Tests as part of application code ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 75ef5845580c7a524d900221d6c405d83fff05de Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Tue, 21 May 2024 09:03:50 +0200 Subject: [PATCH 167/307] Fix a base string usage that need to also take bytes into account --- src/_pytest/_py/path.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_pytest/_py/path.py b/src/_pytest/_py/path.py index b7131b08a20..998a7819972 100644 --- a/src/_pytest/_py/path.py +++ b/src/_pytest/_py/path.py @@ -137,7 +137,7 @@ class NeverRaised(Exception): class Visitor: def __init__(self, fil, rec, ignore, bf, sort): - if isinstance(fil, str): + if isinstance(fil, (str, bytes)): fil = FNMatcher(fil) if isinstance(rec, str): self.rec: Callable[[LocalPath], bool] = FNMatcher(rec) From 3740cb962027ed73460c04568b409ef8c52af99e Mon Sep 17 00:00:00 2001 From: Ronald Eddy Jr Date: Thu, 12 Feb 2026 17:51:28 -0500 Subject: [PATCH 168/307] doc: indent envvar directive bodies in reference.rst (#14183) Indent the body text of all 14 ``.. envvar::`` entries with 3 spaces, matching the ``.. confval::`` convention used in the same file. This was the only section with unindented directive bodies. --- doc/en/reference/reference.rst | 58 +++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index aa419d59ec5..b14fc627566 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1179,77 +1179,77 @@ Environment variables that can be used to change pytest's behavior. .. envvar:: CI -When set to a non-empty value, pytest acknowledges that it is running in a CI process. See also :ref:`ci-pipelines`. + When set to a non-empty value, pytest acknowledges that it is running in a CI process. See also :ref:`ci-pipelines`. .. envvar:: BUILD_NUMBER -When set to a non-empty value, pytest acknowledges that it is running in a CI process. Alternative to :envvar:`CI`. See also :ref:`ci-pipelines`. + When set to a non-empty value, pytest acknowledges that it is running in a CI process. Alternative to :envvar:`CI`. See also :ref:`ci-pipelines`. .. envvar:: PYTEST_ADDOPTS -This contains a command-line (parsed by the py:mod:`shlex` module) that will be **prepended** to the command line given -by the user, see :ref:`adding default options` for more information. + This contains a command-line (parsed by the py:mod:`shlex` module) that will be **prepended** to the command line given + by the user, see :ref:`adding default options` for more information. .. envvar:: PYTEST_VERSION -This environment variable is defined at the start of the pytest session and is undefined afterwards. -It contains the value of ``pytest.__version__``, and among other things can be used to easily check if a code is running from within a pytest run. + This environment variable is defined at the start of the pytest session and is undefined afterwards. + It contains the value of ``pytest.__version__``, and among other things can be used to easily check if a code is running from within a pytest run. .. envvar:: PYTEST_CURRENT_TEST -This is not meant to be set by users, but is set by pytest internally with the name of the current test so other -processes can inspect it, see :ref:`pytest current test env` for more information. + This is not meant to be set by users, but is set by pytest internally with the name of the current test so other + processes can inspect it, see :ref:`pytest current test env` for more information. .. envvar:: PYTEST_DEBUG -When set, pytest will print tracing and debug information. + When set, pytest will print tracing and debug information. .. envvar:: PYTEST_DEBUG_TEMPROOT -Root for temporary directories produced by fixtures like :fixture:`tmp_path` -as discussed in :ref:`temporary directory location and retention`. + Root for temporary directories produced by fixtures like :fixture:`tmp_path` + as discussed in :ref:`temporary directory location and retention`. .. envvar:: PYTEST_DISABLE_PLUGIN_AUTOLOAD -When set, disables plugin auto-loading through :std:doc:`entry point packaging -metadata `. Only plugins -explicitly specified in :envvar:`PYTEST_PLUGINS` or with :option:`-p` will be loaded. -See also :ref:`--disable-plugin-autoload `. + When set, disables plugin auto-loading through :std:doc:`entry point packaging + metadata `. Only plugins + explicitly specified in :envvar:`PYTEST_PLUGINS` or with :option:`-p` will be loaded. + See also :ref:`--disable-plugin-autoload `. .. envvar:: PYTEST_PLUGINS -Contains comma-separated list of modules that should be loaded as plugins: + Contains comma-separated list of modules that should be loaded as plugins: -.. code-block:: bash + .. code-block:: bash - export PYTEST_PLUGINS=mymodule.plugin,xdist + export PYTEST_PLUGINS=mymodule.plugin,xdist -See also :option:`-p`. + See also :option:`-p`. .. envvar:: PYTEST_THEME -Sets a `pygment style `_ to use for the code output. + Sets a `pygment style `_ to use for the code output. .. envvar:: PYTEST_THEME_MODE -Sets the :envvar:`PYTEST_THEME` to be either *dark* or *light*. + Sets the :envvar:`PYTEST_THEME` to be either *dark* or *light*. .. envvar:: PY_COLORS -When set to ``1``, pytest will use color in terminal output. -When set to ``0``, pytest will not use color. -``PY_COLORS`` takes precedence over ``NO_COLOR`` and ``FORCE_COLOR``. + When set to ``1``, pytest will use color in terminal output. + When set to ``0``, pytest will not use color. + ``PY_COLORS`` takes precedence over ``NO_COLOR`` and ``FORCE_COLOR``. .. envvar:: NO_COLOR -When set to a non-empty string (regardless of value), pytest will not use color in terminal output. -``PY_COLORS`` takes precedence over ``NO_COLOR``, which takes precedence over ``FORCE_COLOR``. -See `no-color.org `__ for other libraries supporting this community standard. + When set to a non-empty string (regardless of value), pytest will not use color in terminal output. + ``PY_COLORS`` takes precedence over ``NO_COLOR``, which takes precedence over ``FORCE_COLOR``. + See `no-color.org `__ for other libraries supporting this community standard. .. envvar:: FORCE_COLOR -When set to a non-empty string (regardless of value), pytest will use color in terminal output. -``PY_COLORS`` and ``NO_COLOR`` take precedence over ``FORCE_COLOR``. + When set to a non-empty string (regardless of value), pytest will use color in terminal output. + ``PY_COLORS`` and ``NO_COLOR`` take precedence over ``FORCE_COLOR``. Exceptions ---------- From 2f09ddc84ea6a7ccd56f19b0b998c8d2c51a4652 Mon Sep 17 00:00:00 2001 From: Lily Wu <96460328+lwu1822@users.noreply.github.com> Date: Sat, 14 Feb 2026 06:00:20 -0800 Subject: [PATCH 169/307] doc: fixed typo in file name format (#14191) --- doc/en/how-to/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/how-to/usage.rst b/doc/en/how-to/usage.rst index 94e6d94d834..35b07bfe8c1 100644 --- a/doc/en/how-to/usage.rst +++ b/doc/en/how-to/usage.rst @@ -7,7 +7,7 @@ How to invoke pytest .. seealso:: :ref:`Complete pytest command-line flags reference ` In general, pytest is invoked with the command ``pytest`` (see below for :ref:`other ways to invoke pytest -`). This will execute all tests in all files whose names follow the form ``test_*.py`` or ``\*_test.py`` +`). This will execute all tests in all files whose names follow the form ``test_*.py`` or ``*_test.py`` in the current directory and its subdirectories. More generally, pytest follows :ref:`standard test discovery rules `. From 966edc9d517cd092104028796b684fb1119a7c73 Mon Sep 17 00:00:00 2001 From: DavidAG Date: Sat, 14 Feb 2026 17:33:30 +0100 Subject: [PATCH 170/307] Fix: assertrepr_compare respects dict insertion order (#14050) Fixes #13503 Closes #14066 --- changelog/14050.bugfix.rst | 1 + src/_pytest/_io/pprint.py | 4 ++-- src/_pytest/_io/saferepr.py | 25 ++++++++++++++++++++ src/_pytest/pytester_assertions.py | 4 ++-- testing/io/test_saferepr.py | 37 ++++++++++++++++++++++++++++++ testing/test_assertion.py | 31 +++++++++++++++++++++++++ 6 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 changelog/14050.bugfix.rst diff --git a/changelog/14050.bugfix.rst b/changelog/14050.bugfix.rst new file mode 100644 index 00000000000..451b248576f --- /dev/null +++ b/changelog/14050.bugfix.rst @@ -0,0 +1 @@ +Display dictionary differences in assertion failures using the original key insertion order instead of sorted order. diff --git a/src/_pytest/_io/pprint.py b/src/_pytest/_io/pprint.py index 28f06909206..ec41b449ddf 100644 --- a/src/_pytest/_io/pprint.py +++ b/src/_pytest/_io/pprint.py @@ -162,7 +162,7 @@ def _pprint_dict( ) -> None: write = stream.write write("{") - items = sorted(object.items(), key=_safe_tuple) + items = object.items() self._format_dict_items(items, stream, indent, allowance, context, level) write("}") @@ -608,7 +608,7 @@ def _safe_repr( components: list[str] = [] append = components.append level += 1 - for k, v in sorted(object.items(), key=_safe_tuple): + for k, v in object.items(): krepr = self._safe_repr(k, context, maxlevels, level) vrepr = self._safe_repr(v, context, maxlevels, level) append(f"{krepr}: {vrepr}") diff --git a/src/_pytest/_io/saferepr.py b/src/_pytest/_io/saferepr.py index cee70e332f9..3f5c956d9cf 100644 --- a/src/_pytest/_io/saferepr.py +++ b/src/_pytest/_io/saferepr.py @@ -1,5 +1,6 @@ from __future__ import annotations +from itertools import islice import pprint import reprlib @@ -77,8 +78,32 @@ def repr_instance(self, x: object, level: int) -> str: s = _format_repr_exception(exc, x) if self.maxsize is not None: s = _ellipsize(s, self.maxsize) + return s + def repr_dict(self, x: dict[object, object], level: int) -> str: + """Represent a dict while preserving its insertion order. + + Differs from ``reprlib.Repr.repr_dict`` by iterating directly over ``x`` + rather than using the stdlib's sorting helper. + """ + fillvalue = "..." + n = len(x) + if n == 0: + return "{}" + if level <= 0: + return "{" + fillvalue + "}" + newlevel = level - 1 + repr1 = self.repr1 + pieces = [] + for key in islice(x, self.maxdict): + keyrepr = repr1(key, newlevel) + valrepr = repr1(x[key], newlevel) + pieces.append(f"{keyrepr}: {valrepr}") + if n > self.maxdict: + pieces.append(fillvalue) + return "{" + ", ".join(pieces) + "}" + def safeformat(obj: object) -> str: """Return a pretty printed string for the given object. diff --git a/src/_pytest/pytester_assertions.py b/src/_pytest/pytester_assertions.py index 915cc8a10ff..b8d8a195241 100644 --- a/src/_pytest/pytester_assertions.py +++ b/src/_pytest/pytester_assertions.py @@ -26,11 +26,11 @@ def assertoutcome( realpassed, realskipped, realfailed = outcomes obtained = { + "failed": len(realfailed), "passed": len(realpassed), "skipped": len(realskipped), - "failed": len(realfailed), } - expected = {"passed": passed, "skipped": skipped, "failed": failed} + expected = {"failed": failed, "passed": passed, "skipped": skipped} assert obtained == expected, outcomes diff --git a/testing/io/test_saferepr.py b/testing/io/test_saferepr.py index 075d40cdf44..2e3dd55b81f 100644 --- a/testing/io/test_saferepr.py +++ b/testing/io/test_saferepr.py @@ -2,6 +2,7 @@ from __future__ import annotations from _pytest._io.saferepr import DEFAULT_REPR_MAX_SIZE +from _pytest._io.saferepr import SafeRepr from _pytest._io.saferepr import saferepr from _pytest._io.saferepr import saferepr_unlimited import pytest @@ -192,3 +193,39 @@ def __repr__(self): assert saferepr_unlimited(A()).startswith( "<[ValueError(42) raised in repr()] A object at 0x" ) + + +def test_saferepr_dict_preserves_insertion_order() -> None: + d = { + "b": 2, + "a": 1, + "d": 4, + "e": 5, + "c": 3, + } + s = SafeRepr(maxsize=None) + s.maxdict = 10 + assert s.repr(d) == "{'b': 2, 'a': 1, 'd': 4, 'e': 5, 'c': 3}" + + +def test_saferepr_dict_truncation_preserves_insertion_order() -> None: + d = { + "b": 2, + "a": 1, + "d": 4, + "e": 5, + "c": 3, + } + s = SafeRepr(maxsize=None) + s.maxdict = 1 + assert s.repr(d) == "{'b': 2, ...}" + + +def test_saferepr_dict_fillvalue_when_level_is_zero() -> None: + s = SafeRepr(maxsize=None) + assert s.repr_dict({"a": 1}, level=0) == "{...}" + + +def test_saferepr_dict_empty() -> None: + s = SafeRepr(maxsize=None) + assert s.repr_dict({}, level=1) == "{}" diff --git a/testing/test_assertion.py b/testing/test_assertion.py index 9c9881cf8ed..d68fd0b1fba 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -2209,3 +2209,34 @@ def test_vvv(): ] ) result.stdout.no_fnmatch_line(expected_non_vvv_arg_line) + + +def test_dict_extra_items_preserve_insertion_order(pytester: Pytester) -> None: + """Assertion output of dict diff shows keys in insertion order (#13503).""" + pytester.makepyfile( + test_order=""" + def test_order(): + a = { + "b": 2, + "a": 1, + "d": 4, + "e": 5, + "c": 3, + } + assert a == {} + """ + ) + + result = pytester.runpytest("-vv") + result.stdout.fnmatch_lines( + [ + "*Left contains 5 more items:*", + "*Full diff:", + "* + *'b': 2,", + "* + *'a': 1,", + "* + *'d': 4,", + "* + *'e': 5,", + "* + *'c': 3,", + "test_order.py:*: AssertionError", + ] + ) From 4b820f0d30d1f3c05a3aed9b1acd2a24a946164f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 05:36:08 +0000 Subject: [PATCH 171/307] [automated] Update plugin list (#14194) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 250 +++++++++++++++++++++---------- 1 file changed, 173 insertions(+), 77 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 4f864469b8d..fcb9018d277 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7 + :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A :pypi:`pytest-abstracts` A contextmanager pytest fixture for handling multiple mock abstracts May 25, 2022 N/A N/A :pypi:`pytest-accept` Aug 19, 2025 N/A pytest>=7 @@ -50,25 +51,25 @@ This list contains 1842 plugins. :pypi:`pytest-adversarial` Generate adversarial pytest tests using LLM Jan 22, 2026 N/A pytest>=7.0.0 :pypi:`pytest-affected` Nov 06, 2023 N/A N/A :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A - :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Jan 30, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Feb 10, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Jan 31, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A - :pypi:`pytest-aio` Pytest plugin for testing async python code Nov 06, 2025 5 - Production/Stable pytest + :pypi:`pytest-aio` Pytest plugin for testing async python code Feb 12, 2026 5 - Production/Stable pytest :pypi:`pytest-aioboto3` Aioboto3 Pytest with Moto Jan 17, 2025 N/A N/A :pypi:`pytest-aiofiles` pytest fixtures for writing aiofiles tests with pyfakefs May 14, 2017 5 - Production/Stable N/A :pypi:`pytest-aiogram` May 06, 2023 N/A N/A :pypi:`pytest-aiohttp` Pytest plugin for aiohttp support Jan 23, 2025 4 - Beta pytest>=6.1.0 :pypi:`pytest-aiohttp-client` Pytest \`client\` fixture for the Aiohttp Jan 10, 2023 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-aiohttp-mock` Send responses to aiohttp. Sep 13, 2025 3 - Alpha pytest>=8 - :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Nov 10, 2025 N/A pytest + :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Feb 10, 2026 N/A pytest :pypi:`pytest-aiomoto` pytest-aiomoto Jun 24, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-aioresponses` py.test integration for aioresponses Jan 02, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 :pypi:`pytest-airflow` pytest support for airflow. Apr 03, 2019 3 - Alpha pytest (>=4.4.0) :pypi:`pytest-airflow-utils` Nov 15, 2021 N/A N/A - :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 07, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 14, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-alembic` A pytest plugin for verifying alembic migrations. May 27, 2025 N/A pytest>=7.0 :pypi:`pytest-alerts` A pytest plugin for sending test results to Slack and Telegram Feb 21, 2025 4 - Beta pytest>=7.4.0 :pypi:`pytest-allclose` Pytest fixture extending Numpy's allclose function Jul 30, 2019 5 - Production/Stable pytest @@ -116,6 +117,7 @@ This list contains 1842 plugins. :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Feb 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 24, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 + :pypi:`pytest-artifact` Pytest plugin for managing test artifacts Feb 09, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A @@ -188,7 +190,7 @@ This list contains 1842 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 06, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 13, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -314,7 +316,7 @@ This list contains 1842 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 07, 2026 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 12, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -322,7 +324,8 @@ This list contains 1842 plugins. :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Oct 24, 2025 5 - Production/Stable pytest>=3.8 + :pypi:`pytest-codingagents` Pytest plugin for testing real coding agents via their SDK Feb 12, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Feb 09, 2026 5 - Production/Stable pytest>=3.8 :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A @@ -424,7 +427,7 @@ This list contains 1842 plugins. :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 - :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Jan 15, 2026 4 - Beta pytest<10.0.0,>=9.0.2 + :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Feb 12, 2026 4 - Beta pytest<10.0.0,>=9.0.2 :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) @@ -437,6 +440,7 @@ This list contains 1842 plugins. :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-devtools` Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. Feb 10, 2026 N/A pytest>=9.0.2 :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Nov 23, 2025 N/A pytest :pypi:`pytest-dhos` Common fixtures for pytest in DHOS services and libraries Sep 07, 2022 N/A N/A :pypi:`pytest-diamond` pytest plugin for diamond Aug 31, 2015 4 - Beta N/A @@ -455,7 +459,7 @@ This list contains 1842 plugins. :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats. Jun 09, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-ditto-pandas` pytest-ditto plugin for pandas snapshots. May 29, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow tables. Jun 09, 2024 4 - Beta pytest>=3.5.0 - :pypi:`pytest-django` A Django plugin for pytest. Apr 03, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-django` A Django plugin for pytest. Feb 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A @@ -518,7 +522,7 @@ This list contains 1842 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Sep 12, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 13, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A @@ -567,7 +571,7 @@ This list contains 1842 plugins. :pypi:`pytest_energy_reporter` An energy estimation reporter for pytest Mar 28, 2024 3 - Alpha pytest<9.0.0,>=8.1.1 :pypi:`pytest-enhanced-reports` Enhanced test reports for pytest Dec 15, 2022 N/A N/A :pypi:`pytest-enhancements` Improvements for pytest (rejected upstream) Oct 30, 2019 4 - Beta N/A - :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Oct 09, 2025 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Feb 11, 2026 5 - Production/Stable pytest>=9.0.2 :pypi:`pytest-envfiles` A py.test plugin that parses environment files before running tests Oct 08, 2015 3 - Alpha N/A :pypi:`pytest-env-info` Push information about the running pytest into envvars Nov 25, 2017 4 - Beta pytest (>=3.1.1) :pypi:`pytest-environment` Pytest Environment Mar 17, 2024 1 - Planning N/A @@ -585,17 +589,18 @@ This list contains 1842 plugins. :pypi:`pytest-eth` PyTest plugin for testing Smart Contracts for Ethereum Virtual Machine (EVM). Aug 14, 2020 1 - Planning N/A :pypi:`pytest-ethereum` pytest-ethereum: Pytest library for ethereum projects. Jun 24, 2019 3 - Alpha pytest (==3.3.2); extra == 'dev' :pypi:`pytest-eucalyptus` Pytest Plugin for BDD Jun 28, 2022 N/A pytest (>=4.2.0) + :pypi:`pytest-eval` LLM testing for humans. Feb 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-evals` A pytest plugin for running and analyzing LLM evaluation tests Feb 02, 2025 N/A pytest>=7.0.0 :pypi:`pytest-eventlet` Applies eventlet monkey-patch as a pytest plugin. Oct 04, 2021 N/A pytest ; extra == 'dev' :pypi:`pytest-everyfunc` A pytest plugin to detect completely untested functions using coverage Apr 30, 2025 4 - Beta pytest :pypi:`pytest_evm` The testing package containing tools to test Web3-based projects Sep 23, 2024 4 - Beta pytest<9.0.0,>=8.1.1 :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 - :pypi:`pytest-exasol-backend` Dec 10, 2025 N/A pytest<9,>=7 + :pypi:`pytest-exasol-backend` Feb 12, 2026 N/A pytest<9,>=7 :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 - :pypi:`pytest-exasol-slc` Dec 12, 2025 N/A pytest<9,>=7 + :pypi:`pytest-exasol-slc` Feb 12, 2026 N/A pytest<9,>=7 :pypi:`pytest-excel` pytest plugin for generating excel reports Jul 22, 2025 5 - Production/Stable pytest :pypi:`pytest-exceptional` Better exceptions Mar 16, 2017 4 - Beta N/A :pypi:`pytest-exception-script` Walk your code through exception script to check it's resiliency to failures. Aug 04, 2020 3 - Alpha pytest @@ -672,7 +677,7 @@ This list contains 1842 plugins. :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest - :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite, with execution tracing Feb 03, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Feb 14, 2026 N/A pytest>=6.0.0 :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) @@ -706,6 +711,7 @@ This list contains 1842 plugins. :pypi:`pytest-freezer` Pytest plugin providing a fixture interface for spulec/freezegun Dec 12, 2024 N/A pytest>=3.6 :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) + :pypi:`pytest_ftpserver` A PyTest plugin which provides an FTP fixture for your tests Feb 10, 2026 5 - Production/Stable pytest :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) :pypi:`pytest-funcnodes` Testing plugin for funcnodes Dec 21, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 @@ -719,6 +725,7 @@ This list contains 1842 plugins. :pypi:`pytest-gather-fixtures` set up asynchronous pytest fixtures concurrently Aug 18, 2024 N/A pytest>=7.0.0 :pypi:`pytest-gc` The garbage collector plugin for py.test Feb 01, 2018 N/A N/A :pypi:`pytest-gcov` Uses gcov to measure test coverage of a C library Feb 01, 2018 3 - Alpha N/A + :pypi:`pytest-gcpsecretmanager` A PyTest plugin for mocking GCP's Secret Manager Feb 13, 2026 N/A pytest>=7.0 :pypi:`pytest-gcs` GCS fixtures and fixture factories for Pytest. Jan 24, 2025 5 - Production/Stable pytest>=6.2 :pypi:`pytest-gee` The Python plugin for your GEE based packages. Oct 16, 2025 3 - Alpha pytest :pypi:`pytest-gevent` Ensure that gevent is properly patched when invoking pytest Feb 25, 2020 N/A pytest @@ -755,7 +762,7 @@ This list contains 1842 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Jan 27, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Feb 12, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) @@ -779,7 +786,7 @@ This list contains 1842 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Feb 07, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Feb 14, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -814,15 +821,17 @@ This list contains 1842 plugins. :pypi:`pytest-httpdbg` A pytest plugin to record HTTP(S) requests with stack trace. Oct 26, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-http-mocker` Pytest plugin for http mocking (via https://github.com/vilus/mocker) Oct 20, 2019 N/A N/A :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A - :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Apr 10, 2025 3 - Alpha N/A + :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Feb 14, 2026 3 - Alpha N/A :pypi:`pytest-httptesting` http_testing framework on top of pytest Dec 19, 2024 N/A pytest>=8.2.0 :pypi:`pytest-httpx` Send responses to httpx. Dec 02, 2025 5 - Production/Stable pytest==9.* :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A :pypi:`pytest-human` A beautiful nested pytest HTML test report Jan 25, 2026 4 - Beta pytest>=8 + :pypi:`pytest-hy` Pytest plugin for discovering and running Hy test files Feb 11, 2026 N/A pytest>=7.0 :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A + :pypi:`pytest-hypothesis` Feb 09, 2026 N/A N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Jan 27, 2026 4 - Beta pytest :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest @@ -833,10 +842,10 @@ This list contains 1842 plugins. :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by codechanges via git introspection, ASL parsing, and dependency graph analysis. Sep 11, 2025 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Feb 12, 2026 4 - Beta pytest>=8.0.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A - :pypi:`pytest-in-docker` Seamlessly run pytest tests inside docker containers Feb 07, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-in-docker` Seamlessly run pytest tests inside docker containers Feb 09, 2026 3 - Alpha pytest>=9.0.2 :pypi:`pytest-infinity` Jun 09, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-influx` Pytest plugin for managing your influx instance between test runs Oct 16, 2024 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-influxdb` Plugin for influxdb and pytest integration. Apr 20, 2021 N/A N/A @@ -852,7 +861,7 @@ This list contains 1842 plugins. :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest :pypi:`pytest-inmanta-extensions` Inmanta tests package Jan 30, 2026 5 - Production/Stable N/A - :pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Nov 19, 2025 5 - Production/Stable N/A + :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Feb 12, 2026 5 - Production/Stable N/A :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest :pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A @@ -867,7 +876,7 @@ This list contains 1842 plugins. :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 17, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) - :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Oct 09, 2025 4 - Beta pytest + :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Feb 11, 2026 4 - Beta pytest :pypi:`pytest-invenio` Pytest fixtures for Invenio. Jan 27, 2026 5 - Production/Stable pytest<9.0.0,>=6 :pypi:`pytest-involve` Run tests covering a specific file or changeset Feb 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-iovis` A Pytest plugin to enable Jupyter Notebook testing with Papermill Nov 06, 2024 4 - Beta pytest>=7.1.0 @@ -934,7 +943,7 @@ This list contains 1842 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Jan 17, 2026 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Feb 14, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -955,6 +964,7 @@ This list contains 1842 plugins. :pypi:`pytest-lineno` A pytest plugin to show the line numbers of test functions Dec 04, 2020 N/A pytest :pypi:`pytest-line-profiler` Profile code executed by pytest Aug 10, 2023 4 - Beta pytest >=3.5.0 :pypi:`pytest-line-profiler-apn` Profile code executed by pytest Dec 05, 2022 N/A pytest (>=3.5.0) + :pypi:`pytest-line-runner` Run pytest tests by line number instead of exact test name Feb 08, 2026 N/A N/A :pypi:`pytest-lisa` Pytest plugin for organizing tests. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) :pypi:`pytest-listener` A simple network listener Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-litf` A pytest plugin that stream output in LITF format Jan 18, 2021 4 - Beta pytest (>=3.1.1) @@ -1053,7 +1063,7 @@ This list contains 1842 plugins. :pypi:`pytest-mock-api` A mock API server with configurable routes and responses available as a fixture. Feb 13, 2019 1 - Planning pytest (>=4.0.0) :pypi:`pytest-mock-generator` A pytest fixture wrapper for https://pypi.org/project/mock-generator May 16, 2022 5 - Production/Stable N/A :pypi:`pytest-mock-helper` Help you mock HTTP call and generate mock code Jan 24, 2018 N/A pytest - :pypi:`pytest-mockito` Base fixtures for mockito Nov 17, 2025 5 - Production/Stable pytest>=6 + :pypi:`pytest-mockito` Base fixtures for mockito Feb 10, 2026 5 - Production/Stable pytest>=6 :pypi:`pytest-mockllm` 🚀 Zero-config pytest plugin for mocking LLM APIs - OpenAI, Anthropic, Gemini, LangChain & more Dec 22, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-mockredis` An in-memory mock of a Redis server that runs in a separate thread. This is to be used for unit-tests that require a Redis database. Jan 02, 2018 2 - Pre-Alpha N/A :pypi:`pytest-mock-resources` A pytest plugin for easily instantiating reproducible mock resources. Sep 17, 2025 N/A pytest>=1.0 @@ -1071,6 +1081,7 @@ This list contains 1842 plugins. :pypi:`pytest-mongodb` pytest plugin for MongoDB fixtures May 16, 2023 5 - Production/Stable N/A :pypi:`pytest-mongodb-nono` pytest plugin for MongoDB Jan 07, 2025 N/A N/A :pypi:`pytest-mongodb-ry` pytest plugin for MongoDB Sep 25, 2025 N/A N/A + :pypi:`pytest-mongo-docker` A tiny plugin for pytest which runs MongoDB in Docker Feb 12, 2026 5 - Production/Stable pytest>=7.4 :pypi:`pytest-monitor` Pytest plugin for analyzing resource usage. Jun 25, 2023 5 - Production/Stable pytest :pypi:`pytest-monkeyplus` pytest's monkeypatch subclass with extra functionalities Sep 18, 2012 5 - Production/Stable N/A :pypi:`pytest-monkeytype` pytest-monkeytype: Generate Monkeytype annotations from your pytest tests. Jul 29, 2020 4 - Beta N/A @@ -1115,7 +1126,7 @@ This list contains 1842 plugins. :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) - :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Jan 23, 2026 N/A pytest<9.0.0,>=8.2.0 + :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Feb 13, 2026 N/A pytest<9.0.0,>=8.2.0 :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A @@ -1141,7 +1152,7 @@ This list contains 1842 plugins. :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-odoo` py.test plugin to run Odoo tests May 20, 2025 5 - Production/Stable pytest>=8 :pypi:`pytest-odoo-fixtures` Project description Jun 25, 2019 N/A N/A - :pypi:`pytest-oduit` py.test plugin to run Odoo tests Oct 06, 2025 5 - Production/Stable pytest>=8 + :pypi:`pytest-oduit` py.test plugin to run Odoo tests Feb 11, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-oerp` pytest plugin to test OpenERP modules Feb 28, 2012 3 - Alpha N/A :pypi:`pytest-offline` Mar 09, 2023 1 - Planning pytest (>=7.0.0,<8.0.0) :pypi:`pytest-ogsm-plugin` 针对特定项目定制化插件,优化了pytest报告展示方式,并添加了项目所需特定参数 May 16, 2023 N/A N/A @@ -1150,11 +1161,11 @@ This list contains 1842 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Feb 04, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Feb 12, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest - :pypi:`pytest-opentmi` pytest plugin for publish results to opentmi Mar 22, 2025 5 - Production/Stable pytest>=5.0 + :pypi:`pytest-opentmi` pytest plugin for publish results to opentmi Feb 09, 2026 5 - Production/Stable pytest>=5.0 :pypi:`pytest-operator` Fixtures for Charmed Operators Sep 28, 2022 N/A pytest :pypi:`pytest-optional` include/exclude values of fixtures in pytest Oct 07, 2015 N/A N/A :pypi:`pytest-optional-tests` Easy declaration of optional tests (i.e., that are not run by default) Jul 21, 2025 4 - Beta pytest; extra == "dev" @@ -1238,6 +1249,7 @@ This list contains 1842 plugins. :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-plugins` A Python package for managing pytest plugins. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Feb 10, 2026 N/A N/A :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-podman` Pytest plugin for Podman integration Feb 03, 2026 N/A N/A @@ -1264,7 +1276,7 @@ This list contains 1842 plugins. :pypi:`pytest-pretty` pytest plugin for printing summary data as I want it Jun 04, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-pretty-terminal` pytest plugin for generating prettier terminal output Jan 31, 2022 N/A pytest (>=3.4.1) :pypi:`pytest-pride` Minitest-style test colors Apr 02, 2016 3 - Alpha N/A - :pypi:`pytest-print` pytest-print adds the printer fixture you can use to print messages to the user (directly to the pytest runner, not stdout) Oct 09, 2025 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-print` pytest-print adds the printer fixture you can use to print messages to the user (directly to the pytest runner, not stdout) Feb 11, 2026 5 - Production/Stable pytest>=9.0.2 :pypi:`pytest-priority` pytest plugin for add priority for tests Aug 19, 2024 N/A pytest :pypi:`pytest-proceed` Oct 01, 2024 N/A pytest :pypi:`pytest-profiles` pytest plugin for configuration profiles Dec 09, 2021 4 - Beta pytest (>=3.7.0) @@ -1358,7 +1370,7 @@ This list contains 1842 plugins. :pypi:`pytest-reference-formatter` Conveniently run pytest with a dot-formatted test reference. Oct 01, 2019 4 - Beta N/A :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest - :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Jan 09, 2026 5 - Production/Stable pytest>=6.2.0 + :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 06, 2026 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest @@ -1414,7 +1426,7 @@ This list contains 1842 plugins. :pypi:`pytest-responsemock` Simplified requests calls mocking for pytest Mar 10, 2022 5 - Production/Stable N/A :pypi:`pytest-responses` py.test integration for responses Oct 11, 2022 N/A pytest (>=2.5) :pypi:`pytest-rest-api` Aug 08, 2022 N/A pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-restrict` Pytest plugin to restrict the test types allowed Sep 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-restrict` Pytest plugin to restrict the test types allowed Feb 09, 2026 5 - Production/Stable pytest :pypi:`pytest-resttest` A REST API testing framework for Python, as plugin for pytest. Uses simple and readable YAML files for specifying test cases. Jan 01, 2026 5 - Production/Stable N/A :pypi:`pytest-result-log` A pytest plugin that records the start, end, and result information of each use case in a log file Jan 10, 2024 N/A pytest>=7.2.0 :pypi:`pytest-result-notify` Default template for PDM package Apr 27, 2025 N/A pytest>=8.3.5 @@ -1471,7 +1483,7 @@ This list contains 1842 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 11, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1484,7 +1496,7 @@ This list contains 1842 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 11, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1570,7 +1582,7 @@ This list contains 1842 plugins. :pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0 :pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7 :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Jan 21, 2026 4 - Beta pytest>=8.1.1 - :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Feb 08, 2026 N/A pytest>=3.0.0 + :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Feb 09, 2026 N/A pytest>=3.0.0 :pypi:`pytest-splinter` Splinter plugin for pytest testing framework Sep 09, 2022 6 - Mature pytest (>=3.0.0) :pypi:`pytest-splinter4` Pytest plugin for the splinter automation library Feb 01, 2024 6 - Mature pytest >=8.0.0 :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Feb 03, 2026 4 - Beta pytest<10,>=5 @@ -1654,7 +1666,7 @@ This list contains 1842 plugins. :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Dec 24, 2025 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 04, 2026 N/A N/A + :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 11, 2026 N/A N/A :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) @@ -1776,7 +1788,7 @@ This list contains 1842 plugins. :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Jan 09, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Feb 08, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest :pypi:`pytest-valgrind` May 19, 2021 N/A N/A :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 @@ -1909,6 +1921,13 @@ This list contains 1842 plugins. Network Unit Testing System + :pypi:`pytest-abort` + *last release*: Feb 11, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. + :pypi:`pytest-abq` *last release*: Apr 07, 2023, *status*: N/A, @@ -1994,7 +2013,7 @@ This list contains 1842 plugins. Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. :pypi:`pytest-agent-evals` - *last release*: Jan 30, 2026, + *last release*: Feb 10, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -2029,7 +2048,7 @@ This list contains 1842 plugins. pytest plugin for connecting to ai1899 smart system stack :pypi:`pytest-aio` - *last release*: Nov 06, 2025, + *last release*: Feb 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -2078,7 +2097,7 @@ This list contains 1842 plugins. Send responses to aiohttp. :pypi:`pytest-aiohutils` - *last release*: Nov 10, 2025, + *last release*: Feb 10, 2026, *status*: N/A, *requires*: pytest @@ -2120,7 +2139,7 @@ This list contains 1842 plugins. :pypi:`pytest-aitest` - *last release*: Feb 07, 2026, + *last release*: Feb 14, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -2455,6 +2474,13 @@ This list contains 1842 plugins. pytest plugin to help with comparing array output from tests + :pypi:`pytest-artifact` + *last release*: Feb 09, 2026, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + Pytest plugin for managing test artifacts + :pypi:`pytest-asdf-plugin` *last release*: Aug 18, 2025, *status*: 5 - Production/Stable, @@ -2960,7 +2986,7 @@ This list contains 1842 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Feb 06, 2026, + *last release*: Feb 13, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3842,7 +3868,7 @@ This list contains 1842 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Feb 07, 2026, + *last release*: Feb 12, 2026, *status*: 4 - Beta, *requires*: pytest @@ -3897,8 +3923,15 @@ This list contains 1842 plugins. pytest plugin to run pycodestyle + :pypi:`pytest-codingagents` + *last release*: Feb 12, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=9.0 + + Pytest plugin for testing real coding agents via their SDK + :pypi:`pytest-codspeed` - *last release*: Oct 24, 2025, + *last release*: Feb 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=3.8 @@ -4612,7 +4645,7 @@ This list contains 1842 plugins. A 'defer' fixture for pytest :pypi:`pytest-delta` - *last release*: Jan 15, 2026, + *last release*: Feb 12, 2026, *status*: 4 - Beta, *requires*: pytest<10.0.0,>=9.0.2 @@ -4702,6 +4735,13 @@ This list contains 1842 plugins. DevPI server fixture for py.test + :pypi:`pytest-devtools` + *last release*: Feb 10, 2026, + *status*: N/A, + *requires*: pytest>=9.0.2 + + Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. + :pypi:`pytest-dfm` *last release*: Nov 23, 2025, *status*: N/A, @@ -4829,7 +4869,7 @@ This list contains 1842 plugins. pytest-ditto plugin for pyarrow tables. :pypi:`pytest-django` - *last release*: Apr 03, 2025, + *last release*: Feb 14, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -5270,7 +5310,7 @@ This list contains 1842 plugins. A Django REST framework plugin for pytest. :pypi:`pytest-drill-sergeant` - *last release*: Sep 12, 2025, + *last release*: Feb 13, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -5613,9 +5653,9 @@ This list contains 1842 plugins. Improvements for pytest (rejected upstream) :pypi:`pytest-env` - *last release*: Oct 09, 2025, + *last release*: Feb 11, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=8.4.2 + *requires*: pytest>=9.0.2 pytest plugin that allows you to add environment variables. @@ -5738,6 +5778,13 @@ This list contains 1842 plugins. Pytest Plugin for BDD + :pypi:`pytest-eval` + *last release*: Feb 11, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + LLM testing for humans. + :pypi:`pytest-evals` *last release*: Feb 02, 2025, *status*: N/A, @@ -5781,7 +5828,7 @@ This list contains 1842 plugins. Pytest plugin for testing examples in docstrings and markdown files. :pypi:`pytest-exasol-backend` - *last release*: Dec 10, 2025, + *last release*: Feb 12, 2026, *status*: N/A, *requires*: pytest<9,>=7 @@ -5809,7 +5856,7 @@ This list contains 1842 plugins. :pypi:`pytest-exasol-slc` - *last release*: Dec 12, 2025, + *last release*: Feb 12, 2026, *status*: N/A, *requires*: pytest<9,>=7 @@ -6348,11 +6395,11 @@ This list contains 1842 plugins. A pytest plugin to assert type annotations at runtime. :pypi:`pytest-fkit` - *last release*: Feb 03, 2026, + *last release*: Feb 14, 2026, *status*: N/A, *requires*: pytest>=6.0.0 - A pytest plugin that prevents crashes from killing your test suite, with execution tracing + A pytest plugin that prevents crashes from killing your test suite :pypi:`pytest-flake8` *last release*: Nov 09, 2024, @@ -6585,6 +6632,13 @@ This list contains 1842 plugins. Deterministically frozen UUID's for your tests + :pypi:`pytest_ftpserver` + *last release*: Feb 10, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest + + A PyTest plugin which provides an FTP fixture for your tests + :pypi:`pytest-func-cov` *last release*: Apr 15, 2021, *status*: 3 - Alpha, @@ -6676,6 +6730,13 @@ This list contains 1842 plugins. Uses gcov to measure test coverage of a C library + :pypi:`pytest-gcpsecretmanager` + *last release*: Feb 13, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A PyTest plugin for mocking GCP's Secret Manager + :pypi:`pytest-gcs` *last release*: Jan 24, 2025, *status*: 5 - Production/Stable, @@ -6929,7 +6990,7 @@ This list contains 1842 plugins. :pypi:`pytest-gremlins` - *last release*: Jan 27, 2026, + *last release*: Feb 12, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7097,7 +7158,7 @@ This list contains 1842 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Feb 07, 2026, + *last release*: Feb 14, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7342,7 +7403,7 @@ This list contains 1842 plugins. A thin wrapper of HTTPretty for pytest :pypi:`pytest_httpserver` - *last release*: Apr 10, 2025, + *last release*: Feb 14, 2026, *status*: 3 - Alpha, *requires*: N/A @@ -7390,6 +7451,13 @@ This list contains 1842 plugins. A beautiful nested pytest HTML test report + :pypi:`pytest-hy` + *last release*: Feb 11, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin for discovering and running Hy test files + :pypi:`pytest-hylang` *last release*: Mar 28, 2021, *status*: N/A, @@ -7404,6 +7472,13 @@ This list contains 1842 plugins. help hypo module for pytest + :pypi:`pytest-hypothesis` + *last release*: Feb 09, 2026, + *status*: N/A, + *requires*: N/A + + + :pypi:`pytest-iam` *last release*: Nov 02, 2025, *status*: 4 - Beta, @@ -7475,11 +7550,11 @@ This list contains 1842 plugins. A pytest plugin for image snapshot management and comparison. :pypi:`pytest-impacted` - *last release*: Sep 11, 2025, + *last release*: Feb 12, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0.0 - A pytest plugin that selectively runs tests impacted by codechanges via git introspection, ASL parsing, and dependency graph analysis. + A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. :pypi:`pytest-import-check` *last release*: Jul 19, 2024, @@ -7496,8 +7571,8 @@ This list contains 1842 plugins. an incremental test runner (pytest plugin) :pypi:`pytest-in-docker` - *last release*: Feb 07, 2026, - *status*: N/A, + *last release*: Feb 09, 2026, + *status*: 3 - Alpha, *requires*: pytest>=9.0.2 Seamlessly run pytest tests inside docker containers @@ -7608,11 +7683,11 @@ This list contains 1842 plugins. Inmanta tests package :pypi:`pytest-inmanta-lsm` - *last release*: Nov 19, 2025, + *last release*: Feb 12, 2026, *status*: 5 - Production/Stable, *requires*: N/A - Common fixtures for inmanta LSM related modules + Common fixtures used in inmanta LSM related modules :pypi:`pytest-inmanta-srlinux` *last release*: Apr 22, 2025, @@ -7713,7 +7788,7 @@ This list contains 1842 plugins. Pytest plugin for intercepting outgoing connection requests during pytest run. :pypi:`pytest-interface-tester` - *last release*: Oct 09, 2025, + *last release*: Feb 11, 2026, *status*: 4 - Beta, *requires*: pytest @@ -8182,7 +8257,7 @@ This list contains 1842 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Jan 17, 2026, + *last release*: Feb 14, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8328,6 +8403,13 @@ This list contains 1842 plugins. Profile code executed by pytest + :pypi:`pytest-line-runner` + *last release*: Feb 08, 2026, + *status*: N/A, + *requires*: N/A + + Run pytest tests by line number instead of exact test name + :pypi:`pytest-lisa` *last release*: Jan 21, 2021, *status*: 3 - Alpha, @@ -9015,7 +9097,7 @@ This list contains 1842 plugins. Help you mock HTTP call and generate mock code :pypi:`pytest-mockito` - *last release*: Nov 17, 2025, + *last release*: Feb 10, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6 @@ -9140,6 +9222,13 @@ This list contains 1842 plugins. pytest plugin for MongoDB + :pypi:`pytest-mongo-docker` + *last release*: Feb 12, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=7.4 + + A tiny plugin for pytest which runs MongoDB in Docker + :pypi:`pytest-monitor` *last release*: Jun 25, 2023, *status*: 5 - Production/Stable, @@ -9449,7 +9538,7 @@ This list contains 1842 plugins. pytest ngs fixtures :pypi:`pytest-nhsd-apim` - *last release*: Jan 23, 2026, + *last release*: Feb 13, 2026, *status*: N/A, *requires*: pytest<9.0.0,>=8.2.0 @@ -9631,7 +9720,7 @@ This list contains 1842 plugins. Project description :pypi:`pytest-oduit` - *last release*: Oct 06, 2025, + *last release*: Feb 11, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8 @@ -9694,7 +9783,7 @@ This list contains 1842 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Feb 04, 2026, + *last release*: Feb 12, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -9722,7 +9811,7 @@ This list contains 1842 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-opentmi` - *last release*: Mar 22, 2025, + *last release*: Feb 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=5.0 @@ -10309,6 +10398,13 @@ This list contains 1842 plugins. A Python package for managing pytest plugins. + :pypi:`pytest-plugin-utils` + *last release*: Feb 10, 2026, + *status*: N/A, + *requires*: N/A + + Reusable configuration and artifact utilities for building pytest plugins + :pypi:`pytest-plus` *last release*: Feb 02, 2025, *status*: 5 - Production/Stable, @@ -10492,9 +10588,9 @@ This list contains 1842 plugins. Minitest-style test colors :pypi:`pytest-print` - *last release*: Oct 09, 2025, + *last release*: Feb 11, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=8.4.2 + *requires*: pytest>=9.0.2 pytest-print adds the printer fixture you can use to print messages to the user (directly to the pytest runner, not stdout) @@ -11150,7 +11246,7 @@ This list contains 1842 plugins. Management of Pytest dependencies via regex patterns :pypi:`pytest-regressions` - *last release*: Jan 09, 2026, + *last release*: Feb 10, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.0 @@ -11542,7 +11638,7 @@ This list contains 1842 plugins. :pypi:`pytest-restrict` - *last release*: Sep 09, 2025, + *last release*: Feb 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -11941,7 +12037,7 @@ This list contains 1842 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Feb 02, 2026, + *last release*: Feb 11, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12032,7 +12128,7 @@ This list contains 1842 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Feb 02, 2026, + *last release*: Feb 11, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12634,7 +12730,7 @@ This list contains 1842 plugins. Doctest plugin for pytest with support for Sphinx-specific doctest-directives :pypi:`pytest-spiratest` - *last release*: Feb 08, 2026, + *last release*: Feb 09, 2026, *status*: N/A, *requires*: pytest>=3.0.0 @@ -13222,7 +13318,7 @@ This list contains 1842 plugins. Test configuration plugin for pytest. :pypi:`pytest-testcontainers-compose` - *last release*: Feb 04, 2026, + *last release*: Feb 11, 2026, *status*: N/A, *requires*: N/A @@ -14076,7 +14172,7 @@ This list contains 1842 plugins. Some helpers for pytest. :pypi:`pytest-uuid` - *last release*: Jan 09, 2026, + *last release*: Feb 08, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 From 7bc02cca0dd92ec505b4556c054b4e06e9cb8d4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 06:48:07 +0100 Subject: [PATCH 172/307] build(deps): Bump codecov/codecov-action from 5.5.1 to 5.5.2 (#14198) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.1 to 5.5.2. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v5.5.1...671740ac38dd9b0130fbe1cec585b89eea48d3de) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.5.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 94b14299191..a0ca095adc7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -297,7 +297,7 @@ jobs: verbose: true - name: Upload JUnit report to Codecov - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de with: fail_ci_if_error: false files: junit.xml From 8950ca3bc0988647dfc35b02f854347a1435bd36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Mon, 16 Feb 2026 15:52:46 +0100 Subject: [PATCH 173/307] subtests: fix inconcistent handling of non-string messages (#14196) Fixes #14195 --------- Co-authored-by: Bruno Oliveira --- AUTHORS | 1 + changelog/14195.bugfix.rst | 1 + src/_pytest/unittest.py | 6 +++- testing/test_subtests.py | 57 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 changelog/14195.bugfix.rst diff --git a/AUTHORS b/AUTHORS index 81e08c07488..6885ec6e793 100644 --- a/AUTHORS +++ b/AUTHORS @@ -384,6 +384,7 @@ Ralf Schmitt Ralph Giles Ram Rachum Ran Benita +Randy Döring Raphael Castaneda Raphael Pierzina Rafal Semik diff --git a/changelog/14195.bugfix.rst b/changelog/14195.bugfix.rst new file mode 100644 index 00000000000..29ae149dd98 --- /dev/null +++ b/changelog/14195.bugfix.rst @@ -0,0 +1 @@ +Fixed an issue where non-string messages passed to `unittest.TestCase.subTest()` were not printed. diff --git a/src/_pytest/unittest.py b/src/_pytest/unittest.py index 23b92724f5d..31be8847821 100644 --- a/src/_pytest/unittest.py +++ b/src/_pytest/unittest.py @@ -409,6 +409,10 @@ def addSubTest( | tuple[type[BaseException], BaseException, TracebackType] | None, ) -> None: + # Importing this private symbol locally in case this symbol is renamed/removed in the future; importing + # it globally would break pytest entirely, importing it locally only will break unittests using `addSubTest`. + from unittest.case import _subtest_msg_sentinel # type: ignore[attr-defined] + exception_info: ExceptionInfo[BaseException] | None match exc_info: case tuple(): @@ -427,7 +431,7 @@ def addSubTest( when="call", _ispytest=True, ) - msg = test._message if isinstance(test._message, str) else None # type: ignore[attr-defined] + msg = None if test._message is _subtest_msg_sentinel else str(test._message) # type: ignore[attr-defined] report = self.ihook.pytest_runtest_makereport(item=self, call=call_info) sub_report = SubtestReport._new( report, diff --git a/testing/test_subtests.py b/testing/test_subtests.py index c480bb01658..bc16c879fcb 100644 --- a/testing/test_subtests.py +++ b/testing/test_subtests.py @@ -373,6 +373,36 @@ def test_foo(subtests): ) +def test_msg_not_a_string( + pytester: pytest.Pytester, monkeypatch: pytest.MonkeyPatch +) -> None: + """ + Using a non-string in subtests.test() should still show it in the terminal (#14195). + + Note: this was not a problem originally with the subtests fixture, only with TestCase.subTest; this test + was added for symmetry. + """ + monkeypatch.setenv("COLUMNS", "120") + pytester.makepyfile( + """ + def test_int_msg(subtests): + with subtests.test(42): + assert False, "subtest failure" + + def test_no_msg(subtests): + with subtests.test(): + assert False, "subtest failure" + """ + ) + result = pytester.runpytest() + result.stdout.fnmatch_lines( + [ + "SUBFAILED[[]42[]] test_msg_not_a_string.py::test_int_msg - AssertionError: subtest failure", + "SUBFAILED() test_msg_not_a_string.py::test_no_msg - AssertionError: subtest failure", + ] + ) + + @pytest.mark.parametrize("flag", ["--last-failed", "--stepwise"]) def test_subtests_last_failed_step_wise(pytester: pytest.Pytester, flag: str) -> None: """Check that --last-failed and --step-wise correctly rerun tests with failed subtests.""" @@ -622,6 +652,33 @@ def test_foo(self): "SUBSKIPPED[[]subtest 1[]] [[]1[]] *.py:*: skip subtest 1" ) + def test_msg_not_a_string( + self, pytester: pytest.Pytester, monkeypatch: pytest.MonkeyPatch + ) -> None: + """Using a non-string in TestCase.subTest should still show it in the terminal (#14195).""" + monkeypatch.setenv("COLUMNS", "120") + pytester.makepyfile( + """ + from unittest import TestCase + + class T(TestCase): + def test_int_msg(self): + with self.subTest(42): + assert False, "subtest failure" + + def test_no_msg(self): + with self.subTest(): + assert False, "subtest failure" + """ + ) + result = pytester.runpytest() + result.stdout.fnmatch_lines( + [ + "SUBFAILED[[]42[]] test_msg_not_a_string.py::T::test_int_msg - AssertionError: subtest failure", + "SUBFAILED() test_msg_not_a_string.py::T::test_no_msg - AssertionError: subtest failure", + ] + ) + class TestCapture: def create_file(self, pytester: pytest.Pytester) -> None: From f081bfbdec7d01c71dd3e60525806755d36606ff Mon Sep 17 00:00:00 2001 From: Anton Zhilin Date: Tue, 17 Feb 2026 20:06:37 +0300 Subject: [PATCH 174/307] Test overriding a fixture that requests a parametrized fixture (#14200) This was fixed in 72ae3dbf9608a70df683d081cf53146a8d79f1ea. Add an additional test case from #11075. Closes: #11075. --- testing/python/fixtures.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 8b9e3fbb0a5..7122f7fef3b 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -5399,3 +5399,30 @@ def test_it(request, fix1): ) result = pytester.runpytest("-v") result.assert_outcomes(passed=1) + + +def test_overridden_fixture_depends_on_parametrized(pytester: Pytester) -> None: + """#11075""" + pytester.makepyfile( + """ + import pytest + + @pytest.fixture(params=["foo"]) + def fixture_foo(request): + yield request.param + + @pytest.fixture + def fixture_bar(fixture_foo): + yield fixture_foo + + class TestFoobar: + @pytest.fixture + def fixture_bar(self, fixture_bar): + yield fixture_bar + + def test_foobar(self, fixture_bar): + assert fixture_bar == "foo" + """ + ) + result = pytester.runpytest("-v") + result.assert_outcomes(passed=1) From 6b700f49fb59fc6cec43b9a550cf558954d83332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Wed, 18 Feb 2026 19:17:31 +0100 Subject: [PATCH 175/307] subtests: avoid double `saferepr()` (#14213) #13963 makes sure that values of `SubtestContext.kwargs` are strings by applying `saferepr()`. Thus, there is no need to apply `saferepr()` again for the description. Avoiding the second `saferepr()` results in nicer output and avoids a change in the output compared to previous pytest versions. --- src/_pytest/subtests.py | 2 +- testing/test_subtests.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/_pytest/subtests.py b/src/_pytest/subtests.py index 4856f72b9ff..6ac3b5cd034 100644 --- a/src/_pytest/subtests.py +++ b/src/_pytest/subtests.py @@ -91,7 +91,7 @@ def _sub_test_description(self) -> str: parts.append(f"[{self.context.msg}]") if self.context.kwargs: params_desc = ", ".join( - f"{k}={saferepr(v)}" for (k, v) in self.context.kwargs.items() + f"{k}={v}" for (k, v) in self.context.kwargs.items() ) parts.append(f"({params_desc})") return " ".join(parts) or "()" diff --git a/testing/test_subtests.py b/testing/test_subtests.py index bc16c879fcb..877e32b5204 100644 --- a/testing/test_subtests.py +++ b/testing/test_subtests.py @@ -305,9 +305,9 @@ def test_foo(subtests, x): result = pytester.runpytest("-v") result.stdout.fnmatch_lines( [ - "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i='1') *[[] 50%[]]", + "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i=1) *[[] 50%[]]", "*.py::test_foo[[]0[]] FAILED *[[] 50%[]]", - "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i='1') *[[]100%[]]", + "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i=1) *[[]100%[]]", "*.py::test_foo[[]1[]] FAILED *[[]100%[]]", "contains 1 failed subtest", "* 4 failed, 4 subtests passed in *", @@ -323,9 +323,9 @@ def test_foo(subtests, x): result = pytester.runpytest("-v") result.stdout.fnmatch_lines( [ - "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i='1') *[[] 50%[]]", + "*.py::test_foo[[]0[]] SUBFAILED[[]custom[]] (i=1) *[[] 50%[]]", "*.py::test_foo[[]0[]] FAILED *[[] 50%[]]", - "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i='1') *[[]100%[]]", + "*.py::test_foo[[]1[]] SUBFAILED[[]custom[]] (i=1) *[[]100%[]]", "*.py::test_foo[[]1[]] FAILED *[[]100%[]]", "contains 1 failed subtest", "* 4 failed in *", @@ -710,12 +710,12 @@ def test_capturing(self, pytester: pytest.Pytester, mode: str) -> None: result = pytester.runpytest(f"--capture={mode}") result.stdout.fnmatch_lines( [ - "*__ test (i=\"'A'\") __*", + "*__ test (i='A') __*", "*Captured stdout call*", "hello stdout A", "*Captured stderr call*", "hello stderr A", - "*__ test (i=\"'B'\") __*", + "*__ test (i='B') __*", "*Captured stdout call*", "hello stdout B", "*Captured stderr call*", @@ -736,8 +736,8 @@ def test_no_capture(self, pytester: pytest.Pytester) -> None: "hello stdout A", "uhello stdout B", "uend test", - "*__ test (i=\"'A'\") __*", - "*__ test (i=\"'B'\") __*", + "*__ test (i='A') __*", + "*__ test (i='B') __*", "*__ test __*", ] ) From 052156d3648a56c0ea554f395c44f48ba48acf64 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sat, 21 Feb 2026 09:47:29 +0100 Subject: [PATCH 176/307] doc: add AI/LLM-assisted contributions policy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a policy section to CONTRIBUTING.rst requiring disclosure of AI tool usage, rejecting purely agentic contributions, and outlining consequences (public ban) for non-disclosure or abusive AI-generated PRs. Includes context section explaining the rationale — unsupervised agentic tools waste maintainer time and demonstrate disrespect for human reviewers. Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude --- CONTRIBUTING.rst | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 0f929162c65..0af4af9b838 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -182,6 +182,54 @@ where someone becomes unresponsive after months of contact attempts. As stated, the objective is to share maintenance and avoid "plugin-abandon". +.. _ai-contributions: + +AI/LLM-Assisted Contributions Policy +------------------------------------- + +We welcome contributions from all developers, including those who use AI/LLM tools +as part of their workflow. However, we have strict requirements to protect the time +and effort of our reviewers: + +**Disclosure is mandatory.** All contributions that involved AI or LLM assistance +(e.g. GitHub Copilot, ChatGPT, Claude, or similar tools) must be clearly disclosed +in the pull request description. State which tools were used and to what extent. + +**Purely agentic contributions are not accepted.** Pull requests that are entirely +generated by AI agents — with no meaningful human review, understanding, or oversight — +will be closed, and the contributor will be banned. Every contribution must demonstrate +that a human has reviewed, understood, and taken responsibility for the changes. + +**Consequences of non-disclosure.** Failure to disclose AI involvement, or submitting +low-effort AI-generated pull requests that waste reviewer time, will result in a +**public ban** from the project. Flooding the project with AI-generated PRs is abuse +of the maintainers' volunteer time and will be treated as such. + + +Context +~~~~~~~ + +With the advent of unsupervised agentic tools like OpenClaw, there has been a rise in low-quality contributions +where an agent goes on a rampage of low-quality pull requests. +Oftentimes this looks like a human beginner with fresh agent access trying to learn, +but in reality it's just an unsupervised agentic tool wasting human time for bad-faith contributions. + +With a human we would be more than happy to help and guide them to the right path. +With an agent we are losing human time we never get back. +The promise of AI was to free up human time to focus on more important things like family and friends. + +Fully agentic contributions turn that around — there is no human learning or growing behind those bots, +only soulless, semi-functional prompt adherence. + +We classify that as evil. Badly guardrailed unsupervised tools that run rampant in open-source projects are not smart; +they are the combination of bad laziness and lack of critical thinking that costs everyone else. + +Part of this originates from us having access to coding agents and being painfully aware of the need to correctly prompt and supervise them. +Even modern frontier models repeatedly make grave mistakes when working at framework/tooling level. + +Anyone running those unsupervised and unguarded on open-source projects is demonstrating complete disrespect for actual humans. + + .. _`pull requests`: .. _pull-requests: From 87d95b79f35e45dd76f37c7f7e2de4e6da8e68c9 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sat, 21 Feb 2026 21:07:36 +0100 Subject: [PATCH 177/307] doc: revise AI policy wording per review + add PR template note MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address PR feedback: - "evil" → "wasteful" (nicoddemus) - "bad laziness" → "laziness" (nicoddemus) - "With a human" → "Were the contribution made by an actual human" (nicoddemus) - Em dashes → commas for document consistency - Break long lines for source readability - Incorporate asymmetry argument from Pierre-Sassoulas: agentic PRs prioritize reviewer attention at near-zero cost to the sender Add AI/LLM disclosure checkboxes to the PR template with a link to the full policy in CONTRIBUTING.rst. Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude --- .github/PULL_REQUEST_TEMPLATE.md | 5 ++++ CONTRIBUTING.rst | 40 +++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6f638ba853b..98e2444aad5 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,6 +11,11 @@ If this change fixes an issue, please: - [ ] Add text like ``closes #XYZW`` to the PR description and/or commits (where ``XYZW`` is the issue number). See the [github docs](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) for more information. +**If you used AI/LLM tools** (e.g. GitHub Copilot, ChatGPT, Claude, or similar) to help with this PR, you **must** disclose it below. State which tools were used and to what extent. Purely agentic contributions are not accepted. See our [AI/LLM-Assisted Contributions Policy](https://github.com/pytest-dev/pytest/blob/main/CONTRIBUTING.rst#aillm-assisted-contributions-policy). + +- [ ] This PR was made **without** AI/LLM assistance. +- [ ] This PR used AI/LLM assistance (describe tools and extent below). + Unless your change is trivial or a small documentation fix (e.g., a typo or reword of a small section) please: - [ ] Create a new changelog file in the `changelog` directory, with a name like `..rst`. See [changelog/README.rst](https://github.com/pytest-dev/pytest/blob/main/changelog/README.rst) for details. diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 0af4af9b838..a3340181de5 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -196,7 +196,7 @@ and effort of our reviewers: in the pull request description. State which tools were used and to what extent. **Purely agentic contributions are not accepted.** Pull requests that are entirely -generated by AI agents — with no meaningful human review, understanding, or oversight — +generated by AI agents, with no meaningful human review, understanding, or oversight, will be closed, and the contributor will be banned. Every contribution must demonstrate that a human has reviewed, understood, and taken responsibility for the changes. @@ -209,25 +209,39 @@ of the maintainers' volunteer time and will be treated as such. Context ~~~~~~~ -With the advent of unsupervised agentic tools like OpenClaw, there has been a rise in low-quality contributions -where an agent goes on a rampage of low-quality pull requests. +With the advent of unsupervised agentic tools like OpenClaw, +there has been a rise in low-quality contributions where an agent produces +a large number of low-quality pull requests. Oftentimes this looks like a human beginner with fresh agent access trying to learn, -but in reality it's just an unsupervised agentic tool wasting human time for bad-faith contributions. +but in reality it's just an unsupervised agentic tool wasting human time +for bad-faith contributions. -With a human we would be more than happy to help and guide them to the right path. +Were the contribution made by an actual human, we would be more than happy +to help and guide them to the right path. With an agent we are losing human time we never get back. -The promise of AI was to free up human time to focus on more important things like family and friends. +The promise of AI was to free up human time to focus on more important things +like family and friends. -Fully agentic contributions turn that around — there is no human learning or growing behind those bots, -only soulless, semi-functional prompt adherence. +Fully agentic contributions turn that around, there is no human learning or +growing behind those bots, only soulless, semi-functional prompt adherence. -We classify that as evil. Badly guardrailed unsupervised tools that run rampant in open-source projects are not smart; -they are the combination of bad laziness and lack of critical thinking that costs everyone else. +There is also an asymmetry at play: someone is prioritizing what we review +without making an equivalent investment of time or effort. +When a contributor works on an issue themselves, they invest real time, effectively +earning influence over what the project focuses on. Unsupervised agentic contributions +expect to set that priority at near-zero cost to the sender, while shifting the +entire burden onto maintainers. -Part of this originates from us having access to coding agents and being painfully aware of the need to correctly prompt and supervise them. -Even modern frontier models repeatedly make grave mistakes when working at framework/tooling level. +We classify that as wasteful. Badly guardrailed unsupervised tools that run rampant +in open-source projects are not smart; they are the combination of laziness and lack +of critical thinking that costs everyone else. -Anyone running those unsupervised and unguarded on open-source projects is demonstrating complete disrespect for actual humans. +Part of this originates from us having access to coding agents and being painfully +aware of the need to correctly prompt and supervise them. Even modern frontier models +repeatedly make grave mistakes when working at framework/tooling level. + +Anyone running those unsupervised and unguarded on open-source projects is +demonstrating complete disrespect for actual humans. .. _`pull requests`: From 11c8bdcd2dad29813c8461ca4664d796bfd0e6ad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 22 Feb 2026 06:51:40 +0000 Subject: [PATCH 178/307] [automated] Update plugin list (#14225) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 228 +++++++++++++++++++++---------- 1 file changed, 158 insertions(+), 70 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index fcb9018d277..cdba0663ba4 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.0.0 :pypi:`pytest-affected` Nov 06, 2023 N/A N/A :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A + :pypi:`pytest-agentcontract` Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts Feb 18, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Feb 10, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Jan 31, 2026 3 - Alpha pytest>=8.0.0 + :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A @@ -69,7 +70,7 @@ This list contains 1854 plugins. :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 :pypi:`pytest-airflow` pytest support for airflow. Apr 03, 2019 3 - Alpha pytest (>=4.4.0) :pypi:`pytest-airflow-utils` Nov 15, 2021 N/A N/A - :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 14, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 20, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-alembic` A pytest plugin for verifying alembic migrations. May 27, 2025 N/A pytest>=7.0 :pypi:`pytest-alerts` A pytest plugin for sending test results to Slack and Telegram Feb 21, 2025 4 - Beta pytest>=7.4.0 :pypi:`pytest-allclose` Pytest fixture extending Numpy's allclose function Jul 30, 2019 5 - Production/Stable pytest @@ -83,7 +84,7 @@ This list contains 1854 plugins. :pypi:`pytest-allure-spec-coverage` The pytest plugin aimed to display test coverage of the specs(requirements) in Allure Oct 26, 2021 N/A pytest :pypi:`pytest-allure-step` Enhanced logging integration with Allure reports for pytest Jul 13, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-alphamoon` Static code checks used at Alphamoon Dec 30, 2021 5 - Production/Stable pytest (>=3.5.0) - :pypi:`pytest-amaranth-sim` Fixture to automate running Amaranth simulations Sep 21, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-amaranth-sim` Fixture to automate running Amaranth simulations Feb 18, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-ampel-core` A plugin to provide AmpelContext fixtures in pytest Dec 17, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-analyzer` this plugin allows to analyze tests in pytest project, collect test metadata and sync it with testomat.io TCM system Feb 21, 2024 N/A pytest <8.0.0,>=7.3.1 :pypi:`pytest-android` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Feb 21, 2019 3 - Alpha pytest @@ -122,6 +123,7 @@ This list contains 1854 plugins. :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A :pypi:`pytest-asptest` test Answer Set Programming programs Apr 28, 2018 4 - Beta N/A + :pypi:`pytest-assay` Evaluation framework for Pydantic AI agents Feb 15, 2026 4 - Beta N/A :pypi:`pytest-assertcount` Plugin to count actual number of asserts in pytest Oct 23, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-assertions` Pytest Assertions Apr 27, 2022 N/A N/A :pypi:`pytest-assert-type` Use typing.assert_type() to test runtime behavior Oct 26, 2025 3 - Alpha pytest>=6.2.0 @@ -190,7 +192,7 @@ This list contains 1854 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 13, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 21, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -316,7 +318,7 @@ This list contains 1854 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 12, 2026 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 20, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -324,7 +326,7 @@ This list contains 1854 plugins. :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codingagents` Pytest plugin for testing real coding agents via their SDK Feb 12, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-codingagents` Pytest plugin for testing real coding agents via their SDK Feb 20, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Feb 09, 2026 5 - Production/Stable pytest>=3.8 :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A @@ -404,7 +406,7 @@ This list contains 1854 plugins. :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 - :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Dec 22, 2025 4 - Beta pytest<10,>=7.0.0 + :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Feb 21, 2026 4 - Beta pytest<10,>=7.0.0 :pypi:`pytest-dataplugin` A pytest plugin for managing an archive of test data. Sep 16, 2017 1 - Planning N/A :pypi:`pytest-datarecorder` A py.test plugin recording and comparing test output. Jul 31, 2024 5 - Production/Stable pytest :pypi:`pytest-dataset` Plugin for loading different datasets for pytest by prefix from json or yaml files Sep 01, 2023 5 - Production/Stable N/A @@ -429,7 +431,7 @@ This list contains 1854 plugins. :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Feb 12, 2026 4 - Beta pytest<10.0.0,>=9.0.2 :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A - :pypi:`pytest-dependency` Manage dependencies of tests Dec 31, 2023 4 - Beta N/A + :pypi:`pytest-dependency` Manage dependencies of tests Feb 15, 2026 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 @@ -448,6 +450,7 @@ This list contains 1854 plugins. :pypi:`pytest-dictsdiff` Jul 26, 2019 N/A N/A :pypi:`pytest-diff` A simple plugin to use with pytest Mar 30, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-diff-selector` Get tests affected by code changes (using git) Feb 24, 2022 4 - Beta pytest (>=6.2.2) ; extra == 'all' + :pypi:`pytest-difftest` Blazingly fast test selection for pytest - only run tests affected by your changes (Rust-powered) Feb 21, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-difido` PyTest plugin for generating Difido reports Oct 23, 2022 4 - Beta pytest (>=4.0.0) :pypi:`pytest-directives` Control your tests flow Aug 11, 2025 3 - Alpha pytest :pypi:`pytest-dir-equal` pytest-dir-equals is a pytest plugin providing helpers to assert directories equality allowing golden testing Dec 11, 2023 4 - Beta pytest>=7.3.2 @@ -522,7 +525,7 @@ This list contains 1854 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 13, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A @@ -546,7 +549,7 @@ This list contains 1854 plugins. :pypi:`pytest-echo` pytest plugin that allows to dump environment variables, package version and generic attributes Apr 27, 2025 5 - Production/Stable pytest>=8.3.3 :pypi:`pytest-edit` Edit the source code of a failed test with \`pytest --edit\`. Nov 17, 2024 N/A pytest :pypi:`pytest-ekstazi` Pytest plugin to select test using Ekstazi algorithm Sep 10, 2022 N/A pytest - :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Dec 03, 2024 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) @@ -571,7 +574,7 @@ This list contains 1854 plugins. :pypi:`pytest_energy_reporter` An energy estimation reporter for pytest Mar 28, 2024 3 - Alpha pytest<9.0.0,>=8.1.1 :pypi:`pytest-enhanced-reports` Enhanced test reports for pytest Dec 15, 2022 N/A N/A :pypi:`pytest-enhancements` Improvements for pytest (rejected upstream) Oct 30, 2019 4 - Beta N/A - :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Feb 11, 2026 5 - Production/Stable pytest>=9.0.2 + :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Feb 17, 2026 5 - Production/Stable pytest>=9.0.2 :pypi:`pytest-envfiles` A py.test plugin that parses environment files before running tests Oct 08, 2015 3 - Alpha N/A :pypi:`pytest-env-info` Push information about the running pytest into envvars Nov 25, 2017 4 - Beta pytest (>=3.1.1) :pypi:`pytest-environment` Pytest Environment Mar 17, 2024 1 - Planning N/A @@ -625,7 +628,7 @@ This list contains 1854 plugins. :pypi:`pytest_extra` Some helpers for writing tests with pytest. Aug 14, 2014 N/A N/A :pypi:`pytest-extra-durations` A pytest plugin to get durations on a per-function basis and per module basis. Apr 21, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-extra-markers` Additional pytest markers to dynamically enable/disable tests viia CLI flags Mar 05, 2023 4 - Beta pytest - :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Jan 15, 2026 N/A pytest<8.0.0,>=7.2.1 + :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Feb 20, 2026 N/A pytest<8.0.0,>=7.2.1 :pypi:`pytest-fabric` Provides test utilities to run fabric task tests by using docker containers Sep 12, 2018 5 - Production/Stable N/A :pypi:`pytest-factory` Use factories for test setup with py.test Sep 06, 2020 3 - Alpha pytest (>4.3) :pypi:`pytest-factoryboy` Factory Boy support for pytest. Jul 01, 2025 6 - Mature pytest>=7.0 @@ -677,12 +680,12 @@ This list contains 1854 plugins. :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest - :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Feb 14, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Feb 19, 2026 N/A pytest>=6.0.0 :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Feb 06, 2026 N/A pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Feb 19, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Jan 13, 2026 N/A pytest>=9.0.2 @@ -725,7 +728,8 @@ This list contains 1854 plugins. :pypi:`pytest-gather-fixtures` set up asynchronous pytest fixtures concurrently Aug 18, 2024 N/A pytest>=7.0.0 :pypi:`pytest-gc` The garbage collector plugin for py.test Feb 01, 2018 N/A N/A :pypi:`pytest-gcov` Uses gcov to measure test coverage of a C library Feb 01, 2018 3 - Alpha N/A - :pypi:`pytest-gcpsecretmanager` A PyTest plugin for mocking GCP's Secret Manager Feb 13, 2026 N/A pytest>=7.0 + :pypi:`pytest-gcppubsub` A Pytest fixture for managing Google Cloud Platform PubSub emulator Feb 18, 2026 N/A pytest>=7.0 + :pypi:`pytest-gcpsecretmanager` A PyTest plugin for mocking GCP's Secret Manager Feb 18, 2026 N/A pytest>=7.0 :pypi:`pytest-gcs` GCS fixtures and fixture factories for Pytest. Jan 24, 2025 5 - Production/Stable pytest>=6.2 :pypi:`pytest-gee` The Python plugin for your GEE based packages. Oct 16, 2025 3 - Alpha pytest :pypi:`pytest-gevent` Ensure that gevent is properly patched when invoking pytest Feb 25, 2020 N/A pytest @@ -762,7 +766,7 @@ This list contains 1854 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Feb 12, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Feb 21, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) @@ -773,6 +777,7 @@ This list contains 1854 plugins. :pypi:`pytest-hardware-test-report` A simple plugin to use with pytest Apr 01, 2024 4 - Beta pytest<9.0.0,>=8.0.0 :pypi:`pytest-harmony` Chain tests and data with pytest Jan 17, 2023 N/A pytest (>=7.2.1,<8.0.0) :pypi:`pytest-harvest` Store data created during your pytest tests execution, and retrieve it at the end of the session, e.g. for applicative benchmarking purposes. Mar 16, 2024 5 - Production/Stable N/A + :pypi:`pytest-helm` Simple, ergonomic Helm manifest fixtures for pytest. Feb 21, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-helm-charts` A plugin to provide different types and configs of Kubernetes clusters that can be used for testing. Dec 23, 2025 4 - Beta pytest<9,>=8.0.0 :pypi:`pytest-helm-templates` Pytest fixtures for unit testing the output of helm templates Aug 07, 2024 N/A pytest~=7.4.0; extra == "dev" :pypi:`pytest-helper` Functions to help in using the pytest testing framework May 31, 2019 5 - Production/Stable N/A @@ -786,7 +791,7 @@ This list contains 1854 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Feb 14, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Feb 21, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -885,7 +890,7 @@ This list contains 1854 plugins. :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest :pypi:`pytest-ipywidgets` Feb 03, 2026 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest - :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Feb 05, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Feb 17, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A @@ -921,7 +926,7 @@ This list contains 1854 plugins. :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest - :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Feb 05, 2026 N/A N/A + :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Feb 15, 2026 N/A N/A :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) @@ -943,7 +948,7 @@ This list contains 1854 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Feb 14, 2026 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Feb 20, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -954,6 +959,7 @@ This list contains 1854 plugins. :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Feb 19, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Oct 14, 2025 4 - Beta pytest>=8.3.5 @@ -983,6 +989,9 @@ This list contains 1854 plugins. :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-lockable` lockable resource plugin for pytest Sep 08, 2025 5 - Production/Stable pytest :pypi:`pytest-locker` Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed Dec 20, 2024 N/A pytest>=5.4 + :pypi:`pytest-loco` Another one YAML-based DSL for testing Feb 18, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 + :pypi:`pytest-loco-http` HTTP support for pytest-loco Feb 18, 2026 3 - Alpha N/A + :pypi:`pytest-loco-json` JSON support for pytest-loco Feb 18, 2026 3 - Alpha N/A :pypi:`pytest-log` print log Aug 15, 2021 N/A pytest (>=3.8) :pypi:`pytest-logbook` py.test plugin to capture logbook log messages Nov 23, 2015 5 - Production/Stable pytest (>=2.8) :pypi:`pytest-logdog` Pytest plugin to test logging Jun 15, 2021 1 - Planning pytest (>=6.2.0) @@ -1104,7 +1113,7 @@ This list contains 1854 plugins. :pypi:`pytest-my-plugin` A pytest plugin that does awesome things Jan 27, 2025 N/A pytest>=6.0 :pypi:`pytest-mypy` A Pytest Plugin for Mypy Apr 02, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-mypyd` Mypy static type checker plugin for Pytest Aug 20, 2019 4 - Beta pytest (<4.7,>=2.8) ; python_version < "3.5" - :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Dec 21, 2024 4 - Beta pytest>=7.0.0 + :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Feb 16, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 @@ -1146,7 +1155,7 @@ This list contains 1854 plugins. :pypi:`pytest-notion` A PyTest Reporter to send test runs to Notion.so Aug 07, 2019 N/A N/A :pypi:`pytest-nunit` A pytest plugin for generating NUnit3 test result XML output Feb 26, 2024 5 - Production/Stable N/A :pypi:`pytest-oar` PyTest plugin for the OAR testing framework May 12, 2025 N/A pytest>=6.0.1 - :pypi:`pytest-oarepo` Nov 07, 2025 N/A pytest>=7.1.2; extra == "dev" + :pypi:`pytest-oarepo` Feb 17, 2026 N/A pytest>=7.1.2; extra == "dev" :pypi:`pytest-object-getter` Import any object from a 3rd party module while mocking its namespace on demand. Jul 31, 2022 5 - Production/Stable pytest :pypi:`pytest-ochrus` pytest results data-base and HTML reporter Feb 21, 2018 4 - Beta N/A :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) @@ -1161,7 +1170,7 @@ This list contains 1854 plugins. :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Feb 12, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Feb 21, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1197,6 +1206,7 @@ This list contains 1854 plugins. :pypi:`pytest-params` Simplified pytest test case parameters. Apr 27, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-param-scope` pytest parametrize scope fixture workaround Oct 18, 2023 N/A pytest :pypi:`pytest-parawtf` Finally spell paramete?ri[sz]e correctly Dec 03, 2018 4 - Beta pytest (>=3.6.0) + :pypi:`pytest-park` Organise and analyse your pytest benchmarks Feb 20, 2026 N/A N/A :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A @@ -1234,7 +1244,7 @@ This list contains 1854 plugins. :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-artifacts` Pytest plugin that captures HTML, screenshots, and console logs on Playwright test failures Jan 29, 2026 N/A N/A + :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Feb 19, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A @@ -1297,7 +1307,8 @@ This list contains 1854 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pve-cloud` Feb 04, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pvcr` PyTest Process VCR Feb 20, 2026 N/A pytest>=3.5.0 + :pypi:`pytest-pve-cloud` Feb 21, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1483,9 +1494,9 @@ This list contains 1854 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 11, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 20, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A - :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Sep 03, 2025 5 - Production/Stable pytest<9,>=7.4 + :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 @@ -1496,7 +1507,7 @@ This list contains 1854 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 11, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 20, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1672,7 +1683,7 @@ This list contains 1854 plugins. :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Feb 06, 2026 4 - Beta pytest>=7 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Feb 19, 2026 4 - Beta pytest>=7 :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A @@ -1761,7 +1772,7 @@ This list contains 1854 plugins. :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A :pypi:`pytest-twisted` A twisted plugin for pytest. Sep 10, 2024 5 - Production/Stable pytest>=2.3 - :pypi:`pytest-ty` A pytest plugin to run the ty type checker Jan 19, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-ty` A pytest plugin to run the ty type checker Feb 18, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-typechecker` Run type checkers on specified test files Feb 04, 2022 N/A pytest (>=6.2.5,<7.0.0) :pypi:`pytest-typed-schema-shot` Pytest plugin for automatic JSON Schema generation and validation from examples Jun 14, 2025 N/A pytest :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A @@ -1800,7 +1811,7 @@ This list contains 1854 plugins. :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A - :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Feb 06, 2026 3 - Alpha pytest>=9.0.0 + :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Feb 19, 2026 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 @@ -1843,7 +1854,7 @@ This list contains 1854 plugins. :pypi:`pytest-xdist-load-testing` xdist scheduler to repeately run tests Nov 22, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Dec 31, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) - :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Nov 10, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Feb 16, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A @@ -2012,6 +2023,13 @@ This list contains 1854 plugins. Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. + :pypi:`pytest-agentcontract` + *last release*: Feb 18, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts + :pypi:`pytest-agent-evals` *last release*: Feb 10, 2026, *status*: 4 - Beta, @@ -2020,7 +2038,7 @@ This list contains 1854 plugins. Pytest plugin for evaluating AI Agents :pypi:`pytest-agents` - *last release*: Jan 31, 2026, + *last release*: Feb 20, 2026, *status*: 3 - Alpha, *requires*: pytest>=8.0.0 @@ -2139,7 +2157,7 @@ This list contains 1854 plugins. :pypi:`pytest-aitest` - *last release*: Feb 14, 2026, + *last release*: Feb 20, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -2237,7 +2255,7 @@ This list contains 1854 plugins. Static code checks used at Alphamoon :pypi:`pytest-amaranth-sim` - *last release*: Sep 21, 2024, + *last release*: Feb 18, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -2509,6 +2527,13 @@ This list contains 1854 plugins. test Answer Set Programming programs + :pypi:`pytest-assay` + *last release*: Feb 15, 2026, + *status*: 4 - Beta, + *requires*: N/A + + Evaluation framework for Pydantic AI agents + :pypi:`pytest-assertcount` *last release*: Oct 23, 2022, *status*: N/A, @@ -2986,7 +3011,7 @@ This list contains 1854 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Feb 13, 2026, + *last release*: Feb 21, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3868,7 +3893,7 @@ This list contains 1854 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Feb 12, 2026, + *last release*: Feb 20, 2026, *status*: 4 - Beta, *requires*: pytest @@ -3924,7 +3949,7 @@ This list contains 1854 plugins. pytest plugin to run pycodestyle :pypi:`pytest-codingagents` - *last release*: Feb 12, 2026, + *last release*: Feb 20, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -4484,7 +4509,7 @@ This list contains 1854 plugins. Data validation and integrity testing for your datasets using pytest. :pypi:`pytest-data-loader` - *last release*: Dec 22, 2025, + *last release*: Feb 21, 2026, *status*: 4 - Beta, *requires*: pytest<10,>=7.0.0 @@ -4659,7 +4684,7 @@ This list contains 1854 plugins. pytest示例插件 :pypi:`pytest-dependency` - *last release*: Dec 31, 2023, + *last release*: Feb 15, 2026, *status*: 4 - Beta, *requires*: N/A @@ -4791,6 +4816,13 @@ This list contains 1854 plugins. Get tests affected by code changes (using git) + :pypi:`pytest-difftest` + *last release*: Feb 21, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Blazingly fast test selection for pytest - only run tests affected by your changes (Rust-powered) + :pypi:`pytest-difido` *last release*: Oct 23, 2022, *status*: 4 - Beta, @@ -5310,7 +5342,7 @@ This list contains 1854 plugins. A Django REST framework plugin for pytest. :pypi:`pytest-drill-sergeant` - *last release*: Feb 13, 2026, + *last release*: Feb 20, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -5478,9 +5510,9 @@ This list contains 1854 plugins. Pytest plugin to select test using Ekstazi algorithm :pypi:`pytest-elasticsearch` - *last release*: Dec 03, 2024, + *last release*: Feb 16, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=7.0 + *requires*: pytest>=8.4.0 Elasticsearch fixtures and fixture factories for Pytest. @@ -5653,7 +5685,7 @@ This list contains 1854 plugins. Improvements for pytest (rejected upstream) :pypi:`pytest-env` - *last release*: Feb 11, 2026, + *last release*: Feb 17, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.2 @@ -6031,7 +6063,7 @@ This list contains 1854 plugins. Additional pytest markers to dynamically enable/disable tests viia CLI flags :pypi:`pytest-f3ts` - *last release*: Jan 15, 2026, + *last release*: Feb 20, 2026, *status*: N/A, *requires*: pytest<8.0.0,>=7.2.1 @@ -6395,7 +6427,7 @@ This list contains 1854 plugins. A pytest plugin to assert type annotations at runtime. :pypi:`pytest-fkit` - *last release*: Feb 14, 2026, + *last release*: Feb 19, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -6430,7 +6462,7 @@ This list contains 1854 plugins. Continuously runs your tests to detect flaky tests :pypi:`pytest-flakefighters` - *last release*: Feb 06, 2026, + *last release*: Feb 19, 2026, *status*: N/A, *requires*: pytest>=6.2.0 @@ -6730,8 +6762,15 @@ This list contains 1854 plugins. Uses gcov to measure test coverage of a C library + :pypi:`pytest-gcppubsub` + *last release*: Feb 18, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A Pytest fixture for managing Google Cloud Platform PubSub emulator + :pypi:`pytest-gcpsecretmanager` - *last release*: Feb 13, 2026, + *last release*: Feb 18, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -6990,7 +7029,7 @@ This list contains 1854 plugins. :pypi:`pytest-gremlins` - *last release*: Feb 12, 2026, + *last release*: Feb 21, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7066,6 +7105,13 @@ This list contains 1854 plugins. Store data created during your pytest tests execution, and retrieve it at the end of the session, e.g. for applicative benchmarking purposes. + :pypi:`pytest-helm` + *last release*: Feb 21, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0.0 + + Simple, ergonomic Helm manifest fixtures for pytest. + :pypi:`pytest-helm-charts` *last release*: Dec 23, 2025, *status*: 4 - Beta, @@ -7158,7 +7204,7 @@ This list contains 1854 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Feb 14, 2026, + *last release*: Feb 21, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7851,7 +7897,7 @@ This list contains 1854 plugins. Run pytest tests in isolated subprocesses :pypi:`pytest-isolated` - *last release*: Feb 05, 2026, + *last release*: Feb 17, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -8103,7 +8149,7 @@ This list contains 1854 plugins. Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest :pypi:`pytest-kafka-broker` - *last release*: Feb 05, 2026, + *last release*: Feb 15, 2026, *status*: N/A, *requires*: N/A @@ -8257,7 +8303,7 @@ This list contains 1854 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Feb 14, 2026, + *last release*: Feb 20, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8333,6 +8379,13 @@ This list contains 1854 plugins. A simple plugin to use with pytest + :pypi:`pytest-leela` + *last release*: Feb 19, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Type-aware mutation testing for Python — fast, opinionated, pytest-native + :pypi:`pytest-leo-interface` *last release*: Mar 19, 2025, *status*: N/A, @@ -8536,6 +8589,27 @@ This list contains 1854 plugins. Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed + :pypi:`pytest-loco` + *last release*: Feb 18, 2026, + *status*: 3 - Alpha, + *requires*: pytest<10.0.0,>=9.0.2 + + Another one YAML-based DSL for testing + + :pypi:`pytest-loco-http` + *last release*: Feb 18, 2026, + *status*: 3 - Alpha, + *requires*: N/A + + HTTP support for pytest-loco + + :pypi:`pytest-loco-json` + *last release*: Feb 18, 2026, + *status*: 3 - Alpha, + *requires*: N/A + + JSON support for pytest-loco + :pypi:`pytest-log` *last release*: Aug 15, 2021, *status*: N/A, @@ -9384,8 +9458,8 @@ This list contains 1854 plugins. Mypy static type checker plugin for Pytest :pypi:`pytest-mypy-plugins` - *last release*: Dec 21, 2024, - *status*: 4 - Beta, + *last release*: Feb 16, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 pytest plugin for writing tests for mypy plugins @@ -9678,7 +9752,7 @@ This list contains 1854 plugins. PyTest plugin for the OAR testing framework :pypi:`pytest-oarepo` - *last release*: Nov 07, 2025, + *last release*: Feb 17, 2026, *status*: N/A, *requires*: pytest>=7.1.2; extra == "dev" @@ -9783,7 +9857,7 @@ This list contains 1854 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Feb 12, 2026, + *last release*: Feb 21, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10034,6 +10108,13 @@ This list contains 1854 plugins. Finally spell paramete?ri[sz]e correctly + :pypi:`pytest-park` + *last release*: Feb 20, 2026, + *status*: N/A, + *requires*: N/A + + Organise and analyse your pytest benchmarks + :pypi:`pytest-pass` *last release*: Dec 04, 2019, *status*: N/A, @@ -10294,11 +10375,11 @@ This list contains 1854 plugins. A pytest wrapper with fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-artifacts` - *last release*: Jan 29, 2026, + *last release*: Feb 19, 2026, *status*: N/A, *requires*: N/A - Pytest plugin that captures HTML, screenshots, and console logs on Playwright test failures + Capture screenshots, HTML, and console logs on Playwright test failures :pypi:`pytest_playwright_async` *last release*: Sep 28, 2024, @@ -10734,8 +10815,15 @@ This list contains 1854 plugins. pytest plugin for push report to minio + :pypi:`pytest-pvcr` + *last release*: Feb 20, 2026, + *status*: N/A, + *requires*: pytest>=3.5.0 + + PyTest Process VCR + :pypi:`pytest-pve-cloud` - *last release*: Feb 04, 2026, + *last release*: Feb 21, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -12037,7 +12125,7 @@ This list contains 1854 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Feb 11, 2026, + *last release*: Feb 20, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12051,9 +12139,9 @@ This list contains 1854 plugins. pytest plugin for test scenarios :pypi:`pytest-scenario-files` - *last release*: Sep 03, 2025, + *last release*: Feb 17, 2026, *status*: 5 - Production/Stable, - *requires*: pytest<9,>=7.4 + *requires*: pytest<10,>=7.4 A pytest plugin that generates unit test scenarios from data files. @@ -12128,7 +12216,7 @@ This list contains 1854 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Feb 11, 2026, + *last release*: Feb 20, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -13360,7 +13448,7 @@ This list contains 1854 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. :pypi:`pytest-testinel` - *last release*: Feb 06, 2026, + *last release*: Feb 19, 2026, *status*: 4 - Beta, *requires*: pytest>=7 @@ -13983,7 +14071,7 @@ This list contains 1854 plugins. A twisted plugin for pytest. :pypi:`pytest-ty` - *last release*: Jan 19, 2026, + *last release*: Feb 18, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -14256,8 +14344,8 @@ This list contains 1854 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. :pypi:`pytest-vigil` - *last release*: Feb 06, 2026, - *status*: 3 - Alpha, + *last release*: Feb 19, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=9.0.0 A pytest plugin for enhanced test reliability and monitoring @@ -14557,7 +14645,7 @@ This list contains 1854 plugins. pytest plugin helps to reproduce failures for particular xdist node :pypi:`pytest-xdist-worker-stats` - *last release*: Nov 10, 2025, + *last release*: Feb 16, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 From c1d7296ba6ee98b9fe4892aa91fa69f4673087c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 08:19:44 +0100 Subject: [PATCH 179/307] build(deps): Bump actions/stale from 10.1.1 to 10.2.0 (#14230) Bumps [actions/stale](https://github.com/actions/stale) from 10.1.1 to 10.2.0. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/997185467fa4f803885201cee163a9f38240193d...b5d41d4e1d5dceea10e7104786b73624c18a190f) --- updated-dependencies: - dependency-name: actions/stale dependency-version: 10.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 82178a67594..ce8ed9e1d67 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -10,7 +10,7 @@ jobs: permissions: issues: write steps: - - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.0 + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.1.0 with: debug-only: false days-before-issue-stale: 14 From 16f0764b5f4ff64b2516f805bc96307a1034a834 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 08:20:10 +0100 Subject: [PATCH 180/307] build(deps): Bump pytest-django in /testing/plugins_integration (#14229) Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.11.1 to 4.12.0. - [Release notes](https://github.com/pytest-dev/pytest-django/releases) - [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst) - [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.11.1...v4.12.0) --- updated-dependencies: - dependency-name: pytest-django dependency-version: 4.12.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index 23fd33e9bd5..d6840ddf8e2 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -3,7 +3,7 @@ django==6.0.2 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 -pytest-django==4.11.1 +pytest-django==4.12.0 pytest-flakes==4.0.5 pytest-html==4.2.0 pytest-mock==3.15.1 From 84047db3e0fd0cf1a86796dc5f85f7d1c4dbc1de Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Mon, 23 Feb 2026 10:32:06 +0100 Subject: [PATCH 181/307] doc: soften AI policy language, replace disclosure with co-author credit Address PR review feedback: remove "mandatory disclosure", "public ban", and "consequences" language. Replace hard disclosure requirement with asking contributors to credit AI agents as co-authors via Co-authored-by trailers. Rewrite Context section in a professional tone, removing personal frustrations while keeping the core arguments about maintainer time asymmetry and unsupervised agent risks. Co-authored-by: Cursor AI Co-authored-by: Claude claude-4.6-opus-high-thinking --- .github/PULL_REQUEST_TEMPLATE.md | 5 +-- CONTRIBUTING.rst | 65 ++++++++++++++++---------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 98e2444aad5..5b00e4434a0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,10 +11,9 @@ If this change fixes an issue, please: - [ ] Add text like ``closes #XYZW`` to the PR description and/or commits (where ``XYZW`` is the issue number). See the [github docs](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) for more information. -**If you used AI/LLM tools** (e.g. GitHub Copilot, ChatGPT, Claude, or similar) to help with this PR, you **must** disclose it below. State which tools were used and to what extent. Purely agentic contributions are not accepted. See our [AI/LLM-Assisted Contributions Policy](https://github.com/pytest-dev/pytest/blob/main/CONTRIBUTING.rst#aillm-assisted-contributions-policy). +**If you used AI agents** (e.g. Cursor Agent, Copilot Workspace, Claude Code, or similar) to generate code or commits, credit them as co-authors using `Co-authored-by` trailers in your commit messages. Purely agentic contributions are not accepted. See our [AI/LLM-Assisted Contributions Policy](https://github.com/pytest-dev/pytest/blob/main/CONTRIBUTING.rst#aillm-assisted-contributions-policy). -- [ ] This PR was made **without** AI/LLM assistance. -- [ ] This PR used AI/LLM assistance (describe tools and extent below). +- [ ] Any AI agents used are credited as co-authors in commit messages. Unless your change is trivial or a small documentation fix (e.g., a typo or reword of a small section) please: diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index a3340181de5..810b97dcd1c 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -188,42 +188,39 @@ AI/LLM-Assisted Contributions Policy ------------------------------------- We welcome contributions from all developers, including those who use AI/LLM tools -as part of their workflow. However, we have strict requirements to protect the time +as part of their workflow. However, we have requirements to protect the time and effort of our reviewers: -**Disclosure is mandatory.** All contributions that involved AI or LLM assistance -(e.g. GitHub Copilot, ChatGPT, Claude, or similar tools) must be clearly disclosed -in the pull request description. State which tools were used and to what extent. +**Credit AI agents as co-authors.** When AI tools act as agents generating +code or commits (e.g. Cursor Agent, Copilot Workspace, Claude Code, or similar), +credit them using ``Co-authored-by`` trailers in your commit messages. This applies +to agentic use, not to incidental use like autocomplete or search. **Purely agentic contributions are not accepted.** Pull requests that are entirely generated by AI agents, with no meaningful human review, understanding, or oversight, -will be closed, and the contributor will be banned. Every contribution must demonstrate -that a human has reviewed, understood, and taken responsibility for the changes. +will be closed. Every contribution must demonstrate that a human has reviewed, +understood, and taken responsibility for the changes. -**Consequences of non-disclosure.** Failure to disclose AI involvement, or submitting -low-effort AI-generated pull requests that waste reviewer time, will result in a -**public ban** from the project. Flooding the project with AI-generated PRs is abuse -of the maintainers' volunteer time and will be treated as such. +**Respect maintainer time.** Submitting low-effort AI-generated pull requests that +waste reviewer time may result in a ban from the project. Our maintainers are +volunteers, and contributions should reflect genuine engagement with the project. Context ~~~~~~~ With the advent of unsupervised agentic tools like OpenClaw, -there has been a rise in low-quality contributions where an agent produces -a large number of low-quality pull requests. -Oftentimes this looks like a human beginner with fresh agent access trying to learn, -but in reality it's just an unsupervised agentic tool wasting human time -for bad-faith contributions. - -Were the contribution made by an actual human, we would be more than happy -to help and guide them to the right path. -With an agent we are losing human time we never get back. -The promise of AI was to free up human time to focus on more important things -like family and friends. - -Fully agentic contributions turn that around, there is no human learning or -growing behind those bots, only soulless, semi-functional prompt adherence. +there has been a rise in low-quality contributions +where an agent produces a large number of low-quality pull requests. +Oftentimes this can look similar to a human beginner with new access to tools +and trying to learn, but in practice it is usually an unsupervised agentic tool +generating changes without meaningful human review. + +When a human contributor is learning, we are glad to invest time to help, +give feedback, and guide them in the right direction. With fully agentic, +unsupervised tools, that same review effort does not support anyone's learning +or growth. Instead, it diverts limited maintainer time away from improving the +project and supporting engaged contributors. There is also an asymmetry at play: someone is prioritizing what we review without making an equivalent investment of time or effort. @@ -232,16 +229,20 @@ earning influence over what the project focuses on. Unsupervised agentic contrib expect to set that priority at near-zero cost to the sender, while shifting the entire burden onto maintainers. -We classify that as wasteful. Badly guardrailed unsupervised tools that run rampant -in open-source projects are not smart; they are the combination of laziness and lack -of critical thinking that costs everyone else. +Fully agentic contributions invert the intended benefit of these tools: rather than +saving time, they create avoidable review and triage work. There is no accountable +human author thoughtfully iterating on feedback, only automated output driven +by prompts. -Part of this originates from us having access to coding agents and being painfully -aware of the need to correctly prompt and supervise them. Even modern frontier models -repeatedly make grave mistakes when working at framework/tooling level. +From our own experience using coding agents, we know they must be carefully prompted, +supervised, and checked by humans. Even modern models can make serious mistakes when +operating at framework or tooling level, and those mistakes can be subtle and +time-consuming to diagnose. -Anyone running those unsupervised and unguarded on open-source projects is -demonstrating complete disrespect for actual humans. +Running such tools unsupervised on open-source projects imposes this cost on +maintainers and other contributors without their consent. Our goal with this policy +is to set clear expectations, protect reviewer time, and ensure that contributions +remain collaborative, respectful, and sustainable. .. _`pull requests`: From 9fd1eebd8af715b58832412bb8398d394ab67666 Mon Sep 17 00:00:00 2001 From: Maxime Grenu <69890511+cluster2600@users.noreply.github.com> Date: Tue, 24 Feb 2026 11:23:12 +0100 Subject: [PATCH 182/307] doc: fix removed pytest.config reference in historical-notes (#14216) pytest.config was removed in pytest 5.0, but the documentation on 'Conditions as strings instead of booleans' still showed it as the modern equivalent of string-based skipif conditions. Replace the broken example with the current recommended approach using request.config (via an autouse fixture), and add a note pointing to the removal notice in the deprecations page. Fixes #12377 --- doc/en/historical-notes.rst | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/doc/en/historical-notes.rst b/doc/en/historical-notes.rst index 600aed4c17b..d93c7b94793 100644 --- a/doc/en/historical-notes.rst +++ b/doc/en/historical-notes.rst @@ -263,20 +263,24 @@ configuration value which you might have added: @pytest.mark.skipif("not config.getvalue('db')") def test_function(): ... -The equivalent with "boolean conditions" is: +The equivalent with "boolean conditions" using ``request.config`` is: .. code-block:: python - @pytest.mark.skipif(not pytest.config.getvalue("db"), reason="--db was not specified") + @pytest.fixture(autouse=True) + def skip_if_no_db(request): + if not request.config.getoption("--db", default=False): + pytest.skip("--db was not specified") + + def test_function(): pass .. note:: - You cannot use ``pytest.config.getvalue()`` in code - imported before pytest's argument parsing takes place. For example, - ``conftest.py`` files are imported before command line parsing and thus - ``config.getvalue()`` will not execute correctly. + ``pytest.config`` was removed in pytest 5.0. Use ``request.config`` + (via the ``request`` fixture) or the ``pytestconfig`` fixture instead. + See :ref:`pytest.config global deprecated` for details. ``pytest.set_trace()`` ---------------------- From 58efa0ea6e036e39d805c4a86b0896fa8cf7f623 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sat, 28 Feb 2026 08:38:06 +0100 Subject: [PATCH 183/307] doc: replace mandatory AI disclosure with contributor responsibility and optional attribution Shift from requiring disclosure of AI tool usage to emphasizing that contributors own their submissions and must engage with reviewers directly. Encourage (but do not require) AI tool attribution via Co-authored-by trailers. PR template updated with a policy callout and attribution checkbox. Co-authored-by: Cursor AI Co-authored-by: Claude claude-4.6-opus-high-thinking --- .github/PULL_REQUEST_TEMPLATE.md | 5 +++-- CONTRIBUTING.rst | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5b00e4434a0..ab9e1640d06 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,9 +11,10 @@ If this change fixes an issue, please: - [ ] Add text like ``closes #XYZW`` to the PR description and/or commits (where ``XYZW`` is the issue number). See the [github docs](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) for more information. -**If you used AI agents** (e.g. Cursor Agent, Copilot Workspace, Claude Code, or similar) to generate code or commits, credit them as co-authors using `Co-authored-by` trailers in your commit messages. Purely agentic contributions are not accepted. See our [AI/LLM-Assisted Contributions Policy](https://github.com/pytest-dev/pytest/blob/main/CONTRIBUTING.rst#aillm-assisted-contributions-policy). +> [!IMPORTANT] +> **Unsupervised agentic contributions are not accepted**. See our [AI/LLM-Assisted Contributions Policy](https://github.com/pytest-dev/pytest/blob/main/CONTRIBUTING.rst#aillm-assisted-contributions-policy). -- [ ] Any AI agents used are credited as co-authors in commit messages. +- [ ] If AI agents were used, they are credited in `Co-authored-by` commit trailers. Unless your change is trivial or a small documentation fix (e.g., a typo or reword of a small section) please: diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 810b97dcd1c..2f17d74847d 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -191,15 +191,21 @@ We welcome contributions from all developers, including those who use AI/LLM too as part of their workflow. However, we have requirements to protect the time and effort of our reviewers: -**Credit AI agents as co-authors.** When AI tools act as agents generating -code or commits (e.g. Cursor Agent, Copilot Workspace, Claude Code, or similar), -credit them using ``Co-authored-by`` trailers in your commit messages. This applies -to agentic use, not to incidental use like autocomplete or search. - **Purely agentic contributions are not accepted.** Pull requests that are entirely generated by AI agents, with no meaningful human review, understanding, or oversight, will be closed. Every contribution must demonstrate that a human has reviewed, -understood, and taken responsibility for the changes. +understood, and taken responsibility for the changes. If you submit it, you own it. + +**You are responsible for your contribution.** Regardless of how the code was +produced, the person submitting a pull request must understand the changes and be +able to respond to review feedback. If a reviewer asks questions or requests changes, +they expect to interact with someone who can engage substantively, not an automated +loop replaying prompts. + +**Credit AI tools via attribution.** If AI agents helped produce your code or +commits, consider adding ``Co-authored-by`` trailers to your commit messages to +credit them. This is not required, but helps reviewers set expectations and is +appreciated. **Respect maintainer time.** Submitting low-effort AI-generated pull requests that waste reviewer time may result in a ban from the project. Our maintainers are From 3000e22ad966943122efa4b3d2eaff796006f756 Mon Sep 17 00:00:00 2001 From: Aditya Giri <74224708+adityagiri3600@users.noreply.github.com> Date: Sun, 1 Mar 2026 04:56:22 +0530 Subject: [PATCH 184/307] Fix CI docs example file names (#14240) --- doc/en/explanation/ci.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/en/explanation/ci.rst b/doc/en/explanation/ci.rst index 16f55be81c0..1c03f840b43 100644 --- a/doc/en/explanation/ci.rst +++ b/doc/en/explanation/ci.rst @@ -50,7 +50,7 @@ Running this locally, without any extra options, will output: $ pytest test_ci.py ... ========================= short test summary info ========================== - FAILED test_backends.py::test_db_initialized[d2] - Failed: deliberately f... + FAILED test_ci.py::test_db_initialized - Failed: deliberately f... *(Note the truncated text)* @@ -63,7 +63,7 @@ While running this on CI will output: $ pytest test_ci.py ... ========================= short test summary info ========================== - FAILED test_backends.py::test_db_initialized[d2] - Failed: deliberately failing + FAILED test_ci.py::test_db_initialized - Failed: deliberately failing for demo purpose, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras facilisis, massa in suscipit dignissim, mauris lacus molestie nisi, quis varius metus nulla ut ipsum. From 1faee72a00dd351be3279807f4fa7fbe101f9ff9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 06:46:25 +0000 Subject: [PATCH 185/307] [automated] Update plugin list (#14245) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 216 +++++++++++++++++++------------ 1 file changed, 136 insertions(+), 80 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index cdba0663ba4..2d56a9c5018 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.3 :pypi:`logassert` Simple but powerful assertion and verification of logged lines Aug 14, 2025 5 - Production/Stable pytest; extra == "dev" - :pypi:`logot` Test whether your code is logging correctly 🪵 Jul 28, 2025 5 - Production/Stable pytest; extra == "pytest" + :pypi:`logot` Test whether your code is logging correctly 🪵 Feb 22, 2026 5 - Production/Stable pytest<10,>=7; extra == "pytest" :pypi:`nuts` Network Unit Testing System Nov 17, 2025 N/A pytest<8,>=7 :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A @@ -91,7 +91,7 @@ This list contains 1865 plugins. :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 - :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Jan 23, 2026 5 - Production/Stable pytest>=6 + :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Feb 24, 2026 5 - Production/Stable pytest>=6 :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A @@ -104,7 +104,7 @@ This list contains 1865 plugins. :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Jan 07, 2026 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Feb 26, 2026 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -192,7 +192,7 @@ This list contains 1865 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 21, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 26, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -272,7 +272,7 @@ This list contains 1865 plugins. :pypi:`pytest-change-report` turn . into √,turn F into x Sep 14, 2020 N/A pytest :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) - :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Nov 29, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Feb 28, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-checkdocs` check the README when running tests Dec 26, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 27, 2025 N/A pytest>=9.0.2 :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 @@ -293,6 +293,7 @@ This list contains 1865 plugins. :pypi:`pytest-circleci-parallelized` Parallelize pytest across CircleCI workers. Oct 20, 2022 N/A N/A :pypi:`pytest-circleci-parallelized-rjp` Parallelize pytest across CircleCI workers. Jun 21, 2022 N/A pytest :pypi:`pytest-ckan` Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 Apr 28, 2020 4 - Beta pytest + :pypi:`pytest-clab` A pytest plugin for managing containerlab topologies in tests. Feb 27, 2026 N/A pytest>=9.0.2 :pypi:`pytest-clarity` A plugin providing an alternative, colourful diff output for failing assertions. Jun 11, 2021 N/A N/A :pypi:`pytest-class-fixtures` Class as PyTest fixtures (and BDD steps) Nov 15, 2024 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-claude-agent-sdk` Use Claude Code in your pytests, or pytest your own Claude Code agents — or both Jan 19, 2026 3 - Alpha pytest>=6.0 @@ -318,7 +319,7 @@ This list contains 1865 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 20, 2026 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 24, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -450,7 +451,7 @@ This list contains 1865 plugins. :pypi:`pytest-dictsdiff` Jul 26, 2019 N/A N/A :pypi:`pytest-diff` A simple plugin to use with pytest Mar 30, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-diff-selector` Get tests affected by code changes (using git) Feb 24, 2022 4 - Beta pytest (>=6.2.2) ; extra == 'all' - :pypi:`pytest-difftest` Blazingly fast test selection for pytest - only run tests affected by your changes (Rust-powered) Feb 21, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-difftest` Blazingly fast test selection for pytest - only run tests affected by your changes (Rust-powered) Feb 23, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-difido` PyTest plugin for generating Difido reports Oct 23, 2022 4 - Beta pytest (>=4.0.0) :pypi:`pytest-directives` Control your tests flow Aug 11, 2025 3 - Alpha pytest :pypi:`pytest-dir-equal` pytest-dir-equals is a pytest plugin providing helpers to assert directories equality allowing golden testing Dec 11, 2023 4 - Beta pytest>=7.3.2 @@ -530,7 +531,7 @@ This list contains 1865 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Feb 07, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Feb 28, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest @@ -599,7 +600,7 @@ This list contains 1865 plugins. :pypi:`pytest_evm` The testing package containing tools to test Web3-based projects Sep 23, 2024 4 - Beta pytest<9.0.0,>=8.1.1 :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 - :pypi:`pytest-exasol-backend` Feb 12, 2026 N/A pytest<9,>=7 + :pypi:`pytest-exasol-backend` Feb 24, 2026 N/A pytest<9,>=7 :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 @@ -688,7 +689,7 @@ This list contains 1865 plugins. :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Feb 19, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Jan 13, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Feb 28, 2026 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) @@ -697,7 +698,7 @@ This list contains 1865 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Jan 21, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer Feb 23, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -736,7 +737,7 @@ This list contains 1865 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Jan 09, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Feb 27, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -766,7 +767,7 @@ This list contains 1865 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Feb 21, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Feb 22, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) @@ -838,7 +839,7 @@ This list contains 1865 plugins. :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A :pypi:`pytest-hypothesis` Feb 09, 2026 N/A N/A :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Jan 27, 2026 4 - Beta pytest + :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Feb 23, 2026 4 - Beta pytest :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest :pypi:`pytest-idapro` A pytest plugin for idapython. Allows a pytest setup to run tests outside and inside IDA in an automated manner by runnig pytest inside IDA and by mocking idapython api Nov 03, 2018 N/A N/A :pypi:`pytest-idem` A pytest plugin to help with testing idem projects Dec 13, 2023 5 - Production/Stable N/A @@ -888,7 +889,7 @@ This list contains 1865 plugins. :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Feb 03, 2026 N/A pytest + :pypi:`pytest-ipywidgets` Feb 24, 2026 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Feb 17, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 @@ -948,7 +949,7 @@ This list contains 1865 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Feb 20, 2026 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Feb 28, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -962,7 +963,7 @@ This list contains 1865 plugins. :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Feb 19, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest - :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Oct 14, 2025 4 - Beta pytest>=8.3.5 + :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Feb 27, 2026 4 - Beta pytest>=8.3.5 :pypi:`pytest-libfaketime` A python-libfaketime plugin for pytest Apr 12, 2024 4 - Beta pytest>=3.0.0 :pypi:`pytest-libiio` A pytest plugin for testing libiio based devices Aug 15, 2025 N/A pytest>=3.5.0 :pypi:`pytest-libnotify` Pytest plugin that shows notifications about the test run Apr 02, 2021 3 - Alpha pytest @@ -989,9 +990,9 @@ This list contains 1865 plugins. :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-lockable` lockable resource plugin for pytest Sep 08, 2025 5 - Production/Stable pytest :pypi:`pytest-locker` Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed Dec 20, 2024 N/A pytest>=5.4 - :pypi:`pytest-loco` Another one YAML-based DSL for testing Feb 18, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 - :pypi:`pytest-loco-http` HTTP support for pytest-loco Feb 18, 2026 3 - Alpha N/A - :pypi:`pytest-loco-json` JSON support for pytest-loco Feb 18, 2026 3 - Alpha N/A + :pypi:`pytest-loco` Another one YAML-based DSL for testing Feb 25, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 + :pypi:`pytest-loco-http` HTTP support for pytest-loco Feb 25, 2026 3 - Alpha N/A + :pypi:`pytest-loco-json` JSON support for pytest-loco Feb 25, 2026 3 - Alpha N/A :pypi:`pytest-log` print log Aug 15, 2021 N/A pytest (>=3.8) :pypi:`pytest-logbook` py.test plugin to capture logbook log messages Nov 23, 2015 5 - Production/Stable pytest (>=2.8) :pypi:`pytest-logdog` Pytest plugin to test logging Jun 15, 2021 1 - Planning pytest (>=6.2.0) @@ -1038,6 +1039,7 @@ This list contains 1865 plugins. :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 + :pypi:`pytest-mcp-tools` Feb 26, 2026 N/A pytest>=7.0.0; extra == "test" :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 :pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Oct 08, 2024 N/A pytest>=7.4.3 @@ -1079,8 +1081,9 @@ This list contains 1865 plugins. :pypi:`pytest-mock-server` Mock server plugin for pytest Jan 09, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-mockservers` A set of fixtures to test your requests to HTTP/UDP servers Mar 31, 2020 N/A pytest (>=4.3.0) :pypi:`pytest-mocktcp` A pytest plugin for testing TCP clients Oct 11, 2022 N/A pytest + :pypi:`pytest-mock-unity-catalog` Unity Catalog pyspark fixtures Feb 28, 2026 N/A pytest :pypi:`pytest-modalt` Massively distributed pytest runs using modal.com Feb 27, 2024 4 - Beta pytest >=6.2.0 - :pypi:`pytest-model-lib` Dec 29, 2025 N/A N/A + :pypi:`pytest-model-lib` pytest plugin for model-lib Feb 22, 2026 N/A N/A :pypi:`pytest-modern` A more modern pytest Aug 19, 2025 4 - Beta pytest>=8 :pypi:`pytest-modified-env` Pytest plugin to fail a test if it leaves modified \`os.environ\` afterwards. Jan 29, 2022 4 - Beta N/A :pypi:`pytest-modifyjunit` Utility for adding additional properties to junit xml for IDM QE Jan 10, 2019 N/A N/A @@ -1119,7 +1122,7 @@ This list contains 1865 plugins. :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 - :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Jan 16, 2026 N/A pytest<9.1.0,>=7.0.0; python_version < "3.14" + :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Feb 25, 2026 4 - Beta pytest<9.1.0,>=7.0.0; python_version < "3.14" :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Nov 05, 2025 2 - Pre-Alpha pytest>=8.3.2; extra == "dev" :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) @@ -1192,6 +1195,8 @@ This list contains 1865 plugins. :pypi:`pytest-pact` A simple plugin to use with pytest Jan 07, 2019 4 - Beta N/A :pypi:`pytest-pagerduty` Pytest plugin for PagerDuty integration via automation testing. Mar 22, 2025 N/A pytest<9.0.0,>=7.4.0 :pypi:`pytest-pahrametahrize` Parametrize your tests with a Boston accent. Nov 24, 2021 4 - Beta pytest (>=6.0,<7.0) + :pypi:`pytest-paia-blockly` pytest plugin for PAIA Blockly: verify get_solution() against test cases Feb 24, 2026 N/A pytest>=8.0 + :pypi:`pytest-paraflow` Deterministic pytest test sharding across CI machines Feb 26, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-parallel` a pytest plugin for parallel and concurrent testing Oct 10, 2021 3 - Alpha pytest (>=3.0.0) :pypi:`pytest-parallel-39` a pytest plugin for parallel and concurrent testing Jul 12, 2021 3 - Alpha pytest (>=3.0.0) :pypi:`pytest-parallelize-tests` pytest plugin that parallelizes test execution across multiple hosts Jan 27, 2023 4 - Beta N/A @@ -1206,7 +1211,7 @@ This list contains 1865 plugins. :pypi:`pytest-params` Simplified pytest test case parameters. Apr 27, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-param-scope` pytest parametrize scope fixture workaround Oct 18, 2023 N/A pytest :pypi:`pytest-parawtf` Finally spell paramete?ri[sz]e correctly Dec 03, 2018 4 - Beta pytest (>=3.6.0) - :pypi:`pytest-park` Organise and analyse your pytest benchmarks Feb 20, 2026 N/A N/A + :pypi:`pytest-park` Organise and analyse your pytest benchmarks Feb 22, 2026 N/A N/A :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A @@ -1269,7 +1274,7 @@ This list contains 1865 plugins. :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A - :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Dec 15, 2025 N/A N/A + :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Feb 24, 2026 N/A N/A :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) :pypi:`pytest-poo` Visualize your crappy tests Mar 25, 2021 5 - Production/Stable pytest (>=2.3.4) :pypi:`pytest-poo-fail` Visualize your failed tests with poo Feb 12, 2015 5 - Production/Stable N/A @@ -1307,8 +1312,8 @@ This list contains 1865 plugins. :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pvcr` PyTest Process VCR Feb 20, 2026 N/A pytest>=3.5.0 - :pypi:`pytest-pve-cloud` Feb 21, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pvcr` PyTest Process VCR Feb 25, 2026 3 - Alpha pytest>=3.5.0 + :pypi:`pytest-pve-cloud` Feb 27, 2026 N/A pytest==8.4.2 :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 @@ -1319,7 +1324,7 @@ This list contains 1865 plugins. :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A :pypi:`pytest-pymysql-autorecord` Record PyMySQL queries and mock with the stored data. Sep 02, 2022 N/A N/A - :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Oct 24, 2025 N/A pytest + :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Feb 27, 2026 N/A pytest :pypi:`pytest-pypi` Easily test your HTTP library against a local copy of pypi Mar 04, 2018 3 - Alpha N/A :pypi:`pytest-pypom-navigation` Core engine for cookiecutter-qa and pytest-play packages Feb 18, 2019 4 - Beta pytest (>=3.0.7) :pypi:`pytest-pyppeteer` A plugin to run pyppeteer in pytest Apr 28, 2022 N/A pytest (>=6.2.5,<7.0.0) @@ -1374,7 +1379,7 @@ This list contains 1865 plugins. :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A - :pypi:`pytest-redis` Redis fixtures and fixture factories for Pytest. Nov 27, 2024 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-redis` Redis fixtures and fixture factories for Pytest. Feb 28, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-redislite` Pytest plugin for testing code using Redis Apr 05, 2022 4 - Beta pytest :pypi:`pytest-redmine` Pytest plugin for redmine Mar 19, 2018 1 - Planning N/A :pypi:`pytest-ref` A plugin to store reference files to ease regression testing Nov 23, 2019 4 - Beta pytest (>=3.5.0) @@ -1382,7 +1387,7 @@ This list contains 1865 plugins. :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 06, 2026 N/A pytest>7.2 + :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 25, 2026 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 @@ -1395,7 +1400,7 @@ This list contains 1865 plugins. :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Dec 14, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Feb 24, 2026 N/A pytest>=7.0.0 :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 23, 2025 5 - Production/Stable pytest :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest @@ -1471,7 +1476,7 @@ This list contains 1865 plugins. :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Jan 02, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-rst` Test code from RST documents with pytest Jan 26, 2023 N/A N/A + :pypi:`pytest-rst` Test code from RST documents with pytest Feb 22, 2026 N/A N/A :pypi:`pytest-rt` pytest data collector plugin for Testgr May 05, 2022 N/A N/A :pypi:`pytest-rts` Coverage-based regression test selection (RTS) plugin for pytest May 17, 2021 N/A pytest :pypi:`pytest-ruff` pytest plugin to check ruff requirements. Jun 19, 2025 4 - Beta pytest>=5 @@ -1494,7 +1499,7 @@ This list contains 1865 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 20, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1507,7 +1512,7 @@ This list contains 1865 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 20, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1546,6 +1551,7 @@ This list contains 1865 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Feb 28, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1589,7 +1595,7 @@ This list contains 1865 plugins. :pypi:`pytest-sourceorder` Test-ordering plugin for pytest Sep 01, 2021 4 - Beta pytest :pypi:`pytest-spark` pytest plugin to run the tests with support of pyspark. May 21, 2025 4 - Beta pytest :pypi:`pytest-spawner` py.test plugin to spawn process and communicate with them. Jul 31, 2015 4 - Beta N/A - :pypi:`pytest-spec` Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION. Oct 08, 2025 N/A pytest; extra == "test" + :pypi:`pytest-spec` Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION. Feb 22, 2026 N/A pytest; extra == "test" :pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0 :pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7 :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Jan 21, 2026 4 - Beta pytest>=8.1.1 @@ -1629,6 +1635,7 @@ This list contains 1865 plugins. :pypi:`pytest-stepthrough` Pause and wait for Enter after each test with --step Aug 14, 2025 N/A N/A :pypi:`pytest-stepwise` Run a test suite one failing test at a time. Dec 01, 2015 4 - Beta N/A :pypi:`pytest-stf` pytest plugin for openSTF Sep 23, 2025 N/A pytest>=5.0 + :pypi:`pytest-stochastic` A pytest plugin for principled stochastic unit testing using concentration inequalities Feb 24, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-stochastics` pytest plugin that allows selectively running tests several times and accepting \*some\* failures. Dec 01, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-stoq` A plugin to pytest stoq Feb 09, 2021 4 - Beta N/A :pypi:`pytest-storage` Pytest plugin to store test artifacts Sep 12, 2025 3 - Alpha pytest>=8.4.2 @@ -1799,7 +1806,7 @@ This list contains 1865 plugins. :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Feb 08, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Feb 27, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest :pypi:`pytest-valgrind` May 19, 2021 N/A N/A :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 @@ -1811,7 +1818,7 @@ This list contains 1865 plugins. :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A - :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Feb 19, 2026 5 - Production/Stable pytest>=9.0.0 + :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Feb 26, 2026 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 @@ -1859,7 +1866,7 @@ This list contains 1865 plugins. :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 - :pypi:`pytest-xhtml` pytest plugin for generating HTML reports Jan 08, 2026 5 - Production/Stable pytest>=7 + :pypi:`pytest-xhtml` pytest plugin for generating HTML reports Feb 26, 2026 5 - Production/Stable pytest>=7 :pypi:`pytest-xiuyu` This is a pytest plugin Jul 25, 2023 5 - Production/Stable N/A :pypi:`pytest-xlog` Extended logging for test and decorators May 31, 2020 4 - Beta N/A :pypi:`pytest-xlsx` pytest plugin for generating test cases by xlsx(excel) Aug 07, 2024 N/A pytest~=8.2.2 @@ -1919,9 +1926,9 @@ This list contains 1865 plugins. Simple but powerful assertion and verification of logged lines :pypi:`logot` - *last release*: Jul 28, 2025, + *last release*: Feb 22, 2026, *status*: 5 - Production/Stable, - *requires*: pytest; extra == "pytest" + *requires*: pytest<10,>=7; extra == "pytest" Test whether your code is logging correctly 🪵 @@ -2304,7 +2311,7 @@ This list contains 1865 plugins. Pytest plugin to allow use of Annotated in tests to resolve fixtures :pypi:`pytest-ansible` - *last release*: Jan 23, 2026, + *last release*: Feb 24, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6 @@ -2395,7 +2402,7 @@ This list contains 1865 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Jan 07, 2026, + *last release*: Feb 26, 2026, *status*: N/A, *requires*: pytest==7.2.2 @@ -3011,7 +3018,7 @@ This list contains 1865 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Feb 21, 2026, + *last release*: Feb 26, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3571,7 +3578,7 @@ This list contains 1865 plugins. A pytest fixture for changing current working directory :pypi:`pytest-check` - *last release*: Nov 29, 2025, + *last release*: Feb 28, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -3717,6 +3724,13 @@ This list contains 1865 plugins. Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 + :pypi:`pytest-clab` + *last release*: Feb 27, 2026, + *status*: N/A, + *requires*: pytest>=9.0.2 + + A pytest plugin for managing containerlab topologies in tests. + :pypi:`pytest-clarity` *last release*: Jun 11, 2021, *status*: N/A, @@ -3893,7 +3907,7 @@ This list contains 1865 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Feb 20, 2026, + *last release*: Feb 24, 2026, *status*: 4 - Beta, *requires*: pytest @@ -4817,7 +4831,7 @@ This list contains 1865 plugins. Get tests affected by code changes (using git) :pypi:`pytest-difftest` - *last release*: Feb 21, 2026, + *last release*: Feb 23, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 @@ -5377,7 +5391,7 @@ This list contains 1865 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Feb 07, 2026, + *last release*: Feb 28, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5860,7 +5874,7 @@ This list contains 1865 plugins. Pytest plugin for testing examples in docstrings and markdown files. :pypi:`pytest-exasol-backend` - *last release*: Feb 12, 2026, + *last release*: Feb 24, 2026, *status*: N/A, *requires*: pytest<9,>=7 @@ -6483,7 +6497,7 @@ This list contains 1865 plugins. pytest plugin to check source code with pyflakes :pypi:`pytest-flakiness` - *last release*: Jan 13, 2026, + *last release*: Feb 28, 2026, *status*: N/A, *requires*: pytest>=9.0.2 @@ -6546,7 +6560,7 @@ This list contains 1865 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Jan 21, 2026, + *last release*: Feb 23, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -6819,7 +6833,7 @@ This list contains 1865 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Jan 09, 2026, + *last release*: Feb 27, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7029,7 +7043,7 @@ This list contains 1865 plugins. :pypi:`pytest-gremlins` - *last release*: Feb 21, 2026, + *last release*: Feb 22, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7533,7 +7547,7 @@ This list contains 1865 plugins. A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite :pypi:`pytest-ibutsu` - *last release*: Jan 27, 2026, + *last release*: Feb 23, 2026, *status*: 4 - Beta, *requires*: pytest @@ -7883,7 +7897,7 @@ This list contains 1865 plugins. Pytest plugin to run tests in Jupyter Notebooks :pypi:`pytest-ipywidgets` - *last release*: Feb 03, 2026, + *last release*: Feb 24, 2026, *status*: N/A, *requires*: pytest @@ -8303,7 +8317,7 @@ This list contains 1865 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Feb 20, 2026, + *last release*: Feb 28, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8401,7 +8415,7 @@ This list contains 1865 plugins. Select tests of a given level or lower :pypi:`pytest-lf-skip` - *last release*: Oct 14, 2025, + *last release*: Feb 27, 2026, *status*: 4 - Beta, *requires*: pytest>=8.3.5 @@ -8590,21 +8604,21 @@ This list contains 1865 plugins. Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed :pypi:`pytest-loco` - *last release*: Feb 18, 2026, + *last release*: Feb 25, 2026, *status*: 3 - Alpha, *requires*: pytest<10.0.0,>=9.0.2 Another one YAML-based DSL for testing :pypi:`pytest-loco-http` - *last release*: Feb 18, 2026, + *last release*: Feb 25, 2026, *status*: 3 - Alpha, *requires*: N/A HTTP support for pytest-loco :pypi:`pytest-loco-json` - *last release*: Feb 18, 2026, + *last release*: Feb 25, 2026, *status*: 3 - Alpha, *requires*: N/A @@ -8932,6 +8946,13 @@ This list contains 1865 plugins. Pytest-style framework for evaluating Model Context Protocol (MCP) servers. + :pypi:`pytest-mcp-tools` + *last release*: Feb 26, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0; extra == "test" + + + :pypi:`pytest-md` *last release*: Jul 11, 2019, *status*: 3 - Alpha, @@ -9219,6 +9240,13 @@ This list contains 1865 plugins. A pytest plugin for testing TCP clients + :pypi:`pytest-mock-unity-catalog` + *last release*: Feb 28, 2026, + *status*: N/A, + *requires*: pytest + + Unity Catalog pyspark fixtures + :pypi:`pytest-modalt` *last release*: Feb 27, 2024, *status*: 4 - Beta, @@ -9227,11 +9255,11 @@ This list contains 1865 plugins. Massively distributed pytest runs using modal.com :pypi:`pytest-model-lib` - *last release*: Dec 29, 2025, + *last release*: Feb 22, 2026, *status*: N/A, *requires*: N/A - + pytest plugin for model-lib :pypi:`pytest-modern` *last release*: Aug 19, 2025, @@ -9500,8 +9528,8 @@ This list contains 1865 plugins. Seedable Jupyter Notebook testing tool :pypi:`pytest-nb-as-test` - *last release*: Jan 16, 2026, - *status*: N/A, + *last release*: Feb 25, 2026, + *status*: 4 - Beta, *requires*: pytest<9.1.0,>=7.0.0; python_version < "3.14" Use notebooks as pytests. Keep your notebooks working. @@ -10010,6 +10038,20 @@ This list contains 1865 plugins. Parametrize your tests with a Boston accent. + :pypi:`pytest-paia-blockly` + *last release*: Feb 24, 2026, + *status*: N/A, + *requires*: pytest>=8.0 + + pytest plugin for PAIA Blockly: verify get_solution() against test cases + + :pypi:`pytest-paraflow` + *last release*: Feb 26, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=9.0.0 + + Deterministic pytest test sharding across CI machines + :pypi:`pytest-parallel` *last release*: Oct 10, 2021, *status*: 3 - Alpha, @@ -10109,7 +10151,7 @@ This list contains 1865 plugins. Finally spell paramete?ri[sz]e correctly :pypi:`pytest-park` - *last release*: Feb 20, 2026, + *last release*: Feb 22, 2026, *status*: N/A, *requires*: N/A @@ -10550,7 +10592,7 @@ This list contains 1865 plugins. Provides Polecat pytest fixtures :pypi:`pytest-polymeric-report` - *last release*: Dec 15, 2025, + *last release*: Feb 24, 2026, *status*: N/A, *requires*: N/A @@ -10816,14 +10858,14 @@ This list contains 1865 plugins. pytest plugin for push report to minio :pypi:`pytest-pvcr` - *last release*: Feb 20, 2026, - *status*: N/A, + *last release*: Feb 25, 2026, + *status*: 3 - Alpha, *requires*: pytest>=3.5.0 PyTest Process VCR :pypi:`pytest-pve-cloud` - *last release*: Feb 21, 2026, + *last release*: Feb 27, 2026, *status*: N/A, *requires*: pytest==8.4.2 @@ -10900,7 +10942,7 @@ This list contains 1865 plugins. Record PyMySQL queries and mock with the stored data. :pypi:`pytest-pyodide` - *last release*: Oct 24, 2025, + *last release*: Feb 27, 2026, *status*: N/A, *requires*: pytest @@ -11285,9 +11327,9 @@ This list contains 1865 plugins. 用例执行过程中录制视频 :pypi:`pytest-redis` - *last release*: Nov 27, 2024, + *last release*: Feb 28, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=6.2 + *requires*: pytest>=8.4.0 Redis fixtures and fixture factories for Pytest. @@ -11341,7 +11383,7 @@ This list contains 1865 plugins. Easy to use fixtures to write regression tests. :pypi:`pytest-regtest` - *last release*: Feb 06, 2026, + *last release*: Feb 25, 2026, *status*: N/A, *requires*: pytest>7.2 @@ -11432,7 +11474,7 @@ This list contains 1865 plugins. pytest plugin for repeating tests :pypi:`pytest-repeated` - *last release*: Dec 14, 2025, + *last release*: Feb 24, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -11964,7 +12006,7 @@ This list contains 1865 plugins. A pytest plugin for snapshot testing against R code outputs :pypi:`pytest-rst` - *last release*: Jan 26, 2023, + *last release*: Feb 22, 2026, *status*: N/A, *requires*: N/A @@ -12125,7 +12167,7 @@ This list contains 1865 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Feb 20, 2026, + *last release*: Feb 25, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12216,7 +12258,7 @@ This list contains 1865 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Feb 20, 2026, + *last release*: Feb 25, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12488,6 +12530,13 @@ This list contains 1865 plugins. Allow for multiple processes to log to a single file + :pypi:`pytest-skill-engineering` + *last release*: Feb 28, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=9.0 + + The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. + :pypi:`pytest-skip` *last release*: Sep 12, 2025, *status*: 3 - Alpha, @@ -12790,7 +12839,7 @@ This list contains 1865 plugins. py.test plugin to spawn process and communicate with them. :pypi:`pytest-spec` - *last release*: Oct 08, 2025, + *last release*: Feb 22, 2026, *status*: N/A, *requires*: pytest; extra == "test" @@ -13069,6 +13118,13 @@ This list contains 1865 plugins. pytest plugin for openSTF + :pypi:`pytest-stochastic` + *last release*: Feb 24, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + A pytest plugin for principled stochastic unit testing using concentration inequalities + :pypi:`pytest-stochastics` *last release*: Dec 01, 2024, *status*: N/A, @@ -14260,7 +14316,7 @@ This list contains 1865 plugins. Some helpers for pytest. :pypi:`pytest-uuid` - *last release*: Feb 08, 2026, + *last release*: Feb 27, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -14344,7 +14400,7 @@ This list contains 1865 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. :pypi:`pytest-vigil` - *last release*: Feb 19, 2026, + *last release*: Feb 26, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.0 @@ -14680,7 +14736,7 @@ This list contains 1865 plugins. A simple plugin to use with pytest :pypi:`pytest-xhtml` - *last release*: Jan 08, 2026, + *last release*: Feb 26, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7 From a9b3d41be31933446309af3eff51d9cd81406f50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 21:40:40 +0000 Subject: [PATCH 186/307] build(deps): Bump django in /testing/plugins_integration (#14252) Bumps [django](https://github.com/django/django) from 6.0.2 to 6.0.3. - [Commits](https://github.com/django/django/compare/6.0.2...6.0.3) --- updated-dependencies: - dependency-name: django dependency-version: 6.0.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index d6840ddf8e2..db654256a4a 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.12.1 -django==6.0.2 +django==6.0.3 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.0.0 From da04fe1d0076b159eb3e8979793d1a8f1d9db1a2 Mon Sep 17 00:00:00 2001 From: Dr Alex Mitre Date: Thu, 5 Mar 2026 13:34:42 -0600 Subject: [PATCH 187/307] Enhance capture-warnings documentation with filter examples Added information on passing multiple filters to pytest.mark.filterwarnings. --- doc/en/how-to/capture-warnings.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index 02da2dd7669..38e18b042d8 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -160,6 +160,15 @@ You can specify multiple filters with separate decorators: def test_one(): assert api_v1() == 1 +You can also pass multiple filters to a single mark by providing multiple arguments: + +.. code-block:: python + + # Later arguments take precedence, matching warnings.filterwarnings behavior. + @pytest.mark.filterwarnings("error", "ignore:api v1") + def test_one(): + assert api_v1() == 1 + .. important:: Regarding decorator order and filter precedence: From 2755310d51bf6f9a307fcb89b4f1712fbc8f7dc5 Mon Sep 17 00:00:00 2001 From: Samuel Newbold Date: Fri, 6 Mar 2026 08:35:54 -0500 Subject: [PATCH 188/307] TOML integer log levels must be quoted: Updating reference documentation (#14255) Fixes #14253 --- changelog/14255.doc.rst | 1 + doc/en/reference/reference.rst | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 changelog/14255.doc.rst diff --git a/changelog/14255.doc.rst b/changelog/14255.doc.rst new file mode 100644 index 00000000000..b96d2c2a1b9 --- /dev/null +++ b/changelog/14255.doc.rst @@ -0,0 +1 @@ +TOML integer log levels must be quoted: Updating reference documentation. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index b14fc627566..644a687af53 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1841,7 +1841,8 @@ passed multiple times. The expected format is ``name=value``. For example:: Sets the minimum log message level that should be captured for live logging. The integer value or - the names of the levels can be used. + the names of the levels can be used. Note in TOML the integer must be quoted, as there is no support + for config parameters of mixed type. .. tab:: toml @@ -1849,6 +1850,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] log_cli_level = "INFO" + log_cli_level = "10" .. tab:: ini @@ -1856,6 +1858,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] log_cli_level = INFO + log_cli_level = 10 For more information, see :ref:`live_logs`. @@ -1956,7 +1959,8 @@ passed multiple times. The expected format is ``name=value``. For example:: Sets the minimum log message level that should be captured for the logging file. The integer value or - the names of the levels can be used. + the names of the levels can be used. Note in TOML the integer must be quoted, as there is no support + for config parameters of mixed type. .. tab:: toml @@ -1964,6 +1968,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] log_file_level = "INFO" + log_cli_level = "10" .. tab:: ini @@ -1971,6 +1976,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] log_file_level = INFO + log_cli_level = 10 For more information, see :ref:`logging`. @@ -2025,7 +2031,8 @@ passed multiple times. The expected format is ``name=value``. For example:: Sets the minimum log message level that should be captured for logging capture. The integer value or - the names of the levels can be used. + the names of the levels can be used. Note in TOML the integer must be quoted, as there is no support + for config parameters of mixed type. .. tab:: toml @@ -2033,6 +2040,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] log_level = "INFO" + log_cli_level = "10" .. tab:: ini @@ -2040,6 +2048,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] log_level = INFO + log_cli_level = 10 For more information, see :ref:`logging`. From 8638c7d3f214c0e0e2f8578280cd6f8765a5771c Mon Sep 17 00:00:00 2001 From: Dr Alex Mitre Date: Fri, 6 Mar 2026 07:42:42 -0600 Subject: [PATCH 189/307] Update documentation for reportinfo() return values (#14256) Clarify the return value of reportinfo() in verbose mode. --- doc/en/example/nonpython.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/en/example/nonpython.rst b/doc/en/example/nonpython.rst index bb879fb51ab..54391d72fd4 100644 --- a/doc/en/example/nonpython.rst +++ b/doc/en/example/nonpython.rst @@ -58,7 +58,12 @@ your own domain specific testing language this way. will be reported as a (red) string. ``reportinfo()`` is used for representing the test location and is also -consulted when reporting in ``verbose`` mode: +consulted when reporting in ``verbose`` mode. It should return a tuple +``(path, lineno, description)``, where: + +* ``path`` is the path shown in reports (usually ``self.path`` or ``self.fspath``). +* ``lineno`` is a zero-based line number, or ``0`` when no specific line applies. +* ``description`` is a short label shown for the collected item: .. code-block:: pytest From 38e9af8b1a59aeab0490e71c2d9fd4c277560ceb Mon Sep 17 00:00:00 2001 From: Dr Alex Mitre Date: Fri, 6 Mar 2026 07:44:42 -0600 Subject: [PATCH 190/307] Add explanation for string context diffs (#14257) Clarify context diff output for string comparisons. --- doc/en/how-to/assert.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/en/how-to/assert.rst b/doc/en/how-to/assert.rst index f8144a08109..006cf475b02 100644 --- a/doc/en/how-to/assert.rst +++ b/doc/en/how-to/assert.rst @@ -436,6 +436,10 @@ Special comparisons are done for a number of cases: * comparing long sequences: first failing indices * comparing dicts: different entries +In string context diffs, lines prefixed with ``-`` come from the left-hand side +of ``assert left == right``, while lines prefixed with ``+`` come from the +right-hand side. + See the :ref:`reporting demo ` for many more examples. Defining your own explanation for failed assertions From d6fa26c62873ea648272b337f2dc45d095394745 Mon Sep 17 00:00:00 2001 From: Dr Alex Mitre Date: Fri, 6 Mar 2026 07:48:12 -0600 Subject: [PATCH 191/307] Update customize.rst with pytest minversion note (#14258) Add note about maintaining minversion for older pytest versions. Closes #7730 --- doc/en/reference/customize.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/en/reference/customize.rst b/doc/en/reference/customize.rst index 54cf86d2e3d..8f781eab4a5 100644 --- a/doc/en/reference/customize.rst +++ b/doc/en/reference/customize.rst @@ -103,6 +103,10 @@ pyproject.toml "integration", ] + For projects that still run pytest versions older than 6.0, keep + ``minversion`` in ``pytest.ini`` or ``setup.cfg`` too. Those versions + do not read ``pyproject.toml``. + tox.ini ~~~~~~~ From 2e04907b4aa94ce8081061fe12216325fd9ab90d Mon Sep 17 00:00:00 2001 From: Anton Zhilin Date: Sun, 8 Mar 2026 00:12:06 +0200 Subject: [PATCH 192/307] testing: add an xfail test demonstrating pytest_fixture_post_finalizer called more than once --- testing/python/fixtures.py | 62 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 7122f7fef3b..1186ac1c57e 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -4219,6 +4219,68 @@ def test_func(my_fixture): ) +def test_fixture_post_finalizer_called_once(pytester: Pytester) -> None: + """Test that pytest_fixture_post_finalizer is called only once per fixture teardown. + + When a fixture depends on multiple parametrized fixtures and all their parameters + change at the same time, the dependent fixture should be torn down only once, + and pytest_fixture_post_finalizer should be called only once for it. + """ + pytester.makeconftest( + """ + import pytest + + finalizer_calls = [] + + def pytest_fixture_post_finalizer(fixturedef, request): + finalizer_calls.append(fixturedef.argname) + + @pytest.fixture(autouse=True) + def check_finalizer_calls(request): + yield + # After each test, verify no duplicate finalizer calls. + if finalizer_calls: + assert len(finalizer_calls) == len(set(finalizer_calls)), ( + f"Duplicate finalizer calls detected: {finalizer_calls}" + ) + finalizer_calls.clear() + """ + ) + pytester.makepyfile( + test_fixtures=""" + import pytest + + @pytest.fixture(scope="session") + def foo(request): + return request.param + + @pytest.fixture(scope="session") + def bar(request): + return request.param + + @pytest.fixture(scope="session") + def baz(foo, bar): + return f"{foo}-{bar}" + + @pytest.mark.parametrize("foo,bar", [(1, 1)], indirect=True) + def test_first(foo, bar, baz): + assert foo == 1 + assert bar == 1 + assert baz == "1-1" + + @pytest.mark.parametrize("foo,bar", [(2, 2)], indirect=True) + def test_second(foo, bar, baz): + assert foo == 2 + assert bar == 2 + assert baz == "2-2" + """ + ) + result = pytester.runpytest("-v") + # The test passes, which means no duplicate finalizer calls were detected + # by the check_finalizer_calls autouse fixture. + result.assert_outcomes(passed=2) + + class TestScopeOrdering: """Class of tests that ensure fixtures are ordered based on their scopes (#2405)""" From 96728d56570e1cd3f37f79019919a394b4323c2c Mon Sep 17 00:00:00 2001 From: Anton Zhilin Date: Sun, 8 Mar 2026 00:17:17 +0200 Subject: [PATCH 193/307] fixtures: fix `pytest_fixture_post_finalizer` sometimes called multiple times Fixes #5848. Co-authored-by: Ran Benita --- changelog/5848.bugfix.rst | 1 + src/_pytest/fixtures.py | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 changelog/5848.bugfix.rst diff --git a/changelog/5848.bugfix.rst b/changelog/5848.bugfix.rst new file mode 100644 index 00000000000..c516ce92473 --- /dev/null +++ b/changelog/5848.bugfix.rst @@ -0,0 +1 @@ +:hook:`pytest_fixture_post_finalizer` is no longer called extra times for the same fixture teardown in some cases. diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 84f90f946be..4c2c9f0a2d5 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1028,6 +1028,11 @@ def addfinalizer(self, finalizer: Callable[[], object]) -> None: self._finalizers.append(finalizer) def finish(self, request: SubRequest) -> None: + if self.cached_result is None: + # Already finished. It is assumed that finalizers cannot be added in + # this state. + return + exceptions: list[BaseException] = [] while self._finalizers: fin = self._finalizers.pop() From 719f1ec97ef6a1a3c622e778aeab4c3f4c4514ac Mon Sep 17 00:00:00 2001 From: Anton Zhilin Date: Sun, 8 Mar 2026 00:29:30 +0200 Subject: [PATCH 194/307] fixtures: improve handling of `pytest_fixture_post_finalizer` raising Previously, if `pytest_fixture_post_finalizer` raised an error, the fixture was not reset properly, because the `FixtureDef.finish()` was disrupted. Fix this by making `pytest_fixture_post_finalizer` itself part of the teardown as a finalizer, which already has proper error handling. If it raises, it's handled (and shown to the user) the same as a teardown failure. Fix #14114. --- changelog/14114.bugfix.rst | 1 + src/_pytest/fixtures.py | 10 ++++++- testing/python/fixtures.py | 54 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 changelog/14114.bugfix.rst diff --git a/changelog/14114.bugfix.rst b/changelog/14114.bugfix.rst new file mode 100644 index 00000000000..bcb1713c475 --- /dev/null +++ b/changelog/14114.bugfix.rst @@ -0,0 +1 @@ +An exception from :hook:`pytest_fixture_post_finalizer` no longer prevents fixtures from being torn down, causing additional errors in the following tests. diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 4c2c9f0a2d5..acb9fc4c5ee 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1041,7 +1041,6 @@ def finish(self, request: SubRequest) -> None: except BaseException as e: exceptions.append(e) node = request.node - node.ihook.pytest_fixture_post_finalizer(fixturedef=self, request=request) # Even if finalization fails, we invalidate the cached fixture # value and remove all finalizers because they may be bound methods # which will keep instances alive. @@ -1101,6 +1100,15 @@ def execute(self, request: SubRequest) -> FixtureValue: for parent_fixture in requested_fixtures_that_should_finalize_us: parent_fixture.addfinalizer(finalizer) + # Register the pytest_fixture_post_finalizer as the first finalizer, + # which is executed last. + assert not self._finalizers + self.addfinalizer( + lambda: request.node.ihook.pytest_fixture_post_finalizer( + fixturedef=self, request=request + ) + ) + ihook = request.node.ihook try: # Setup the fixture, run the code in it, and cache the value diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 1186ac1c57e..4d8dfc3958f 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -4281,6 +4281,60 @@ def test_second(foo, bar, baz): result.assert_outcomes(passed=2) +def test_fixture_post_finalizer_hook_exception(pytester: Pytester) -> None: + """Test that exceptions in pytest_fixture_post_finalizer hook are caught. + + Also verifies that the fixture cache is properly reset even when the + post_finalizer hook raises an exception, so the fixture can be rebuilt + in subsequent tests. + """ + pytester.makeconftest( + """ + import pytest + + def pytest_fixture_post_finalizer(fixturedef, request): + if "test_first" in request.node.nodeid: + raise RuntimeError("Error in post finalizer hook") + + @pytest.fixture + def my_fixture(request): + yield request.node.nodeid + """ + ) + pytester.makepyfile( + test_fixtures=""" + def test_first(my_fixture): + assert "test_first" in my_fixture + + def test_second(my_fixture): + assert "test_second" in my_fixture + """ + ) + result = pytester.runpytest("-v", "--setup-show") + result.assert_outcomes(passed=2, errors=1) + result.stdout.fnmatch_lines( + [ + "*test_first*PASSED", + "*test_first*ERROR", + "*RuntimeError: Error in post finalizer hook*", + ] + ) + # Verify fixture is setup twice (rebuilt for test_second despite error). + result.stdout.fnmatch_lines( + [ + "test_fixtures.py::test_first ", + " SETUP F my_fixture", + " test_fixtures.py::test_first (fixtures used: my_fixture, request)PASSED", + "test_fixtures.py::test_first ERROR", + "test_fixtures.py::test_second ", + " SETUP F my_fixture", + " test_fixtures.py::test_second (fixtures used: my_fixture, request)PASSED", + " TEARDOWN F my_fixture", + ], + consecutive=True, + ) + + class TestScopeOrdering: """Class of tests that ensure fixtures are ordered based on their scopes (#2405)""" From 84859c47ea162c0d2b101014b65c223ea7842c09 Mon Sep 17 00:00:00 2001 From: pytest bot Date: Sun, 8 Mar 2026 00:38:01 +0000 Subject: [PATCH 195/307] [automated] Update plugin list --- doc/en/reference/plugin_list.rst | 3912 +++++++++++++++--------------- 1 file changed, 1980 insertions(+), 1932 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 2d56a9c5018..d416c1e1a24 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,1886 +27,1892 @@ please refer to `the update script =8.3 - :pypi:`logassert` Simple but powerful assertion and verification of logged lines Aug 14, 2025 5 - Production/Stable pytest; extra == "dev" - :pypi:`logot` Test whether your code is logging correctly 🪵 Feb 22, 2026 5 - Production/Stable pytest<10,>=7; extra == "pytest" - :pypi:`nuts` Network Unit Testing System Nov 17, 2025 N/A pytest<8,>=7 - :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A - :pypi:`pytest-abstracts` A contextmanager pytest fixture for handling multiple mock abstracts May 25, 2022 N/A N/A - :pypi:`pytest-accept` Aug 19, 2025 N/A pytest>=7 - :pypi:`pytest-adaptavist` pytest plugin for generating test execution results within Jira Test Management (tm4j) Oct 13, 2022 N/A pytest (>=5.4.0) - :pypi:`pytest-adaptavist-fixed` pytest plugin for generating test execution results within Jira Test Management (tm4j) Jan 17, 2025 N/A pytest>=5.4.0 - :pypi:`pytest-addons-test` 用于测试pytest的插件 Aug 02, 2021 N/A pytest (>=6.2.4,<7.0.0) - :pypi:`pytest-adf` Pytest plugin for writing Azure Data Factory integration tests May 10, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-adf-azure-identity` Pytest plugin for writing Azure Data Factory integration tests Mar 06, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-ads-testplan` Azure DevOps Test Case reporting for pytest tests Sep 15, 2022 N/A N/A - :pypi:`pytest-adversarial` Generate adversarial pytest tests using LLM Jan 22, 2026 N/A pytest>=7.0.0 - :pypi:`pytest-affected` Nov 06, 2023 N/A N/A - :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A - :pypi:`pytest-agentcontract` Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts Feb 18, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Feb 10, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 - :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) - :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A - :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A - :pypi:`pytest-aio` Pytest plugin for testing async python code Feb 12, 2026 5 - Production/Stable pytest - :pypi:`pytest-aioboto3` Aioboto3 Pytest with Moto Jan 17, 2025 N/A N/A - :pypi:`pytest-aiofiles` pytest fixtures for writing aiofiles tests with pyfakefs May 14, 2017 5 - Production/Stable N/A - :pypi:`pytest-aiogram` May 06, 2023 N/A N/A - :pypi:`pytest-aiohttp` Pytest plugin for aiohttp support Jan 23, 2025 4 - Beta pytest>=6.1.0 - :pypi:`pytest-aiohttp-client` Pytest \`client\` fixture for the Aiohttp Jan 10, 2023 N/A pytest (>=7.2.0,<8.0.0) - :pypi:`pytest-aiohttp-mock` Send responses to aiohttp. Sep 13, 2025 3 - Alpha pytest>=8 - :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Feb 10, 2026 N/A pytest - :pypi:`pytest-aiomoto` pytest-aiomoto Jun 24, 2023 N/A pytest (>=7.0,<8.0) - :pypi:`pytest-aioresponses` py.test integration for aioresponses Jan 02, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 - :pypi:`pytest-airflow` pytest support for airflow. Apr 03, 2019 3 - Alpha pytest (>=4.4.0) - :pypi:`pytest-airflow-utils` Nov 15, 2021 N/A N/A - :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 20, 2026 3 - Alpha pytest>=9.0 - :pypi:`pytest-alembic` A pytest plugin for verifying alembic migrations. May 27, 2025 N/A pytest>=7.0 - :pypi:`pytest-alerts` A pytest plugin for sending test results to Slack and Telegram Feb 21, 2025 4 - Beta pytest>=7.4.0 - :pypi:`pytest-allclose` Pytest fixture extending Numpy's allclose function Jul 30, 2019 5 - Production/Stable pytest - :pypi:`pytest-allure-adaptor` Plugin for py.test to generate allure xml reports Jan 10, 2018 N/A pytest (>=2.7.3) - :pypi:`pytest-allure-adaptor2` Plugin for py.test to generate allure xml reports Oct 14, 2020 N/A pytest (>=2.7.3) - :pypi:`pytest-allure-collection` pytest plugin to collect allure markers without running any tests Apr 13, 2023 N/A pytest - :pypi:`pytest-allure-dsl` pytest plugin to test case doc string dls instructions Oct 25, 2020 4 - Beta pytest - :pypi:`pytest-allure-host` Publish Allure static reports to private S3 behind CloudFront with history preservation Nov 03, 2025 3 - Alpha N/A - :pypi:`pytest-allure-id2history` Overwrite allure history id with testcase full name and testcase id if testcase has id, exclude parameters. May 14, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-allure-intersection` Oct 27, 2022 N/A pytest (<5) - :pypi:`pytest-allure-spec-coverage` The pytest plugin aimed to display test coverage of the specs(requirements) in Allure Oct 26, 2021 N/A pytest - :pypi:`pytest-allure-step` Enhanced logging integration with Allure reports for pytest Jul 13, 2025 3 - Alpha pytest>=6.0.0 - :pypi:`pytest-alphamoon` Static code checks used at Alphamoon Dec 30, 2021 5 - Production/Stable pytest (>=3.5.0) - :pypi:`pytest-amaranth-sim` Fixture to automate running Amaranth simulations Feb 18, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-ampel-core` A plugin to provide AmpelContext fixtures in pytest Dec 17, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-analyzer` this plugin allows to analyze tests in pytest project, collect test metadata and sync it with testomat.io TCM system Feb 21, 2024 N/A pytest <8.0.0,>=7.3.1 - :pypi:`pytest-android` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Feb 21, 2019 3 - Alpha pytest - :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) - :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 - :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Feb 24, 2026 5 - Production/Stable pytest>=6 - :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A - :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) - :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A - :pypi:`pytest-antilru` Bust functools.lru_cache when running pytest to avoid test pollution Jul 28, 2024 5 - Production/Stable pytest>=7; python_version >= "3.10" - :pypi:`pytest-anyio` The pytest anyio plugin is built into anyio. You don't need this package. Jun 29, 2021 N/A pytest - :pypi:`pytest-anything` Pytest fixtures to assert anything and something Jan 18, 2024 N/A pytest - :pypi:`pytest-aoc` Downloads puzzle inputs for Advent of Code and synthesizes PyTest fixtures Dec 02, 2023 5 - Production/Stable pytest ; extra == 'test' - :pypi:`pytest-aoreporter` pytest report Jun 27, 2022 N/A N/A - :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) - :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest - :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 - :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Feb 26, 2026 N/A pytest==7.2.2 - :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A - :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A - :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest - :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A - :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 27, 2026 N/A pytest>=8.3.5 - :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) - :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest - :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 - :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) - :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Feb 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" - :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 24, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 - :pypi:`pytest-artifact` Pytest plugin for managing test artifacts Feb 09, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 - :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) - :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A - :pypi:`pytest-asptest` test Answer Set Programming programs Apr 28, 2018 4 - Beta N/A - :pypi:`pytest-assay` Evaluation framework for Pydantic AI agents Feb 15, 2026 4 - Beta N/A - :pypi:`pytest-assertcount` Plugin to count actual number of asserts in pytest Oct 23, 2022 N/A pytest (>=5.0.0) - :pypi:`pytest-assertions` Pytest Assertions Apr 27, 2022 N/A N/A - :pypi:`pytest-assert-type` Use typing.assert_type() to test runtime behavior Oct 26, 2025 3 - Alpha pytest>=6.2.0 - :pypi:`pytest-assertutil` pytest-assertutil May 10, 2019 N/A N/A - :pypi:`pytest-assert-utils` Useful assertion utilities for use with pytest Apr 14, 2022 3 - Alpha N/A - :pypi:`pytest-assist` pytest plugin library Oct 29, 2025 4 - Beta pytest - :pypi:`pytest-assume` A pytest plugin that allows multiple failures per test Jun 24, 2021 N/A pytest (>=2.7) - :pypi:`pytest-assurka` A pytest plugin for Assurka Studio Aug 04, 2022 N/A N/A - :pypi:`pytest-ast-back-to-python` A plugin for pytest devs to view how assertion rewriting recodes the AST Sep 29, 2019 4 - Beta N/A - :pypi:`pytest-asteroid` PyTest plugin for docker-based testing on database images Aug 15, 2022 N/A pytest (>=6.2.5,<8.0.0) - :pypi:`pytest-astropy` Meta-package containing dependencies for testing Sep 26, 2023 5 - Production/Stable pytest >=4.6 - :pypi:`pytest-astropy-header` pytest plugin to add diagnostic information to the header of the test output Sep 06, 2022 3 - Alpha pytest (>=4.6) - :pypi:`pytest-ast-transformer` May 04, 2019 3 - Alpha pytest - :pypi:`pytest_async` pytest-async - Run your coroutine in event loop without decorator Feb 26, 2020 N/A N/A - :pypi:`pytest-async-benchmark` pytest-async-benchmark: Modern pytest benchmarking for async code. 🚀 May 28, 2025 N/A pytest>=8.3.5 - :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A - :pypi:`pytest-asyncio` Pytest support for asyncio Nov 10, 2025 5 - Production/Stable pytest<10,>=8.2 - :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. May 17, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A - :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) - :pypi:`pytest-async-mongodb` pytest plugin for async MongoDB Oct 18, 2017 5 - Production/Stable pytest (>=2.5.2) - :pypi:`pytest-async-sqlalchemy` Database testing fixtures using the SQLAlchemy asyncio API Oct 07, 2021 4 - Beta pytest (>=6.0.0) - :pypi:`pytest-atf-allure` 基于allure-pytest进行自定义 Nov 29, 2023 N/A pytest (>=7.4.2,<8.0.0) - :pypi:`pytest-atomic` Skip rest of tests if previous test failed. Nov 24, 2018 4 - Beta N/A - :pypi:`pytest-atstack` A simple plugin to use with pytest Jan 02, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 04, 2026 N/A pytest>=7.0 - :pypi:`pytest-attrib` pytest plugin to select tests based on attributes similar to the nose-attrib plugin May 24, 2016 4 - Beta N/A - :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A - :pypi:`pytest-autocap` automatically capture test & fixture stdout/stderr to files May 15, 2022 N/A pytest (<7.2,>=7.1.2) - :pypi:`pytest-autochecklog` automatically check condition and log all the checks Apr 25, 2015 4 - Beta N/A - :pypi:`pytest-autofixture` simplify pytest fixtures Aug 01, 2024 N/A pytest>=8 - :pypi:`pytest-autofocus` Auto-focus plugin: run only @pytest.mark.focus tests when --auto-focus is set Dec 02, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-automation` pytest plugin for building a test suite, using YAML files to extend pytest parameterize functionality. Apr 24, 2024 N/A pytest>=7.0.0 - :pypi:`pytest-automock` Pytest plugin for automatical mocks creation May 16, 2023 N/A pytest ; extra == 'dev' - :pypi:`pytest-auto-parametrize` pytest plugin: avoid repeating arguments in parametrize Oct 02, 2016 3 - Alpha N/A - :pypi:`pytest-autoprofile` \`line_profiler.autoprofile\`-ing your \`pytest\` test suite Dec 30, 2025 4 - Beta pytest>=7.0 - :pypi:`pytest-autotest` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Aug 25, 2021 N/A pytest - :pypi:`pytest-aviator` Aviator's Flakybot pytest plugin that automatically reruns flaky tests. Nov 04, 2022 4 - Beta pytest - :pypi:`pytest-avoidance` Makes pytest skip tests that don not need rerunning May 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-awaiting-fix` A simple plugin to use with pytest for traceability across Jira and disabled automated tests Aug 09, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-aws` pytest plugin for testing AWS resource configurations Oct 04, 2017 4 - Beta N/A - :pypi:`pytest-aws-apigateway` pytest plugin for AWS ApiGateway May 24, 2024 4 - Beta pytest - :pypi:`pytest-aws-config` Protect your AWS credentials in unit tests May 28, 2021 N/A N/A - :pypi:`pytest-aws-fixtures` A series of fixtures to use in integration tests involving actual AWS services. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 - :pypi:`pytest-aws-fixtures-293984` AWS configuration utilities for Python applications Dec 04, 2025 3 - Alpha N/A - :pypi:`pytest-axe` pytest plugin for axe-selenium-python Nov 12, 2018 N/A pytest (>=3.0.0) - :pypi:`pytest-axe-playwright-snapshot` A pytest plugin that runs Axe-core on Playwright pages and takes snapshots of the results. Jul 25, 2023 N/A pytest - :pypi:`pytest-azure` Pytest utilities and mocks for Azure Jan 18, 2023 3 - Alpha pytest - :pypi:`pytest-azure-devops` Simplifies using azure devops parallel strategy (https://docs.microsoft.com/en-us/azure/devops/pipelines/test/parallel-testing-any-test-runner) with pytest. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-azurepipelines` Formatting PyTest output for Azure Pipelines UI Oct 06, 2023 5 - Production/Stable pytest (>=5.0.0) - :pypi:`pytest-bandit` A bandit plugin for pytest Feb 23, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-bandit-xayon` A bandit plugin for pytest Oct 17, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-base-url` pytest plugin for URL based testing Jan 31, 2024 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-bashdoctest` A pytest plugin for testing bash command examples in markdown documentation Oct 03, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-batch-regression` A pytest plugin to repeat the entire test suite in batches. May 08, 2024 N/A pytest>=6.0.0 - :pypi:`pytest-bazel` A pytest runner with bazel support Oct 31, 2025 4 - Beta pytest - :pypi:`pytest-bdd` BDD for pytest Dec 05, 2024 6 - Mature pytest>=7.0.0 - :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) - :pypi:`pytest-bdd-md-report` Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support Feb 07, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 - :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Dec 29, 2025 N/A pytest>=7.1.3 - :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 - :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) - :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest - :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Feb 26, 2026 3 - Alpha pytest - :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A - :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A - :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A - :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 09, 2025 5 - Production/Stable pytest>=8.1 - :pypi:`pytest-better-datadir` A small example package Mar 13, 2023 N/A N/A - :pypi:`pytest-better-parametrize` Better description of parametrized test cases Mar 05, 2024 4 - Beta pytest >=6.2.0 - :pypi:`pytest-bg-process` Pytest plugin to initialize background process Jan 24, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-bigchaindb` A BigchainDB plugin for pytest. Jan 24, 2022 4 - Beta N/A - :pypi:`pytest-bigquery-mock` Provides a mock fixture for python bigquery client Dec 28, 2022 N/A pytest (>=5.0) - :pypi:`pytest-bisect-tests` Find tests leaking state and affecting other Jun 09, 2024 N/A N/A - :pypi:`pytest-black` A pytest plugin to enable format checking with black Dec 15, 2024 4 - Beta pytest>=7.0.0 - :pypi:`pytest-black-multipy` Allow '--black' on older Pythons Jan 14, 2021 5 - Production/Stable pytest (!=3.7.3,>=3.5) ; extra == 'testing' - :pypi:`pytest-black-ng` A pytest plugin to enable format checking with black Oct 20, 2022 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-blame` A pytest plugin helps developers to debug by providing useful commits history. May 04, 2019 N/A pytest (>=4.4.0) - :pypi:`pytest-blender` Blender Pytest plugin. Jun 25, 2025 N/A pytest - :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A - :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest - :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A - :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 16, 2025 N/A pytest - :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A - :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A - :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest - :pypi:`pytest-boilerplate` The pytest plugin for your Django Boilerplate. Sep 12, 2024 5 - Production/Stable pytest>=4.0.0 - :pypi:`pytest-bonsai` Apr 08, 2025 N/A pytest>=6 - :pypi:`pytest-boost-xml` Plugin for pytest to generate boost xml reports Nov 30, 2022 4 - Beta N/A - :pypi:`pytest-bootstrap` Mar 04, 2022 N/A N/A - :pypi:`pytest-boto-mock` Thin-wrapper around the mock package for easier use with pytest Jan 20, 2026 5 - Production/Stable pytest>=8.2.0 - :pypi:`pytest-bpdb` A py.test plug-in to enable drop to bpdb debugger on test failure. Jan 19, 2015 2 - Pre-Alpha N/A - :pypi:`pytest-bq` BigQuery fixtures and fixture factories for Pytest. May 08, 2024 5 - Production/Stable pytest>=6.2 - :pypi:`pytest-bravado` Pytest-bravado automatically generates from OpenAPI specification client fixtures. Feb 15, 2022 N/A N/A - :pypi:`pytest-breakword` Use breakword with pytest Aug 04, 2021 N/A pytest (>=6.2.4,<7.0.0) - :pypi:`pytest-breed-adapter` A simple plugin to connect with breed-server Nov 07, 2018 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-briefcase` A pytest plugin for running tests on a Briefcase project. Jun 14, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-brightest` Bright ideas for improving your pytest experience Jul 15, 2025 3 - Alpha pytest>=8.4.1 - :pypi:`pytest-broadcaster` Pytest plugin to broadcast pytest output to various destinations Mar 02, 2025 3 - Alpha pytest - :pypi:`pytest-browser` A pytest plugin for console based browser test selection just after the collection phase Dec 10, 2016 3 - Alpha N/A - :pypi:`pytest-browsermob-proxy` BrowserMob proxy plugin for py.test. Jun 11, 2013 4 - Beta N/A - :pypi:`pytest_browserstack` Py.test plugin for BrowserStack Jan 27, 2016 4 - Beta N/A - :pypi:`pytest-browserstack-local` \`\`py.test\`\` plugin to run \`\`BrowserStackLocal\`\` in background. Feb 09, 2018 N/A N/A - :pypi:`pytest-budosystems` Budo Systems is a martial arts school management system. This module is the Budo Systems Pytest Plugin. May 07, 2023 3 - Alpha pytest - :pypi:`pytest-bug` Pytest plugin for marking tests as a bug Dec 30, 2025 5 - Production/Stable pytest>=9.0.0 - :pypi:`pytest-bugtong-tag` pytest-bugtong-tag is a plugin for pytest Jan 16, 2022 N/A N/A - :pypi:`pytest-bugzilla` py.test bugzilla integration plugin May 05, 2010 4 - Beta N/A - :pypi:`pytest-bugzilla-notifier` A plugin that allows you to execute create, update, and read information from BugZilla bugs Jun 15, 2018 4 - Beta pytest (>=2.9.2) - :pypi:`pytest-buildkite` Plugin for pytest that automatically publishes coverage and pytest report annotations to Buildkite. Jul 13, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-builtin-types` Nov 17, 2021 N/A pytest - :pypi:`pytest-bwrap` Run your tests in Bubblewrap sandboxes Feb 25, 2024 3 - Alpha N/A - :pypi:`pytest-cache` pytest plugin with mechanisms for caching across test runs Jun 04, 2013 3 - Alpha N/A - :pypi:`pytest-cache-assert` Cache assertion data to simplify regression testing of complex serializable data Aug 14, 2023 5 - Production/Stable pytest (>=6.0.0) - :pypi:`pytest-cagoule` Pytest plugin to only run tests affected by changes Jan 01, 2020 3 - Alpha N/A - :pypi:`pytest-cairo` Pytest support for cairo-lang and starknet Apr 17, 2022 N/A pytest - :pypi:`pytest-call-checker` Small pytest utility to easily create test doubles Oct 16, 2022 4 - Beta pytest (>=7.1.3,<8.0.0) - :pypi:`pytest-camel-collect` Enable CamelCase-aware pytest class collection Aug 02, 2020 N/A pytest (>=2.9) - :pypi:`pytest-canonical-data` A plugin which allows to compare results with canonical results, based on previous runs May 08, 2020 2 - Pre-Alpha pytest (>=3.5.0) - :pypi:`pytest-canvas` A minimal pytest plugin that streamlines testing for projects using the Canvas SDK. Jul 22, 2025 N/A pytest<9,>=8.4 - :pypi:`pytest-caprng` A plugin that replays pRNG state on failure. May 02, 2018 4 - Beta N/A - :pypi:`pytest-capsqlalchemy` Pytest plugin to allow capturing SQLAlchemy queries. Mar 19, 2025 4 - Beta N/A - :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A - :pypi:`pytest-capture-warnings` pytest plugin to capture all warnings and put them in one file of your choice May 03, 2022 N/A pytest - :pypi:`pytest-case` A clean, modern, wrapper for pytest.mark.parametrize Nov 25, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 15, 2025 3 - Alpha pytest>=8 - :pypi:`pytest-cases` Separate test code from test cases in pytest. Jun 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-case-start-from` A pytest plugin to start test execution from a specific test case Oct 28, 2025 4 - Beta pytest>=6.0.0 - :pypi:`pytest-casewise-package-install` A pytest plugin for test case-level dynamic dependency management Oct 31, 2025 3 - Alpha pytest>=6.0.0 - :pypi:`pytest-cassandra` Cassandra CCM Test Fixtures for pytest Nov 04, 2017 1 - Planning N/A - :pypi:`pytest-catchlog` py.test plugin to catch log messages. This is a fork of pytest-capturelog. Jan 24, 2016 4 - Beta pytest (>=2.6) - :pypi:`pytest-catch-server` Pytest plugin with server for catching HTTP requests. Dec 12, 2019 5 - Production/Stable N/A - :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Jan 08, 2026 N/A pytest>=8 - :pypi:`pytest-celery` Pytest plugin for Celery Jul 30, 2025 5 - Production/Stable N/A - :pypi:`pytest-celery-py37` Pytest plugin for Celery (compatible with python 3.7) May 23, 2025 5 - Production/Stable N/A - :pypi:`pytest-celery-utils` Pytest plugin for inspecting Celery task queues in Redis during tests Jan 28, 2026 N/A pytest>=9.0.1 - :pypi:`pytest-cfg-fetcher` Pass config options to your unit tests. Feb 26, 2024 N/A N/A - :pypi:`pytest-chainmaker` pytest plugin for chainmaker Oct 15, 2021 N/A N/A - :pypi:`pytest-chalice` A set of py.test fixtures for AWS Chalice Jul 01, 2020 4 - Beta N/A - :pypi:`pytest-change-assert` 修改报错中文为英文 Oct 19, 2022 N/A N/A - :pypi:`pytest-change-demo` turn . into √,turn F into x Mar 02, 2022 N/A pytest - :pypi:`pytest-change-report` turn . into √,turn F into x Sep 14, 2020 N/A pytest - :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest - :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) - :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Feb 28, 2026 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-checkdocs` check the README when running tests Dec 26, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" - :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 27, 2025 N/A pytest>=9.0.2 - :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 - :pypi:`pytest-check-library` check your missing library Jul 17, 2022 N/A N/A - :pypi:`pytest-check-libs` check your missing library Jul 17, 2022 N/A N/A - :pypi:`pytest-check-links` Check links in files Jul 29, 2020 N/A pytest<9,>=7.0 - :pypi:`pytest-checklist` Pytest plugin to track and report unit/function coverage. May 23, 2025 N/A N/A - :pypi:`pytest-check-mk` pytest plugin to test Check_MK checks Nov 19, 2015 4 - Beta pytest - :pypi:`pytest-checkpoint` Restore a checkpoint in pytest Oct 04, 2025 N/A pytest>=8.0.0 - :pypi:`pytest-ch-framework` My pytest framework Apr 17, 2024 N/A pytest==8.0.1 - :pypi:`pytest-chic-report` Simple pytest plugin for generating and sending report to messengers. Nov 01, 2024 N/A pytest>=6.0 - :pypi:`pytest-chinesereport` Apr 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-choose` Provide the pytest with the ability to collect use cases based on rules in text files Feb 04, 2024 N/A pytest >=7.0.0 - :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Dec 15, 2025 N/A pytest>=8.0; extra == "dev" - :pypi:`pytest-chunks` Run only a chunk of your test suite Jul 05, 2022 N/A pytest (>=6.0.0) - :pypi:`pytest_cid` Compare data structures containing matching CIDs of different versions and encoding Sep 01, 2023 4 - Beta pytest >= 5.0, < 7.0 - :pypi:`pytest-circleci` py.test plugin for CircleCI May 03, 2019 N/A N/A - :pypi:`pytest-circleci-parallelized` Parallelize pytest across CircleCI workers. Oct 20, 2022 N/A N/A - :pypi:`pytest-circleci-parallelized-rjp` Parallelize pytest across CircleCI workers. Jun 21, 2022 N/A pytest - :pypi:`pytest-ckan` Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 Apr 28, 2020 4 - Beta pytest - :pypi:`pytest-clab` A pytest plugin for managing containerlab topologies in tests. Feb 27, 2026 N/A pytest>=9.0.2 - :pypi:`pytest-clarity` A plugin providing an alternative, colourful diff output for failing assertions. Jun 11, 2021 N/A N/A - :pypi:`pytest-class-fixtures` Class as PyTest fixtures (and BDD steps) Nov 15, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-claude-agent-sdk` Use Claude Code in your pytests, or pytest your own Claude Code agents — or both Jan 19, 2026 3 - Alpha pytest>=6.0 - :pypi:`pytest-cldf` Easy quality control for CLDF datasets using pytest Nov 07, 2022 N/A pytest (>=3.6) - :pypi:`pytest-clean-database` A pytest plugin that cleans your database up after every test. Mar 14, 2025 3 - Alpha pytest<9,>=7.0 - :pypi:`pytest-cleanslate` Collects and executes pytest tests separately Apr 10, 2025 N/A pytest - :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A - :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A - :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Feb 04, 2026 N/A pytest<10.0.0,>=8.0.0 - :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Jan 25, 2026 N/A N/A - :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A - :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) - :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) - :pypi:`pytest-clld` Oct 23, 2024 N/A pytest>=3.9 - :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A - :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) - :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 - :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) - :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A - :pypi:`pytest-cobra` PyTest plugin for testing Smart Contracts for Ethereum blockchain. Jun 29, 2019 3 - Alpha pytest (<4.0.0,>=3.7.1) - :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest - :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Feb 24, 2026 4 - Beta pytest - :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 - :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest - :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A - :pypi:`pytest-codecov` Pytest plugin for uploading pytest-cov results to codecov.io Mar 25, 2025 4 - Beta pytest>=4.6.0 - :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) - :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codingagents` Pytest plugin for testing real coding agents via their SDK Feb 20, 2026 3 - Alpha pytest>=9.0 - :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Feb 09, 2026 5 - Production/Stable pytest>=3.8 - :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest - :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A - :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A - :pypi:`pytest-collect-interface-info-plugin` Get executed interface information in pytest interface automation framework Sep 25, 2023 4 - Beta N/A - :pypi:`pytest-collect-markers` A pytest plugin to collect and output test markers to JSON Jan 24, 2026 N/A pytest>=7.0.0 - :pypi:`pytest-collector` Python package for collecting pytest. Aug 02, 2022 N/A pytest (>=7.0,<8.0) - :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A - :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-colordots` Colorizes the progress indicators Oct 06, 2017 5 - Production/Stable N/A - :pypi:`pytest-comfyui` Integration testing framework for ComfyUI nodes and workflows. Jan 09, 2026 N/A N/A - :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) - :pypi:`pytest-common-subject` pytest framework for testing different aspects of a common method Oct 22, 2025 N/A pytest<9,>=3.6 - :pypi:`pytest-compare` pytest plugin for comparing call arguments. Jun 22, 2023 5 - Production/Stable N/A - :pypi:`pytest-concurrent` Concurrently execute test cases with multithread, multiprocess and gevent Jan 12, 2019 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-conductor` Pytest plugin for coordinating the order in which marked tests run. Jul 30, 2025 N/A pytest<8.4; python_version == "3.8" - :pypi:`pytest-config` Base configurations and utilities for developing your Python project test suite with pytest. Nov 07, 2014 5 - Production/Stable N/A - :pypi:`pytest-confluence-report` Package stands for pytest plugin to upload results into Confluence page. Apr 17, 2022 N/A N/A - :pypi:`pytest-console-scripts` Pytest plugin for testing console scripts May 31, 2023 4 - Beta pytest (>=4.0.0) - :pypi:`pytest-consul` pytest plugin with fixtures for testing consul aware apps Nov 24, 2018 3 - Alpha pytest - :pypi:`pytest-container` Pytest fixtures for writing container based tests Jun 30, 2025 4 - Beta pytest>=3.10 - :pypi:`pytest-contextfixture` Define pytest fixtures as context managers. Mar 12, 2013 4 - Beta N/A - :pypi:`pytest-contexts` A plugin to run tests written with the Contexts framework using pytest May 19, 2021 4 - Beta N/A - :pypi:`pytest-continuous` A pytest plugin to run tests continuously until failure or interruption. Apr 23, 2024 N/A N/A - :pypi:`pytest-cookies` The pytest plugin for your Cookiecutter templates. 🍪 Mar 22, 2023 5 - Production/Stable pytest (>=3.9.0) - :pypi:`pytest-copie` The pytest plugin for your copier templates 📒 Sep 29, 2025 3 - Alpha pytest - :pypi:`pytest-copier` A pytest plugin to help testing Copier templates Dec 11, 2023 4 - Beta pytest>=7.3.2 - :pypi:`pytest-couchdbkit` py.test extension for per-test couchdb databases using couchdbkit Apr 17, 2012 N/A N/A - :pypi:`pytest-count` count erros and send email Jan 12, 2018 4 - Beta N/A - :pypi:`pytest-cov` Pytest plugin for measuring coverage. Sep 09, 2025 5 - Production/Stable pytest>=7 - :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A - :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A - :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A - :pypi:`pytest-coverage-impact` Sensoria: High-fidelity coverage impact analysis for Python. Jan 16, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-coveragemarkers` Using pytest markers to track functional coverage and filtering of tests May 15, 2025 N/A pytest<8.0.0,>=7.1.2 - :pypi:`pytest-cov-exclude` Pytest plugin for excluding tests based on coverage data Apr 29, 2016 4 - Beta pytest (>=2.8.0,<2.9.0); extra == 'dev' - :pypi:`pytest_covid` Too many faillure, less tests. Jun 24, 2020 N/A N/A - :pypi:`pytest-cpp` Use pytest's runner to discover and execute C++ tests Sep 18, 2024 5 - Production/Stable pytest - :pypi:`pytest-cqase` Custom qase pytest plugin Aug 22, 2022 N/A pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cram` Run cram tests with pytest. Aug 08, 2020 N/A N/A - :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Dec 02, 2025 4 - Beta pytest>=7.0 - :pypi:`pytest-crate` Manages CrateDB instances during your integration tests May 28, 2019 3 - Alpha pytest (>=4.0) - :pypi:`pytest-cratedb` Manage CrateDB instances for integration tests Jan 05, 2026 4 - Beta pytest<10 - :pypi:`pytest-cratedb-reporter` A pytest plugin for reporting test results to CrateDB Mar 11, 2025 N/A pytest>=6.0.0 - :pypi:`pytest-crayons` A pytest plugin for colorful print statements Oct 14, 2025 5 - Production/Stable pytest - :pypi:`pytest-cream` The cream of test execution - smooth pytest workflows with intelligent orchestration Oct 26, 2025 N/A pytest - :pypi:`pytest-create` pytest-create Feb 15, 2023 1 - Planning N/A - :pypi:`pytest-cricri` A Cricri plugin for pytest. Jan 27, 2018 N/A pytest - :pypi:`pytest-crontab` add crontab task in crontab Dec 09, 2019 N/A N/A - :pypi:`pytest-csv` CSV output for pytest. Apr 22, 2021 N/A pytest (>=6.0) - :pypi:`pytest-csv-params` Pytest plugin for Test Case Parametrization with CSV files May 29, 2025 5 - Production/Stable pytest<9,>=8.3 - :pypi:`pytest-culprit` Find the last Git commit where a pytest test started failing May 15, 2025 N/A N/A - :pypi:`pytest-curio` Pytest support for curio. Oct 06, 2024 N/A pytest - :pypi:`pytest-curl-report` pytest plugin to generate curl command line report Dec 11, 2016 4 - Beta N/A - :pypi:`pytest-custom-concurrency` Custom grouping concurrence for pytest Feb 08, 2021 N/A N/A - :pypi:`pytest-custom-exit-code` Exit pytest test session with custom exit code in different scenarios Aug 07, 2019 4 - Beta pytest (>=4.0.2) - :pypi:`pytest-custom-nodeid` Custom grouping for pytest-xdist, rename test cases name and test cases nodeid, support allure report Mar 07, 2021 N/A N/A - :pypi:`pytest-custom-outputs` A plugin that allows users to create and use custom outputs instead of the standard Pass and Fail. Also allows users to retrieve test results in fixtures. Jul 10, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-custom-report` Configure the symbols displayed for test outcomes Jan 30, 2019 N/A pytest - :pypi:`pytest-custom-scheduling` Custom grouping for pytest-xdist, rename test cases name and test cases nodeid, support allure report Mar 01, 2021 N/A N/A - :pypi:`pytest-custom-timeout` Use custom logic when a test times out. Based on pytest-timeout. Jan 08, 2025 4 - Beta pytest>=8.0.0 - :pypi:`pytest-cython` A plugin for testing Cython extension modules Feb 07, 2026 5 - Production/Stable pytest>=8 - :pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest - :pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1 - :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A - :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 - :pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A - :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Jan 20, 2026 4 - Beta pytest - :pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest - :pypi:`pytest-datadir` pytest plugin for test data directories and files Jul 30, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1) - :pypi:`pytest-datadir-ng` Fixtures for pytest allowing test functions/methods to easily retrieve test resources from the local filesystem. Dec 25, 2019 5 - Production/Stable pytest - :pypi:`pytest-datadir-nng` Fixtures for pytest allowing test functions/methods to easily retrieve test resources from the local filesystem. Nov 09, 2022 5 - Production/Stable pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-data-extractor` A pytest plugin to extract relevant metadata about tests into an external file (currently only json support) Jul 19, 2022 N/A pytest (>=7.0.1) - :pypi:`pytest-data-file` Fixture "data" and "case_data" for test from yaml file Dec 04, 2019 N/A N/A - :pypi:`pytest-datafiles` py.test plugin to create a 'tmp_path' containing predefined files/directories. Jan 04, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A - :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest - :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 - :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Feb 21, 2026 4 - Beta pytest<10,>=7.0.0 - :pypi:`pytest-dataplugin` A pytest plugin for managing an archive of test data. Sep 16, 2017 1 - Planning N/A - :pypi:`pytest-datarecorder` A py.test plugin recording and comparing test output. Jul 31, 2024 5 - Production/Stable pytest - :pypi:`pytest-dataset` Plugin for loading different datasets for pytest by prefix from json or yaml files Sep 01, 2023 5 - Production/Stable N/A - :pypi:`pytest-data-suites` Class-based pytest parametrization Apr 06, 2024 N/A pytest<9.0,>=6.0 - :pypi:`pytest-datatest` A pytest plugin for test driven data-wrangling (this is the development version of datatest's pytest integration). Oct 15, 2020 4 - Beta pytest (>=3.3) - :pypi:`pytest-db` Session scope fixture "db" for mysql query or change Nov 11, 2025 N/A pytest - :pypi:`pytest-dbfixtures` Databases fixtures plugin for py.test. Dec 07, 2016 4 - Beta N/A - :pypi:`pytest-db-plugin` Nov 27, 2021 N/A pytest (>=5.0) - :pypi:`pytest-dbt` Unit test dbt models with standard python tooling Jun 08, 2023 2 - Pre-Alpha pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-dbt-adapter` A pytest plugin for testing dbt adapter plugins Nov 24, 2021 N/A pytest (<7,>=6) - :pypi:`pytest-dbt-conventions` A pytest plugin for linting a dbt project's conventions Mar 02, 2022 N/A pytest (>=6.2.5,<7.0.0) - :pypi:`pytest-dbt-core` Pytest extension for dbt. Jun 04, 2024 N/A pytest>=6.2.5; extra == "test" - :pypi:`pytest-dbt-duckdb` Fearless testing for dbt models, powered by DuckDB. Jan 23, 2026 4 - Beta pytest>=8.3.4 - :pypi:`pytest-dbt-postgres` Pytest tooling to unittest DBT & Postgres models Sep 03, 2024 N/A pytest<9.0.0,>=8.3.2 - :pypi:`pytest-dbus-notification` D-BUS notifications for pytest results. Mar 05, 2014 5 - Production/Stable N/A - :pypi:`pytest-dbx` Pytest plugin to run unit tests for dbx (Databricks CLI extensions) related code Nov 29, 2022 N/A pytest (>=7.1.3,<8.0.0) - :pypi:`pytest-dc` Manages Docker containers during your integration tests Aug 16, 2023 5 - Production/Stable pytest >=3.3 - :pypi:`pytest-deadfixtures` A simple plugin to list unused fixtures in pytest Jan 15, 2026 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-deduplicate` Identifies duplicate unit tests Aug 12, 2023 4 - Beta pytest - :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A - :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 - :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Feb 12, 2026 4 - Beta pytest<10.0.0,>=9.0.2 - :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A - :pypi:`pytest-dependency` Manage dependencies of tests Feb 15, 2026 4 - Beta N/A - :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) - :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A - :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-describe` Describe-style plugin for pytest Dec 12, 2025 5 - Production/Stable pytest<10,>=6 - :pypi:`pytest-describe-beautifully` Beautiful terminal and HTML output for pytest-describe. Jan 28, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest - :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-devtools` Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. Feb 10, 2026 N/A pytest>=9.0.2 - :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Nov 23, 2025 N/A pytest - :pypi:`pytest-dhos` Common fixtures for pytest in DHOS services and libraries Sep 07, 2022 N/A N/A - :pypi:`pytest-diamond` pytest plugin for diamond Aug 31, 2015 4 - Beta N/A - :pypi:`pytest-dicom` pytest plugin to provide DICOM fixtures Dec 19, 2018 3 - Alpha pytest - :pypi:`pytest-dictsdiff` Jul 26, 2019 N/A N/A - :pypi:`pytest-diff` A simple plugin to use with pytest Mar 30, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-diff-selector` Get tests affected by code changes (using git) Feb 24, 2022 4 - Beta pytest (>=6.2.2) ; extra == 'all' - :pypi:`pytest-difftest` Blazingly fast test selection for pytest - only run tests affected by your changes (Rust-powered) Feb 23, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-difido` PyTest plugin for generating Difido reports Oct 23, 2022 4 - Beta pytest (>=4.0.0) - :pypi:`pytest-directives` Control your tests flow Aug 11, 2025 3 - Alpha pytest - :pypi:`pytest-dir-equal` pytest-dir-equals is a pytest plugin providing helpers to assert directories equality allowing golden testing Dec 11, 2023 4 - Beta pytest>=7.3.2 - :pypi:`pytest-dirty` Static import analysis for thrifty testing. Jun 08, 2025 3 - Alpha pytest>=8.2; extra == "dev" - :pypi:`pytest-disable` pytest plugin to disable a test and skip it from testrun Sep 10, 2015 4 - Beta N/A - :pypi:`pytest-disable-plugin` Disable plugins per test Feb 28, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-discord` A pytest plugin to notify test results to a Discord channel. May 11, 2024 4 - Beta pytest!=6.0.0,<9,>=3.3.2 - :pypi:`pytest-discover` Pytest plugin to record discovered tests in a file Mar 26, 2024 N/A pytest - :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats. Jun 09, 2024 4 - Beta pytest>=3.5.0 - :pypi:`pytest-ditto-pandas` pytest-ditto plugin for pandas snapshots. May 29, 2024 4 - Beta pytest>=3.5.0 - :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow tables. Jun 09, 2024 4 - Beta pytest>=3.5.0 - :pypi:`pytest-django` A Django plugin for pytest. Feb 14, 2026 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) - :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest - :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A - :pypi:`pytest-django-casperjs` Integrate CasperJS with your django tests as a pytest fixture. Mar 15, 2015 2 - Pre-Alpha N/A - :pypi:`pytest-django-class` A pytest plugin for running django in class-scoped fixtures Aug 08, 2023 4 - Beta N/A - :pypi:`pytest-django-docker-pg` Jun 13, 2024 5 - Production/Stable pytest<9.0.0,>=7.0.0 - :pypi:`pytest-django-dotenv` Pytest plugin used to setup environment variables with django-dotenv Nov 26, 2019 4 - Beta pytest (>=2.6.0) - :pypi:`pytest-django-factories` Factories for your Django models that can be used as Pytest fixtures. Nov 12, 2020 4 - Beta N/A - :pypi:`pytest-django-filefield` Replaces FileField.storage with something you can patch globally. May 09, 2022 5 - Production/Stable pytest >= 5.2 - :pypi:`pytest-django-gcir` A Django plugin for pytest. Mar 06, 2018 5 - Production/Stable N/A - :pypi:`pytest-django-haystack` Cleanup your Haystack indexes between tests Sep 03, 2017 5 - Production/Stable pytest (>=2.3.4) - :pypi:`pytest-django-ifactory` A model instance factory for pytest-django Apr 30, 2025 5 - Production/Stable N/A - :pypi:`pytest-django-lite` The bare minimum to integrate py.test with Django. Jan 30, 2014 N/A N/A - :pypi:`pytest-django-liveserver-ssl` Jan 09, 2025 3 - Alpha N/A - :pypi:`pytest-django-model` A Simple Way to Test your Django Models Feb 14, 2019 4 - Beta N/A - :pypi:`pytest-django-ordering` A pytest plugin for preserving the order in which Django runs tests. Jul 25, 2019 5 - Production/Stable pytest (>=2.3.0) - :pypi:`pytest-django-queries` Generate performance reports from your django database performance tests. Mar 01, 2021 N/A N/A - :pypi:`pytest-djangorestframework` A djangorestframework plugin for pytest Aug 11, 2019 4 - Beta N/A - :pypi:`pytest-django-rq` A pytest plugin to help writing unit test for django-rq Apr 13, 2020 4 - Beta N/A - :pypi:`pytest-django-sqlcounts` py.test plugin for reporting the number of SQLs executed per django testcase. Jun 16, 2015 4 - Beta N/A - :pypi:`pytest-django-testing-postgresql` Use a temporary PostgreSQL database with pytest-django Jan 31, 2022 4 - Beta N/A - :pypi:`pytest-doc` A documentation plugin for py.test. Jun 28, 2015 5 - Production/Stable N/A - :pypi:`pytest-docfiles` pytest plugin to test codeblocks in your documentation. Dec 22, 2021 4 - Beta pytest (>=3.7.0) - :pypi:`pytest-docgen` An RST Documentation Generator for pytest-based test suites Apr 17, 2020 N/A N/A - :pypi:`pytest-docker` Simple pytest fixtures for Docker and Docker Compose based tests Nov 12, 2025 N/A pytest<10.0,>=4.0 - :pypi:`pytest-docker-apache-fixtures` Pytest fixtures for testing with apache2 (httpd). Aug 12, 2024 4 - Beta pytest - :pypi:`pytest-docker-butla` Jun 16, 2019 3 - Alpha N/A - :pypi:`pytest-dockerc` Run, manage and stop Docker Compose project from Docker API Oct 09, 2020 5 - Production/Stable pytest (>=3.0) - :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) - :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 17, 2025 4 - Beta pytest<10,>=7.2.2 - :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) - :pypi:`pytest-docker-fixtures` pytest docker fixtures Dec 01, 2025 3 - Alpha pytest - :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest - :pypi:`pytest-docker-haproxy-fixtures` Pytest fixtures for testing with haproxy. Aug 12, 2024 4 - Beta pytest - :pypi:`pytest-docker-pexpect` pytest plugin for writing functional tests with pexpect and docker Jan 14, 2019 N/A pytest - :pypi:`pytest-docker-postgresql` A simple plugin to use with pytest Sep 24, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-docker-py` Easy to use, simple to extend, pytest plugin that minimally leverages docker-py. Nov 27, 2018 N/A pytest (==4.0.0) - :pypi:`pytest-docker-registry-fixtures` Pytest fixtures for testing with docker registries. Aug 12, 2024 4 - Beta pytest - :pypi:`pytest-docker-service` pytest plugin to start docker container Jan 03, 2024 3 - Alpha pytest (>=7.1.3) - :pypi:`pytest-docker-squid-fixtures` Pytest fixtures for testing with squid. Aug 12, 2024 4 - Beta pytest - :pypi:`pytest-docker-tools` Docker integration tests for pytest Mar 16, 2025 4 - Beta pytest>=6.0.1 - :pypi:`pytest-docs` Documentation tool for pytest Nov 11, 2018 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-docstyle` pytest plugin to run pydocstyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-doctest-custom` A py.test plugin for customizing string representations of doctest results. Jul 25, 2016 4 - Beta N/A - :pypi:`pytest-doctest-ellipsis-markers` Setup additional values for ELLIPSIS_MARKER for doctests Jan 12, 2018 4 - Beta N/A - :pypi:`pytest-doctest-import` A simple pytest plugin to import names and add them to the doctest namespace. Nov 13, 2018 4 - Beta pytest (>=3.3.0) - :pypi:`pytest-doctest-mkdocstrings` Run pytest --doctest-modules with markdown docstrings in code blocks (\`\`\`) Mar 02, 2024 N/A pytest - :pypi:`pytest-doctest-only` A plugin to run only doctest Jul 30, 2025 4 - Beta pytest>=8.3.0 - :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Jan 26, 2026 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-documentary` A simple pytest plugin to generate test documentation Jul 11, 2024 N/A pytest - :pypi:`pytest-dogu-report` pytest plugin for dogu report Jul 07, 2023 N/A N/A - :pypi:`pytest-dogu-sdk` pytest plugin for the Dogu Dec 14, 2023 N/A N/A - :pypi:`pytest-dolphin` Some extra stuff that we use ininternally Nov 30, 2016 4 - Beta pytest (==3.0.4) - :pypi:`pytest-donde` record pytest session characteristics per test item (coverage and duration) into a persistent file and use them in your own plugin or script. Oct 01, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-doorstop` A pytest plugin for adding test results into doorstop items. Jun 09, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-dotenv` A py.test plugin that parses environment files before running tests Jun 16, 2020 4 - Beta pytest (>=5.0.0) - :pypi:`pytest-dotenv-modern` A modern pytest plugin that loads environment variables from dotenv files Sep 27, 2025 4 - Beta pytest>=6.0.0 - :pypi:`pytest-dot-only-pkcopley` A Pytest marker for only running a single test Oct 27, 2023 N/A N/A - :pypi:`pytest-dparam` A more readable alternative to @pytest.mark.parametrize. Aug 27, 2024 6 - Mature pytest - :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A - :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest - :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A - :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 - :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A - :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Feb 28, 2026 N/A pytest>=7.0.0 - :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" - :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest - :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A - :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A - :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 - :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A - :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest - :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A - :pypi:`pytest-easyMPI` Package that supports mpi tests in pytest Oct 21, 2020 N/A N/A - :pypi:`pytest-easyread` pytest plugin that makes terminal printouts of the reports easier to read Nov 17, 2017 N/A N/A - :pypi:`pytest-easy-server` Pytest plugin for easy testing against servers May 01, 2021 4 - Beta pytest (<5.0.0,>=4.3.1) ; python_version < "3.5" - :pypi:`pytest-ebics-sandbox` A pytest plugin for testing against an EBICS sandbox server. Requires docker. Aug 15, 2022 N/A N/A - :pypi:`pytest-ec2` Pytest execution on EC2 instance Oct 22, 2019 3 - Alpha N/A - :pypi:`pytest-echo` pytest plugin that allows to dump environment variables, package version and generic attributes Apr 27, 2025 5 - Production/Stable pytest>=8.3.3 - :pypi:`pytest-edit` Edit the source code of a failed test with \`pytest --edit\`. Nov 17, 2024 N/A pytest - :pypi:`pytest-ekstazi` Pytest plugin to select test using Ekstazi algorithm Sep 10, 2022 N/A pytest - :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 - :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) - :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) - :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 - :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest - :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Jan 16, 2026 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Jan 16, 2026 5 - Production/Stable N/A - :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) - :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) - :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) - :pypi:`pytest-enabler` Enable installed pytest plugins May 16, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" - :pypi:`pytest-encode` set your encoding and logger Nov 06, 2021 N/A N/A - :pypi:`pytest-encode-kane` set your encoding and logger Nov 16, 2021 N/A pytest - :pypi:`pytest-encoding` set your encoding and logger Aug 11, 2023 N/A pytest - :pypi:`pytest_energy_reporter` An energy estimation reporter for pytest Mar 28, 2024 3 - Alpha pytest<9.0.0,>=8.1.1 - :pypi:`pytest-enhanced-reports` Enhanced test reports for pytest Dec 15, 2022 N/A N/A - :pypi:`pytest-enhancements` Improvements for pytest (rejected upstream) Oct 30, 2019 4 - Beta N/A - :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Feb 17, 2026 5 - Production/Stable pytest>=9.0.2 - :pypi:`pytest-envfiles` A py.test plugin that parses environment files before running tests Oct 08, 2015 3 - Alpha N/A - :pypi:`pytest-env-info` Push information about the running pytest into envvars Nov 25, 2017 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-environment` Pytest Environment Mar 17, 2024 1 - Planning N/A - :pypi:`pytest-envraw` py.test plugin that allows you to add environment variables. Aug 27, 2020 4 - Beta pytest (>=2.6.0) - :pypi:`pytest-envvars` Pytest plugin to validate use of envvars on your tests Jun 13, 2020 5 - Production/Stable pytest (>=3.0.0) - :pypi:`pytest-envx` Pytest plugin for managing environment variables with interpolation and .env file support. Jun 28, 2025 4 - Beta pytest>=8.4.1 - :pypi:`pytest-env-yaml` Apr 02, 2019 N/A N/A - :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Dec 05, 2025 N/A pytest - :pypi:`pytest-eradicate` pytest plugin to check for commented out code Sep 08, 2020 N/A pytest (>=2.4.2) - :pypi:`pytest_erp` py.test plugin to send test info to report portal dynamically Jan 13, 2015 N/A N/A - :pypi:`pytest-error` A decorator for testing exceptions with pytest Dec 06, 2025 4 - Beta pytest>=8.4 - :pypi:`pytest-error-for-skips` Pytest plugin to treat skipped tests a test failure Dec 19, 2019 4 - Beta pytest (>=4.6) - :pypi:`pytest-errxfail` pytest plugin to mark a test as xfailed if it fails with the specified error message in the captured output Jan 06, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-essentials` A Pytest plugin providing essential utilities like soft assertions. May 19, 2025 3 - Alpha pytest>=7.0 - :pypi:`pytest-eth` PyTest plugin for testing Smart Contracts for Ethereum Virtual Machine (EVM). Aug 14, 2020 1 - Planning N/A - :pypi:`pytest-ethereum` pytest-ethereum: Pytest library for ethereum projects. Jun 24, 2019 3 - Alpha pytest (==3.3.2); extra == 'dev' - :pypi:`pytest-eucalyptus` Pytest Plugin for BDD Jun 28, 2022 N/A pytest (>=4.2.0) - :pypi:`pytest-eval` LLM testing for humans. Feb 11, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-evals` A pytest plugin for running and analyzing LLM evaluation tests Feb 02, 2025 N/A pytest>=7.0.0 - :pypi:`pytest-eventlet` Applies eventlet monkey-patch as a pytest plugin. Oct 04, 2021 N/A pytest ; extra == 'dev' - :pypi:`pytest-everyfunc` A pytest plugin to detect completely untested functions using coverage Apr 30, 2025 4 - Beta pytest - :pypi:`pytest_evm` The testing package containing tools to test Web3-based projects Sep 23, 2024 4 - Beta pytest<9.0.0,>=8.1.1 - :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A - :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 - :pypi:`pytest-exasol-backend` Feb 24, 2026 N/A pytest<9,>=7 - :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 - :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 - :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 - :pypi:`pytest-exasol-slc` Feb 12, 2026 N/A pytest<9,>=7 - :pypi:`pytest-excel` pytest plugin for generating excel reports Jul 22, 2025 5 - Production/Stable pytest - :pypi:`pytest-exceptional` Better exceptions Mar 16, 2017 4 - Beta N/A - :pypi:`pytest-exception-script` Walk your code through exception script to check it's resiliency to failures. Aug 04, 2020 3 - Alpha pytest - :pypi:`pytest-executable` pytest plugin for testing executables Oct 07, 2023 N/A pytest <8,>=5 - :pypi:`pytest-execution-timer` A timer for the phases of Pytest's execution. Dec 24, 2021 4 - Beta N/A - :pypi:`pytest-exit-code` A pytest plugin that overrides the built-in exit codes to retain more information about the test results. May 06, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-exit-status` Enhance. Jan 25, 2025 N/A pytest>=8.0.0 - :pypi:`pytest-expect` py.test plugin to store test expectations and mark tests based on them Apr 21, 2016 4 - Beta N/A - :pypi:`pytest-expectdir` A pytest plugin to provide initial/expected directories, and check a test transforms the initial directory to the expected one Mar 19, 2023 5 - Production/Stable pytest (>=5.0) - :pypi:`pytest-expected` Record and play back your expectations Feb 26, 2025 N/A pytest - :pypi:`pytest-expecter` Better testing with expecter and pytest. Sep 18, 2022 5 - Production/Stable N/A - :pypi:`pytest-expectr` This plugin is used to expect multiple assert using pytest framework. Oct 05, 2018 N/A pytest (>=2.4.2) - :pypi:`pytest-expect-test` A fixture to support expect tests in pytest Apr 10, 2023 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-experiments` A pytest plugin to help developers of research-oriented software projects keep track of the results of their numerical experiments. Dec 13, 2021 4 - Beta pytest (>=6.2.5,<7.0.0) - :pypi:`pytest-explicit` A Pytest plugin to ignore certain marked tests by default Jun 15, 2021 5 - Production/Stable pytest - :pypi:`pytest-exploratory` Interactive console for pytest. Sep 18, 2024 N/A pytest>=6.2 - :pypi:`pytest-explorer` terminal ui for exploring and running tests Aug 01, 2023 N/A N/A - :pypi:`pytest-ext` pytest plugin for automation test Mar 31, 2024 N/A pytest>=5.3 - :pypi:`pytest-extended-mock` a pytest extension for easy mock setup Mar 12, 2025 N/A pytest<9.0.0,>=8.3.5 - :pypi:`pytest-extensions` A collection of helpers for pytest to ease testing Aug 17, 2022 4 - Beta pytest ; extra == 'testing' - :pypi:`pytest-external-blockers` a special outcome for tests that are blocked for external reasons Oct 05, 2021 N/A pytest - :pypi:`pytest_extra` Some helpers for writing tests with pytest. Aug 14, 2014 N/A N/A - :pypi:`pytest-extra-durations` A pytest plugin to get durations on a per-function basis and per module basis. Apr 21, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-extra-markers` Additional pytest markers to dynamically enable/disable tests viia CLI flags Mar 05, 2023 4 - Beta pytest - :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Feb 20, 2026 N/A pytest<8.0.0,>=7.2.1 - :pypi:`pytest-fabric` Provides test utilities to run fabric task tests by using docker containers Sep 12, 2018 5 - Production/Stable N/A - :pypi:`pytest-factory` Use factories for test setup with py.test Sep 06, 2020 3 - Alpha pytest (>4.3) - :pypi:`pytest-factoryboy` Factory Boy support for pytest. Jul 01, 2025 6 - Mature pytest>=7.0 - :pypi:`pytest-factoryboy-fixtures` Generates pytest fixtures that allow the use of type hinting Jun 25, 2020 N/A N/A - :pypi:`pytest-factoryboy-state` Simple factoryboy random state management Mar 22, 2022 5 - Production/Stable pytest (>=5.0) - :pypi:`pytest-failed-screen-record` Create a video of the screen when pytest fails Jan 05, 2023 4 - Beta pytest (>=7.1.2d,<8.0.0) - :pypi:`pytest-failed-screenshot` Test case fails,take a screenshot,save it,attach it to the allure Apr 21, 2021 N/A N/A - :pypi:`pytest-failed-to-verify` A pytest plugin that helps better distinguishing real test failures from setup flakiness. Aug 08, 2019 5 - Production/Stable pytest (>=4.1.0) - :pypi:`pytest-fail-slow` Fail tests that take too long to run Jun 01, 2024 N/A pytest>=7.0 - :pypi:`pytest-failure-tracker` A pytest plugin for tracking test failures over multiple runs Jul 17, 2024 N/A pytest>=6.0.0 - :pypi:`pytest-faker` Faker integration with the pytest framework. Dec 19, 2016 6 - Mature N/A - :pypi:`pytest-falcon` Pytest helpers for Falcon. Sep 07, 2016 4 - Beta N/A - :pypi:`pytest-fantasy` Pytest plugin for Flask Fantasy Framework Mar 14, 2019 N/A N/A - :pypi:`pytest-fastapi` Dec 27, 2020 N/A N/A - :pypi:`pytest-fastapi-deps` A fixture which allows easy replacement of fastapi dependencies for testing Jul 20, 2022 5 - Production/Stable pytest - :pypi:`pytest-fastcollect` A high-performance pytest plugin that replaces test collection with a Rust-based implementation Nov 19, 2025 N/A pytest>=7.0.0 - :pypi:`pytest-fastest` Use SCM and coverage to run only needed tests Oct 04, 2023 4 - Beta pytest (>=4.4) - :pypi:`pytest-fast-first` Pytest plugin that runs fast tests first Jan 19, 2023 3 - Alpha pytest - :pypi:`pytest-faulthandler` py.test plugin that activates the fault handler module for tests (dummy package) Jul 04, 2019 6 - Mature pytest (>=5.0) - :pypi:`pytest-fauna` A collection of helpful test fixtures for Fauna DB. Jan 03, 2025 N/A N/A - :pypi:`pytest-fauxfactory` Integration of fauxfactory into pytest. Dec 06, 2017 5 - Production/Stable pytest (>=3.2) - :pypi:`pytest-figleaf` py.test figleaf coverage plugin Jan 18, 2010 5 - Production/Stable N/A - :pypi:`pytest-file` Pytest File Mar 18, 2024 1 - Planning N/A - :pypi:`pytest-filecov` A pytest plugin to detect unused files Jun 27, 2021 4 - Beta pytest - :pypi:`pytest-filedata` easily load test data from files Apr 29, 2024 5 - Production/Stable N/A - :pypi:`pytest-filemarker` A pytest plugin that runs marked tests when files change. Dec 01, 2020 N/A pytest - :pypi:`pytest-file-watcher` Pytest-File-Watcher is a CLI tool that watches for changes in your code and runs pytest on the changed files. Mar 23, 2023 N/A pytest - :pypi:`pytest-filter-case` run test cases filter by mark Nov 05, 2020 N/A N/A - :pypi:`pytest-filterfixtures` pytest plugin to execute or ignore tests based on fixtures Jan 09, 2026 N/A pytest>=9.0.2 - :pypi:`pytest-filter-subpackage` Pytest plugin for filtering based on sub-packages Mar 04, 2024 5 - Production/Stable pytest >=4.6 - :pypi:`pytest-find-dependencies` A pytest plugin to find dependencies between tests Jul 16, 2025 5 - Production/Stable pytest>=6.2.4 - :pypi:`pytest-finer-verdicts` A pytest plugin to treat non-assertion failures as test errors. Jun 18, 2020 N/A pytest (>=5.4.3) - :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A - :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 - :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A - :pypi:`pytest-fixture-collect` A utility to collect pytest fixture file paths. Jul 25, 2025 N/A pytest; extra == "test" - :pypi:`pytest-fixturecollection` A pytest plugin to collect tests based on fixtures being used by tests Feb 22, 2024 4 - Beta pytest >=3.5.0 - :pypi:`pytest-fixture-config` Fixture configuration utils for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-fixture-forms` A pytest plugin for creating fixtures that holds different forms between tests. Dec 06, 2024 N/A pytest<9.0.0,>=7.0.0 - :pypi:`pytest-fixture-maker` Pytest plugin to load fixtures from YAML files Sep 21, 2021 N/A N/A - :pypi:`pytest-fixture-marker` A pytest plugin to add markers based on fixtures used. Oct 11, 2020 5 - Production/Stable N/A - :pypi:`pytest-fixture-order` pytest plugin to control fixture evaluation order Oct 22, 2025 5 - Production/Stable pytest>=3.0 - :pypi:`pytest-fixture-ref` Lets users reference fixtures without name matching magic. Nov 17, 2022 4 - Beta N/A - :pypi:`pytest-fixture-remover` A LibCST codemod to remove pytest fixtures applied via the usefixtures decorator, as well as its parametrizations. Feb 14, 2024 5 - Production/Stable N/A - :pypi:`pytest-fixture-rtttg` Warn or fail on fixture name clash Feb 23, 2022 N/A pytest (>=7.0.1,<8.0.0) - :pypi:`pytest-fixtures` Common fixtures for pytest May 01, 2019 5 - Production/Stable N/A - :pypi:`pytest-fixtures-fixtures` Handy fixtues to access your fixtures from your _pytest tests. Nov 06, 2025 4 - Beta pytest>=8.4.1 - :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 - :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest - :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest - :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Feb 19, 2026 N/A pytest>=6.0.0 - :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) - :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Feb 19, 2026 N/A pytest>=6.2.0 - :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) - :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Feb 28, 2026 N/A pytest>=9.0.2 - :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A - :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 - :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) - :pypi:`pytest-flask-sqlalchemy` A pytest plugin for preserving test isolation in Flask-SQlAlchemy using database transactions. Apr 30, 2022 4 - Beta pytest (>=3.2.1) - :pypi:`pytest-flask-sqlalchemy-transactions` Run tests in transactions using pytest, Flask, and SQLalchemy. Aug 02, 2018 4 - Beta pytest (>=3.2.1) - :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest - :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 - :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Feb 23, 2026 3 - Alpha pytest - :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest - :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest - :pypi:`pytest-forbid` Mar 07, 2023 N/A pytest (>=7.2.2,<8.0.0) - :pypi:`pytest-forcefail` py.test plugin to make the test failing regardless of pytest.mark.xfail May 15, 2018 4 - Beta N/A - :pypi:`pytest-forger` Automatic test scaffolding and mock generation for Python Dec 26, 2025 N/A pytest>=7.4.0 - :pypi:`pytest-forward-compatability` A name to avoid typosquating pytest-foward-compatibility Sep 06, 2020 N/A N/A - :pypi:`pytest-forward-compatibility` A pytest plugin to shim pytest commandline options for fowards compatibility Sep 29, 2020 N/A N/A - :pypi:`pytest-frappe` Pytest Frappe Plugin - A set of pytest fixtures to test Frappe applications Jul 30, 2024 4 - Beta pytest>=7.0.0 - :pypi:`pytest-freethreaded` pytest plugin for running parallel tests Oct 03, 2024 5 - Production/Stable pytest - :pypi:`pytest-freeze` Pytest plugin to simplify writing freeze tests. Jan 27, 2026 N/A N/A - :pypi:`pytest-freezeblaster` Wrap tests with fixtures in freeze_time Oct 13, 2025 N/A pytest>=6.2.5 - :pypi:`pytest-freezegun` Wrap tests with fixtures in freeze_time Jul 19, 2020 4 - Beta pytest (>=3.0.0) - :pypi:`pytest-freezer` Pytest plugin providing a fixture interface for spulec/freezegun Dec 12, 2024 N/A pytest>=3.6 - :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A - :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) - :pypi:`pytest_ftpserver` A PyTest plugin which provides an FTP fixture for your tests Feb 10, 2026 5 - Production/Stable pytest - :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) - :pypi:`pytest-funcnodes` Testing plugin for funcnodes Dec 21, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 - :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest - :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A - :pypi:`pytest-fxa-mte` pytest plugin for Firefox Accounts Oct 02, 2024 5 - Production/Stable N/A - :pypi:`pytest-fxtest` Oct 27, 2020 N/A N/A - :pypi:`pytest-fzf` fzf-based test selector for pytest Jan 06, 2025 4 - Beta pytest>=6.0.0 - :pypi:`pytest_gae` pytest plugin for apps written with Google's AppEngine Aug 03, 2016 3 - Alpha N/A - :pypi:`pytest-gak` A Pytest plugin and command line tool for interactive testing with Pytest Apr 10, 2025 N/A N/A - :pypi:`pytest-gather-fixtures` set up asynchronous pytest fixtures concurrently Aug 18, 2024 N/A pytest>=7.0.0 - :pypi:`pytest-gc` The garbage collector plugin for py.test Feb 01, 2018 N/A N/A - :pypi:`pytest-gcov` Uses gcov to measure test coverage of a C library Feb 01, 2018 3 - Alpha N/A - :pypi:`pytest-gcppubsub` A Pytest fixture for managing Google Cloud Platform PubSub emulator Feb 18, 2026 N/A pytest>=7.0 - :pypi:`pytest-gcpsecretmanager` A PyTest plugin for mocking GCP's Secret Manager Feb 18, 2026 N/A pytest>=7.0 - :pypi:`pytest-gcs` GCS fixtures and fixture factories for Pytest. Jan 24, 2025 5 - Production/Stable pytest>=6.2 - :pypi:`pytest-gee` The Python plugin for your GEE based packages. Oct 16, 2025 3 - Alpha pytest - :pypi:`pytest-gevent` Ensure that gevent is properly patched when invoking pytest Feb 25, 2020 N/A pytest - :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) - :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest - :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Feb 27, 2026 N/A pytest>=3.6 - :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 - :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-git-diff` Pytest plugin that allows the user to select the tests affected by a range of git commits Apr 02, 2024 N/A N/A - :pypi:`pytest-git-fixtures` Pytest fixtures for testing with git. Mar 11, 2021 4 - Beta pytest - :pypi:`pytest-github` Plugin for py.test that associates tests with github issues using a marker. Mar 07, 2019 5 - Production/Stable N/A - :pypi:`pytest-github-actions-annotate-failures` pytest plugin to annotate failed tests with a workflow command for GitHub Actions Jan 17, 2025 5 - Production/Stable pytest>=6.0.0 - :pypi:`pytest-github-report` Generate a GitHub report using pytest in GitHub Workflows Jun 03, 2022 4 - Beta N/A - :pypi:`pytest-gitignore` py.test plugin to ignore the same files as git Jul 17, 2015 4 - Beta N/A - :pypi:`pytest-gitlab` Pytest Plugin for Gitlab Oct 16, 2024 N/A N/A - :pypi:`pytest-gitlabci-parallelized` Parallelize pytest across GitLab CI workers. Mar 08, 2023 N/A N/A - :pypi:`pytest-gitlab-code-quality` Collects warnings while testing and generates a GitLab Code Quality Report. Nov 23, 2025 N/A pytest>=8.1.1 - :pypi:`pytest-gitlab-fold` Folds output sections in GitLab CI build log Dec 31, 2023 4 - Beta pytest >=2.6.0 - :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A - :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 - :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" - :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest - :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 - :pypi:`pytest-goldie` A plugin to support golden tests with pytest. May 23, 2023 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-google-chat` Notify google chat channel for test results Mar 27, 2022 4 - Beta pytest - :pypi:`pytest-google-cloud-storage` Pytest custom features, e.g. fixtures and various tests. Aimed to emulate Google Cloud Storage service Sep 11, 2025 N/A pytest>=8.0.0 - :pypi:`pytest-grader` Pytest extension for scoring programming assignments. Aug 25, 2025 N/A pytest>=8 - :pypi:`pytest-gradescope` A pytest plugin for Gradescope integration Apr 29, 2025 N/A N/A - :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A - :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A - :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Feb 22, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) - :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A - :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) - :pypi:`pytest-grpc-aio` pytest plugin for grpc.aio Oct 28, 2025 N/A pytest>=3.6.0 - :pypi:`pytest-grunnur` Py.Test plugin for Grunnur-based packages. Jul 26, 2024 N/A pytest>=6 - :pypi:`pytest_gui_status` Show pytest status in gui Jan 23, 2016 N/A pytest - :pypi:`pytest-hammertime` Display "🔨 " instead of "." for passed pytest tests. Jul 28, 2018 N/A pytest - :pypi:`pytest-hardware-test-report` A simple plugin to use with pytest Apr 01, 2024 4 - Beta pytest<9.0.0,>=8.0.0 - :pypi:`pytest-harmony` Chain tests and data with pytest Jan 17, 2023 N/A pytest (>=7.2.1,<8.0.0) - :pypi:`pytest-harvest` Store data created during your pytest tests execution, and retrieve it at the end of the session, e.g. for applicative benchmarking purposes. Mar 16, 2024 5 - Production/Stable N/A - :pypi:`pytest-helm` Simple, ergonomic Helm manifest fixtures for pytest. Feb 21, 2026 3 - Alpha pytest>=8.0.0 - :pypi:`pytest-helm-charts` A plugin to provide different types and configs of Kubernetes clusters that can be used for testing. Dec 23, 2025 4 - Beta pytest<9,>=8.0.0 - :pypi:`pytest-helm-templates` Pytest fixtures for unit testing the output of helm templates Aug 07, 2024 N/A pytest~=7.4.0; extra == "dev" - :pypi:`pytest-helper` Functions to help in using the pytest testing framework May 31, 2019 5 - Production/Stable N/A - :pypi:`pytest-helpers` pytest helpers May 17, 2020 N/A pytest - :pypi:`pytest-helpers-namespace` Pytest Helpers Namespace Plugin Dec 29, 2021 5 - Production/Stable pytest (>=6.0.0) - :pypi:`pytest-henry` Aug 29, 2023 N/A N/A - :pypi:`pytest-hidecaptured` Hide captured output May 04, 2018 4 - Beta pytest (>=2.8.5) - :pypi:`pytest-himark` This plugin aims to create markers automatically based on a json configuration. Jun 05, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-historic` Custom report to display pytest historical execution records Apr 08, 2020 N/A pytest - :pypi:`pytest-historic-hook` Custom listener to store execution results into MYSQL DB, which is used for pytest-historic report Apr 08, 2020 N/A pytest - :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) - :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest - :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Feb 21, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A - :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A - :pypi:`pytest-hot-test` A plugin that tracks test changes Dec 10, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-houdini` pytest plugin for testing code in Houdini. Jul 15, 2024 N/A pytest - :pypi:`pytest-hoverfly` Simplify working with Hoverfly from pytest Jan 30, 2023 N/A pytest (>=5.0) - :pypi:`pytest-hoverfly-wrapper` Integrates the Hoverfly HTTP proxy into Pytest Feb 27, 2023 5 - Production/Stable pytest (>=3.7.0) - :pypi:`pytest-hpfeeds` Helpers for testing hpfeeds in your python project Feb 28, 2023 4 - Beta pytest (>=6.2.4,<7.0.0) - :pypi:`pytest-html` pytest plugin for generating HTML reports Jan 19, 2026 5 - Production/Stable pytest>=7 - :pypi:`pytest-html5` the best report for pytest Dec 18, 2025 N/A N/A - :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 - :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) - :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A - :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A - :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Feb 06, 2026 N/A N/A - :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) - :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 - :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A - :pypi:`pytest-html-report-merger` May 22, 2024 N/A N/A - :pypi:`pytest-html-thread` pytest plugin for generating HTML reports Dec 29, 2020 5 - Production/Stable N/A - :pypi:`pytest-htmlx` Custom HTML report plugin for Pytest with charts and tables Sep 09, 2025 4 - Beta pytest - :pypi:`pytest-http` Fixture "http" for http requests Aug 22, 2024 N/A pytest - :pypi:`pytest-httpbin` Easily test your HTTP library against a local copy of httpbin Sep 18, 2024 5 - Production/Stable pytest; extra == "test" - :pypi:`pytest-httpchain` pytest plugin for HTTP testing using JSON files Jan 09, 2026 5 - Production/Stable N/A - :pypi:`pytest-httpchain-jsonref` JSON reference ($ref) support for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-mcp` MCP server for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-models` Pydantic models for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-templates` Templating support for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-userfunc` User functions support for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpdbg` A pytest plugin to record HTTP(S) requests with stack trace. Oct 26, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-http-mocker` Pytest plugin for http mocking (via https://github.com/vilus/mocker) Oct 20, 2019 N/A N/A - :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A - :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Feb 14, 2026 3 - Alpha N/A - :pypi:`pytest-httptesting` http_testing framework on top of pytest Dec 19, 2024 N/A pytest>=8.2.0 - :pypi:`pytest-httpx` Send responses to httpx. Dec 02, 2025 5 - Production/Stable pytest==9.* - :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) - :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest - :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A - :pypi:`pytest-human` A beautiful nested pytest HTML test report Jan 25, 2026 4 - Beta pytest>=8 - :pypi:`pytest-hy` Pytest plugin for discovering and running Hy test files Feb 11, 2026 N/A pytest>=7.0 - :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest - :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A - :pypi:`pytest-hypothesis` Feb 09, 2026 N/A N/A - :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Feb 23, 2026 4 - Beta pytest - :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest - :pypi:`pytest-idapro` A pytest plugin for idapython. Allows a pytest setup to run tests outside and inside IDA in an automated manner by runnig pytest inside IDA and by mocking idapython api Nov 03, 2018 N/A N/A - :pypi:`pytest-idem` A pytest plugin to help with testing idem projects Dec 13, 2023 5 - Production/Stable N/A - :pypi:`pytest-idempotent` Pytest plugin for testing function idempotence. Jul 25, 2022 N/A N/A - :pypi:`pytest-ignore-flaky` ignore failures from flaky tests (pytest plugin) Apr 20, 2024 5 - Production/Stable pytest>=6.0 - :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest - :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Feb 12, 2026 4 - Beta pytest>=8.0.0 - :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 - :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A - :pypi:`pytest-in-docker` Seamlessly run pytest tests inside docker containers Feb 09, 2026 3 - Alpha pytest>=9.0.2 - :pypi:`pytest-infinity` Jun 09, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-influx` Pytest plugin for managing your influx instance between test runs Oct 16, 2024 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-influxdb` Plugin for influxdb and pytest integration. Apr 20, 2021 N/A N/A - :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A - :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A - :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Jan 29, 2026 4 - Beta pytest~=9.0 - :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A - :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A - :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 - :pypi:`pytest-inject` A pytest plugin that allows you to inject arguments into fixtures and parametrized tests using pytest command-line options. Nov 25, 2025 N/A pytest>=6.0.0 - :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 - :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A - :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest - :pypi:`pytest-inmanta-extensions` Inmanta tests package Jan 30, 2026 5 - Production/Stable N/A - :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Feb 12, 2026 5 - Production/Stable N/A - :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A - :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest - :pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A - :pypi:`pytest-in-robotframework` The extension enables easy execution of pytest tests within the Robot Framework environment. Nov 23, 2024 N/A pytest - :pypi:`pytest-insper` Pytest plugin for courses at Insper Mar 21, 2024 N/A pytest - :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Nov 22, 2025 N/A pytest>=9.0.0 - :pypi:`pytest-instafail` pytest plugin to show failures instantly Mar 31, 2023 4 - Beta pytest (>=5) - :pypi:`pytest-instrument` pytest plugin to instrument tests Apr 05, 2020 5 - Production/Stable pytest (>=5.1.0) - :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Dec 08, 2025 4 - Beta pytest>=7.4 - :pypi:`pytest-integration` Organizing pytests by integration or not Nov 17, 2022 N/A N/A - :pypi:`pytest-integration-mark` Automatic integration test marking and excluding plugin for pytest May 22, 2023 N/A pytest (>=5.2) - :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 17, 2025 N/A pytest<10.0.0,>=9.0.0 - :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A - :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) - :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Feb 11, 2026 4 - Beta pytest - :pypi:`pytest-invenio` Pytest fixtures for Invenio. Jan 27, 2026 5 - Production/Stable pytest<9.0.0,>=6 - :pypi:`pytest-involve` Run tests covering a specific file or changeset Feb 02, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-iovis` A Pytest plugin to enable Jupyter Notebook testing with Papermill Nov 06, 2024 4 - Beta pytest>=7.1.0 - :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A - :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A - :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Feb 24, 2026 N/A pytest - :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest - :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Feb 17, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 - :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) - :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A - :pypi:`pytest-item-dict` Get a hierarchical dict of session.items Nov 14, 2024 4 - Beta pytest>=8.3.0 - :pypi:`pytest-iterassert` Nicer list and iterable assertion messages for pytest May 11, 2020 3 - Alpha N/A - :pypi:`pytest-iteration` Add iteration mark for tests Aug 22, 2024 N/A pytest - :pypi:`pytest-iters` A contextmanager pytest fixture for handling multiple mock iters May 24, 2022 N/A N/A - :pypi:`pytest_jar_yuan` A allure and pytest used package Dec 12, 2022 N/A N/A - :pypi:`pytest-jasmine` Run jasmine tests from your pytest test suite Nov 04, 2017 1 - Planning N/A - :pypi:`pytest-jelastic` Pytest plugin defining the necessary command-line options to pass to pytests testing a Jelastic environment. Nov 16, 2022 N/A pytest (>=7.2.0,<8.0.0) - :pypi:`pytest-jest` A custom jest-pytest oriented Pytest reporter May 22, 2018 4 - Beta pytest (>=3.3.2) - :pypi:`pytest-jinja` A plugin to generate customizable jinja-based HTML reports in pytest Oct 04, 2022 3 - Alpha pytest (>=6.2.5,<7.0.0) - :pypi:`pytest-jira` py.test JIRA integration plugin, using markers Apr 15, 2025 3 - Alpha N/A - :pypi:`pytest-jira-xfail` Plugin skips (xfail) tests if unresolved Jira issue(s) linked Jul 09, 2024 N/A pytest>=7.2.0 - :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Oct 11, 2025 4 - Beta pytest>=6.2.4 - :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. Feb 02, 2026 5 - Production/Stable pytest - :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) - :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A - :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Dec 28, 2025 N/A pytest>6.0.0 - :pypi:`pytest-json-fixtures` JSON output for the --fixtures flag Mar 14, 2023 4 - Beta N/A - :pypi:`pytest-jsonlint` UNKNOWN Aug 04, 2016 N/A N/A - :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) - :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 - :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Feb 04, 2026 N/A pytest - :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 - :pypi:`pytest-jubilant` Add your description here Jul 28, 2025 N/A pytest>=8.3.5 - :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 - :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest - :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 - :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest - :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 - :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 - :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest - :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Feb 15, 2026 N/A N/A - :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest - :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 - :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) - :pypi:`pytest-kedge` Agent-friendly structured test data collector for pytest Jan 10, 2026 N/A pytest>=7.0.0 - :pypi:`pytest-keep-together` Pytest plugin to customize test ordering by running all 'related' tests together Dec 07, 2022 5 - Production/Stable pytest - :pypi:`pytest-kexi` Apr 29, 2022 N/A pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-keyring` A Pytest plugin to access the system's keyring to provide credentials for tests Dec 08, 2024 N/A pytest>=8.0.2 - :pypi:`pytest-kind` Kubernetes test support with KIND for pytest Nov 30, 2022 5 - Production/Stable N/A - :pypi:`pytest-kivy` Kivy GUI tests fixtures using pytest Jul 06, 2021 4 - Beta pytest (>=3.6) - :pypi:`pytest-knows` A pytest plugin that can automaticly skip test case based on dependence info calculated by trace Aug 22, 2014 N/A N/A - :pypi:`pytest-konira` Run Konira DSL tests with py.test Oct 09, 2011 N/A N/A - :pypi:`pytest-kookit` Your simple but kooky integration testing with pytest Sep 10, 2024 N/A N/A - :pypi:`pytest-koopmans` A plugin for testing the koopmans package Nov 21, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-krtech-common` pytest krtech common library Nov 28, 2016 4 - Beta N/A - :pypi:`pytest-kubernetes` Oct 23, 2025 N/A pytest<9.0.0,>=8.3.0 - :pypi:`pytest_kustomize` Parse and validate kustomize output Dec 08, 2025 N/A N/A - :pypi:`pytest-kuunda` pytest plugin to help with test data setup for PySpark tests Feb 25, 2024 4 - Beta pytest >=6.2.0 - :pypi:`pytest-kwparametrize` Alternate syntax for @pytest.mark.parametrize with test cases as dictionaries and default value fallbacks Jan 22, 2021 N/A pytest (>=6) - :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 - :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A - :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Feb 28, 2026 4 - Beta N/A - :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A - :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest - :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) - :pypi:`pytest-layab` Pytest fixtures for layab. Oct 05, 2020 5 - Production/Stable N/A - :pypi:`pytest-lazy-fixture` It helps to use fixtures in pytest.mark.parametrize Feb 01, 2020 4 - Beta pytest (>=3.2.5) - :pypi:`pytest-lazy-fixtures` Allows you to use fixtures in @pytest.mark.parametrize. Sep 16, 2025 N/A pytest>=7 - :pypi:`pytest-ldap` python-ldap fixtures for pytest Aug 18, 2020 N/A pytest - :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A - :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Feb 19, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A - :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest - :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Feb 27, 2026 4 - Beta pytest>=8.3.5 - :pypi:`pytest-libfaketime` A python-libfaketime plugin for pytest Apr 12, 2024 4 - Beta pytest>=3.0.0 - :pypi:`pytest-libiio` A pytest plugin for testing libiio based devices Aug 15, 2025 N/A pytest>=3.5.0 - :pypi:`pytest-libnotify` Pytest plugin that shows notifications about the test run Apr 02, 2021 3 - Alpha pytest - :pypi:`pytest-ligo` Jan 16, 2020 4 - Beta N/A - :pypi:`pytest-lineno` A pytest plugin to show the line numbers of test functions Dec 04, 2020 N/A pytest - :pypi:`pytest-line-profiler` Profile code executed by pytest Aug 10, 2023 4 - Beta pytest >=3.5.0 - :pypi:`pytest-line-profiler-apn` Profile code executed by pytest Dec 05, 2022 N/A pytest (>=3.5.0) - :pypi:`pytest-line-runner` Run pytest tests by line number instead of exact test name Feb 08, 2026 N/A N/A - :pypi:`pytest-lisa` Pytest plugin for organizing tests. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) - :pypi:`pytest-listener` A simple network listener Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-litf` A pytest plugin that stream output in LITF format Jan 18, 2021 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-litter` Pytest plugin which verifies that tests do not modify file trees. Nov 23, 2023 4 - Beta pytest >=6.1 - :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest - :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 - :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 - :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 - :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) - :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest - :pypi:`pytest-localserver` pytest plugin to test server connections locally. Nov 24, 2025 4 - Beta N/A - :pypi:`pytest-localstack` Pytest plugin for AWS integration tests Jun 07, 2023 4 - Beta pytest (>=6.0.0,<7.0.0) - :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) - :pypi:`pytest-lockable` lockable resource plugin for pytest Sep 08, 2025 5 - Production/Stable pytest - :pypi:`pytest-locker` Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed Dec 20, 2024 N/A pytest>=5.4 - :pypi:`pytest-loco` Another one YAML-based DSL for testing Feb 25, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 - :pypi:`pytest-loco-http` HTTP support for pytest-loco Feb 25, 2026 3 - Alpha N/A - :pypi:`pytest-loco-json` JSON support for pytest-loco Feb 25, 2026 3 - Alpha N/A - :pypi:`pytest-log` print log Aug 15, 2021 N/A pytest (>=3.8) - :pypi:`pytest-logbook` py.test plugin to capture logbook log messages Nov 23, 2015 5 - Production/Stable pytest (>=2.8) - :pypi:`pytest-logdog` Pytest plugin to test logging Jun 15, 2021 1 - Planning pytest (>=6.2.0) - :pypi:`pytest-logfest` Pytest plugin providing three logger fixtures with basic or full writing to log files Jul 21, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-log-filter` Ignore some loggers' log for pytest Nov 13, 2025 N/A pytest - :pypi:`pytest-logger` Plugin configuring handlers for loggers from Python logging module. Mar 10, 2024 5 - Production/Stable pytest (>=3.2) - :pypi:`pytest-logger-db` Add your description here Sep 14, 2025 N/A N/A - :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A - :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Feb 02, 2026 5 - Production/Stable pytest==9.0.2 - :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A - :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 - :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" - :pypi:`pytest-loop` pytest plugin for looping tests Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-lsp` A pytest plugin for end-to-end testing of language servers Oct 25, 2025 5 - Production/Stable pytest>=8.0 - :pypi:`pytest-lw-realtime-result` Pytest plugin to generate realtime test results to a file Mar 13, 2025 N/A pytest>=3.5.0 - :pypi:`pytest-manifest` PyTest plugin for recording and asserting against a manifest file Apr 07, 2025 N/A pytest - :pypi:`pytest-manual-marker` pytest marker for marking manual tests Aug 04, 2022 3 - Alpha pytest>=7 - :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Jan 30, 2026 5 - Production/Stable pytest~=8.4 - :pypi:`pytest-mark-count` Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers Nov 13, 2024 4 - Beta pytest>=8.0.0 - :pypi:`pytest-markdir` Feb 01, 2026 N/A pytest<10,>=8.0 - :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) - :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) - :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Jan 28, 2026 N/A pytest>=7.0.0 - :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 10, 2026 N/A pytest>=7.0 - :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 - :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 - :pypi:`pytest-mark-filter` Filter pytest marks by name using match kw May 11, 2025 N/A pytest>=8.3.0 - :pypi:`pytest-markfiltration` UNKNOWN Nov 08, 2011 3 - Alpha N/A - :pypi:`pytest-mark-integration` Pytest plugin for automatic integration test marking and management Jan 13, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-mark-manage` 用例标签化管理 Aug 15, 2024 N/A pytest - :pypi:`pytest-mark-no-py3` pytest plugin and bowler codemod to help migrate tests to Python 3 May 17, 2019 N/A pytest - :pypi:`pytest-marks` UNKNOWN Nov 23, 2012 3 - Alpha N/A - :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Dec 17, 2025 N/A N/A - :pypi:`pytest-matcher` Easy way to match captured \`pytest\` output against expectations stored in files Aug 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-matchers` Matchers for pytest Dec 19, 2025 N/A pytest<10.0,>=7.0 - :pypi:`pytest-match-skip` Skip matching marks. Matches partial marks using wildcards. May 15, 2019 4 - Beta pytest (>=4.4.1) - :pypi:`pytest-mat-report` this is report Jan 20, 2021 N/A N/A - :pypi:`pytest-matrix` Provide tools for generating tests from combinations of fixtures. Jun 24, 2020 5 - Production/Stable pytest (>=5.4.3,<6.0.0) - :pypi:`pytest-maxcov` Compute the maximum coverage available through pytest with the minimum execution time cost Sep 24, 2023 N/A pytest (>=7.4.0,<8.0.0) - :pypi:`pytest-max-warnings` A Pytest plugin to exit non-zero exit code when the configured maximum warnings has been exceeded. Oct 23, 2024 4 - Beta pytest>=8.3.3 - :pypi:`pytest-maybe-context` Simplify tests with warning and exception cases. Apr 16, 2023 N/A pytest (>=7,<8) - :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' - :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) - :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 - :pypi:`pytest-mcp-tools` Feb 26, 2026 N/A pytest>=7.0.0; extra == "test" - :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) - :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 - :pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Oct 08, 2024 N/A pytest>=7.4.3 - :pypi:`pytest-memlog` Log memory usage during tests May 03, 2023 N/A pytest (>=7.3.0,<8.0.0) - :pypi:`pytest-memprof` Estimates memory consumption of test functions Mar 29, 2019 4 - Beta N/A - :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 - :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 26, 2026 N/A pytest>=6.0.0 - :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) - :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) - :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A - :pypi:`pytest-metadata` pytest plugin for test session metadata Feb 12, 2024 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-metaexport` Pytest plugin for exporting custom test metadata to JSON. Jun 24, 2025 N/A pytest>=7.1.0 - :pypi:`pytest-metrics` Custom metrics report for pytest Apr 04, 2020 N/A pytest - :pypi:`pytest-mfd-config` Pytest Plugin that handles test and topology configs and all their belongings like helper fixtures. Jul 11, 2025 N/A pytest<9,>=7.2.1 - :pypi:`pytest-mfd-logging` Module for handling PyTest logging. Nov 14, 2025 N/A pytest<9,>=7.2.1 - :pypi:`pytest-mh` Pytest multihost plugin Oct 16, 2025 N/A pytest - :pypi:`pytest-mimesis` Mimesis integration with the pytest test runner Mar 21, 2020 5 - Production/Stable pytest (>=4.2) - :pypi:`pytest-mimic` Easily record function calls while testing Apr 24, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-minecraft` A pytest plugin for running tests against Minecraft releases Apr 06, 2022 N/A pytest (>=6.0.1) - :pypi:`pytest-mini` A plugin to test mp Feb 06, 2023 N/A pytest (>=7.2.0,<8.0.0) - :pypi:`pytest-minio-mock` A pytest plugin for mocking Minio S3 interactions Aug 06, 2025 N/A pytest>=5.0.0 - :pypi:`pytest-mirror` A pluggy-based pytest plugin and CLI tool for ensuring your test suite mirrors your source code structure Jul 30, 2025 4 - Beta N/A - :pypi:`pytest-missing-fixtures` Pytest plugin that creates missing fixtures Oct 14, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-missing-modules` Pytest plugin to easily fake missing modules Nov 17, 2025 N/A pytest>=8.3.2 - :pypi:`pytest-mitmproxy` pytest plugin for mitmproxy tests Nov 13, 2024 N/A pytest>=7.0 - :pypi:`pytest-mitmproxy-plugin` Use MITM Proxy in autotests with full control from code Apr 10, 2025 4 - Beta pytest>=7.2.0 - :pypi:`pytest-ml` Test your machine learning! May 04, 2019 4 - Beta N/A - :pypi:`pytest-mocha` pytest plugin to display test execution output like a mochajs Apr 02, 2020 4 - Beta pytest (>=5.4.0) - :pypi:`pytest-mock` Thin-wrapper around the mock package for easier use with pytest Sep 16, 2025 5 - Production/Stable pytest>=6.2.5 - :pypi:`pytest-mock-api` A mock API server with configurable routes and responses available as a fixture. Feb 13, 2019 1 - Planning pytest (>=4.0.0) - :pypi:`pytest-mock-generator` A pytest fixture wrapper for https://pypi.org/project/mock-generator May 16, 2022 5 - Production/Stable N/A - :pypi:`pytest-mock-helper` Help you mock HTTP call and generate mock code Jan 24, 2018 N/A pytest - :pypi:`pytest-mockito` Base fixtures for mockito Feb 10, 2026 5 - Production/Stable pytest>=6 - :pypi:`pytest-mockllm` 🚀 Zero-config pytest plugin for mocking LLM APIs - OpenAI, Anthropic, Gemini, LangChain & more Dec 22, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-mockredis` An in-memory mock of a Redis server that runs in a separate thread. This is to be used for unit-tests that require a Redis database. Jan 02, 2018 2 - Pre-Alpha N/A - :pypi:`pytest-mock-resources` A pytest plugin for easily instantiating reproducible mock resources. Sep 17, 2025 N/A pytest>=1.0 - :pypi:`pytest-mock-server` Mock server plugin for pytest Jan 09, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-mockservers` A set of fixtures to test your requests to HTTP/UDP servers Mar 31, 2020 N/A pytest (>=4.3.0) - :pypi:`pytest-mocktcp` A pytest plugin for testing TCP clients Oct 11, 2022 N/A pytest - :pypi:`pytest-mock-unity-catalog` Unity Catalog pyspark fixtures Feb 28, 2026 N/A pytest - :pypi:`pytest-modalt` Massively distributed pytest runs using modal.com Feb 27, 2024 4 - Beta pytest >=6.2.0 - :pypi:`pytest-model-lib` pytest plugin for model-lib Feb 22, 2026 N/A N/A - :pypi:`pytest-modern` A more modern pytest Aug 19, 2025 4 - Beta pytest>=8 - :pypi:`pytest-modified-env` Pytest plugin to fail a test if it leaves modified \`os.environ\` afterwards. Jan 29, 2022 4 - Beta N/A - :pypi:`pytest-modifyjunit` Utility for adding additional properties to junit xml for IDM QE Jan 10, 2019 N/A N/A - :pypi:`pytest-molecule` PyTest Molecule Plugin :: discover and run molecule tests Mar 29, 2022 5 - Production/Stable pytest (>=7.0.0) - :pypi:`pytest-molecule-JC` PyTest Molecule Plugin :: discover and run molecule tests Jul 18, 2023 5 - Production/Stable pytest (>=7.0.0) - :pypi:`pytest-mongo` MongoDB process and client fixtures plugin for Pytest. Feb 04, 2026 5 - Production/Stable pytest>=8.4 - :pypi:`pytest-mongodb` pytest plugin for MongoDB fixtures May 16, 2023 5 - Production/Stable N/A - :pypi:`pytest-mongodb-nono` pytest plugin for MongoDB Jan 07, 2025 N/A N/A - :pypi:`pytest-mongodb-ry` pytest plugin for MongoDB Sep 25, 2025 N/A N/A - :pypi:`pytest-mongo-docker` A tiny plugin for pytest which runs MongoDB in Docker Feb 12, 2026 5 - Production/Stable pytest>=7.4 - :pypi:`pytest-monitor` Pytest plugin for analyzing resource usage. Jun 25, 2023 5 - Production/Stable pytest - :pypi:`pytest-monkeyplus` pytest's monkeypatch subclass with extra functionalities Sep 18, 2012 5 - Production/Stable N/A - :pypi:`pytest-monkeytype` pytest-monkeytype: Generate Monkeytype annotations from your pytest tests. Jul 29, 2020 4 - Beta N/A - :pypi:`pytest-moto` Fixtures for integration tests of AWS services,uses moto mocking library. Aug 28, 2015 1 - Planning N/A - :pypi:`pytest-moto-fixtures` Fixtures for testing code that interacts with AWS Nov 17, 2025 1 - Planning pytest<9.1,>=8.3; extra == "pytest" - :pypi:`pytest-motor` A pytest plugin for motor, the non-blocking MongoDB driver. Jul 21, 2021 3 - Alpha pytest - :pypi:`pytest-mp` A test batcher for multiprocessed Pytest runs May 23, 2018 4 - Beta pytest - :pypi:`pytest-mpi` pytest plugin to collect information from tests Jan 08, 2022 3 - Alpha pytest - :pypi:`pytest-mpiexec` pytest plugin for running individual tests with mpiexec Jul 29, 2024 3 - Alpha pytest - :pypi:`pytest-mpi-tmweigand` forked pytest plugin to collect information from tests Dec 27, 2025 3 - Alpha pytest - :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 - :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) - :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Jan 28, 2026 5 - Production/Stable pytest<10; extra == "test" - :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A - :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 28, 2025 N/A pytest - :pypi:`pytest-multithreading` a pytest plugin for th and concurrent testing Aug 05, 2024 N/A N/A - :pypi:`pytest-multithreading-allure` pytest_multithreading_allure Nov 25, 2022 N/A N/A - :pypi:`pytest-mutagen` Add the mutation testing feature to pytest Jul 24, 2020 N/A pytest (>=5.4) - :pypi:`pytest-my-cool-lib` Nov 02, 2023 N/A pytest (>=7.1.3,<8.0.0) - :pypi:`pytest-my-plugin` A pytest plugin that does awesome things Jan 27, 2025 N/A pytest>=6.0 - :pypi:`pytest-mypy` A Pytest Plugin for Mypy Apr 02, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-mypyd` Mypy static type checker plugin for Pytest Aug 20, 2019 4 - Beta pytest (<4.7,>=2.8) ; python_version < "3.5" - :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Feb 16, 2026 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 - :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 - :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 - :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 - :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 - :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Feb 25, 2026 4 - Beta pytest<9.1.0,>=7.0.0; python_version < "3.14" - :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Nov 05, 2025 2 - Pre-Alpha pytest>=8.3.2; extra == "dev" - :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest - :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) - :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) - :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Feb 05, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-neos` Pytest plugin for neos Sep 10, 2024 5 - Production/Stable pytest<8.0,>=7.2; extra == "dev" - :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Nov 03, 2025 N/A N/A - :pypi:`pytest-netdut` "Automated software testing for switches using pytest" Oct 09, 2025 N/A pytest>=3.5.0 - :pypi:`pytest-network` A simple plugin to disable network on socket level. May 07, 2020 N/A N/A - :pypi:`pytest-network-endpoints` Network endpoints plugin for pytest Mar 06, 2022 N/A pytest - :pypi:`pytest-never-sleep` pytest plugin helps to avoid adding tests without mock \`time.sleep\` May 05, 2021 3 - Alpha pytest (>=3.5.1) - :pypi:`pytest-nginx` nginx fixture for pytest May 03, 2025 5 - Production/Stable pytest>=3.0.0 - :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A - :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest - :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) - :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Feb 13, 2026 N/A pytest<9.0.0,>=8.2.0 - :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest - :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A - :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A - :pypi:`pytest-nocustom` Run all tests without custom markers Aug 05, 2024 5 - Production/Stable N/A - :pypi:`pytest-node-dependency` pytest plugin for controlling execution flow Apr 10, 2024 5 - Production/Stable N/A - :pypi:`pytest-nodev` Test-driven source code search for Python. Jul 21, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-nogarbage` Ensure a test produces no garbage Feb 24, 2025 5 - Production/Stable pytest>=4.6.0 - :pypi:`pytest-no-problem` Pytest plugin to tell you when there's no problem Jan 11, 2026 N/A pytest>=7.0 - :pypi:`pytest-nose-attrib` pytest plugin to use nose @attrib marks decorators and pick tests based on attributes and partially uses nose-attrib plugin approach Aug 13, 2023 N/A N/A - :pypi:`pytest_notebook` A pytest plugin for testing Jupyter Notebooks. Nov 28, 2023 4 - Beta pytest>=3.5.0 - :pypi:`pytest-notice` Send pytest execution result email Nov 05, 2020 N/A N/A - :pypi:`pytest-notification` A pytest plugin for sending a desktop notification and playing a sound upon completion of tests Jun 19, 2020 N/A pytest (>=4) - :pypi:`pytest-notifier` A pytest plugin to notify test result Jun 12, 2020 3 - Alpha pytest - :pypi:`pytest-notifier-plugin` Pytest plugin для отправки нотификаций в различные каналы связи о статуе прохождения тестов. Dec 22, 2025 N/A pytest>=7.0 - :pypi:`pytest_notify` Get notifications when your tests ends Jul 05, 2017 N/A pytest>=3.0.0 - :pypi:`pytest-notimplemented` Pytest markers for not implemented features and tests. Aug 27, 2019 N/A pytest (>=5.1,<6.0) - :pypi:`pytest-notion` A PyTest Reporter to send test runs to Notion.so Aug 07, 2019 N/A N/A - :pypi:`pytest-nunit` A pytest plugin for generating NUnit3 test result XML output Feb 26, 2024 5 - Production/Stable N/A - :pypi:`pytest-oar` PyTest plugin for the OAR testing framework May 12, 2025 N/A pytest>=6.0.1 - :pypi:`pytest-oarepo` Feb 17, 2026 N/A pytest>=7.1.2; extra == "dev" - :pypi:`pytest-object-getter` Import any object from a 3rd party module while mocking its namespace on demand. Jul 31, 2022 5 - Production/Stable pytest - :pypi:`pytest-ochrus` pytest results data-base and HTML reporter Feb 21, 2018 4 - Beta N/A - :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-odoo` py.test plugin to run Odoo tests May 20, 2025 5 - Production/Stable pytest>=8 - :pypi:`pytest-odoo-fixtures` Project description Jun 25, 2019 N/A N/A - :pypi:`pytest-oduit` py.test plugin to run Odoo tests Feb 11, 2026 5 - Production/Stable pytest>=8 - :pypi:`pytest-oerp` pytest plugin to test OpenERP modules Feb 28, 2012 3 - Alpha N/A - :pypi:`pytest-offline` Mar 09, 2023 1 - Planning pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-ogsm-plugin` 针对特定项目定制化插件,优化了pytest报告展示方式,并添加了项目所需特定参数 May 16, 2023 N/A N/A - :pypi:`pytest-ok` The ultimate pytest output plugin Apr 01, 2019 4 - Beta N/A - :pypi:`pytest-once` xdist-safe 'run once' fixture decorator for pytest (setup/teardown across workers) Oct 10, 2025 3 - Alpha pytest>=8.4.0 - :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 - :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A - :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Feb 21, 2026 N/A pytest>=7.0.0 - :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 - :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 - :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest - :pypi:`pytest-opentmi` pytest plugin for publish results to opentmi Feb 09, 2026 5 - Production/Stable pytest>=5.0 - :pypi:`pytest-operator` Fixtures for Charmed Operators Sep 28, 2022 N/A pytest - :pypi:`pytest-optional` include/exclude values of fixtures in pytest Oct 07, 2015 N/A N/A - :pypi:`pytest-optional-tests` Easy declaration of optional tests (i.e., that are not run by default) Jul 21, 2025 4 - Beta pytest; extra == "dev" - :pypi:`pytest-orchestration` A pytest plugin for orchestrating tests Jul 18, 2019 N/A N/A - :pypi:`pytest-order` pytest plugin to run your tests in a specific order Aug 22, 2024 5 - Production/Stable pytest>=5.0; python_version < "3.10" - :pypi:`pytest-ordered` Declare the order in which tests should run in your pytest.ini Nov 09, 2025 N/A pytest>=6.2.0 - :pypi:`pytest-ordering` pytest plugin to run your tests in a specific order Nov 14, 2018 4 - Beta pytest - :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A - :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A - :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Jan 02, 2026 N/A pytest==9.0.2 - :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 - :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A - :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest - :pypi:`pytest-pact` A simple plugin to use with pytest Jan 07, 2019 4 - Beta N/A - :pypi:`pytest-pagerduty` Pytest plugin for PagerDuty integration via automation testing. Mar 22, 2025 N/A pytest<9.0.0,>=7.4.0 - :pypi:`pytest-pahrametahrize` Parametrize your tests with a Boston accent. Nov 24, 2021 4 - Beta pytest (>=6.0,<7.0) - :pypi:`pytest-paia-blockly` pytest plugin for PAIA Blockly: verify get_solution() against test cases Feb 24, 2026 N/A pytest>=8.0 - :pypi:`pytest-paraflow` Deterministic pytest test sharding across CI machines Feb 26, 2026 3 - Alpha pytest>=9.0.0 - :pypi:`pytest-parallel` a pytest plugin for parallel and concurrent testing Oct 10, 2021 3 - Alpha pytest (>=3.0.0) - :pypi:`pytest-parallel-39` a pytest plugin for parallel and concurrent testing Jul 12, 2021 3 - Alpha pytest (>=3.0.0) - :pypi:`pytest-parallelize-tests` pytest plugin that parallelizes test execution across multiple hosts Jan 27, 2023 4 - Beta N/A - :pypi:`pytest-param` pytest plugin to test all, first, last or random params Sep 11, 2016 4 - Beta pytest (>=2.6.0) - :pypi:`pytest-parametrization` Simpler PyTest parametrization May 22, 2022 5 - Production/Stable N/A - :pypi:`pytest-parametrization-annotation` A pytest library for parametrizing tests using type hints. Dec 10, 2024 5 - Production/Stable pytest>=7 - :pypi:`pytest-parametrize` pytest decorator for parametrizing test cases in a dict-way Sep 25, 2025 5 - Production/Stable pytest<9.0.0,>=8.3.0 - :pypi:`pytest-parametrize-cases` A more user-friendly way to write parametrized tests. Mar 13, 2022 N/A pytest (>=6.1.2) - :pypi:`pytest-parametrized` Pytest decorator for parametrizing tests with default iterables. Dec 21, 2024 5 - Production/Stable pytest - :pypi:`pytest-parametrize-suite` A simple pytest extension for creating a named test suite. Jan 19, 2023 5 - Production/Stable pytest - :pypi:`pytest_param_files` Create pytest parametrize decorators from external files. Jul 29, 2023 N/A pytest - :pypi:`pytest-params` Simplified pytest test case parameters. Apr 27, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-param-scope` pytest parametrize scope fixture workaround Oct 18, 2023 N/A pytest - :pypi:`pytest-parawtf` Finally spell paramete?ri[sz]e correctly Dec 03, 2018 4 - Beta pytest (>=3.6.0) - :pypi:`pytest-park` Organise and analyse your pytest benchmarks Feb 22, 2026 N/A N/A - :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A - :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) - :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A - :pypi:`pytest-patch` An automagic \`patch\` fixture that can patch objects directly or by name. Apr 29, 2023 3 - Alpha pytest (>=7.0.0) - :pypi:`pytest-patches` A contextmanager pytest fixture for handling multiple mock patches Aug 30, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-patterns` pytest plugin to make testing complicated long string output easy to write and easy to debug Oct 22, 2024 4 - Beta pytest>=6 - :pypi:`pytest-pdb` pytest plugin which adds pdb helper commands related to pytest. Jul 31, 2018 N/A N/A - :pypi:`pytest-peach` pytest plugin for fuzzing with Peach API Security Apr 12, 2019 4 - Beta pytest (>=2.8.7) - :pypi:`pytest-pep257` py.test plugin for pep257 Jul 09, 2016 N/A N/A - :pypi:`pytest-pep8` pytest plugin to check PEP8 requirements Apr 27, 2014 N/A N/A - :pypi:`pytest-percent` Change the exit code of pytest test sessions when a required percent of tests pass. May 21, 2020 N/A pytest (>=5.2.0) - :pypi:`pytest-percents` Mar 16, 2024 N/A N/A - :pypi:`pytest-perf` Run performance tests against the mainline code. May 20, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" - :pypi:`pytest-performance` A simple plugin to ensure the execution of critical sections of code has not been impacted Sep 11, 2020 5 - Production/Stable pytest (>=3.7.0) - :pypi:`pytest-performancetotal` A performance plugin for pytest Aug 05, 2025 5 - Production/Stable N/A - :pypi:`pytest-persistence` Pytest tool for persistent objects Aug 21, 2024 N/A N/A - :pypi:`pytest-pexpect` Pytest pexpect plugin. Sep 10, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 18, 2025 5 - Production/Stable pytest>=7.4 - :pypi:`pytest-pgsql` Pytest plugins and helpers for tests using a Postgres database. May 13, 2020 5 - Production/Stable pytest (>=3.0.0) - :pypi:`pytest-phmdoctest` pytest plugin to test Python examples in Markdown using phmdoctest. Apr 15, 2022 4 - Beta pytest (>=5.4.3) - :pypi:`pytest-phoenix-interface` Pytest extension tool for phoenix projects. Mar 19, 2025 N/A N/A - :pypi:`pytest-picked` Run the tests related to the changed files Nov 06, 2024 N/A pytest>=3.7.0 - :pypi:`pytest-pickle-cache` A pytest plugin for caching test results using pickle. Feb 06, 2026 4 - Beta pytest>=9 - :pypi:`pytest-pigeonhole` Jun 25, 2018 5 - Production/Stable pytest (>=3.4) - :pypi:`pytest-pikachu` Show surprise when tests are passing Aug 05, 2021 5 - Production/Stable pytest - :pypi:`pytest-pilot` Slice in your test base thanks to powerful markers. Dec 17, 2025 5 - Production/Stable N/A - :pypi:`pytest-pingguo-pytest-plugin` pingguo test Oct 26, 2022 4 - Beta N/A - :pypi:`pytest-pings` 🦊 The pytest plugin for Firefox Telemetry 📊 Jun 29, 2019 3 - Alpha pytest (>=5.0.0) - :pypi:`pytest-pinned` A simple pytest plugin for pinning tests Sep 17, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) - :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A - :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Feb 04, 2026 5 - Production/Stable pytest>=6.2.5 - :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) - :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A - :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) - :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Feb 19, 2026 N/A N/A - :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A - :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A - :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A - :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A - :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A - :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Feb 05, 2026 N/A N/A - :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 12, 2025 3 - Alpha pytest - :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 - :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Feb 10, 2026 N/A N/A - :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 - :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A - :pypi:`pytest-podman` Pytest plugin for Podman integration Feb 03, 2026 N/A N/A - :pypi:`pytest-pogo` Pytest plugin for pogo-migrate Jan 20, 2026 4 - Beta pytest>=7 - :pypi:`pytest-pointers` Pytest plugin to define functions you test with special marks for better navigation and reports Dec 26, 2022 N/A N/A - :pypi:`pytest-pokie` Pokie plugin for pytest Oct 19, 2023 5 - Production/Stable N/A - :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A - :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest - :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A - :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Feb 24, 2026 N/A N/A - :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) - :pypi:`pytest-poo` Visualize your crappy tests Mar 25, 2021 5 - Production/Stable pytest (>=2.3.4) - :pypi:`pytest-poo-fail` Visualize your failed tests with poo Feb 12, 2015 5 - Production/Stable N/A - :pypi:`pytest-pook` Pytest plugin for pook Feb 15, 2024 4 - Beta pytest - :pypi:`pytest-pop` A pytest plugin to help with testing pop projects May 09, 2023 5 - Production/Stable pytest - :pypi:`pytest-porcochu` Show surprise when tests are passing Nov 28, 2024 5 - Production/Stable N/A - :pypi:`pytest-portion` Select a portion of the collected tests Dec 19, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-postgres` Run PostgreSQL in Docker container in Pytest. Mar 22, 2020 N/A pytest - :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. Jan 23, 2026 5 - Production/Stable pytest>=8.2 - :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) - :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 - :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Jan 27, 2026 3 - Alpha pytest - :pypi:`pytest-prefer-nested-dup-tests` A Pytest plugin to drop duplicated tests during collection, but will prefer keeping nested packages. Apr 27, 2022 4 - Beta pytest (>=7.1.1,<8.0.0) - :pypi:`pytest-pretty` pytest plugin for printing summary data as I want it Jun 04, 2025 5 - Production/Stable pytest>=7 - :pypi:`pytest-pretty-terminal` pytest plugin for generating prettier terminal output Jan 31, 2022 N/A pytest (>=3.4.1) - :pypi:`pytest-pride` Minitest-style test colors Apr 02, 2016 3 - Alpha N/A - :pypi:`pytest-print` pytest-print adds the printer fixture you can use to print messages to the user (directly to the pytest runner, not stdout) Feb 11, 2026 5 - Production/Stable pytest>=9.0.2 - :pypi:`pytest-priority` pytest plugin for add priority for tests Aug 19, 2024 N/A pytest - :pypi:`pytest-proceed` Oct 01, 2024 N/A pytest - :pypi:`pytest-profiles` pytest plugin for configuration profiles Dec 09, 2021 4 - Beta pytest (>=3.7.0) - :pypi:`pytest-profiling` Profiling plugin for py.test Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-progress` pytest plugin for instant test progress status Nov 11, 2025 5 - Production/Stable pytest>=6.0 - :pypi:`pytest-prometheus` Report test pass / failures to a Prometheus PushGateway Oct 03, 2017 N/A N/A - :pypi:`pytest-prometheus-pushgateway` Pytest report plugin for Zulip Sep 27, 2022 5 - Production/Stable pytest - :pypi:`pytest-prometheus-pushgw` Pytest plugin to export test metrics to Prometheus Pushgateway May 19, 2025 N/A pytest>=6.0.0 - :pypi:`pytest-proofy` Pytest plugin for Proofy test reporting Nov 13, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-prosper` Test helpers for Prosper projects Sep 24, 2018 N/A N/A - :pypi:`pytest-prysk` Pytest plugin for prysk Dec 10, 2024 4 - Beta pytest>=7.3.2 - :pypi:`pytest-pspec` A rspec format reporter for Python ptest Jun 02, 2020 4 - Beta pytest (>=3.0.0) - :pypi:`pytest-psqlgraph` pytest plugin for testing applications that use psqlgraph Oct 19, 2021 4 - Beta pytest (>=6.0) - :pypi:`pytest-pt` pytest plugin to use \*.pt files as tests Nov 21, 2025 5 - Production/Stable pytest - :pypi:`pytest-ptera` Use ptera probes in tests Mar 01, 2022 N/A pytest (>=6.2.4,<7.0.0) - :pypi:`pytest-publish` Jun 04, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-pudb` Pytest PuDB debugger integration Oct 25, 2018 3 - Alpha pytest (>=2.0) - :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A - :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A - :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-pvcr` PyTest Process VCR Feb 25, 2026 3 - Alpha pytest>=3.5.0 - :pypi:`pytest-pve-cloud` Feb 27, 2026 N/A pytest==8.4.2 - :pypi:`pytest-py125` Dec 03, 2022 N/A N/A - :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) - :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 - :pypi:`pytest-pydantic-schema-sync` Pytest plugin to synchronise Pydantic model schemas with JSONSchema files Aug 29, 2024 N/A pytest>=6 - :pypi:`pytest-pydev` py.test plugin to connect to a remote debug server with PyDev or PyCharm. Nov 15, 2017 3 - Alpha N/A - :pypi:`pytest-pydocstyle` pytest plugin to run pydocstyle Oct 09, 2024 3 - Alpha pytest>=7.0 - :pypi:`pytest-pylembic` This package provides pytest plugin for validating Alembic migrations using the pylembic package. Jul 22, 2025 3 - Alpha N/A - :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 - :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A - :pypi:`pytest-pymysql-autorecord` Record PyMySQL queries and mock with the stored data. Sep 02, 2022 N/A N/A - :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Feb 27, 2026 N/A pytest - :pypi:`pytest-pypi` Easily test your HTTP library against a local copy of pypi Mar 04, 2018 3 - Alpha N/A - :pypi:`pytest-pypom-navigation` Core engine for cookiecutter-qa and pytest-play packages Feb 18, 2019 4 - Beta pytest (>=3.0.7) - :pypi:`pytest-pyppeteer` A plugin to run pyppeteer in pytest Apr 28, 2022 N/A pytest (>=6.2.5,<7.0.0) - :pypi:`pytest-pyq` Pytest fixture "q" for pyq Mar 10, 2020 5 - Production/Stable N/A - :pypi:`pytest-pyramid` pytest_pyramid - provides fixtures for testing pyramid applications with pytest test suite Sep 30, 2025 5 - Production/Stable pytest - :pypi:`pytest-pyramid-server` Pyramid server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-pyreport` PyReport is a lightweight reporting plugin for Pytest that provides concise HTML report May 05, 2024 N/A pytest - :pypi:`pytest-pyright` Pytest plugin for type checking code with Pyright Jan 26, 2024 4 - Beta pytest >=7.0.0 - :pypi:`pytest-pyspark-plugin` Pytest pyspark plugin (p3) Nov 23, 2025 4 - Beta pytest>=8.0.0 - :pypi:`pytest-pyspec` The pytest-pyspec plugin transforms pytest output into a beautiful, readable format similar to RSpec. It provides semantic meaning to your tests by organizing them into descriptive hierarchies, using the prefixes \`Describe\`/\`Test\`, \`With\`/\`Without\`/\`When\`, and \`test\`/\`it\`, while allowing docstrings and decorators to override the descriptions. Nov 18, 2025 5 - Production/Stable pytest<10,>=9 - :pypi:`pytest-pystack` Plugin to run pystack after a timeout for a test suite. Nov 16, 2024 N/A pytest>=3.5.0 - :pypi:`pytest-pytestdb` Add your description here Sep 14, 2025 N/A N/A - :pypi:`pytest-pytestrail` Pytest plugin for interaction with TestRail Aug 27, 2020 4 - Beta pytest (>=3.8.0) - :pypi:`pytest-pytestrail-internal` Pytest plugin for interaction with TestRail, Pytest plugin for TestRail (internal fork from: https://github.com/tolstislon/pytest-pytestrail with PR #25 fix) Jun 12, 2025 4 - Beta pytest>=3.8.0 - :pypi:`pytest-pythonhashseed` Pytest plugin to set PYTHONHASHSEED env var. Nov 16, 2025 4 - Beta pytest>=3.0.0 - :pypi:`pytest-pythonpath` pytest plugin for adding to the PYTHONPATH from command line or configs. Feb 10, 2022 5 - Production/Stable pytest (<7,>=2.5.2) - :pypi:`pytest-python-test-engineer-sort` Sort plugin for Pytest May 13, 2024 N/A pytest>=6.2.0 - :pypi:`pytest-pytorch` pytest plugin for a better developer experience when working with the PyTorch test suite May 25, 2021 4 - Beta pytest - :pypi:`pytest-pyvenv` A package for create venv in tests Feb 27, 2024 N/A pytest ; extra == 'test' - :pypi:`pytest-pyvista` Pytest-pyvista package. Dec 02, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-qanova` A pytest plugin to collect test information Sep 05, 2024 3 - Alpha pytest - :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 - :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) - :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) - :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Jun 14, 2024 5 - Production/Stable pytest>=6.0 - :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) - :pypi:`pytest-qr` pytest plugin to generate test result QR codes Nov 25, 2021 4 - Beta N/A - :pypi:`pytest-qt` pytest support for PyQt and PySide applications Jul 01, 2025 5 - Production/Stable pytest - :pypi:`pytest-qt-app` QT app fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-quarantine` A plugin for pytest to manage expected test failures Nov 24, 2019 5 - Production/Stable pytest (>=4.6) - :pypi:`pytest-quickcheck` pytest plugin to generate random data inspired by QuickCheck Nov 05, 2022 4 - Beta pytest (>=4.0) - :pypi:`pytest_quickify` Run test suites with pytest-quickify. Jun 14, 2019 N/A pytest - :pypi:`pytest-rabbitmq` RabbitMQ process and client fixtures for pytest Oct 15, 2024 5 - Production/Stable pytest>=6.2 - :pypi:`pytest-race` Race conditions tester for pytest Jun 07, 2022 4 - Beta N/A - :pypi:`pytest-rage` pytest plugin to implement PEP712 Oct 21, 2011 3 - Alpha N/A - :pypi:`pytest-rail` pytest plugin for creating TestRail runs and adding results May 02, 2022 N/A pytest (>=3.6) - :pypi:`pytest-railflow-testrail-reporter` Generate json reports along with specified metadata defined in test markers. Jun 29, 2022 5 - Production/Stable pytest - :pypi:`pytest-raises` An implementation of pytest.raises as a pytest.mark fixture Apr 23, 2020 N/A pytest (>=3.2.2) - :pypi:`pytest-raisesregexp` Simple pytest plugin to look for regex in Exceptions Dec 18, 2015 N/A N/A - :pypi:`pytest-raisin` Plugin enabling the use of exception instances with pytest.raises Feb 06, 2022 N/A pytest - :pypi:`pytest-random` py.test plugin to randomize tests Apr 28, 2013 3 - Alpha N/A - :pypi:`pytest-randomly` Pytest plugin to randomly order tests and control random.seed. Sep 12, 2025 5 - Production/Stable pytest - :pypi:`pytest-randomness` Pytest plugin about random seed management May 30, 2019 3 - Alpha N/A - :pypi:`pytest-random-num` Randomise the order in which pytest tests are run with some control over the randomness Oct 19, 2020 5 - Production/Stable N/A - :pypi:`pytest-random-order` Randomise the order in which pytest tests are run with some control over the randomness Jun 22, 2025 5 - Production/Stable pytest - :pypi:`pytest-ranking` A Pytest plugin for faster fault detection via regression test prioritization Apr 08, 2025 4 - Beta pytest>=7.4.3 - :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A - :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest - :pypi:`pytest-reana` Pytest fixtures for REANA. Jan 06, 2026 3 - Alpha N/A - :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 - :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Dec 23, 2025 N/A pytest>=8.4.1 - :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A - :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A - :pypi:`pytest-redis` Redis fixtures and fixture factories for Pytest. Feb 28, 2026 5 - Production/Stable pytest>=8.4.0 - :pypi:`pytest-redislite` Pytest plugin for testing code using Redis Apr 05, 2022 4 - Beta pytest - :pypi:`pytest-redmine` Pytest plugin for redmine Mar 19, 2018 1 - Planning N/A - :pypi:`pytest-ref` A plugin to store reference files to ease regression testing Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-reference-formatter` Conveniently run pytest with a dot-formatted test reference. Oct 01, 2019 4 - Beta N/A - :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest - :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 25, 2026 N/A pytest>7.2 - :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A - :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest - :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 - :pypi:`pytest_relay` A plugin to relay test information and control from and to pytest Jan 31, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-relay-run` A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. Jan 31, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest_relay_ws` An extension plugin to pytest-relay to relay pytest information via websockets Jan 31, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A - :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 - :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) - :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest - :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest - :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest - :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Feb 24, 2026 N/A pytest>=7.0.0 - :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A - :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 23, 2025 5 - Production/Stable pytest - :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest - :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A - :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest - :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A - :pypi:`pytest-reporter-html-dots` A basic HTML report for pytest using Jinja2 template engine. Apr 26, 2025 N/A N/A - :pypi:`pytest-reporter-plus` Lightweight enhanced HTML reporter for Pytest Jul 16, 2025 N/A N/A - :pypi:`pytest-report-extras` Pytest plugin to enhance pytest-html and allure reports by adding comments, screenshots, webpage sources and attachments. Dec 24, 2025 N/A pytest>=8.4.0 - :pypi:`pytest-reportinfra` Pytest plugin for reportinfra Aug 11, 2019 3 - Alpha N/A - :pypi:`pytest-reporting` A plugin to report summarized results in a table format Oct 25, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest - :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest - :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Dec 02, 2025 N/A pytest>=4.6.10 - :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A - :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A - :pypi:`pytest-req` pytest requests plugin Jan 19, 2026 5 - Production/Stable pytest>=8.4.2 - :pypi:`pytest-reqcov` A pytest plugin for requirement coverage tracking Jul 04, 2025 3 - Alpha pytest>=6.0 - :pypi:`pytest-reqs` pytest plugin to check pinned requirements May 12, 2019 N/A pytest (>=2.4.2) - :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-requestselapsed` collect and show http requests elapsed time Aug 14, 2022 N/A N/A - :pypi:`pytest-requests-futures` Pytest Plugin to Mock Requests Futures Jul 06, 2022 5 - Production/Stable pytest - :pypi:`pytest-requirements` pytest plugin for using custom markers to relate tests to requirements and usecases Feb 28, 2025 N/A pytest - :pypi:`pytest-requires` A pytest plugin to elegantly skip tests with optional requirements Dec 21, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-reqyaml` This is a plugin where generate requests test cases from yaml. Aug 16, 2025 N/A pytest>=8.4.1 - :pypi:`pytest-reraise` Make multi-threaded pytest test cases fail when they should Sep 20, 2022 5 - Production/Stable pytest (>=4.6) - :pypi:`pytest-rerun` Re-run only changed files in specified branch Jul 08, 2019 N/A pytest (>=3.6) - :pypi:`pytest-rerun-all` Rerun testsuite for a certain time or iterations Jul 30, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 - :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 - :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A - :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 30, 2025 4 - Beta pytest - :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 - :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A - :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 - :pypi:`pytest-resource-usage` Pytest plugin for reporting running time and peak memory usage Nov 06, 2022 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-respect` Pytest plugin to load resource files relative to test code and to expect values to match them. Oct 21, 2025 5 - Production/Stable pytest>=8.0.0 - :pypi:`pytest-responsemock` Simplified requests calls mocking for pytest Mar 10, 2022 5 - Production/Stable N/A - :pypi:`pytest-responses` py.test integration for responses Oct 11, 2022 N/A pytest (>=2.5) - :pypi:`pytest-rest-api` Aug 08, 2022 N/A pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-restrict` Pytest plugin to restrict the test types allowed Feb 09, 2026 5 - Production/Stable pytest - :pypi:`pytest-resttest` A REST API testing framework for Python, as plugin for pytest. Uses simple and readable YAML files for specifying test cases. Jan 01, 2026 5 - Production/Stable N/A - :pypi:`pytest-result-log` A pytest plugin that records the start, end, and result information of each use case in a log file Jan 10, 2024 N/A pytest>=7.2.0 - :pypi:`pytest-result-notify` Default template for PDM package Apr 27, 2025 N/A pytest>=8.3.5 - :pypi:`pytest-results` Easily spot regressions in your tests. Oct 08, 2025 4 - Beta pytest - :pypi:`pytest-result-sender` Apr 20, 2023 N/A pytest>=7.3.1 - :pypi:`pytest-result-sender-jms` Default template for PDM package May 22, 2025 N/A pytest>=8.3.5 - :pypi:`pytest-result-sender-lj` Default template for PDM package Dec 17, 2024 N/A pytest>=8.3.4 - :pypi:`pytest-result-sender-lyt` Default template for PDM package Mar 14, 2025 N/A pytest>=8.3.5 - :pypi:`pytest-result-sender-misszhang` Default template for PDM package Mar 21, 2025 N/A pytest>=8.3.5 - :pypi:`pytest-result-sender-r` Default template for PDM package Dec 26, 2025 N/A pytest>=8.4.2 - :pypi:`pytest-resume` A Pytest plugin to resuming from the last run test Apr 22, 2023 4 - Beta pytest (>=7.0) - :pypi:`pytest-rethinkdb` A RethinkDB plugin for pytest. Jul 24, 2016 4 - Beta N/A - :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 - :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 - :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A - :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Feb 03, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 - :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest - :pypi:`pytest-rich-reporter` A pytest plugin using Rich for beautiful test result formatting. Feb 17, 2022 1 - Planning pytest (>=5.0.0) - :pypi:`pytest-richtrace` A pytest plugin that displays the names and information of the pytest hook functions as they are executed. Jun 20, 2023 N/A N/A - :pypi:`pytest-ringo` pytest plugin to test webapplications using the Ringo webframework Sep 27, 2017 3 - Alpha N/A - :pypi:`pytest-rmsis` Sycronise pytest results to Jira RMsis Aug 10, 2022 N/A pytest (>=5.3.5) - :pypi:`pytest-rmysql` This is a plugin which is able to connet MySQL easyly. Aug 17, 2025 N/A pytest>=8.4.1 - :pypi:`pytest-rng` Fixtures for seeding tests and making randomness reproducible Aug 08, 2019 5 - Production/Stable pytest - :pypi:`pytest-roast` pytest plugin for ROAST configuration override and fixtures Nov 09, 2022 5 - Production/Stable pytest - :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Dec 22, 2025 N/A pytest<10,>=7 - :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A - :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) - :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 - :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) - :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Jan 02, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-rst` Test code from RST documents with pytest Feb 22, 2026 N/A N/A - :pypi:`pytest-rt` pytest data collector plugin for Testgr May 05, 2022 N/A N/A - :pypi:`pytest-rts` Coverage-based regression test selection (RTS) plugin for pytest May 17, 2021 N/A pytest - :pypi:`pytest-ruff` pytest plugin to check ruff requirements. Jun 19, 2025 4 - Beta pytest>=5 - :pypi:`pytest-run-changed` Pytest plugin that runs changed tests only Apr 02, 2021 3 - Alpha pytest - :pypi:`pytest-runfailed` implement a --failed option for pytest Mar 24, 2016 N/A N/A - :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Jan 14, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-run-subprocess` Pytest Plugin for running and testing subprocesses. Nov 12, 2022 5 - Production/Stable pytest - :pypi:`pytest-runtime-types` Checks type annotations on runtime while running tests. Feb 09, 2023 N/A pytest - :pypi:`pytest-runtime-xfail` Call runtime_xfail() to mark running test as xfail. Oct 10, 2025 5 - Production/Stable pytest>=5.0.0 - :pypi:`pytest-runtime-yoyo` run case mark timeout Jun 12, 2023 N/A pytest (>=7.2.0) - :pypi:`pytest-saccharin` pytest-saccharin is a updated fork of pytest-sugar, a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly). Oct 31, 2022 3 - Alpha N/A - :pypi:`pytest-salt` Pytest Salt Plugin Jan 27, 2020 4 - Beta N/A - :pypi:`pytest-salt-containers` A Pytest plugin that builds and creates docker containers Nov 09, 2016 4 - Beta N/A - :pypi:`pytest-salt-factories` Pytest Salt Plugin Jul 08, 2025 5 - Production/Stable pytest>=7.4.0 - :pypi:`pytest-salt-from-filenames` Simple PyTest Plugin For Salt's Test Suite Specifically Jan 29, 2019 4 - Beta pytest (>=4.1) - :pypi:`pytest-salt-runtests-bridge` Simple PyTest Plugin For Salt's Test Suite Specifically Dec 05, 2019 4 - Beta pytest (>=4.1) - :pypi:`pytest-sample-argvalues` A utility function to help choose a random sample from your argvalues in pytest. May 07, 2024 N/A pytest - :pypi:`pytest-sanic` a pytest plugin for Sanic Oct 25, 2021 N/A pytest (>=5.2) - :pypi:`pytest-sanitizer` A pytest plugin to sanitize output for LLMs (personal tool, no warranty or liability) Mar 16, 2025 3 - Alpha pytest>=6.0.0 - :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A - :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A - :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A - :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A - :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 - :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A - :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A - :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 - :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest Nov 14, 2025 4 - Beta pytest>=8.3.4 - :pypi:`pytest-screenshot-on-failure` Saves a screenshot when a test case from a pytest execution fails Jul 21, 2023 4 - Beta N/A - :pypi:`pytest-scrutinize` Scrutinize your pytest test suites for slow fixtures, tests and more. Aug 19, 2024 4 - Beta pytest>=6 - :pypi:`pytest-securestore` An encrypted password store for use within pytest cases Nov 08, 2021 4 - Beta N/A - :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) - :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 - :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A - :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Jan 09, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A - :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A - :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 - :pypi:`pytest-semantic` A pytest plugin for testing LLM outputs using semantic similarity matching Nov 11, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-semantic-assert` Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. Jan 09, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-send-email` Send pytest execution result email Sep 02, 2024 N/A pytest - :pypi:`pytest-sentry` A pytest plugin to send testrun information to Sentry.io Jul 01, 2025 N/A pytest - :pypi:`pytest-sequence-markers` Pytest plugin for sequencing markers for execution of tests May 23, 2023 5 - Production/Stable N/A - :pypi:`pytest-server` test server exec cmd Sep 09, 2024 N/A N/A - :pypi:`pytest-server-fixtures` Extensible server fixtures for py.test Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-serverless` Automatically mocks resources from serverless.yml in pytest using moto. May 09, 2022 4 - Beta N/A - :pypi:`pytest-servers` pytest servers Dec 21, 2025 3 - Alpha pytest>=6.2 - :pypi:`pytest-service` Aug 06, 2024 5 - Production/Stable pytest>=6.0.0 - :pypi:`pytest-services` Services plugin for pytest testing framework Jul 16, 2025 6 - Mature pytest - :pypi:`pytest-session2file` pytest-session2file (aka: pytest-session_to_file for v0.1.0 - v0.1.2) is a py.test plugin for capturing and saving to file the stdout of py.test. Jan 26, 2021 3 - Alpha pytest - :pypi:`pytest-session-fixture-globalize` py.test plugin to make session fixtures behave as if written in conftest, even if it is written in some modules May 15, 2018 4 - Beta N/A - :pypi:`pytest-session_to_file` pytest-session_to_file is a py.test plugin for capturing and saving to file the stdout of py.test. Oct 01, 2015 3 - Alpha N/A - :pypi:`pytest-setupinfo` Displaying setup info during pytest command run Jan 23, 2023 N/A N/A - :pypi:`pytest-sftpserver` py.test plugin to locally test sftp server connections. Sep 16, 2019 4 - Beta N/A - :pypi:`pytest-shard` Dec 11, 2020 4 - Beta pytest - :pypi:`pytest-shard-fork` Shard tests to support parallelism across multiple machines Jun 13, 2025 4 - Beta pytest - :pypi:`pytest-shared-session-scope` Pytest session-scoped fixture that works with xdist Oct 31, 2025 N/A pytest>=7.0.0 - :pypi:`pytest-share-hdf` Plugin to save test data in HDF files and retrieve them for comparison Sep 21, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-sharkreport` this is pytest report plugin. Jul 11, 2022 N/A pytest (>=3.5) - :pypi:`pytest-shell` A pytest plugin to help with testing shell scripts / black box commands Mar 27, 2022 N/A N/A - :pypi:`pytest-shell-utilities` Pytest plugin to simplify running shell commands against the system Oct 22, 2024 5 - Production/Stable pytest>=7.4.0 - :pypi:`pytest-sheraf` Versatile ZODB abstraction layer - pytest fixtures Feb 11, 2020 N/A pytest - :pypi:`pytest-sherlock` pytest plugin help to find coupled tests Aug 14, 2023 5 - Production/Stable pytest >=3.5.1 - :pypi:`pytest-shortcuts` Expand command-line shortcuts listed in pytest configuration Oct 29, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-shutil` A goodie-bag of unix shell and environment tools for py.test Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-sigil` Proper fixture resource cleanup by handling signals Oct 21, 2025 N/A pytest<9.0.0,>=7.0.0 - :pypi:`pytest-simbind` Pytest plugin to operate with objects generated by Simbind tool. Mar 28, 2024 N/A pytest>=7.0.0 - :pypi:`pytest-simplehttpserver` Simple pytest fixture to spin up an HTTP server Jun 24, 2021 4 - Beta N/A - :pypi:`pytest-simple-plugin` Simple pytest plugin Nov 27, 2019 N/A N/A - :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest - :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 - :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Feb 28, 2026 3 - Alpha pytest>=9.0 - :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest - :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 - :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) - :pypi:`pytest-skippy` Automatically skip tests that don't need to run! Jan 27, 2018 3 - Alpha pytest (>=2.3.4) - :pypi:`pytest-skip-slow` A pytest plugin to skip \`@pytest.mark.slow\` tests by default. Feb 09, 2023 N/A pytest>=6.2.0 - :pypi:`pytest-skipuntil` A simple pytest plugin to skip flapping test with deadline Nov 25, 2023 4 - Beta pytest >=3.8.0 - :pypi:`pytest-slack` Pytest to Slack reporting plugin Dec 15, 2020 5 - Production/Stable N/A - :pypi:`pytest-slow` A pytest plugin to skip \`@pytest.mark.slow\` tests by default. Sep 28, 2021 N/A N/A - :pypi:`pytest-slowest-first` Sort tests by their last duration, slowest first Dec 11, 2022 4 - Beta N/A - :pypi:`pytest-slow-first` Prioritize running the slowest tests first. Jan 30, 2024 4 - Beta pytest >=3.5.0 - :pypi:`pytest-slow-last` Run tests in order of execution time (faster tests first) Mar 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-smartcollect` A plugin for collecting tests that touch changed code Oct 04, 2018 N/A pytest (>=3.5.0) - :pypi:`pytest-smartcov` Smart coverage plugin for pytest. Sep 30, 2017 3 - Alpha N/A - :pypi:`pytest-smart-debugger-backend` Backend server for Pytest Smart Debugger Sep 17, 2025 N/A N/A - :pypi:`pytest-smart-rerun` A Pytest plugin for intelligent retrying of flaky tests. Oct 12, 2025 3 - Alpha N/A - :pypi:`pytest-smell` Automated bad smell detection tool for Pytest Jun 26, 2022 N/A N/A - :pypi:`pytest-smoke` Pytest plugin for smoke testing Nov 09, 2025 4 - Beta pytest<10,>=7.0.0 - :pypi:`pytest-smtp` Send email with pytest execution result Feb 20, 2021 N/A pytest - :pypi:`pytest-smtp4dev` Plugin for smtp4dev API Jun 27, 2023 5 - Production/Stable N/A - :pypi:`pytest-smtpd` An SMTP server for testing built on aiosmtpd May 15, 2023 N/A pytest - :pypi:`pytest-smtp-test-server` pytest plugin for using \`smtp-test-server\` as a fixture Dec 03, 2023 2 - Pre-Alpha pytest (>=7.4.3,<8.0.0) - :pypi:`pytest-snail` Plugin for adding a marker to slow running tests. 🐌 Nov 04, 2019 3 - Alpha pytest (>=5.0.1) - :pypi:`pytest-snap` A text-based snapshot testing library implemented as a pytest plugin Aug 25, 2025 N/A pytest>=8.0.0 - :pypi:`pytest-snapcheck` Minimal deterministic test-run snapshot capture for pytest. Sep 07, 2025 N/A pytest>=8.0 - :pypi:`pytest-snapci` py.test plugin for Snap-CI Nov 12, 2015 N/A N/A - :pypi:`pytest-snapmock` Snapshots for your mocks. Nov 15, 2024 N/A N/A - :pypi:`pytest-snapshot` A plugin for snapshot testing with pytest. Apr 23, 2022 4 - Beta pytest (>=3.0.0) - :pypi:`pytest-snapshot-with-message-generator` A plugin for snapshot testing with pytest. Jul 25, 2023 4 - Beta pytest (>=3.0.0) - :pypi:`pytest-snmpserver` May 12, 2021 N/A N/A - :pypi:`pytest-snob` A pytest plugin that only selects meaningful python tests to run. Jan 12, 2025 N/A pytest - :pypi:`pytest-snowflake-bdd` Setup test data and run tests on snowflake in BDD style! Jan 05, 2022 4 - Beta pytest (>=6.2.0) - :pypi:`pytest-socket` Pytest Plugin to disable socket calls during tests Jan 28, 2024 4 - Beta pytest (>=6.2.5) - :pypi:`pytest-sofaepione` Test the installation of SOFA and the SofaEpione plugin. Aug 17, 2022 N/A N/A - :pypi:`pytest-soft-assert` Pytest plugin for soft assertions. Dec 07, 2025 N/A pytest>=8.4.0 - :pypi:`pytest-soft-assertions` May 05, 2020 3 - Alpha pytest - :pypi:`pytest-solidity` A PyTest library plugin for Solidity language. Jan 15, 2022 1 - Planning pytest (<7,>=6.0.1) ; extra == 'tests' - :pypi:`pytest-solr` Solr process and client fixtures for py.test. May 11, 2020 3 - Alpha pytest (>=3.0.0) - :pypi:`pytest-sort` Tools for sorting test cases Mar 22, 2025 N/A pytest>=7.4.0 - :pypi:`pytest-sorter` A simple plugin to first execute tests that historically failed more Apr 20, 2021 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-sosu` Unofficial PyTest plugin for Sauce Labs Aug 04, 2023 2 - Pre-Alpha pytest - :pypi:`pytest-sourceorder` Test-ordering plugin for pytest Sep 01, 2021 4 - Beta pytest - :pypi:`pytest-spark` pytest plugin to run the tests with support of pyspark. May 21, 2025 4 - Beta pytest - :pypi:`pytest-spawner` py.test plugin to spawn process and communicate with them. Jul 31, 2015 4 - Beta N/A - :pypi:`pytest-spec` Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION. Feb 22, 2026 N/A pytest; extra == "test" - :pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0 - :pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7 - :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Jan 21, 2026 4 - Beta pytest>=8.1.1 - :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Feb 09, 2026 N/A pytest>=3.0.0 - :pypi:`pytest-splinter` Splinter plugin for pytest testing framework Sep 09, 2022 6 - Mature pytest (>=3.0.0) - :pypi:`pytest-splinter4` Pytest plugin for the splinter automation library Feb 01, 2024 6 - Mature pytest >=8.0.0 - :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Feb 03, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-split-ct` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 23, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-split-ext` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Sep 23, 2023 4 - Beta pytest (>=5,<8) - :pypi:`pytest-splitio` Split.io SDK integration for e2e tests Sep 22, 2020 N/A pytest (<7,>=5.0) - :pypi:`pytest-split-ng` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 05, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) - :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A - :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 - :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 24, 2025 N/A N/A - :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) - :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A - :pypi:`pytest-sqlalchemy` pytest plugin with sqlalchemy related fixtures Apr 19, 2025 3 - Alpha pytest>=8.0 - :pypi:`pytest-sqlalchemy-mock` pytest sqlalchemy plugin for mock Aug 10, 2024 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-sqlalchemy-session` A pytest plugin for preserving test isolation that use SQLAlchemy. May 19, 2023 4 - Beta pytest (>=7.0) - :pypi:`pytest-sql-bigquery` Yet another SQL-testing framework for BigQuery provided by pytest plugin Dec 19, 2019 N/A pytest - :pypi:`pytest-sqlfluff` A pytest plugin to use sqlfluff to enable format checking of sql files. Dec 21, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-sqlguard` Pytest fixture to record and check SQL Queries made by SQLAlchemy Jun 06, 2025 4 - Beta pytest>=7 - :pypi:`pytest-squadcast` Pytest report plugin for Squadcast Feb 22, 2022 5 - Production/Stable pytest - :pypi:`pytest-srcpaths` Add paths to sys.path Oct 15, 2021 N/A pytest>=6.2.0 - :pypi:`pytest-ssh` pytest plugin for ssh command run May 27, 2019 N/A pytest - :pypi:`pytest-start-from` Start pytest run from a given point Apr 11, 2016 N/A N/A - :pypi:`pytest-static` pytest-static May 25, 2025 3 - Alpha pytest<8.0.0,>=7.4.3 - :pypi:`pytest-stats` Collects tests metadata for future analysis, easy to extend for any data store Jul 18, 2024 N/A pytest>=8.0.0 - :pypi:`pytest-statsd` pytest plugin for reporting to graphite Nov 30, 2018 5 - Production/Stable pytest (>=3.0.0) - :pypi:`pytest-status` Add status mark for tests Aug 22, 2024 N/A pytest - :pypi:`pytest-stderr-db` Add your description here Sep 14, 2025 N/A N/A - :pypi:`pytest-stdout-db` Add your description here Sep 14, 2025 N/A N/A - :pypi:`pytest-stepfunctions` A small description May 08, 2021 4 - Beta pytest - :pypi:`pytest-steps` Create step-wise / incremental tests in pytest. Sep 23, 2021 5 - Production/Stable N/A - :pypi:`pytest-stepthrough` Pause and wait for Enter after each test with --step Aug 14, 2025 N/A N/A - :pypi:`pytest-stepwise` Run a test suite one failing test at a time. Dec 01, 2015 4 - Beta N/A - :pypi:`pytest-stf` pytest plugin for openSTF Sep 23, 2025 N/A pytest>=5.0 - :pypi:`pytest-stochastic` A pytest plugin for principled stochastic unit testing using concentration inequalities Feb 24, 2026 4 - Beta pytest>=7.0 - :pypi:`pytest-stochastics` pytest plugin that allows selectively running tests several times and accepting \*some\* failures. Dec 01, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-stoq` A plugin to pytest stoq Feb 09, 2021 4 - Beta N/A - :pypi:`pytest-storage` Pytest plugin to store test artifacts Sep 12, 2025 3 - Alpha pytest>=8.4.2 - :pypi:`pytest-store` Pytest plugin to store values from test runs Jul 30, 2025 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-streaming` Plugin for testing pubsub, pulsar, and kafka systems with pytest locally and in ci/cd Jan 14, 2026 5 - Production/Stable pytest>=8.3.5 - :pypi:`pytest-stress` A Pytest plugin that allows you to loop tests for a user defined amount of time. Dec 07, 2019 4 - Beta pytest (>=3.6.0) - :pypi:`pytest-structlog` Structured logging assertions Sep 10, 2025 N/A pytest - :pypi:`pytest-structmpd` provide structured temporary directory Oct 17, 2018 N/A N/A - :pypi:`pytest-stub` Stub packages, modules and attributes. Apr 28, 2020 5 - Production/Stable N/A - :pypi:`pytest-stubprocess` Provide stub implementations for subprocesses in Python tests Sep 17, 2018 3 - Alpha pytest (>=3.5.0) - :pypi:`pytest-study` A pytest plugin to organize long run tests (named studies) without interfering the regular tests Sep 26, 2017 3 - Alpha pytest (>=2.0) - :pypi:`pytest-subinterpreter` Run pytest in a subinterpreter Nov 25, 2023 N/A pytest>=7.0.0 - :pypi:`pytest-subket` Pytest Plugin to disable socket calls during tests Jul 31, 2025 4 - Beta N/A - :pypi:`pytest-subprocess` A plugin to fake subprocess for pytest Jan 04, 2025 5 - Production/Stable pytest>=4.0.0 - :pypi:`pytest-subtesthack` A hack to explicitly set up and tear down fixtures. Jul 16, 2022 N/A N/A - :pypi:`pytest-subtests` unittest subTest() support and subtests fixture Oct 20, 2025 4 - Beta pytest>=7.4 - :pypi:`pytest-subunit` pytest-subunit is a plugin for py.test which outputs testsresult in subunit format. Sep 17, 2023 N/A pytest (>=2.3) - :pypi:`pytest-sugar` pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly). Aug 23, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-suitemanager` A simple plugin to use with pytest Apr 28, 2023 4 - Beta N/A - :pypi:`pytest-suite-timeout` A pytest plugin for ensuring max suite time Jan 26, 2024 N/A pytest>=7.0.0 - :pypi:`pytest-supercov` Pytest plugin for measuring explicit test-file to source-file coverage Jul 02, 2023 N/A N/A - :pypi:`pytest-svn` SVN repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-symbols` pytest-symbols is a pytest plugin that adds support for passing test environment symbols into pytest tests. Nov 20, 2017 3 - Alpha N/A - :pypi:`pytest-system-statistics` Pytest plugin to track and report system usage statistics Feb 16, 2022 5 - Production/Stable pytest (>=6.0.0) - :pypi:`pytest-system-test-plugin` Pyst - Pytest System-Test Plugin Feb 03, 2022 N/A N/A - :pypi:`pytest_tagging` a pytest plugin to tag tests Nov 08, 2024 N/A pytest>=7.1.3 - :pypi:`pytest-takeltest` Fixtures for ansible, testinfra and molecule Sep 07, 2024 N/A N/A - :pypi:`pytest-talisker` Nov 28, 2021 N/A N/A - :pypi:`pytest-tally` A Pytest plugin to generate realtime summary stats, and display them in-console using a text-based dashboard. May 22, 2023 4 - Beta pytest (>=6.2.5) - :pypi:`pytest-tap` Test Anything Protocol (TAP) reporting plugin for pytest Jan 30, 2025 5 - Production/Stable pytest>=3.0 - :pypi:`pytest-tape` easy assertion with expected results saved to yaml files Mar 17, 2021 4 - Beta N/A - :pypi:`pytest-target` Pytest plugin for remote target orchestration. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) - :pypi:`pytest-taskgraph` Add your description here Apr 09, 2025 N/A pytest - :pypi:`pytest-tblineinfo` tblineinfo is a py.test plugin that insert the node id in the final py.test report when --tb=line option is used Dec 01, 2015 3 - Alpha pytest (>=2.0) - :pypi:`pytest-tcpclient` A pytest plugin for testing TCP clients Nov 16, 2022 N/A pytest (<8,>=7.1.3) - :pypi:`pytest-tdd` run pytest on a python module Aug 18, 2023 4 - Beta N/A - :pypi:`pytest-teamcity-logblock` py.test plugin to introduce block structure in teamcity build log, if output is not captured May 15, 2018 4 - Beta N/A - :pypi:`pytest-teardown` Apr 15, 2025 N/A pytest<9.0.0,>=7.4.1 - :pypi:`pytest-telegram` Pytest to Telegram reporting plugin Apr 25, 2024 5 - Production/Stable N/A - :pypi:`pytest-telegram-notifier` Telegram notification plugin for Pytest Jun 27, 2023 5 - Production/Stable N/A - :pypi:`pytest-tempdir` Predictable and repeatable tempdir support. Oct 11, 2019 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-terra-fixt` Terraform and Terragrunt fixtures for pytest Sep 15, 2022 N/A pytest (==6.2.5) - :pypi:`pytest-terraform` A pytest plugin for using terraform fixtures May 21, 2024 N/A pytest>=6.0 - :pypi:`pytest-terraform-fixture` generate terraform resources to use with pytest Nov 14, 2018 4 - Beta N/A - :pypi:`pytest-test-analyzer` A powerful tool for analyzing pytest test files and generating detailed reports Jun 14, 2025 4 - Beta N/A - :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A - :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Dec 24, 2025 5 - Production/Stable pytest>=8.4.2 - :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 11, 2026 N/A N/A - :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest - :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest - :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) - :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) - :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Feb 19, 2026 4 - Beta pytest>=7 - :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 - :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A - :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A - :pypi:`pytest-testit-parametrize` A pytest plugin for uploading parameterized tests parameters into TMS TestIT Dec 04, 2024 4 - Beta pytest>=8.3.3 - :pypi:`pytest-testlink-adaptor` pytest reporting plugin for testlink Dec 20, 2018 4 - Beta pytest (>=2.6) - :pypi:`pytest-testmon` selects tests affected by changed files and methods Dec 01, 2025 4 - Beta pytest<10,>=5 - :pypi:`pytest-testmon-dev` selects tests affected by changed files and methods Mar 30, 2023 4 - Beta pytest (<8,>=5) - :pypi:`pytest-testmon-oc` nOly selects tests affected by changed files and methods Jun 01, 2022 4 - Beta pytest (<8,>=5) - :pypi:`pytest-testmon-skip-libraries` selects tests affected by changed files and methods Mar 03, 2023 4 - Beta pytest (<8,>=5) - :pypi:`pytest-testobject` Plugin to use TestObject Suites with Pytest Sep 24, 2019 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-testpluggy` set your encoding Jan 07, 2022 N/A pytest - :pypi:`pytest-testrail` A pytest plugin for creating TestRail runs and adding results Jan 25, 2026 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testrail2` A pytest plugin to upload results to TestRail. Feb 10, 2023 N/A pytest (<8.0,>=7.2.0) - :pypi:`pytest-testrail-api` TestRail Api Python Client Mar 17, 2025 N/A pytest - :pypi:`pytest-testrail-api-client` TestRail Api Python Client Dec 14, 2021 N/A pytest - :pypi:`pytest-testrail-appetize` pytest plugin for creating TestRail runs and adding results Sep 29, 2021 N/A N/A - :pypi:`pytest-testrail-client` pytest plugin for Testrail Sep 29, 2020 5 - Production/Stable N/A - :pypi:`pytest-testrail-e2e` pytest plugin for creating TestRail runs and adding results Oct 11, 2021 N/A pytest (>=3.6) - :pypi:`pytest-testrail-integrator` Pytest plugin for sending report to testrail system. Aug 01, 2022 N/A pytest (>=6.2.5) - :pypi:`pytest-testrail-ns` pytest plugin for creating TestRail runs and adding results Aug 12, 2022 N/A N/A - :pypi:`pytest-testrail-reporter` Sep 10, 2018 N/A N/A - :pypi:`pytest-testrail-results` A pytest plugin to upload results to TestRail. Mar 04, 2024 N/A pytest >=7.2.0 - :pypi:`pytest-testreport` Dec 01, 2022 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-testreport-new` Oct 07, 2023 4 - Beta pytest >=3.5.0 - :pypi:`pytest-testslide` TestSlide fixture for pytest Jan 07, 2021 5 - Production/Stable pytest (~=6.2) - :pypi:`pytest-test-this` Plugin for py.test to run relevant tests, based on naively checking if a test contains a reference to the symbol you supply Sep 15, 2019 2 - Pre-Alpha pytest (>=2.3) - :pypi:`pytest-test-tracer-for-pytest` A plugin that allows coll test data for use on Test Tracer Jun 28, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-test-tracer-for-pytest-bdd` A plugin that allows coll test data for use on Test Tracer Aug 20, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-test-utils` Feb 08, 2024 N/A pytest >=3.9 - :pypi:`pytest-tesults` Tesults plugin for pytest Nov 12, 2024 5 - Production/Stable pytest>=3.5.0 - :pypi:`pytest-texts-score` Texts content similarity scoring plugin Dec 17, 2025 4 - Beta pytest>=8.4.2 - :pypi:`pytest-textual-snapshot` Snapshot testing for Textual apps Jan 23, 2025 5 - Production/Stable pytest>=8.0.0 - :pypi:`pytest-tezos` pytest-ligo Jan 16, 2020 4 - Beta N/A - :pypi:`pytest-tf` Test your OpenTofu and Terraform config using a PyTest plugin May 29, 2024 N/A pytest<9.0.0,>=8.2.1 - :pypi:`pytest-th2-bdd` pytest_th2_bdd May 13, 2022 N/A N/A - :pypi:`pytest-thawgun` Pytest plugin for time travel May 26, 2020 3 - Alpha N/A - :pypi:`pytest-thread` Jul 07, 2023 N/A N/A - :pypi:`pytest-threadleak` Detects thread leaks Jul 03, 2022 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-tick` Ticking on tests Aug 31, 2021 5 - Production/Stable pytest (>=6.2.5,<7.0.0) - :pypi:`pytest_time` Dec 01, 2025 3 - Alpha pytest - :pypi:`pytest-timeassert-ethan` execution duration Dec 25, 2023 N/A pytest - :pypi:`pytest-timeit` A pytest plugin to time test function runs Oct 13, 2016 4 - Beta N/A - :pypi:`pytest-timeout` pytest plugin to abort hanging tests May 05, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-timeouts` Linux-only Pytest plugin to control durations of various test case execution phases Sep 21, 2019 5 - Production/Stable N/A - :pypi:`pytest-timer` A timer plugin for pytest Dec 26, 2023 N/A pytest - :pypi:`pytest-timestamper` Pytest plugin to add a timestamp prefix to the pytest output Mar 27, 2024 N/A N/A - :pypi:`pytest-timestamps` A simple plugin to view timestamps for each test Sep 11, 2023 N/A pytest (>=7.3,<8.0) - :pypi:`pytest-timing-plugin` pytest插件开发demo Jul 21, 2025 N/A N/A - :pypi:`pytest-tiny-api-client` The companion pytest plugin for tiny-api-client Jan 04, 2024 5 - Production/Stable pytest - :pypi:`pytest-tinybird` A pytest plugin to report test results to tinybird May 07, 2025 4 - Beta pytest>=3.8.0 - :pypi:`pytest-tipsi-django` Better fixtures for django Feb 05, 2024 5 - Production/Stable pytest>=6.0.0 - :pypi:`pytest-tipsi-testing` Better fixtures management. Various helpers Feb 04, 2024 5 - Production/Stable pytest>=3.3.0 - :pypi:`pytest-tldr` A pytest plugin that limits the output to just the things you need. Nov 10, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-tm4j-reporter` Cloud Jira Test Management (TM4J) PyTest reporter plugin Sep 01, 2020 N/A pytest - :pypi:`pytest-tmnet` A small example package Mar 01, 2022 N/A N/A - :pypi:`pytest-tmp-files` Utilities to create temporary file hierarchies in pytest. Dec 08, 2023 N/A pytest - :pypi:`pytest-tmpfs` A pytest plugin that helps you on using a temporary filesystem for testing. Aug 29, 2022 N/A pytest - :pypi:`pytest-tmreport` this is a vue-element ui report for pytest Aug 12, 2022 N/A N/A - :pypi:`pytest-tmux` A pytest plugin that enables tmux driven tests Sep 01, 2025 4 - Beta N/A - :pypi:`pytest-todo` A small plugin for the pytest testing framework, marking TODO comments as failure May 23, 2019 4 - Beta pytest - :pypi:`pytest-tomato` Mar 01, 2019 5 - Production/Stable N/A - :pypi:`pytest-toolbelt` This is just a collection of utilities for pytest, but don't really belong in pytest proper. Aug 12, 2019 3 - Alpha N/A - :pypi:`pytest-toolbox` Numerous useful plugins for pytest. Apr 07, 2018 N/A pytest (>=3.5.0) - :pypi:`pytest-toolkit` Useful utils for testing Jun 07, 2024 N/A N/A - :pypi:`pytest-tools` Pytest tools Oct 21, 2022 4 - Beta N/A - :pypi:`pytest-topo` Topological sorting for pytest Jun 05, 2024 N/A pytest>=7.0.0 - :pypi:`pytest-tornado` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Jun 17, 2020 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-tornado5` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Nov 16, 2018 5 - Production/Stable pytest (>=3.6) - :pypi:`pytest-tornado-yen3` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Oct 15, 2018 5 - Production/Stable N/A - :pypi:`pytest-tornasync` py.test plugin for testing Python 3.5+ Tornado code Jul 15, 2019 3 - Alpha pytest (>=3.0) - :pypi:`pytest-trace` Save OpenTelemetry spans generated during testing Jun 19, 2022 N/A pytest (>=4.6) - :pypi:`pytest-track` Feb 26, 2021 3 - Alpha pytest (>=3.0) - :pypi:`pytest-translations` Test your translation files. Sep 11, 2023 5 - Production/Stable pytest (>=7) - :pypi:`pytest-travis-fold` Folds captured output sections in Travis CI build log Nov 29, 2017 4 - Beta pytest (>=2.6.0) - :pypi:`pytest-trello` Plugin for py.test that integrates trello using markers Nov 20, 2015 5 - Production/Stable N/A - :pypi:`pytest-trepan` Pytest plugin for trepan debugger. Sep 11, 2025 5 - Production/Stable pytest>=4.0.0 - :pypi:`pytest-trialtemp` py.test plugin for using the same _trial_temp working directory as trial Jun 08, 2015 N/A N/A - :pypi:`pytest-trio` Pytest plugin for trio Nov 01, 2022 N/A pytest (>=7.2.0) - :pypi:`pytest-trytond` Pytest plugin for the Tryton server framework Nov 04, 2022 4 - Beta pytest (>=5) - :pypi:`pytest-tspwplib` A simple plugin to use with tspwplib Jan 08, 2021 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) - :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A - :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A - :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Dec 12, 2025 N/A pytest<=9.0.1,>=7.4 - :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 - :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A - :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A - :pypi:`pytest-twisted` A twisted plugin for pytest. Sep 10, 2024 5 - Production/Stable pytest>=2.3 - :pypi:`pytest-ty` A pytest plugin to run the ty type checker Feb 18, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-typechecker` Run type checkers on specified test files Feb 04, 2022 N/A pytest (>=6.2.5,<7.0.0) - :pypi:`pytest-typed-schema-shot` Pytest plugin for automatic JSON Schema generation and validation from examples Jun 14, 2025 N/A pytest - :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A - :pypi:`pytest-typhoon-polarion` Typhoontest plugin for Siemens Polarion Feb 01, 2024 4 - Beta N/A - :pypi:`pytest-typhoon-xray` Typhoon HIL plugin for pytest Aug 15, 2023 4 - Beta N/A - :pypi:`pytest-typing-runner` Pytest plugin to make it easier to run and check python code against static type checkers May 31, 2025 N/A N/A - :pypi:`pytest-tytest` Typhoon HIL plugin for pytest May 25, 2020 4 - Beta pytest (>=5.4.2) - :pypi:`pytest-tzshift` A Pytest plugin that transparently re-runs tests under a matrix of timezones and locales. Jun 25, 2025 4 - Beta pytest>=7.0 - :pypi:`pytest-ubersmith` Easily mock calls to ubersmith at the \`requests\` level. Apr 13, 2015 N/A N/A - :pypi:`pytest-ui` Text User Interface for running python tests Jul 05, 2021 4 - Beta pytest - :pypi:`pytest-ui-failed-screenshot` UI自动测试失败时自动截图,并将截图加入到测试报告中 Dec 06, 2022 N/A N/A - :pypi:`pytest-ui-failed-screenshot-allure` UI自动测试失败时自动截图,并将截图加入到Allure测试报告中 Dec 06, 2022 N/A N/A - :pypi:`pytest-uncollect-if` A plugin to uncollect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-unflakable` Unflakable plugin for PyTest Apr 30, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-unhandled-exception-exit-code` Plugin for py.test set a different exit code on uncaught exceptions Jun 22, 2020 5 - Production/Stable pytest (>=2.3) - :pypi:`pytest-unique` Pytest fixture to generate unique values. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 - :pypi:`pytest-unittest-filter` A pytest plugin for filtering unittest-based test classes Jan 12, 2019 4 - Beta pytest (>=3.1.0) - :pypi:`pytest-unittest-id-runner` A pytest plugin to run tests using unittest-style test IDs Feb 09, 2025 N/A pytest>=6.0.0 - :pypi:`pytest-unmagic` Pytest fixtures with conventional import semantics Jul 14, 2025 5 - Production/Stable pytest - :pypi:`pytest-unmarked` Run only unmarked tests Aug 27, 2019 5 - Production/Stable N/A - :pypi:`pytest-unordered` Test equality of unordered collections in pytest Jun 03, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-unstable` Set a test as unstable to return 0 even if it failed Sep 27, 2022 4 - Beta N/A - :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Dec 23, 2025 4 - Beta pytest>7.3.2 - :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest - :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A - :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) - :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Feb 27, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest - :pypi:`pytest-valgrind` May 19, 2021 N/A N/A - :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-variant` Variant support for Pytest Jun 06, 2022 N/A N/A - :pypi:`pytest-vcr` Plugin for managing VCR.py cassettes Apr 26, 2019 5 - Production/Stable pytest (>=3.6.0) - :pypi:`pytest-vcr-delete-on-fail` A pytest plugin that automates vcrpy cassettes deletion on test failure. Feb 16, 2024 5 - Production/Stable pytest (>=8.0.0,<9.0.0) - :pypi:`pytest-vcrpandas` Test from HTTP interactions to dataframe processed. Jan 12, 2019 4 - Beta pytest - :pypi:`pytest-vcs` Sep 22, 2022 4 - Beta N/A - :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest - :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A - :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Feb 26, 2026 5 - Production/Stable pytest>=9.0.0 - :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) - :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest - :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 - :pypi:`pytest-vnc` VNC client for Pytest Nov 06, 2023 N/A pytest - :pypi:`pytest-voluptuous` Pytest plugin for asserting data against voluptuous schema. Jun 09, 2020 N/A pytest - :pypi:`pytest-vscodedebug` A pytest plugin to easily enable debugging tests within Visual Studio Code Dec 04, 2020 4 - Beta N/A - :pypi:`pytest-vscode-pycharm-cls` A PyTest helper to enable start remote debugger on test start or failure or when pytest.set_trace is used. Feb 01, 2023 N/A pytest - :pypi:`pytest-vtestify` A pytest plugin for visual assertion using SSIM and image comparison. Feb 04, 2025 N/A pytest - :pypi:`pytest-vts` pytest plugin for automatic recording of http stubbed tests Jun 05, 2019 N/A pytest (>=2.3) - :pypi:`pytest-vulture` A pytest plugin to checks dead code with vulture Nov 25, 2024 N/A pytest>=7.0.0 - :pypi:`pytest-vw` pytest-vw makes your failing test cases succeed under CI tools scrutiny Oct 07, 2015 4 - Beta N/A - :pypi:`pytest-vyper` Plugin for the vyper smart contract language. May 28, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-wake` Nov 19, 2024 N/A pytest - :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A - :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Jan 10, 2026 4 - Beta N/A - :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A - :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A - :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A - :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest - :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 - :pypi:`pytest-webtestpilot` Pytest plugin for running WebTestPilot JSON tests Dec 28, 2025 N/A pytest>=9.0.2 - :pypi:`pytest-wetest` Welian API Automation test framework pytest plugin Nov 10, 2018 4 - Beta N/A - :pypi:`pytest-when` Utility which makes mocking more readable and controllable Sep 25, 2025 N/A pytest>=7.3.1 - :pypi:`pytest-whirlwind` Testing Tornado. Jun 12, 2020 N/A N/A - :pypi:`pytest-wholenodeid` pytest addon for displaying the whole node id for failures Aug 26, 2015 4 - Beta pytest (>=2.0) - :pypi:`pytest-win32consoletitle` Pytest progress in console title (Win32 only) Aug 08, 2021 N/A N/A - :pypi:`pytest-winnotify` Windows tray notifications for py.test results. Apr 22, 2016 N/A N/A - :pypi:`pytest-wirefracture` Pytest fixtures for wirefracture Dec 31, 2025 N/A N/A - :pypi:`pytest-wiremock` A pytest plugin for programmatically using wiremock in integration tests Mar 27, 2022 N/A pytest (>=7.1.1,<8.0.0) - :pypi:`pytest-wiretap` \`pytest\` plugin for recording call stacks Mar 18, 2025 N/A pytest - :pypi:`pytest-with-docker` pytest with docker helpers. Nov 09, 2021 N/A pytest - :pypi:`pytest-workaround-12888` forces an import of readline early in the process to work around pytest bug #12888 Jan 15, 2025 N/A N/A - :pypi:`pytest-workflow` A pytest plugin for configuring workflow/pipeline tests using YAML files Mar 18, 2024 5 - Production/Stable pytest >=7.0.0 - :pypi:`pytest-xdist` pytest xdist plugin for distributed testing, most importantly across multiple CPUs Jul 01, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-xdist-debug-for-graingert` pytest xdist plugin for distributed testing and loop-on-failing modes Jul 24, 2019 5 - Production/Stable pytest (>=4.4.0) - :pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0) - :pypi:`pytest-xdist-gnumake` A small example package Jun 22, 2025 N/A pytest - :pypi:`pytest-xdist-load-testing` xdist scheduler to repeately run tests Nov 22, 2025 4 - Beta pytest>=8.4.2 - :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Dec 31, 2025 4 - Beta pytest>=8.4.2 - :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) - :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Feb 16, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 - :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) - :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A - :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 - :pypi:`pytest-xhtml` pytest plugin for generating HTML reports Feb 26, 2026 5 - Production/Stable pytest>=7 - :pypi:`pytest-xiuyu` This is a pytest plugin Jul 25, 2023 5 - Production/Stable N/A - :pypi:`pytest-xlog` Extended logging for test and decorators May 31, 2020 4 - Beta N/A - :pypi:`pytest-xlsx` pytest plugin for generating test cases by xlsx(excel) Aug 07, 2024 N/A pytest~=8.2.2 - :pypi:`pytest-xml` Create simple XML results for parsing Nov 14, 2024 4 - Beta pytest>=8.0.0 - :pypi:`pytest-xpara` An extended parametrizing plugin of pytest. Aug 07, 2024 3 - Alpha pytest - :pypi:`pytest-xprocess` A pytest plugin for managing processes across test runs. May 19, 2024 4 - Beta pytest>=2.8 - :pypi:`pytest-xray` May 30, 2019 3 - Alpha N/A - :pypi:`pytest-xrayjira` Mar 17, 2020 3 - Alpha pytest (==4.3.1) - :pypi:`pytest-xray-reporter` Pytest plugin for generating Xray JSON reports May 21, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-xray-server` May 03, 2022 3 - Alpha pytest (>=5.3.1) - :pypi:`pytest-xstress` Jun 01, 2024 N/A pytest<9.0.0,>=8.0.0 - :pypi:`pytest-xtime` pytest plugin for recording execution time Jun 05, 2025 4 - Beta pytest - :pypi:`pytest-xvfb` A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests. Mar 12, 2025 4 - Beta pytest>=2.8.1 - :pypi:`pytest-xvirt` A pytest plugin to virtualize test. For example to transparently running them on a remote box. Dec 15, 2024 4 - Beta pytest>=7.2.2 - :pypi:`pytest-yaml` This plugin is used to load yaml output to your test using pytest framework. Oct 05, 2018 N/A pytest - :pypi:`pytest-yaml-fei` a pytest yaml allure package Jul 27, 2025 N/A pytest - :pypi:`pytest-yaml-sanmu` Pytest plugin for generating test cases with YAML. In test cases, you can use markers, fixtures, variables, and even call Python functions. Sep 16, 2025 N/A pytest>=8.2.2 - :pypi:`pytest-yamltree` Create or check file/directory trees described by YAML Mar 02, 2020 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-yamlwsgi` Run tests against wsgi apps defined in yaml May 11, 2010 N/A N/A - :pypi:`pytest-yaml-yoyo` http/https API run by yaml Jun 19, 2023 N/A pytest (>=7.2.0) - :pypi:`pytest-yapf` Run yapf Jul 06, 2017 4 - Beta pytest (>=3.1.1) - :pypi:`pytest-yapf3` Validate your Python file format with yapf Mar 29, 2023 5 - Production/Stable pytest (>=7) - :pypi:`pytest-yield` PyTest plugin to run tests concurrently, each \`yield\` switch context to other one Jan 23, 2019 N/A N/A - :pypi:`pytest-yls` Pytest plugin to test the YLS as a whole. Apr 09, 2025 N/A pytest<9.0.0,>=8.3.3 - :pypi:`pytest-youqu-playwright` pytest-youqu-playwright Jun 12, 2024 N/A pytest - :pypi:`pytest-yuk` Display tests you are uneasy with, using 🤢/🤮 for pass/fail of tests marked with yuk. Mar 26, 2021 N/A pytest>=5.0.0 - :pypi:`pytest-zafira` A Zafira plugin for pytest Sep 18, 2019 5 - Production/Stable pytest (==4.1.1) - :pypi:`pytest-zap` OWASP ZAP plugin for py.test. May 12, 2014 4 - Beta N/A - :pypi:`pytest-zcc` eee Jun 02, 2024 N/A N/A - :pypi:`pytest-zebrunner` Pytest connector for Zebrunner reporting Jul 04, 2024 5 - Production/Stable pytest>=4.5.0 - :pypi:`pytest-zeebe` Pytest fixtures for testing Camunda 8 processes using a Zeebe test engine. Feb 01, 2024 N/A pytest (>=7.4.2,<8.0.0) - :pypi:`pytest-zephyr-scale-integration` A library for integrating Jira Zephyr Scale (Adaptavist\TM4J) with pytest Jun 26, 2025 N/A pytest - :pypi:`pytest-zephyr-telegram` Плагин для отправки данных автотестов в Телеграм и Зефир Sep 30, 2024 N/A pytest==8.3.2 - :pypi:`pytest-zest` Zesty additions to pytest. Nov 17, 2022 N/A N/A - :pypi:`pytest-zhongwen-wendang` PyTest 中文文档 Mar 04, 2024 4 - Beta N/A - :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) - :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest - :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 - :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Jan 28, 2026 5 - Production/Stable pytest>=8.3.5 - =============================================== ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ + ======================================================= ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ + name summary last_release status requires + ======================================================= ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ + :pypi:`databricks-labs-pytester` Python Testing for Databricks Oct 17, 2025 4 - Beta pytest>=8.3 + :pypi:`logassert` Simple but powerful assertion and verification of logged lines Aug 14, 2025 5 - Production/Stable pytest; extra == "dev" + :pypi:`logot` Test whether your code is logging correctly 🪵 Feb 22, 2026 5 - Production/Stable pytest<10,>=7; extra == "pytest" + :pypi:`nuts` Network Unit Testing System Nov 17, 2025 N/A pytest<8,>=7 + :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A + :pypi:`pytest-abstracts` A contextmanager pytest fixture for handling multiple mock abstracts May 25, 2022 N/A N/A + :pypi:`pytest-accept` Mar 01, 2026 N/A pytest>=7 + :pypi:`pytest-adaptavist` pytest plugin for generating test execution results within Jira Test Management (tm4j) Oct 13, 2022 N/A pytest (>=5.4.0) + :pypi:`pytest-adaptavist-fixed` pytest plugin for generating test execution results within Jira Test Management (tm4j) Jan 17, 2025 N/A pytest>=5.4.0 + :pypi:`pytest-adbc-replay` pytest plugin to record and replay ADBC database queries Mar 02, 2026 3 - Alpha pytest>=8.0 + :pypi:`pytest-addons-test` 用于测试pytest的插件 Aug 02, 2021 N/A pytest (>=6.2.4,<7.0.0) + :pypi:`pytest-adf` Pytest plugin for writing Azure Data Factory integration tests May 10, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-adf-azure-identity` Pytest plugin for writing Azure Data Factory integration tests Mar 06, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-ads-testplan` Azure DevOps Test Case reporting for pytest tests Sep 15, 2022 N/A N/A + :pypi:`pytest-adversarial` Generate adversarial pytest tests using LLM Jan 22, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-affected` Nov 06, 2023 N/A N/A + :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A + :pypi:`pytest-agentcontract` Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts Feb 18, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 06, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 + :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) + :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A + :pypi:`pytest-ai1899` pytest plugin for connecting to ai1899 smart system stack Mar 13, 2024 5 - Production/Stable N/A + :pypi:`pytest-aio` Pytest plugin for testing async python code Feb 12, 2026 5 - Production/Stable pytest + :pypi:`pytest-aioboto3` Aioboto3 Pytest with Moto Jan 17, 2025 N/A N/A + :pypi:`pytest-aiofiles` pytest fixtures for writing aiofiles tests with pyfakefs May 14, 2017 5 - Production/Stable N/A + :pypi:`pytest-aiogram` May 06, 2023 N/A N/A + :pypi:`pytest-aiohttp` Pytest plugin for aiohttp support Jan 23, 2025 4 - Beta pytest>=6.1.0 + :pypi:`pytest-aiohttp-client` Pytest \`client\` fixture for the Aiohttp Jan 10, 2023 N/A pytest (>=7.2.0,<8.0.0) + :pypi:`pytest-aiohttp-mock` Send responses to aiohttp. Sep 13, 2025 3 - Alpha pytest>=8 + :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Feb 10, 2026 N/A pytest + :pypi:`pytest-aiomoto` pytest-aiomoto Jun 24, 2023 N/A pytest (>=7.0,<8.0) + :pypi:`pytest-aioresponses` py.test integration for aioresponses Jan 02, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 + :pypi:`pytest-airflow` pytest support for airflow. Apr 03, 2019 3 - Alpha pytest (>=4.4.0) + :pypi:`pytest-airflow-utils` Nov 15, 2021 N/A N/A + :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 20, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-alembic` A pytest plugin for verifying alembic migrations. May 27, 2025 N/A pytest>=7.0 + :pypi:`pytest-alerts` A pytest plugin for sending test results to Slack and Telegram Feb 21, 2025 4 - Beta pytest>=7.4.0 + :pypi:`pytest-allclose` Pytest fixture extending Numpy's allclose function Jul 30, 2019 5 - Production/Stable pytest + :pypi:`pytest-allure-adaptor` Plugin for py.test to generate allure xml reports Jan 10, 2018 N/A pytest (>=2.7.3) + :pypi:`pytest-allure-adaptor2` Plugin for py.test to generate allure xml reports Oct 14, 2020 N/A pytest (>=2.7.3) + :pypi:`pytest-allure-collection` pytest plugin to collect allure markers without running any tests Apr 13, 2023 N/A pytest + :pypi:`pytest-allure-dsl` pytest plugin to test case doc string dls instructions Oct 25, 2020 4 - Beta pytest + :pypi:`pytest-allure-host` Publish Allure static reports to private S3 behind CloudFront with history preservation Nov 03, 2025 3 - Alpha N/A + :pypi:`pytest-allure-id2history` Overwrite allure history id with testcase full name and testcase id if testcase has id, exclude parameters. May 14, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-allure-intersection` Oct 27, 2022 N/A pytest (<5) + :pypi:`pytest-allure-spec-coverage` The pytest plugin aimed to display test coverage of the specs(requirements) in Allure Oct 26, 2021 N/A pytest + :pypi:`pytest-allure-step` Enhanced logging integration with Allure reports for pytest Jul 13, 2025 3 - Alpha pytest>=6.0.0 + :pypi:`pytest-alphamoon` Static code checks used at Alphamoon Dec 30, 2021 5 - Production/Stable pytest (>=3.5.0) + :pypi:`pytest-amaranth-sim` Fixture to automate running Amaranth simulations Feb 18, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-ampel-core` A plugin to provide AmpelContext fixtures in pytest Dec 17, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-analyzer` this plugin allows to analyze tests in pytest project, collect test metadata and sync it with testomat.io TCM system Feb 21, 2024 N/A pytest <8.0.0,>=7.3.1 + :pypi:`pytest-android` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Feb 21, 2019 3 - Alpha pytest + :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) + :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 + :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Feb 24, 2026 5 - Production/Stable pytest>=6 + :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A + :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) + :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A + :pypi:`pytest-antilru` Bust functools.lru_cache when running pytest to avoid test pollution Jul 28, 2024 5 - Production/Stable pytest>=7; python_version >= "3.10" + :pypi:`pytest-anyio` The pytest anyio plugin is built into anyio. You don't need this package. Jun 29, 2021 N/A pytest + :pypi:`pytest-anything` Pytest fixtures to assert anything and something Jan 18, 2024 N/A pytest + :pypi:`pytest-aoc` Downloads puzzle inputs for Advent of Code and synthesizes PyTest fixtures Dec 02, 2023 5 - Production/Stable pytest ; extra == 'test' + :pypi:`pytest-aoreporter` pytest report Jun 27, 2022 N/A N/A + :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) + :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest + :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Mar 03, 2026 N/A pytest==7.2.2 + :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A + :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A + :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest + :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A + :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 27, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) + :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest + :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 + :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) + :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Mar 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" + :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 05, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Mar 05, 2026 3 - Alpha pytest + :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 + :pypi:`pytest-artifact` Pytest plugin for managing test artifacts Feb 09, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 + :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) + :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A + :pypi:`pytest-asptest` test Answer Set Programming programs Apr 28, 2018 4 - Beta N/A + :pypi:`pytest-assay` Evaluation framework for Pydantic AI agents Mar 04, 2026 4 - Beta N/A + :pypi:`pytest-assertcount` Plugin to count actual number of asserts in pytest Oct 23, 2022 N/A pytest (>=5.0.0) + :pypi:`pytest-assertions` Pytest Assertions Apr 27, 2022 N/A N/A + :pypi:`pytest-assert-type` Use typing.assert_type() to test runtime behavior Oct 26, 2025 3 - Alpha pytest>=6.2.0 + :pypi:`pytest-assertutil` pytest-assertutil May 10, 2019 N/A N/A + :pypi:`pytest-assert-utils` Useful assertion utilities for use with pytest Apr 14, 2022 3 - Alpha N/A + :pypi:`pytest-assist` pytest plugin library Oct 29, 2025 4 - Beta pytest + :pypi:`pytest-assume` A pytest plugin that allows multiple failures per test Jun 24, 2021 N/A pytest (>=2.7) + :pypi:`pytest-assurka` A pytest plugin for Assurka Studio Aug 04, 2022 N/A N/A + :pypi:`pytest-ast-back-to-python` A plugin for pytest devs to view how assertion rewriting recodes the AST Sep 29, 2019 4 - Beta N/A + :pypi:`pytest-asteroid` PyTest plugin for docker-based testing on database images Aug 15, 2022 N/A pytest (>=6.2.5,<8.0.0) + :pypi:`pytest-astropy` Meta-package containing dependencies for testing Sep 26, 2023 5 - Production/Stable pytest >=4.6 + :pypi:`pytest-astropy-header` pytest plugin to add diagnostic information to the header of the test output Sep 06, 2022 3 - Alpha pytest (>=4.6) + :pypi:`pytest-ast-transformer` May 04, 2019 3 - Alpha pytest + :pypi:`pytest_async` pytest-async - Run your coroutine in event loop without decorator Feb 26, 2020 N/A N/A + :pypi:`pytest-async-benchmark` pytest-async-benchmark: Modern pytest benchmarking for async code. 🚀 May 28, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A + :pypi:`pytest-asyncio` Pytest support for asyncio Nov 10, 2025 5 - Production/Stable pytest<10,>=8.2 + :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. May 17, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A + :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) + :pypi:`pytest-async-mongodb` pytest plugin for async MongoDB Oct 18, 2017 5 - Production/Stable pytest (>=2.5.2) + :pypi:`pytest-async-sqlalchemy` Database testing fixtures using the SQLAlchemy asyncio API Oct 07, 2021 4 - Beta pytest (>=6.0.0) + :pypi:`pytest-atf-allure` 基于allure-pytest进行自定义 Nov 29, 2023 N/A pytest (>=7.4.2,<8.0.0) + :pypi:`pytest-atomic` Skip rest of tests if previous test failed. Nov 24, 2018 4 - Beta N/A + :pypi:`pytest-atstack` A simple plugin to use with pytest Jan 02, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 04, 2026 N/A pytest>=7.0 + :pypi:`pytest-attrib` pytest plugin to select tests based on attributes similar to the nose-attrib plugin May 24, 2016 4 - Beta N/A + :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A + :pypi:`pytest-autocap` automatically capture test & fixture stdout/stderr to files May 15, 2022 N/A pytest (<7.2,>=7.1.2) + :pypi:`pytest-autochecklog` automatically check condition and log all the checks Apr 25, 2015 4 - Beta N/A + :pypi:`pytest-autofixture` simplify pytest fixtures Aug 01, 2024 N/A pytest>=8 + :pypi:`pytest-autofocus` Auto-focus plugin: run only @pytest.mark.focus tests when --auto-focus is set Dec 02, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-automation` pytest plugin for building a test suite, using YAML files to extend pytest parameterize functionality. Apr 24, 2024 N/A pytest>=7.0.0 + :pypi:`pytest-automock` Pytest plugin for automatical mocks creation May 16, 2023 N/A pytest ; extra == 'dev' + :pypi:`pytest-auto-parametrize` pytest plugin: avoid repeating arguments in parametrize Oct 02, 2016 3 - Alpha N/A + :pypi:`pytest-autoprofile` \`line_profiler.autoprofile\`-ing your \`pytest\` test suite Dec 30, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-autotest` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Aug 25, 2021 N/A pytest + :pypi:`pytest-aviator` Aviator's Flakybot pytest plugin that automatically reruns flaky tests. Nov 04, 2022 4 - Beta pytest + :pypi:`pytest-avoidance` Makes pytest skip tests that don not need rerunning May 23, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-awaiting-fix` A simple plugin to use with pytest for traceability across Jira and disabled automated tests Aug 09, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-aws` pytest plugin for testing AWS resource configurations Oct 04, 2017 4 - Beta N/A + :pypi:`pytest-aws-apigateway` pytest plugin for AWS ApiGateway May 24, 2024 4 - Beta pytest + :pypi:`pytest-aws-config` Protect your AWS credentials in unit tests May 28, 2021 N/A N/A + :pypi:`pytest-aws-fixtures` A series of fixtures to use in integration tests involving actual AWS services. Nov 11, 2025 N/A pytest<10.0.0,>=8.0.0 + :pypi:`pytest-aws-fixtures-293984` AWS configuration utilities for Python applications Dec 04, 2025 3 - Alpha N/A + :pypi:`pytest-axe` pytest plugin for axe-selenium-python Nov 12, 2018 N/A pytest (>=3.0.0) + :pypi:`pytest-axe-playwright-snapshot` A pytest plugin that runs Axe-core on Playwright pages and takes snapshots of the results. Jul 25, 2023 N/A pytest + :pypi:`pytest-azure` Pytest utilities and mocks for Azure Jan 18, 2023 3 - Alpha pytest + :pypi:`pytest-azure-devops` Simplifies using azure devops parallel strategy (https://docs.microsoft.com/en-us/azure/devops/pipelines/test/parallel-testing-any-test-runner) with pytest. Jul 16, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-azurepipelines` Formatting PyTest output for Azure Pipelines UI Oct 06, 2023 5 - Production/Stable pytest (>=5.0.0) + :pypi:`pytest-bandit` A bandit plugin for pytest Feb 23, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-bandit-xayon` A bandit plugin for pytest Oct 17, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-base-url` pytest plugin for URL based testing Jan 31, 2024 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-bashdoctest` A pytest plugin for testing bash command examples in markdown documentation Oct 03, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-batch-regression` A pytest plugin to repeat the entire test suite in batches. May 08, 2024 N/A pytest>=6.0.0 + :pypi:`pytest-bazel` A pytest runner with bazel support Oct 31, 2025 4 - Beta pytest + :pypi:`pytest-bdd` BDD for pytest Dec 05, 2024 6 - Mature pytest>=7.0.0 + :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) + :pypi:`pytest-bdd-md-report` Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support Feb 07, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 + :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Dec 29, 2025 N/A pytest>=7.1.3 + :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 + :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) + :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A + :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest + :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 06, 2026 3 - Alpha pytest + :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A + :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A + :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A + :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 09, 2025 5 - Production/Stable pytest>=8.1 + :pypi:`pytest-better-datadir` A small example package Mar 13, 2023 N/A N/A + :pypi:`pytest-better-parametrize` Better description of parametrized test cases Mar 05, 2024 4 - Beta pytest >=6.2.0 + :pypi:`pytest-bg-process` Pytest plugin to initialize background process Jan 24, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-bigchaindb` A BigchainDB plugin for pytest. Jan 24, 2022 4 - Beta N/A + :pypi:`pytest-bigquery-mock` Provides a mock fixture for python bigquery client Dec 28, 2022 N/A pytest (>=5.0) + :pypi:`pytest-bisect-tests` Find tests leaking state and affecting other Jun 09, 2024 N/A N/A + :pypi:`pytest-black` A pytest plugin to enable format checking with black Dec 15, 2024 4 - Beta pytest>=7.0.0 + :pypi:`pytest-black-multipy` Allow '--black' on older Pythons Jan 14, 2021 5 - Production/Stable pytest (!=3.7.3,>=3.5) ; extra == 'testing' + :pypi:`pytest-black-ng` A pytest plugin to enable format checking with black Oct 20, 2022 4 - Beta pytest (>=7.0.0) + :pypi:`pytest-blame` A pytest plugin helps developers to debug by providing useful commits history. May 04, 2019 N/A pytest (>=4.4.0) + :pypi:`pytest-blender` Blender Pytest plugin. Jun 25, 2025 N/A pytest + :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A + :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest + :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A + :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 16, 2025 N/A pytest + :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A + :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A + :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest + :pypi:`pytest-boilerplate` The pytest plugin for your Django Boilerplate. Sep 12, 2024 5 - Production/Stable pytest>=4.0.0 + :pypi:`pytest-bonsai` Apr 08, 2025 N/A pytest>=6 + :pypi:`pytest-boost-xml` Plugin for pytest to generate boost xml reports Nov 30, 2022 4 - Beta N/A + :pypi:`pytest-bootstrap` Mar 04, 2022 N/A N/A + :pypi:`pytest-boto-mock` Thin-wrapper around the mock package for easier use with pytest Jan 20, 2026 5 - Production/Stable pytest>=8.2.0 + :pypi:`pytest-bpdb` A py.test plug-in to enable drop to bpdb debugger on test failure. Jan 19, 2015 2 - Pre-Alpha N/A + :pypi:`pytest-bq` BigQuery fixtures and fixture factories for Pytest. May 08, 2024 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-bravado` Pytest-bravado automatically generates from OpenAPI specification client fixtures. Feb 15, 2022 N/A N/A + :pypi:`pytest-breakword` Use breakword with pytest Aug 04, 2021 N/A pytest (>=6.2.4,<7.0.0) + :pypi:`pytest-breed-adapter` A simple plugin to connect with breed-server Nov 07, 2018 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-briefcase` A pytest plugin for running tests on a Briefcase project. Jun 14, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-brightest` Bright ideas for improving your pytest experience Jul 15, 2025 3 - Alpha pytest>=8.4.1 + :pypi:`pytest-broadcaster` Pytest plugin to broadcast pytest output to various destinations Mar 02, 2025 3 - Alpha pytest + :pypi:`pytest-browser` A pytest plugin for console based browser test selection just after the collection phase Dec 10, 2016 3 - Alpha N/A + :pypi:`pytest-browsermob-proxy` BrowserMob proxy plugin for py.test. Jun 11, 2013 4 - Beta N/A + :pypi:`pytest_browserstack` Py.test plugin for BrowserStack Jan 27, 2016 4 - Beta N/A + :pypi:`pytest-browserstack-local` \`\`py.test\`\` plugin to run \`\`BrowserStackLocal\`\` in background. Feb 09, 2018 N/A N/A + :pypi:`pytest-budosystems` Budo Systems is a martial arts school management system. This module is the Budo Systems Pytest Plugin. May 07, 2023 3 - Alpha pytest + :pypi:`pytest-bug` Pytest plugin for marking tests as a bug Dec 30, 2025 5 - Production/Stable pytest>=9.0.0 + :pypi:`pytest-bugtong-tag` pytest-bugtong-tag is a plugin for pytest Jan 16, 2022 N/A N/A + :pypi:`pytest-bugzilla` py.test bugzilla integration plugin May 05, 2010 4 - Beta N/A + :pypi:`pytest-bugzilla-notifier` A plugin that allows you to execute create, update, and read information from BugZilla bugs Jun 15, 2018 4 - Beta pytest (>=2.9.2) + :pypi:`pytest-buildkite` Plugin for pytest that automatically publishes coverage and pytest report annotations to Buildkite. Jul 13, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-builtin-types` Nov 17, 2021 N/A pytest + :pypi:`pytest-bwrap` Run your tests in Bubblewrap sandboxes Feb 25, 2024 3 - Alpha N/A + :pypi:`pytest-cache` pytest plugin with mechanisms for caching across test runs Jun 04, 2013 3 - Alpha N/A + :pypi:`pytest-cache-assert` Cache assertion data to simplify regression testing of complex serializable data Aug 14, 2023 5 - Production/Stable pytest (>=6.0.0) + :pypi:`pytest-cagoule` Pytest plugin to only run tests affected by changes Jan 01, 2020 3 - Alpha N/A + :pypi:`pytest-cairo` Pytest support for cairo-lang and starknet Apr 17, 2022 N/A pytest + :pypi:`pytest-call-checker` Small pytest utility to easily create test doubles Oct 16, 2022 4 - Beta pytest (>=7.1.3,<8.0.0) + :pypi:`pytest-camel-collect` Enable CamelCase-aware pytest class collection Aug 02, 2020 N/A pytest (>=2.9) + :pypi:`pytest-canonical-data` A plugin which allows to compare results with canonical results, based on previous runs May 08, 2020 2 - Pre-Alpha pytest (>=3.5.0) + :pypi:`pytest-canvas` A minimal pytest plugin that streamlines testing for projects using the Canvas SDK. Jul 22, 2025 N/A pytest<9,>=8.4 + :pypi:`pytest-caprng` A plugin that replays pRNG state on failure. May 02, 2018 4 - Beta N/A + :pypi:`pytest-capsqlalchemy` Pytest plugin to allow capturing SQLAlchemy queries. Mar 19, 2025 4 - Beta N/A + :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A + :pypi:`pytest-capture-warnings` pytest plugin to capture all warnings and put them in one file of your choice May 03, 2022 N/A pytest + :pypi:`pytest-case` A clean, modern, wrapper for pytest.mark.parametrize Nov 25, 2024 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-case-provider` Advanced pytest parametrization plugin that generates test case instances from sync or async factories. Dec 15, 2025 3 - Alpha pytest>=8 + :pypi:`pytest-cases` Separate test code from test cases in pytest. Mar 02, 2026 5 - Production/Stable pytest + :pypi:`pytest-case-start-from` A pytest plugin to start test execution from a specific test case Oct 28, 2025 4 - Beta pytest>=6.0.0 + :pypi:`pytest-casewise-package-install` A pytest plugin for test case-level dynamic dependency management Oct 31, 2025 3 - Alpha pytest>=6.0.0 + :pypi:`pytest-cassandra` Cassandra CCM Test Fixtures for pytest Nov 04, 2017 1 - Planning N/A + :pypi:`pytest-catchlog` py.test plugin to catch log messages. This is a fork of pytest-capturelog. Jan 24, 2016 4 - Beta pytest (>=2.6) + :pypi:`pytest-catch-server` Pytest plugin with server for catching HTTP requests. Dec 12, 2019 5 - Production/Stable N/A + :pypi:`pytest-cdist` A pytest plugin to split your test suite into multiple parts Jan 08, 2026 N/A pytest>=8 + :pypi:`pytest-celery` Pytest plugin for Celery Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-celery-py37` Pytest plugin for Celery (compatible with python 3.7) May 23, 2025 5 - Production/Stable N/A + :pypi:`pytest-celery-utils` Pytest plugin for inspecting Celery task queues in Redis during tests Jan 28, 2026 N/A pytest>=9.0.1 + :pypi:`pytest-cfg-fetcher` Pass config options to your unit tests. Feb 26, 2024 N/A N/A + :pypi:`pytest-chainmaker` pytest plugin for chainmaker Oct 15, 2021 N/A N/A + :pypi:`pytest-chalice` A set of py.test fixtures for AWS Chalice Jul 01, 2020 4 - Beta N/A + :pypi:`pytest-change-assert` 修改报错中文为英文 Oct 19, 2022 N/A N/A + :pypi:`pytest-change-demo` turn . into √,turn F into x Mar 02, 2022 N/A pytest + :pypi:`pytest-change-report` turn . into √,turn F into x Sep 14, 2020 N/A pytest + :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest + :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) + :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Mar 05, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-checkdocs` check the README when running tests Dec 26, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" + :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 27, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 + :pypi:`pytest-check-library` check your missing library Jul 17, 2022 N/A N/A + :pypi:`pytest-check-libs` check your missing library Jul 17, 2022 N/A N/A + :pypi:`pytest-check-links` Check links in files Jul 29, 2020 N/A pytest<9,>=7.0 + :pypi:`pytest-checklist` Pytest plugin to track and report unit/function coverage. May 23, 2025 N/A N/A + :pypi:`pytest-check-mk` pytest plugin to test Check_MK checks Nov 19, 2015 4 - Beta pytest + :pypi:`pytest-checkpoint` Restore a checkpoint in pytest Oct 04, 2025 N/A pytest>=8.0.0 + :pypi:`pytest-ch-framework` My pytest framework Apr 17, 2024 N/A pytest==8.0.1 + :pypi:`pytest-chic-report` Simple pytest plugin for generating and sending report to messengers. Nov 01, 2024 N/A pytest>=6.0 + :pypi:`pytest-chinesereport` Apr 16, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-choose` Provide the pytest with the ability to collect use cases based on rules in text files Feb 04, 2024 N/A pytest >=7.0.0 + :pypi:`pytest-chronicle` Reusable pytest results ingestion tooling with database export and CLI helpers. Dec 15, 2025 N/A pytest>=8.0; extra == "dev" + :pypi:`pytest-chunks` Run only a chunk of your test suite Jul 05, 2022 N/A pytest (>=6.0.0) + :pypi:`pytest_cid` Compare data structures containing matching CIDs of different versions and encoding Sep 01, 2023 4 - Beta pytest >= 5.0, < 7.0 + :pypi:`pytest-circleci` py.test plugin for CircleCI May 03, 2019 N/A N/A + :pypi:`pytest-circleci-parallelized` Parallelize pytest across CircleCI workers. Oct 20, 2022 N/A N/A + :pypi:`pytest-circleci-parallelized-rjp` Parallelize pytest across CircleCI workers. Jun 21, 2022 N/A pytest + :pypi:`pytest-ckan` Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 Apr 28, 2020 4 - Beta pytest + :pypi:`pytest-clab` A pytest plugin for managing containerlab topologies in tests. Mar 02, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-clarity` A plugin providing an alternative, colourful diff output for failing assertions. Jun 11, 2021 N/A N/A + :pypi:`pytest-class-fixtures` Class as PyTest fixtures (and BDD steps) Nov 15, 2024 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-claude-agent-sdk` Use Claude Code in your pytests, or pytest your own Claude Code agents — or both Jan 19, 2026 3 - Alpha pytest>=6.0 + :pypi:`pytest-cldf` Easy quality control for CLDF datasets using pytest Nov 07, 2022 N/A pytest (>=3.6) + :pypi:`pytest-clean-database` A pytest plugin that cleans your database up after every test. Mar 14, 2025 3 - Alpha pytest<9,>=7.0 + :pypi:`pytest-cleanslate` Collects and executes pytest tests separately Apr 10, 2025 N/A pytest + :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A + :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A + :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Feb 04, 2026 N/A pytest<10.0.0,>=8.0.0 + :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Mar 01, 2026 N/A N/A + :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A + :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) + :pypi:`pytest-clld` Oct 23, 2024 N/A pytest>=3.9 + :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A + :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) + :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) + :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 + :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) + :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A + :pypi:`pytest-cobra` PyTest plugin for testing Smart Contracts for Ethereum blockchain. Jun 29, 2019 3 - Alpha pytest (<4.0.0,>=3.7.1) + :pypi:`pytest-cocotb` Pytest plugin that enables using pytest as the regression manager for running cocotb tests. Nov 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest + :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Mar 07, 2026 4 - Beta pytest + :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 + :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest + :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A + :pypi:`pytest-codecov` Pytest plugin for uploading pytest-cov results to codecov.io Mar 25, 2025 4 - Beta pytest>=4.6.0 + :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A + :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) + :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A + :pypi:`pytest-codingagents` Pytest plugin for testing real coding agents via their SDK Feb 20, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Feb 09, 2026 5 - Production/Stable pytest>=3.8 + :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest + :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A + :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A + :pypi:`pytest-collect-interface-info-plugin` Get executed interface information in pytest interface automation framework Sep 25, 2023 4 - Beta N/A + :pypi:`pytest-collect-markers` A pytest plugin to collect and output test markers to JSON Jan 24, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-collector` Python package for collecting pytest. Aug 02, 2022 N/A pytest (>=7.0,<8.0) + :pypi:`pytest-collect-pytest-interinfo` A simple plugin to use with pytest Sep 26, 2023 4 - Beta N/A + :pypi:`pytest-collect-requirements` A pytest plugin to collect test requirements from requirements marker. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-colordots` Colorizes the progress indicators Oct 06, 2017 5 - Production/Stable N/A + :pypi:`pytest-comfyui` Integration testing framework for ComfyUI nodes and workflows. Jan 09, 2026 N/A N/A + :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) + :pypi:`pytest-common-subject` pytest framework for testing different aspects of a common method Oct 22, 2025 N/A pytest<9,>=3.6 + :pypi:`pytest-compare` pytest plugin for comparing call arguments. Jun 22, 2023 5 - Production/Stable N/A + :pypi:`pytest-concurrent` Concurrently execute test cases with multithread, multiprocess and gevent Jan 12, 2019 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-conductor` Pytest plugin for coordinating the order in which marked tests run. Jul 30, 2025 N/A pytest<8.4; python_version == "3.8" + :pypi:`pytest-config` Base configurations and utilities for developing your Python project test suite with pytest. Nov 07, 2014 5 - Production/Stable N/A + :pypi:`pytest-confluence-report` Package stands for pytest plugin to upload results into Confluence page. Apr 17, 2022 N/A N/A + :pypi:`pytest-console-scripts` Pytest plugin for testing console scripts May 31, 2023 4 - Beta pytest (>=4.0.0) + :pypi:`pytest-consul` pytest plugin with fixtures for testing consul aware apps Nov 24, 2018 3 - Alpha pytest + :pypi:`pytest-container` Pytest fixtures for writing container based tests Jun 30, 2025 4 - Beta pytest>=3.10 + :pypi:`pytest-contextfixture` Define pytest fixtures as context managers. Mar 12, 2013 4 - Beta N/A + :pypi:`pytest-contexts` A plugin to run tests written with the Contexts framework using pytest May 19, 2021 4 - Beta N/A + :pypi:`pytest-continuous` A pytest plugin to run tests continuously until failure or interruption. Apr 23, 2024 N/A N/A + :pypi:`pytest-cookies` The pytest plugin for your Cookiecutter templates. 🍪 Mar 22, 2023 5 - Production/Stable pytest (>=3.9.0) + :pypi:`pytest-copie` The pytest plugin for your copier templates 📒 Sep 29, 2025 3 - Alpha pytest + :pypi:`pytest-copier` A pytest plugin to help testing Copier templates Dec 11, 2023 4 - Beta pytest>=7.3.2 + :pypi:`pytest-couchdbkit` py.test extension for per-test couchdb databases using couchdbkit Apr 17, 2012 N/A N/A + :pypi:`pytest-count` count erros and send email Jan 12, 2018 4 - Beta N/A + :pypi:`pytest-cov` Pytest plugin for measuring coverage. Sep 09, 2025 5 - Production/Stable pytest>=7 + :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A + :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A + :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A + :pypi:`pytest-coverage-impact` Sensoria: High-fidelity coverage impact analysis for Python. Jan 16, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-coveragemarkers` Using pytest markers to track functional coverage and filtering of tests May 15, 2025 N/A pytest<8.0.0,>=7.1.2 + :pypi:`pytest-cov-exclude` Pytest plugin for excluding tests based on coverage data Apr 29, 2016 4 - Beta pytest (>=2.8.0,<2.9.0); extra == 'dev' + :pypi:`pytest_covid` Too many faillure, less tests. Jun 24, 2020 N/A N/A + :pypi:`pytest-cpp` Use pytest's runner to discover and execute C++ tests Sep 18, 2024 5 - Production/Stable pytest + :pypi:`pytest-cqase` Custom qase pytest plugin Aug 22, 2022 N/A pytest (>=7.1.2,<8.0.0) + :pypi:`pytest-cram` Run cram tests with pytest. Aug 08, 2020 N/A N/A + :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Dec 02, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-crate` Manages CrateDB instances during your integration tests May 28, 2019 3 - Alpha pytest (>=4.0) + :pypi:`pytest-cratedb` Manage CrateDB instances for integration tests Jan 05, 2026 4 - Beta pytest<10 + :pypi:`pytest-cratedb-reporter` A pytest plugin for reporting test results to CrateDB Mar 11, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-crayons` A pytest plugin for colorful print statements Oct 14, 2025 5 - Production/Stable pytest + :pypi:`pytest-cream` The cream of test execution - smooth pytest workflows with intelligent orchestration Oct 26, 2025 N/A pytest + :pypi:`pytest-create` pytest-create Feb 15, 2023 1 - Planning N/A + :pypi:`pytest-cricri` A Cricri plugin for pytest. Jan 27, 2018 N/A pytest + :pypi:`pytest-crontab` add crontab task in crontab Dec 09, 2019 N/A N/A + :pypi:`pytest-csv` CSV output for pytest. Apr 22, 2021 N/A pytest (>=6.0) + :pypi:`pytest-csv-params` Pytest plugin for Test Case Parametrization with CSV files May 29, 2025 5 - Production/Stable pytest<9,>=8.3 + :pypi:`pytest-culprit` Find the last Git commit where a pytest test started failing May 15, 2025 N/A N/A + :pypi:`pytest-curio` Pytest support for curio. Oct 06, 2024 N/A pytest + :pypi:`pytest-curl-report` pytest plugin to generate curl command line report Dec 11, 2016 4 - Beta N/A + :pypi:`pytest-custom-concurrency` Custom grouping concurrence for pytest Feb 08, 2021 N/A N/A + :pypi:`pytest-custom-exit-code` Exit pytest test session with custom exit code in different scenarios Aug 07, 2019 4 - Beta pytest (>=4.0.2) + :pypi:`pytest-custom-nodeid` Custom grouping for pytest-xdist, rename test cases name and test cases nodeid, support allure report Mar 07, 2021 N/A N/A + :pypi:`pytest-custom-outputs` A plugin that allows users to create and use custom outputs instead of the standard Pass and Fail. Also allows users to retrieve test results in fixtures. Jul 10, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-custom-report` Configure the symbols displayed for test outcomes Jan 30, 2019 N/A pytest + :pypi:`pytest-custom-scheduling` Custom grouping for pytest-xdist, rename test cases name and test cases nodeid, support allure report Mar 01, 2021 N/A N/A + :pypi:`pytest-custom-timeout` Use custom logic when a test times out. Based on pytest-timeout. Jan 08, 2025 4 - Beta pytest>=8.0.0 + :pypi:`pytest-cython` A plugin for testing Cython extension modules Feb 07, 2026 5 - Production/Stable pytest>=8 + :pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest + :pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1 + :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A + :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 + :pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A + :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Jan 20, 2026 4 - Beta pytest + :pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest + :pypi:`pytest-datadir` pytest plugin for test data directories and files Jul 30, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1) + :pypi:`pytest-datadir-ng` Fixtures for pytest allowing test functions/methods to easily retrieve test resources from the local filesystem. Dec 25, 2019 5 - Production/Stable pytest + :pypi:`pytest-datadir-nng` Fixtures for pytest allowing test functions/methods to easily retrieve test resources from the local filesystem. Nov 09, 2022 5 - Production/Stable pytest (>=7.0.0,<8.0.0) + :pypi:`pytest-data-extractor` A pytest plugin to extract relevant metadata about tests into an external file (currently only json support) Jul 19, 2022 N/A pytest (>=7.0.1) + :pypi:`pytest-data-file` Fixture "data" and "case_data" for test from yaml file Dec 04, 2019 N/A N/A + :pypi:`pytest-datafiles` py.test plugin to create a 'tmp_path' containing predefined files/directories. Jan 04, 2026 5 - Production/Stable pytest>=6.2.0 + :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A + :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest + :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 + :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Feb 21, 2026 4 - Beta pytest<10,>=7.0.0 + :pypi:`pytest-dataplugin` A pytest plugin for managing an archive of test data. Sep 16, 2017 1 - Planning N/A + :pypi:`pytest-datarecorder` A py.test plugin recording and comparing test output. Jul 31, 2024 5 - Production/Stable pytest + :pypi:`pytest-dataset` Plugin for loading different datasets for pytest by prefix from json or yaml files Sep 01, 2023 5 - Production/Stable N/A + :pypi:`pytest-data-suites` Class-based pytest parametrization Apr 06, 2024 N/A pytest<9.0,>=6.0 + :pypi:`pytest-datatest` A pytest plugin for test driven data-wrangling (this is the development version of datatest's pytest integration). Oct 15, 2020 4 - Beta pytest (>=3.3) + :pypi:`pytest-db` Session scope fixture "db" for mysql query or change Nov 11, 2025 N/A pytest + :pypi:`pytest-dbfixtures` Databases fixtures plugin for py.test. Dec 07, 2016 4 - Beta N/A + :pypi:`pytest-db-plugin` Nov 27, 2021 N/A pytest (>=5.0) + :pypi:`pytest-dbt` Unit test dbt models with standard python tooling Jun 08, 2023 2 - Pre-Alpha pytest (>=7.0.0,<8.0.0) + :pypi:`pytest-dbt-adapter` A pytest plugin for testing dbt adapter plugins Nov 24, 2021 N/A pytest (<7,>=6) + :pypi:`pytest-dbt-conventions` A pytest plugin for linting a dbt project's conventions Mar 02, 2022 N/A pytest (>=6.2.5,<7.0.0) + :pypi:`pytest-dbt-core` Pytest extension for dbt. Jun 04, 2024 N/A pytest>=6.2.5; extra == "test" + :pypi:`pytest-dbt-duckdb` Fearless testing for dbt models, powered by DuckDB. Mar 06, 2026 4 - Beta pytest>=8.3.4 + :pypi:`pytest-dbt-postgres` Pytest tooling to unittest DBT & Postgres models Sep 03, 2024 N/A pytest<9.0.0,>=8.3.2 + :pypi:`pytest-dbus-notification` D-BUS notifications for pytest results. Mar 05, 2014 5 - Production/Stable N/A + :pypi:`pytest-dbx` Pytest plugin to run unit tests for dbx (Databricks CLI extensions) related code Nov 29, 2022 N/A pytest (>=7.1.3,<8.0.0) + :pypi:`pytest-dc` Manages Docker containers during your integration tests Aug 16, 2023 5 - Production/Stable pytest >=3.3 + :pypi:`pytest-deadfixtures` A simple plugin to list unused fixtures in pytest Jan 15, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-deduplicate` Identifies duplicate unit tests Aug 12, 2023 4 - Beta pytest + :pypi:`pytest-deepassert` A pytest plugin for enhanced assertion reporting with detailed diffs Nov 04, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-deepcov` deepcov Mar 30, 2021 N/A N/A + :pypi:`pytest_defer` A 'defer' fixture for pytest Nov 13, 2024 N/A pytest>=8.3 + :pypi:`pytest-delta` Run only tests impacted by your code changes (delta-based selection) for pytest. Feb 12, 2026 4 - Beta pytest<10.0.0,>=9.0.2 + :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A + :pypi:`pytest-dependency` Manage dependencies of tests Feb 15, 2026 4 - Beta N/A + :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) + :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A + :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-describe` Describe-style plugin for pytest Dec 12, 2025 5 - Production/Stable pytest<10,>=6 + :pypi:`pytest-describe-beautifully` Beautiful terminal and HTML output for pytest-describe. Jan 28, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest + :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-devtools` Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. Feb 10, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Nov 23, 2025 N/A pytest + :pypi:`pytest-dhos` Common fixtures for pytest in DHOS services and libraries Sep 07, 2022 N/A N/A + :pypi:`pytest-diamond` pytest plugin for diamond Aug 31, 2015 4 - Beta N/A + :pypi:`pytest-dicom` pytest plugin to provide DICOM fixtures Dec 19, 2018 3 - Alpha pytest + :pypi:`pytest-dictsdiff` Jul 26, 2019 N/A N/A + :pypi:`pytest-diff` A simple plugin to use with pytest Mar 30, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-diff-selector` Get tests affected by code changes (using git) Feb 24, 2022 4 - Beta pytest (>=6.2.2) ; extra == 'all' + :pypi:`pytest-difftest` Blazingly fast test selection for pytest - only run tests affected by your changes (Rust-powered) Feb 23, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-difido` PyTest plugin for generating Difido reports Oct 23, 2022 4 - Beta pytest (>=4.0.0) + :pypi:`pytest-directives` Control your tests flow Aug 11, 2025 3 - Alpha pytest + :pypi:`pytest-dir-equal` pytest-dir-equals is a pytest plugin providing helpers to assert directories equality allowing golden testing Dec 11, 2023 4 - Beta pytest>=7.3.2 + :pypi:`pytest-dirty` Static import analysis for thrifty testing. Jun 08, 2025 3 - Alpha pytest>=8.2; extra == "dev" + :pypi:`pytest-disable` pytest plugin to disable a test and skip it from testrun Sep 10, 2015 4 - Beta N/A + :pypi:`pytest-disable-plugin` Disable plugins per test Feb 28, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-discord` A pytest plugin to notify test results to a Discord channel. May 11, 2024 4 - Beta pytest!=6.0.0,<9,>=3.3.2 + :pypi:`pytest-discover` Pytest plugin to record discovered tests in a file Mar 26, 2024 N/A pytest + :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats. Jun 09, 2024 4 - Beta pytest>=3.5.0 + :pypi:`pytest-ditto-pandas` pytest-ditto plugin for pandas snapshots. May 29, 2024 4 - Beta pytest>=3.5.0 + :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow tables. Jun 09, 2024 4 - Beta pytest>=3.5.0 + :pypi:`pytest-django` A Django plugin for pytest. Feb 14, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) + :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest + :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A + :pypi:`pytest-django-casperjs` Integrate CasperJS with your django tests as a pytest fixture. Mar 15, 2015 2 - Pre-Alpha N/A + :pypi:`pytest-django-class` A pytest plugin for running django in class-scoped fixtures Aug 08, 2023 4 - Beta N/A + :pypi:`pytest-django-docker-pg` Jun 13, 2024 5 - Production/Stable pytest<9.0.0,>=7.0.0 + :pypi:`pytest-django-dotenv` Pytest plugin used to setup environment variables with django-dotenv Nov 26, 2019 4 - Beta pytest (>=2.6.0) + :pypi:`pytest-django-factories` Factories for your Django models that can be used as Pytest fixtures. Nov 12, 2020 4 - Beta N/A + :pypi:`pytest-django-filefield` Replaces FileField.storage with something you can patch globally. May 09, 2022 5 - Production/Stable pytest >= 5.2 + :pypi:`pytest-django-gcir` A Django plugin for pytest. Mar 06, 2018 5 - Production/Stable N/A + :pypi:`pytest-django-haystack` Cleanup your Haystack indexes between tests Sep 03, 2017 5 - Production/Stable pytest (>=2.3.4) + :pypi:`pytest-django-ifactory` A model instance factory for pytest-django Apr 30, 2025 5 - Production/Stable N/A + :pypi:`pytest-django-lite` The bare minimum to integrate py.test with Django. Jan 30, 2014 N/A N/A + :pypi:`pytest-django-liveserver-ssl` Jan 09, 2025 3 - Alpha N/A + :pypi:`pytest-django-model` A Simple Way to Test your Django Models Feb 14, 2019 4 - Beta N/A + :pypi:`pytest-django-ordering` A pytest plugin for preserving the order in which Django runs tests. Jul 25, 2019 5 - Production/Stable pytest (>=2.3.0) + :pypi:`pytest-django-queries` Generate performance reports from your django database performance tests. Mar 01, 2026 5 - Production/Stable pytest>=7.2.0 + :pypi:`pytest-djangorestframework` A djangorestframework plugin for pytest Aug 11, 2019 4 - Beta N/A + :pypi:`pytest-django-rq` A pytest plugin to help writing unit test for django-rq Apr 13, 2020 4 - Beta N/A + :pypi:`pytest-django-sqlcounts` py.test plugin for reporting the number of SQLs executed per django testcase. Jun 16, 2015 4 - Beta N/A + :pypi:`pytest-django-testing-postgresql` Use a temporary PostgreSQL database with pytest-django Jan 31, 2022 4 - Beta N/A + :pypi:`pytest-doc` A documentation plugin for py.test. Jun 28, 2015 5 - Production/Stable N/A + :pypi:`pytest-docfiles` pytest plugin to test codeblocks in your documentation. Dec 22, 2021 4 - Beta pytest (>=3.7.0) + :pypi:`pytest-docgen` An RST Documentation Generator for pytest-based test suites Apr 17, 2020 N/A N/A + :pypi:`pytest-docker` Simple pytest fixtures for Docker and Docker Compose based tests Nov 12, 2025 N/A pytest<10.0,>=4.0 + :pypi:`pytest-docker-apache-fixtures` Pytest fixtures for testing with apache2 (httpd). Aug 12, 2024 4 - Beta pytest + :pypi:`pytest-docker-butla` Jun 16, 2019 3 - Alpha N/A + :pypi:`pytest-dockerc` Run, manage and stop Docker Compose project from Docker API Oct 09, 2020 5 - Production/Stable pytest (>=3.0) + :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) + :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 17, 2025 4 - Beta pytest<10,>=7.2.2 + :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) + :pypi:`pytest-docker-fixtures` pytest docker fixtures Dec 01, 2025 3 - Alpha pytest + :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest + :pypi:`pytest-docker-haproxy-fixtures` Pytest fixtures for testing with haproxy. Aug 12, 2024 4 - Beta pytest + :pypi:`pytest-docker-pexpect` pytest plugin for writing functional tests with pexpect and docker Jan 14, 2019 N/A pytest + :pypi:`pytest-docker-postgresql` A simple plugin to use with pytest Sep 24, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-docker-py` Easy to use, simple to extend, pytest plugin that minimally leverages docker-py. Nov 27, 2018 N/A pytest (==4.0.0) + :pypi:`pytest-docker-registry-fixtures` Pytest fixtures for testing with docker registries. Aug 12, 2024 4 - Beta pytest + :pypi:`pytest-docker-service` pytest plugin to start docker container Jan 03, 2024 3 - Alpha pytest (>=7.1.3) + :pypi:`pytest-docker-squid-fixtures` Pytest fixtures for testing with squid. Aug 12, 2024 4 - Beta pytest + :pypi:`pytest-docker-tools` Docker integration tests for pytest Mar 16, 2025 4 - Beta pytest>=6.0.1 + :pypi:`pytest-docs` Documentation tool for pytest Nov 11, 2018 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-docstyle` pytest plugin to run pydocstyle Mar 23, 2020 3 - Alpha N/A + :pypi:`pytest-doctest-custom` A py.test plugin for customizing string representations of doctest results. Jul 25, 2016 4 - Beta N/A + :pypi:`pytest-doctest-ellipsis-markers` Setup additional values for ELLIPSIS_MARKER for doctests Jan 12, 2018 4 - Beta N/A + :pypi:`pytest-doctest-import` A simple pytest plugin to import names and add them to the doctest namespace. Nov 13, 2018 4 - Beta pytest (>=3.3.0) + :pypi:`pytest-doctest-mkdocstrings` Run pytest --doctest-modules with markdown docstrings in code blocks (\`\`\`) Mar 02, 2024 N/A pytest + :pypi:`pytest-doctest-only` A plugin to run only doctest Jul 30, 2025 4 - Beta pytest>=8.3.0 + :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Jan 26, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-documentary` A simple pytest plugin to generate test documentation Jul 11, 2024 N/A pytest + :pypi:`pytest-dogu-report` pytest plugin for dogu report Jul 07, 2023 N/A N/A + :pypi:`pytest-dogu-sdk` pytest plugin for the Dogu Dec 14, 2023 N/A N/A + :pypi:`pytest-dolphin` Some extra stuff that we use ininternally Nov 30, 2016 4 - Beta pytest (==3.0.4) + :pypi:`pytest-donde` record pytest session characteristics per test item (coverage and duration) into a persistent file and use them in your own plugin or script. Oct 01, 2023 4 - Beta pytest >=7.3.1 + :pypi:`pytest-doorstop` A pytest plugin for adding test results into doorstop items. Jun 09, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-dotenv` A py.test plugin that parses environment files before running tests Jun 16, 2020 4 - Beta pytest (>=5.0.0) + :pypi:`pytest-dotenv-modern` A modern pytest plugin that loads environment variables from dotenv files Sep 27, 2025 4 - Beta pytest>=6.0.0 + :pypi:`pytest-dot-only-pkcopley` A Pytest marker for only running a single test Oct 27, 2023 N/A N/A + :pypi:`pytest-dparam` A more readable alternative to @pytest.mark.parametrize. Aug 27, 2024 6 - Mature pytest + :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A + :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest + :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) + :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A + :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 + :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A + :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Mar 02, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" + :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest + :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A + :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A + :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 + :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A + :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest + :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A + :pypi:`pytest-easyMPI` Package that supports mpi tests in pytest Oct 21, 2020 N/A N/A + :pypi:`pytest-easyread` pytest plugin that makes terminal printouts of the reports easier to read Nov 17, 2017 N/A N/A + :pypi:`pytest-easy-server` Pytest plugin for easy testing against servers May 01, 2021 4 - Beta pytest (<5.0.0,>=4.3.1) ; python_version < "3.5" + :pypi:`pytest-ebics-sandbox` A pytest plugin for testing against an EBICS sandbox server. Requires docker. Aug 15, 2022 N/A N/A + :pypi:`pytest-ec2` Pytest execution on EC2 instance Oct 22, 2019 3 - Alpha N/A + :pypi:`pytest-echo` pytest plugin that allows to dump environment variables, package version and generic attributes Apr 27, 2025 5 - Production/Stable pytest>=8.3.3 + :pypi:`pytest-edit` Edit the source code of a failed test with \`pytest --edit\`. Nov 17, 2024 N/A pytest + :pypi:`pytest-ekstazi` Pytest plugin to select test using Ekstazi algorithm Sep 10, 2022 N/A pytest + :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 + :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) + :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) + :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 + :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest + :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Mar 02, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) + :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) + :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) + :pypi:`pytest-enabler` Enable installed pytest plugins May 16, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" + :pypi:`pytest-encode` set your encoding and logger Nov 06, 2021 N/A N/A + :pypi:`pytest-encode-kane` set your encoding and logger Nov 16, 2021 N/A pytest + :pypi:`pytest-encoding` set your encoding and logger Aug 11, 2023 N/A pytest + :pypi:`pytest_energy_reporter` An energy estimation reporter for pytest Mar 28, 2024 3 - Alpha pytest<9.0.0,>=8.1.1 + :pypi:`pytest-enhanced-reports` Enhanced test reports for pytest Dec 15, 2022 N/A N/A + :pypi:`pytest-enhancements` Improvements for pytest (rejected upstream) Oct 30, 2019 4 - Beta N/A + :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Feb 17, 2026 5 - Production/Stable pytest>=9.0.2 + :pypi:`pytest-envfiles` A py.test plugin that parses environment files before running tests Oct 08, 2015 3 - Alpha N/A + :pypi:`pytest-env-info` Push information about the running pytest into envvars Nov 25, 2017 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-environment` Pytest Environment Mar 17, 2024 1 - Planning N/A + :pypi:`pytest-envraw` py.test plugin that allows you to add environment variables. Aug 27, 2020 4 - Beta pytest (>=2.6.0) + :pypi:`pytest-envvars` Pytest plugin to validate use of envvars on your tests Jun 13, 2020 5 - Production/Stable pytest (>=3.0.0) + :pypi:`pytest-envx` Pytest plugin for managing environment variables with interpolation and .env file support. Jun 28, 2025 4 - Beta pytest>=8.4.1 + :pypi:`pytest-env-yaml` Apr 02, 2019 N/A N/A + :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Dec 05, 2025 N/A pytest + :pypi:`pytest-eradicate` pytest plugin to check for commented out code Sep 08, 2020 N/A pytest (>=2.4.2) + :pypi:`pytest_erp` py.test plugin to send test info to report portal dynamically Jan 13, 2015 N/A N/A + :pypi:`pytest-error` A decorator for testing exceptions with pytest Dec 06, 2025 4 - Beta pytest>=8.4 + :pypi:`pytest-error-for-skips` Pytest plugin to treat skipped tests a test failure Dec 19, 2019 4 - Beta pytest (>=4.6) + :pypi:`pytest-errxfail` pytest plugin to mark a test as xfailed if it fails with the specified error message in the captured output Jan 06, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-essentials` A Pytest plugin providing essential utilities like soft assertions. May 19, 2025 3 - Alpha pytest>=7.0 + :pypi:`pytest-eth` PyTest plugin for testing Smart Contracts for Ethereum Virtual Machine (EVM). Aug 14, 2020 1 - Planning N/A + :pypi:`pytest-ethereum` pytest-ethereum: Pytest library for ethereum projects. Jun 24, 2019 3 - Alpha pytest (==3.3.2); extra == 'dev' + :pypi:`pytest-eucalyptus` Pytest Plugin for BDD Jun 28, 2022 N/A pytest (>=4.2.0) + :pypi:`pytest-eval` LLM testing for humans. Feb 11, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-evals` A pytest plugin for running and analyzing LLM evaluation tests Feb 02, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-eventlet` Applies eventlet monkey-patch as a pytest plugin. Oct 04, 2021 N/A pytest ; extra == 'dev' + :pypi:`pytest-everyfunc` A pytest plugin to detect completely untested functions using coverage Apr 30, 2025 4 - Beta pytest + :pypi:`pytest_evm` The testing package containing tools to test Web3-based projects Sep 23, 2024 4 - Beta pytest<9.0.0,>=8.1.1 + :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A + :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 + :pypi:`pytest-exasol-backend` Mar 03, 2026 N/A pytest<9,>=7 + :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 + :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 + :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 + :pypi:`pytest-exasol-slc` Feb 12, 2026 N/A pytest<9,>=7 + :pypi:`pytest-excel` pytest plugin for generating excel reports Jul 22, 2025 5 - Production/Stable pytest + :pypi:`pytest-exceptional` Better exceptions Mar 16, 2017 4 - Beta N/A + :pypi:`pytest-exception-script` Walk your code through exception script to check it's resiliency to failures. Aug 04, 2020 3 - Alpha pytest + :pypi:`pytest-executable` pytest plugin for testing executables Oct 07, 2023 N/A pytest <8,>=5 + :pypi:`pytest-execution-timer` A timer for the phases of Pytest's execution. Dec 24, 2021 4 - Beta N/A + :pypi:`pytest-exit-code` A pytest plugin that overrides the built-in exit codes to retain more information about the test results. May 06, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-exit-status` Enhance. Jan 25, 2025 N/A pytest>=8.0.0 + :pypi:`pytest-expect` py.test plugin to store test expectations and mark tests based on them Apr 21, 2016 4 - Beta N/A + :pypi:`pytest-expectdir` A pytest plugin to provide initial/expected directories, and check a test transforms the initial directory to the expected one Mar 19, 2023 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-expected` Record and play back your expectations Feb 26, 2025 N/A pytest + :pypi:`pytest-expecter` Better testing with expecter and pytest. Sep 18, 2022 5 - Production/Stable N/A + :pypi:`pytest-expectr` This plugin is used to expect multiple assert using pytest framework. Oct 05, 2018 N/A pytest (>=2.4.2) + :pypi:`pytest-expect-test` A fixture to support expect tests in pytest Apr 10, 2023 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-experiments` A pytest plugin to help developers of research-oriented software projects keep track of the results of their numerical experiments. Dec 13, 2021 4 - Beta pytest (>=6.2.5,<7.0.0) + :pypi:`pytest-explicit` A Pytest plugin to ignore certain marked tests by default Jun 15, 2021 5 - Production/Stable pytest + :pypi:`pytest-exploratory` Interactive console for pytest. Sep 18, 2024 N/A pytest>=6.2 + :pypi:`pytest-explorer` terminal ui for exploring and running tests Aug 01, 2023 N/A N/A + :pypi:`pytest-ext` pytest plugin for automation test Mar 31, 2024 N/A pytest>=5.3 + :pypi:`pytest-extended-mock` a pytest extension for easy mock setup Mar 12, 2025 N/A pytest<9.0.0,>=8.3.5 + :pypi:`pytest-extensions` A collection of helpers for pytest to ease testing Aug 17, 2022 4 - Beta pytest ; extra == 'testing' + :pypi:`pytest-external-blockers` a special outcome for tests that are blocked for external reasons Oct 05, 2021 N/A pytest + :pypi:`pytest_extra` Some helpers for writing tests with pytest. Aug 14, 2014 N/A N/A + :pypi:`pytest-extra-durations` A pytest plugin to get durations on a per-function basis and per module basis. Apr 21, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-extra-markers` Additional pytest markers to dynamically enable/disable tests viia CLI flags Mar 05, 2023 4 - Beta pytest + :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Feb 20, 2026 N/A pytest<8.0.0,>=7.2.1 + :pypi:`pytest-fabric` Provides test utilities to run fabric task tests by using docker containers Sep 12, 2018 5 - Production/Stable N/A + :pypi:`pytest-factory` Use factories for test setup with py.test Sep 06, 2020 3 - Alpha pytest (>4.3) + :pypi:`pytest-factoryboy` Factory Boy support for pytest. Jul 01, 2025 6 - Mature pytest>=7.0 + :pypi:`pytest-factoryboy-fixtures` Generates pytest fixtures that allow the use of type hinting Jun 25, 2020 N/A N/A + :pypi:`pytest-factoryboy-state` Simple factoryboy random state management Mar 22, 2022 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-failed-screen-record` Create a video of the screen when pytest fails Jan 05, 2023 4 - Beta pytest (>=7.1.2d,<8.0.0) + :pypi:`pytest-failed-screenshot` Test case fails,take a screenshot,save it,attach it to the allure Apr 21, 2021 N/A N/A + :pypi:`pytest-failed-to-verify` A pytest plugin that helps better distinguishing real test failures from setup flakiness. Aug 08, 2019 5 - Production/Stable pytest (>=4.1.0) + :pypi:`pytest-fail-slow` Fail tests that take too long to run Jun 01, 2024 N/A pytest>=7.0 + :pypi:`pytest-failure-tracker` A pytest plugin for tracking test failures over multiple runs Jul 17, 2024 N/A pytest>=6.0.0 + :pypi:`pytest-faker` Faker integration with the pytest framework. Dec 19, 2016 6 - Mature N/A + :pypi:`pytest-falcon` Pytest helpers for Falcon. Sep 07, 2016 4 - Beta N/A + :pypi:`pytest-fantasy` Pytest plugin for Flask Fantasy Framework Mar 14, 2019 N/A N/A + :pypi:`pytest-fastapi` Dec 27, 2020 N/A N/A + :pypi:`pytest-fastapi-deps` A fixture which allows easy replacement of fastapi dependencies for testing Jul 20, 2022 5 - Production/Stable pytest + :pypi:`pytest-fastcollect` A high-performance pytest plugin that replaces test collection with a Rust-based implementation Nov 19, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-fastest` Use SCM and coverage to run only needed tests Oct 04, 2023 4 - Beta pytest (>=4.4) + :pypi:`pytest-fast-first` Pytest plugin that runs fast tests first Jan 19, 2023 3 - Alpha pytest + :pypi:`pytest-faulthandler` py.test plugin that activates the fault handler module for tests (dummy package) Jul 04, 2019 6 - Mature pytest (>=5.0) + :pypi:`pytest-fauna` A collection of helpful test fixtures for Fauna DB. Jan 03, 2025 N/A N/A + :pypi:`pytest-fauxfactory` Integration of fauxfactory into pytest. Dec 06, 2017 5 - Production/Stable pytest (>=3.2) + :pypi:`pytest-figleaf` py.test figleaf coverage plugin Jan 18, 2010 5 - Production/Stable N/A + :pypi:`pytest-file` Pytest File Mar 18, 2024 1 - Planning N/A + :pypi:`pytest-filecov` A pytest plugin to detect unused files Jun 27, 2021 4 - Beta pytest + :pypi:`pytest-filedata` easily load test data from files Apr 29, 2024 5 - Production/Stable N/A + :pypi:`pytest-filemarker` A pytest plugin that runs marked tests when files change. Dec 01, 2020 N/A pytest + :pypi:`pytest-file-watcher` Pytest-File-Watcher is a CLI tool that watches for changes in your code and runs pytest on the changed files. Mar 23, 2023 N/A pytest + :pypi:`pytest-filter-case` run test cases filter by mark Nov 05, 2020 N/A N/A + :pypi:`pytest-filterfixtures` pytest plugin to execute or ignore tests based on fixtures Jan 09, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-filter-subpackage` Pytest plugin for filtering based on sub-packages Mar 04, 2024 5 - Production/Stable pytest >=4.6 + :pypi:`pytest-find-dependencies` A pytest plugin to find dependencies between tests Jul 16, 2025 5 - Production/Stable pytest>=6.2.4 + :pypi:`pytest-finer-verdicts` A pytest plugin to treat non-assertion failures as test errors. Jun 18, 2020 N/A pytest (>=5.4.3) + :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A + :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 04, 2026 N/A pytest>=7.0 + :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 + :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A + :pypi:`pytest-fixture-collect` A utility to collect pytest fixture file paths. Jul 25, 2025 N/A pytest; extra == "test" + :pypi:`pytest-fixturecollection` A pytest plugin to collect tests based on fixtures being used by tests Feb 22, 2024 4 - Beta pytest >=3.5.0 + :pypi:`pytest-fixture-config` Fixture configuration utils for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-fixture-forms` A pytest plugin for creating fixtures that holds different forms between tests. Dec 06, 2024 N/A pytest<9.0.0,>=7.0.0 + :pypi:`pytest-fixture-maker` Pytest plugin to load fixtures from YAML files Sep 21, 2021 N/A N/A + :pypi:`pytest-fixture-marker` A pytest plugin to add markers based on fixtures used. Oct 11, 2020 5 - Production/Stable N/A + :pypi:`pytest-fixture-order` pytest plugin to control fixture evaluation order Oct 22, 2025 5 - Production/Stable pytest>=3.0 + :pypi:`pytest-fixture-ref` Lets users reference fixtures without name matching magic. Nov 17, 2022 4 - Beta N/A + :pypi:`pytest-fixture-remover` A LibCST codemod to remove pytest fixtures applied via the usefixtures decorator, as well as its parametrizations. Feb 14, 2024 5 - Production/Stable N/A + :pypi:`pytest-fixture-rtttg` Warn or fail on fixture name clash Feb 23, 2022 N/A pytest (>=7.0.1,<8.0.0) + :pypi:`pytest-fixtures` Common fixtures for pytest May 01, 2019 5 - Production/Stable N/A + :pypi:`pytest-fixtures-fixtures` Handy fixtues to access your fixtures from your _pytest tests. Nov 06, 2025 4 - Beta pytest>=8.4.1 + :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 + :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest + :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Feb 19, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) + :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Mar 05, 2026 N/A pytest>=6.2.0 + :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) + :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Feb 28, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A + :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 + :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) + :pypi:`pytest-flask-sqlalchemy` A pytest plugin for preserving test isolation in Flask-SQlAlchemy using database transactions. Apr 30, 2022 4 - Beta pytest (>=3.2.1) + :pypi:`pytest-flask-sqlalchemy-transactions` Run tests in transactions using pytest, Flask, and SQLalchemy. Aug 02, 2018 4 - Beta pytest (>=3.2.1) + :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest + :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 + :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) + :pypi:`pytest-fly` pytest runner and observer Feb 23, 2026 3 - Alpha pytest + :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest + :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest + :pypi:`pytest-forbid` Mar 07, 2023 N/A pytest (>=7.2.2,<8.0.0) + :pypi:`pytest-forcefail` py.test plugin to make the test failing regardless of pytest.mark.xfail May 15, 2018 4 - Beta N/A + :pypi:`pytest-forger` Automatic test scaffolding and mock generation for Python Dec 26, 2025 N/A pytest>=7.4.0 + :pypi:`pytest-forward-compatability` A name to avoid typosquating pytest-foward-compatibility Sep 06, 2020 N/A N/A + :pypi:`pytest-forward-compatibility` A pytest plugin to shim pytest commandline options for fowards compatibility Sep 29, 2020 N/A N/A + :pypi:`pytest-frappe` Pytest Frappe Plugin - A set of pytest fixtures to test Frappe applications Jul 30, 2024 4 - Beta pytest>=7.0.0 + :pypi:`pytest-freethreaded` pytest plugin for running parallel tests Oct 03, 2024 5 - Production/Stable pytest + :pypi:`pytest-freeze` Pytest plugin to simplify writing freeze tests. Jan 27, 2026 N/A N/A + :pypi:`pytest-freezeblaster` Wrap tests with fixtures in freeze_time Oct 13, 2025 N/A pytest>=6.2.5 + :pypi:`pytest-freezegun` Wrap tests with fixtures in freeze_time Jul 19, 2020 4 - Beta pytest (>=3.0.0) + :pypi:`pytest-freezer` Pytest plugin providing a fixture interface for spulec/freezegun Dec 12, 2024 N/A pytest>=3.6 + :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A + :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) + :pypi:`pytest_ftpserver` A PyTest plugin which provides an FTP fixture for your tests Feb 10, 2026 5 - Production/Stable pytest + :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) + :pypi:`pytest-funcnodes` Testing plugin for funcnodes Dec 21, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 + :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest + :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A + :pypi:`pytest-fxa-mte` pytest plugin for Firefox Accounts Oct 02, 2024 5 - Production/Stable N/A + :pypi:`pytest-fxtest` Oct 27, 2020 N/A N/A + :pypi:`pytest-fzf` fzf-based test selector for pytest Jan 06, 2025 4 - Beta pytest>=6.0.0 + :pypi:`pytest_gae` pytest plugin for apps written with Google's AppEngine Aug 03, 2016 3 - Alpha N/A + :pypi:`pytest-gak` A Pytest plugin and command line tool for interactive testing with Pytest Apr 10, 2025 N/A N/A + :pypi:`pytest-gather-fixtures` set up asynchronous pytest fixtures concurrently Aug 18, 2024 N/A pytest>=7.0.0 + :pypi:`pytest-gc` The garbage collector plugin for py.test Feb 01, 2018 N/A N/A + :pypi:`pytest-gcov` Uses gcov to measure test coverage of a C library Feb 01, 2018 3 - Alpha N/A + :pypi:`pytest-gcppubsub` A Pytest fixture for managing Google Cloud Platform PubSub emulator Feb 18, 2026 N/A pytest>=7.0 + :pypi:`pytest-gcpsecretmanager` A PyTest plugin for mocking GCP's Secret Manager Feb 18, 2026 N/A pytest>=7.0 + :pypi:`pytest-gcs` GCS fixtures and fixture factories for Pytest. Jan 24, 2025 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-gee` The Python plugin for your GEE based packages. Oct 16, 2025 3 - Alpha pytest + :pypi:`pytest-gevent` Ensure that gevent is properly patched when invoking pytest Feb 25, 2020 N/A pytest + :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) + :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest + :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Mar 04, 2026 N/A pytest>=3.6 + :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 + :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A + :pypi:`pytest-git-diff` Pytest plugin that allows the user to select the tests affected by a range of git commits Apr 02, 2024 N/A N/A + :pypi:`pytest-git-fixtures` Pytest fixtures for testing with git. Mar 11, 2021 4 - Beta pytest + :pypi:`pytest-github` Plugin for py.test that associates tests with github issues using a marker. Mar 07, 2019 5 - Production/Stable N/A + :pypi:`pytest-github-actions-annotate-failures` pytest plugin to annotate failed tests with a workflow command for GitHub Actions Mar 02, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-github-report` Generate a GitHub report using pytest in GitHub Workflows Jun 03, 2022 4 - Beta N/A + :pypi:`pytest-gitignore` py.test plugin to ignore the same files as git Jul 17, 2015 4 - Beta N/A + :pypi:`pytest-gitlab` Pytest Plugin for Gitlab Oct 16, 2024 N/A N/A + :pypi:`pytest-gitlabci-parallelized` Parallelize pytest across GitLab CI workers. Mar 08, 2023 N/A N/A + :pypi:`pytest-gitlab-code-quality` Collects warnings while testing and generates a GitLab Code Quality Report. Nov 23, 2025 N/A pytest>=8.1.1 + :pypi:`pytest-gitlab-fold` Folds output sections in GitLab CI build log Dec 31, 2023 4 - Beta pytest >=2.6.0 + :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A + :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 + :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" + :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest + :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 + :pypi:`pytest-goldie` A plugin to support golden tests with pytest. May 23, 2023 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-google-chat` Notify google chat channel for test results Mar 27, 2022 4 - Beta pytest + :pypi:`pytest-google-cloud-storage` Pytest custom features, e.g. fixtures and various tests. Aimed to emulate Google Cloud Storage service Sep 11, 2025 N/A pytest>=8.0.0 + :pypi:`pytest-grader` Pytest extension for scoring programming assignments. Aug 25, 2025 N/A pytest>=8 + :pypi:`pytest-gradescope` A pytest plugin for Gradescope integration Apr 29, 2025 N/A N/A + :pypi:`pytest-graphql-schema` Get graphql schema as fixture for pytest Oct 18, 2019 N/A N/A + :pypi:`pytest-greendots` Green progress dots Feb 08, 2014 3 - Alpha N/A + :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-greet` Oct 21, 2025 N/A N/A + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 07, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) + :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A + :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) + :pypi:`pytest-grpc-aio` pytest plugin for grpc.aio Oct 28, 2025 N/A pytest>=3.6.0 + :pypi:`pytest-grunnur` Py.Test plugin for Grunnur-based packages. Jul 26, 2024 N/A pytest>=6 + :pypi:`pytest_gui_status` Show pytest status in gui Jan 23, 2016 N/A pytest + :pypi:`pytest-hammertime` Display "🔨 " instead of "." for passed pytest tests. Jul 28, 2018 N/A pytest + :pypi:`pytest-hardware-test-report` A simple plugin to use with pytest Apr 01, 2024 4 - Beta pytest<9.0.0,>=8.0.0 + :pypi:`pytest-harmony` Chain tests and data with pytest Jan 17, 2023 N/A pytest (>=7.2.1,<8.0.0) + :pypi:`pytest-harvest` Store data created during your pytest tests execution, and retrieve it at the end of the session, e.g. for applicative benchmarking purposes. Mar 16, 2024 5 - Production/Stable N/A + :pypi:`pytest-helm` Simple, ergonomic Helm manifest fixtures for pytest. Feb 21, 2026 3 - Alpha pytest>=8.0.0 + :pypi:`pytest-helm-charts` A plugin to provide different types and configs of Kubernetes clusters that can be used for testing. Dec 23, 2025 4 - Beta pytest<9,>=8.0.0 + :pypi:`pytest-helm-templates` Pytest fixtures for unit testing the output of helm templates Aug 07, 2024 N/A pytest~=7.4.0; extra == "dev" + :pypi:`pytest-helper` Functions to help in using the pytest testing framework May 31, 2019 5 - Production/Stable N/A + :pypi:`pytest-helpers` pytest helpers May 17, 2020 N/A pytest + :pypi:`pytest-helpers-namespace` Pytest Helpers Namespace Plugin Dec 29, 2021 5 - Production/Stable pytest (>=6.0.0) + :pypi:`pytest-henry` Aug 29, 2023 N/A N/A + :pypi:`pytest-hidecaptured` Hide captured output May 04, 2018 4 - Beta pytest (>=2.8.5) + :pypi:`pytest-himark` This plugin aims to create markers automatically based on a json configuration. Jun 05, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-historic` Custom report to display pytest historical execution records Apr 08, 2020 N/A pytest + :pypi:`pytest-historic-hook` Custom listener to store execution results into MYSQL DB, which is used for pytest-historic report Apr 08, 2020 N/A pytest + :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) + :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest + :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 07, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 07, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A + :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A + :pypi:`pytest-hot-test` A plugin that tracks test changes Dec 10, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-houdini` pytest plugin for testing code in Houdini. Jul 15, 2024 N/A pytest + :pypi:`pytest-hoverfly` Simplify working with Hoverfly from pytest Jan 30, 2023 N/A pytest (>=5.0) + :pypi:`pytest-hoverfly-wrapper` Integrates the Hoverfly HTTP proxy into Pytest Feb 27, 2023 5 - Production/Stable pytest (>=3.7.0) + :pypi:`pytest-hpfeeds` Helpers for testing hpfeeds in your python project Feb 28, 2023 4 - Beta pytest (>=6.2.4,<7.0.0) + :pypi:`pytest-html` pytest plugin for generating HTML reports Jan 19, 2026 5 - Production/Stable pytest>=7 + :pypi:`pytest-html5` the best report for pytest Dec 18, 2025 N/A N/A + :pypi:`pytest-html-cn` pytest plugin for generating HTML reports Aug 19, 2024 5 - Production/Stable pytest!=6.0.0,>=5.0 + :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A + :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A + :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Feb 06, 2026 N/A N/A + :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) + :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 + :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A + :pypi:`pytest-html-report-merger` May 22, 2024 N/A N/A + :pypi:`pytest-html-thread` pytest plugin for generating HTML reports Dec 29, 2020 5 - Production/Stable N/A + :pypi:`pytest-htmlx` Custom HTML report plugin for Pytest with charts and tables Sep 09, 2025 4 - Beta pytest + :pypi:`pytest-http` Fixture "http" for http requests Aug 22, 2024 N/A pytest + :pypi:`pytest-httpbin` Easily test your HTTP library against a local copy of httpbin Sep 18, 2024 5 - Production/Stable pytest; extra == "test" + :pypi:`pytest-httpchain` pytest plugin for HTTP testing using JSON files Jan 09, 2026 5 - Production/Stable N/A + :pypi:`pytest-httpchain-jsonref` JSON reference ($ref) support for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-mcp` MCP server for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-models` Pydantic models for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-templates` Templating support for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpchain-userfunc` User functions support for pytest-httpchain Jan 09, 2026 N/A N/A + :pypi:`pytest-httpdbg` A pytest plugin to record HTTP(S) requests with stack trace. Oct 26, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-http-mocker` Pytest plugin for http mocking (via https://github.com/vilus/mocker) Oct 20, 2019 N/A N/A + :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A + :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Feb 14, 2026 3 - Alpha N/A + :pypi:`pytest-httptesting` http_testing framework on top of pytest Dec 19, 2024 N/A pytest>=8.2.0 + :pypi:`pytest-httpx` Send responses to httpx. Dec 02, 2025 5 - Production/Stable pytest==9.* + :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) + :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest + :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A + :pypi:`pytest-human` A beautiful nested pytest HTML test report Jan 25, 2026 4 - Beta pytest>=8 + :pypi:`pytest-hy` Pytest plugin for discovering and running Hy test files Feb 11, 2026 N/A pytest>=7.0 + :pypi:`pytest-hylang` Pytest plugin to allow running tests written in hylang Mar 28, 2021 N/A pytest + :pypi:`pytest-hypo-25` help hypo module for pytest Jan 12, 2020 3 - Alpha N/A + :pypi:`pytest-hypothesis` Feb 09, 2026 N/A N/A + :pypi:`pytest-iam` A fully functional OAUTH2 / OpenID Connect (OIDC) / SCIM server to be used in your testsuite Nov 02, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-ibutsu` A plugin to sent pytest results to an Ibutsu server Feb 23, 2026 4 - Beta pytest + :pypi:`pytest-icdiff` use icdiff for better error messages in pytest assertions Dec 05, 2023 4 - Beta pytest + :pypi:`pytest-idapro` A pytest plugin for idapython. Allows a pytest setup to run tests outside and inside IDA in an automated manner by runnig pytest inside IDA and by mocking idapython api Nov 03, 2018 N/A N/A + :pypi:`pytest-idem` A pytest plugin to help with testing idem projects Dec 13, 2023 5 - Production/Stable N/A + :pypi:`pytest-idempotent` Pytest plugin for testing function idempotence. Jul 25, 2022 N/A N/A + :pypi:`pytest-ignore-flaky` ignore failures from flaky tests (pytest plugin) Apr 20, 2024 5 - Production/Stable pytest>=6.0 + :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest + :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Feb 12, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 + :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A + :pypi:`pytest-in-docker` Seamlessly run pytest tests inside docker containers Feb 09, 2026 3 - Alpha pytest>=9.0.2 + :pypi:`pytest-infinity` Jun 09, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-influx` Pytest plugin for managing your influx instance between test runs Oct 16, 2024 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-influxdb` Plugin for influxdb and pytest integration. Apr 20, 2021 N/A N/A + :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A + :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A + :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Jan 29, 2026 4 - Beta pytest~=9.0 + :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A + :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A + :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 + :pypi:`pytest-inject` A pytest plugin that allows you to inject arguments into fixtures and parametrized tests using pytest command-line options. Nov 25, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 + :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A + :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest + :pypi:`pytest-inmanta-extensions` Inmanta tests package Mar 03, 2026 5 - Production/Stable N/A + :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Feb 12, 2026 5 - Production/Stable N/A + :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A + :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest + :pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A + :pypi:`pytest-in-robotframework` The extension enables easy execution of pytest tests within the Robot Framework environment. Nov 23, 2024 N/A pytest + :pypi:`pytest-insper` Pytest plugin for courses at Insper Mar 21, 2024 N/A pytest + :pypi:`pytest-insta` A practical snapshot testing plugin for pytest Nov 22, 2025 N/A pytest>=9.0.0 + :pypi:`pytest-instafail` pytest plugin to show failures instantly Mar 31, 2023 4 - Beta pytest (>=5) + :pypi:`pytest-instrument` pytest plugin to instrument tests Apr 05, 2020 5 - Production/Stable pytest (>=5.1.0) + :pypi:`pytest-insubprocess` A pytest plugin to execute test cases in a subprocess Dec 08, 2025 4 - Beta pytest>=7.4 + :pypi:`pytest-integration` Organizing pytests by integration or not Nov 17, 2022 N/A N/A + :pypi:`pytest-integration-mark` Automatic integration test marking and excluding plugin for pytest May 22, 2023 N/A pytest (>=5.2) + :pypi:`pytest-intent` A pytest plugin for tracking requirement coverage. Dec 17, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A + :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) + :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Feb 11, 2026 4 - Beta pytest + :pypi:`pytest-invenio` Pytest fixtures for Invenio. Jan 27, 2026 5 - Production/Stable pytest<9.0.0,>=6 + :pypi:`pytest-involve` Run tests covering a specific file or changeset Feb 02, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-iovis` A Pytest plugin to enable Jupyter Notebook testing with Papermill Nov 06, 2024 4 - Beta pytest>=7.1.0 + :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A + :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A + :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest + :pypi:`pytest-ipywidgets` Feb 24, 2026 N/A pytest + :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest + :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Mar 04, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 + :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A + :pypi:`pytest-item-dict` Get a hierarchical dict of session.items Nov 14, 2024 4 - Beta pytest>=8.3.0 + :pypi:`pytest-iterassert` Nicer list and iterable assertion messages for pytest May 11, 2020 3 - Alpha N/A + :pypi:`pytest-iteration` Add iteration mark for tests Aug 22, 2024 N/A pytest + :pypi:`pytest-iters` A contextmanager pytest fixture for handling multiple mock iters May 24, 2022 N/A N/A + :pypi:`pytest_jar_yuan` A allure and pytest used package Dec 12, 2022 N/A N/A + :pypi:`pytest-jasmine` Run jasmine tests from your pytest test suite Nov 04, 2017 1 - Planning N/A + :pypi:`pytest-jelastic` Pytest plugin defining the necessary command-line options to pass to pytests testing a Jelastic environment. Nov 16, 2022 N/A pytest (>=7.2.0,<8.0.0) + :pypi:`pytest-jest` A custom jest-pytest oriented Pytest reporter May 22, 2018 4 - Beta pytest (>=3.3.2) + :pypi:`pytest-jinja` A plugin to generate customizable jinja-based HTML reports in pytest Oct 04, 2022 3 - Alpha pytest (>=6.2.5,<7.0.0) + :pypi:`pytest-jira` py.test JIRA integration plugin, using markers Apr 15, 2025 3 - Alpha N/A + :pypi:`pytest-jira-xfail` Plugin skips (xfail) tests if unresolved Jira issue(s) linked Jul 09, 2024 N/A pytest>=7.2.0 + :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Oct 11, 2025 4 - Beta pytest>=6.2.4 + :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. Feb 02, 2026 5 - Production/Stable pytest + :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) + :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A + :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Dec 28, 2025 N/A pytest>6.0.0 + :pypi:`pytest-json-fixtures` JSON output for the --fixtures flag Mar 14, 2023 4 - Beta N/A + :pypi:`pytest-jsonlint` UNKNOWN Aug 04, 2016 N/A N/A + :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) + :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 + :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 + :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Feb 04, 2026 N/A pytest + :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 + :pypi:`pytest-jubilant` Add your description here Jul 28, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 + :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest + :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest + :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 + :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 + :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest + :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Feb 15, 2026 N/A N/A + :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest + :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 + :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) + :pypi:`pytest-kedge` Agent-friendly structured test data collector for pytest Jan 10, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-keep-together` Pytest plugin to customize test ordering by running all 'related' tests together Dec 07, 2022 5 - Production/Stable pytest + :pypi:`pytest-kexi` Apr 29, 2022 N/A pytest (>=7.1.2,<8.0.0) + :pypi:`pytest-keyring` A Pytest plugin to access the system's keyring to provide credentials for tests Dec 08, 2024 N/A pytest>=8.0.2 + :pypi:`pytest-kind` Kubernetes test support with KIND for pytest Nov 30, 2022 5 - Production/Stable N/A + :pypi:`pytest-kivy` Kivy GUI tests fixtures using pytest Jul 06, 2021 4 - Beta pytest (>=3.6) + :pypi:`pytest-knows` A pytest plugin that can automaticly skip test case based on dependence info calculated by trace Aug 22, 2014 N/A N/A + :pypi:`pytest-konira` Run Konira DSL tests with py.test Oct 09, 2011 N/A N/A + :pypi:`pytest-kookit` Your simple but kooky integration testing with pytest Sep 10, 2024 N/A N/A + :pypi:`pytest-koopmans` A plugin for testing the koopmans package Nov 21, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-krtech-common` pytest krtech common library Nov 28, 2016 4 - Beta N/A + :pypi:`pytest-kubernetes` Oct 23, 2025 N/A pytest<9.0.0,>=8.3.0 + :pypi:`pytest_kustomize` Parse and validate kustomize output Dec 08, 2025 N/A N/A + :pypi:`pytest-kuunda` pytest plugin to help with test data setup for PySpark tests Feb 25, 2024 4 - Beta pytest >=6.2.0 + :pypi:`pytest-kwparametrize` Alternate syntax for @pytest.mark.parametrize with test cases as dictionaries and default value fallbacks Jan 22, 2021 N/A pytest (>=6) + :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 + :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A + :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Mar 04, 2026 4 - Beta N/A + :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A + :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest + :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) + :pypi:`pytest-layab` Pytest fixtures for layab. Oct 05, 2020 5 - Production/Stable N/A + :pypi:`pytest-lazy-fixture` It helps to use fixtures in pytest.mark.parametrize Feb 01, 2020 4 - Beta pytest (>=3.2.5) + :pypi:`pytest-lazy-fixtures` Allows you to use fixtures in @pytest.mark.parametrize. Sep 16, 2025 N/A pytest>=7 + :pypi:`pytest-ldap` python-ldap fixtures for pytest Aug 18, 2020 N/A pytest + :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A + :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Feb 19, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A + :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest + :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Feb 27, 2026 4 - Beta pytest>=8.3.5 + :pypi:`pytest-libfaketime` A python-libfaketime plugin for pytest Apr 12, 2024 4 - Beta pytest>=3.0.0 + :pypi:`pytest-libiio` A pytest plugin for testing libiio based devices Aug 15, 2025 N/A pytest>=3.5.0 + :pypi:`pytest-libnotify` Pytest plugin that shows notifications about the test run Apr 02, 2021 3 - Alpha pytest + :pypi:`pytest-ligo` Jan 16, 2020 4 - Beta N/A + :pypi:`pytest-lineno` A pytest plugin to show the line numbers of test functions Dec 04, 2020 N/A pytest + :pypi:`pytest-line-profiler` Profile code executed by pytest Aug 10, 2023 4 - Beta pytest >=3.5.0 + :pypi:`pytest-line-profiler-apn` Profile code executed by pytest Dec 05, 2022 N/A pytest (>=3.5.0) + :pypi:`pytest-line-runner` Run pytest tests by line number instead of exact test name Feb 08, 2026 N/A N/A + :pypi:`pytest-lisa` Pytest plugin for organizing tests. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) + :pypi:`pytest-listener` A simple network listener Nov 29, 2024 5 - Production/Stable pytest + :pypi:`pytest-litf` A pytest plugin that stream output in LITF format Jan 18, 2021 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-litter` Pytest plugin which verifies that tests do not modify file trees. Nov 23, 2023 4 - Beta pytest >=6.1 + :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest + :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 + :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) + :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest + :pypi:`pytest-localserver` pytest plugin to test server connections locally. Nov 24, 2025 4 - Beta N/A + :pypi:`pytest-localstack` Pytest plugin for AWS integration tests Jun 07, 2023 4 - Beta pytest (>=6.0.0,<7.0.0) + :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) + :pypi:`pytest-lockable` lockable resource plugin for pytest Sep 08, 2025 5 - Production/Stable pytest + :pypi:`pytest-locker` Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed Dec 20, 2024 N/A pytest>=5.4 + :pypi:`pytest-loco` Another one YAML-based DSL for testing Mar 02, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 + :pypi:`pytest-loco-http` HTTP support for pytest-loco Feb 25, 2026 3 - Alpha N/A + :pypi:`pytest-loco-json` JSON support for pytest-loco Feb 25, 2026 3 - Alpha N/A + :pypi:`pytest-log` print log Aug 15, 2021 N/A pytest (>=3.8) + :pypi:`pytest-logbook` py.test plugin to capture logbook log messages Nov 23, 2015 5 - Production/Stable pytest (>=2.8) + :pypi:`pytest-logdog` Pytest plugin to test logging Jun 15, 2021 1 - Planning pytest (>=6.2.0) + :pypi:`pytest-logfest` Pytest plugin providing three logger fixtures with basic or full writing to log files Jul 21, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-log-filter` Ignore some loggers' log for pytest Nov 13, 2025 N/A pytest + :pypi:`pytest-logger` Plugin configuring handlers for loggers from Python logging module. Mar 10, 2024 5 - Production/Stable pytest (>=3.2) + :pypi:`pytest-logger-db` Add your description here Sep 14, 2025 N/A N/A + :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A + :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) + :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest + :pypi:`pytest-logikal` Common testing environment Mar 04, 2026 5 - Production/Stable pytest==9.0.2 + :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A + :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 + :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" + :pypi:`pytest-loop` pytest plugin for looping tests Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-lsp` A pytest plugin for end-to-end testing of language servers Oct 25, 2025 5 - Production/Stable pytest>=8.0 + :pypi:`pytest-lw-realtime-result` Pytest plugin to generate realtime test results to a file Mar 13, 2025 N/A pytest>=3.5.0 + :pypi:`pytest-manifest` PyTest plugin for recording and asserting against a manifest file Apr 07, 2025 N/A pytest + :pypi:`pytest-manual-marker` pytest marker for marking manual tests Aug 04, 2022 3 - Alpha pytest>=7 + :pypi:`pytest-mark-ac` Provides a marker to reference acceptance criteria from PyTest tests through annotations Mar 02, 2026 5 - Production/Stable pytest<10,>=8.4 + :pypi:`pytest-mark-count` Get a count of the number of tests marked, unmarked, and unique tests if tests have multiple markers Nov 13, 2024 4 - Beta pytest>=8.0.0 + :pypi:`pytest-markdir` Feb 01, 2026 N/A pytest<10,>=8.0 + :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) + :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) + :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Jan 28, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 10, 2026 N/A pytest>=7.0 + :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 + :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 + :pypi:`pytest-mark-filter` Filter pytest marks by name using match kw May 11, 2025 N/A pytest>=8.3.0 + :pypi:`pytest-markfiltration` UNKNOWN Nov 08, 2011 3 - Alpha N/A + :pypi:`pytest-mark-integration` Pytest plugin for automatic integration test marking and management Jan 13, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-mark-manage` 用例标签化管理 Aug 15, 2024 N/A pytest + :pypi:`pytest-mark-no-py3` pytest plugin and bowler codemod to help migrate tests to Python 3 May 17, 2019 N/A pytest + :pypi:`pytest-marks` UNKNOWN Nov 23, 2012 3 - Alpha N/A + :pypi:`pytest-mask-secrets` Pytest plugin to hide sensitive data in test reports Dec 17, 2025 N/A N/A + :pypi:`pytest-matcher` Easy way to match captured \`pytest\` output against expectations stored in files Aug 07, 2025 5 - Production/Stable pytest + :pypi:`pytest-matchers` Matchers for pytest Dec 19, 2025 N/A pytest<10.0,>=7.0 + :pypi:`pytest-match-skip` Skip matching marks. Matches partial marks using wildcards. May 15, 2019 4 - Beta pytest (>=4.4.1) + :pypi:`pytest-mat-report` this is report Jan 20, 2021 N/A N/A + :pypi:`pytest-matrix` Provide tools for generating tests from combinations of fixtures. Jun 24, 2020 5 - Production/Stable pytest (>=5.4.3,<6.0.0) + :pypi:`pytest-maxcov` Compute the maximum coverage available through pytest with the minimum execution time cost Sep 24, 2023 N/A pytest (>=7.4.0,<8.0.0) + :pypi:`pytest-max-warnings` A Pytest plugin to exit non-zero exit code when the configured maximum warnings has been exceeded. Oct 23, 2024 4 - Beta pytest>=8.3.3 + :pypi:`pytest-maybe-context` Simplify tests with warning and exception cases. Apr 16, 2023 N/A pytest (>=7,<8) + :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' + :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) + :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 + :pypi:`pytest-mcp-tools` Mar 07, 2026 N/A pytest>=7.0.0; extra == "test" + :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) + :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 + :pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Oct 08, 2024 N/A pytest>=7.4.3 + :pypi:`pytest-memlog` Log memory usage during tests May 03, 2023 N/A pytest (>=7.3.0,<8.0.0) + :pypi:`pytest-memprof` Estimates memory consumption of test functions Mar 29, 2019 4 - Beta N/A + :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 + :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) + :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A + :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 26, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) + :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) + :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A + :pypi:`pytest-metadata` pytest plugin for test session metadata Feb 12, 2024 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-metaexport` Pytest plugin for exporting custom test metadata to JSON. Jun 24, 2025 N/A pytest>=7.1.0 + :pypi:`pytest-metrics` Custom metrics report for pytest Apr 04, 2020 N/A pytest + :pypi:`pytest-mfd-config` Pytest Plugin that handles test and topology configs and all their belongings like helper fixtures. Jul 11, 2025 N/A pytest<9,>=7.2.1 + :pypi:`pytest-mfd-logging` Module for handling PyTest logging. Nov 14, 2025 N/A pytest<9,>=7.2.1 + :pypi:`pytest-mh` Pytest multihost plugin Oct 16, 2025 N/A pytest + :pypi:`pytest-mimesis` Mimesis integration with the pytest test runner Mar 21, 2020 5 - Production/Stable pytest (>=4.2) + :pypi:`pytest-mimic` Easily record function calls while testing Apr 24, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-minecraft` A pytest plugin for running tests against Minecraft releases Apr 06, 2022 N/A pytest (>=6.0.1) + :pypi:`pytest-mini` A plugin to test mp Feb 06, 2023 N/A pytest (>=7.2.0,<8.0.0) + :pypi:`pytest-minio-mock` A pytest plugin for mocking Minio S3 interactions Aug 06, 2025 N/A pytest>=5.0.0 + :pypi:`pytest-mirror` A pluggy-based pytest plugin and CLI tool for ensuring your test suite mirrors your source code structure Jul 30, 2025 4 - Beta N/A + :pypi:`pytest-missing-fixtures` Pytest plugin that creates missing fixtures Oct 14, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-missing-modules` Pytest plugin to easily fake missing modules Nov 17, 2025 N/A pytest>=8.3.2 + :pypi:`pytest-mitmproxy` pytest plugin for mitmproxy tests Nov 13, 2024 N/A pytest>=7.0 + :pypi:`pytest-mitmproxy-plugin` Use MITM Proxy in autotests with full control from code Apr 10, 2025 4 - Beta pytest>=7.2.0 + :pypi:`pytest-ml` Test your machine learning! May 04, 2019 4 - Beta N/A + :pypi:`pytest-mocha` pytest plugin to display test execution output like a mochajs Apr 02, 2020 4 - Beta pytest (>=5.4.0) + :pypi:`pytest-mock` Thin-wrapper around the mock package for easier use with pytest Sep 16, 2025 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-mock-api` A mock API server with configurable routes and responses available as a fixture. Feb 13, 2019 1 - Planning pytest (>=4.0.0) + :pypi:`pytest-mock-generator` A pytest fixture wrapper for https://pypi.org/project/mock-generator May 16, 2022 5 - Production/Stable N/A + :pypi:`pytest-mock-helper` Help you mock HTTP call and generate mock code Jan 24, 2018 N/A pytest + :pypi:`pytest-mockito` Base fixtures for mockito Feb 10, 2026 5 - Production/Stable pytest>=6 + :pypi:`pytest-mockllm` 🚀 Zero-config pytest plugin for mocking LLM APIs - OpenAI, Anthropic, Gemini, LangChain & more Dec 22, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-mockredis` An in-memory mock of a Redis server that runs in a separate thread. This is to be used for unit-tests that require a Redis database. Jan 02, 2018 2 - Pre-Alpha N/A + :pypi:`pytest-mock-resources` A pytest plugin for easily instantiating reproducible mock resources. Sep 17, 2025 N/A pytest>=1.0 + :pypi:`pytest-mock-server` Mock server plugin for pytest Jan 09, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-mockservers` A set of fixtures to test your requests to HTTP/UDP servers Mar 31, 2020 N/A pytest (>=4.3.0) + :pypi:`pytest-mocktcp` A pytest plugin for testing TCP clients Oct 11, 2022 N/A pytest + :pypi:`pytest-mock-unity-catalog` Unity Catalog pyspark fixtures Mar 01, 2026 N/A pytest + :pypi:`pytest-modalt` Massively distributed pytest runs using modal.com Feb 27, 2024 4 - Beta pytest >=6.2.0 + :pypi:`pytest-model-lib` pytest plugin for model-lib Feb 22, 2026 N/A N/A + :pypi:`pytest-modern` A more modern pytest Aug 19, 2025 4 - Beta pytest>=8 + :pypi:`pytest-modified-env` Pytest plugin to fail a test if it leaves modified \`os.environ\` afterwards. Jan 29, 2022 4 - Beta N/A + :pypi:`pytest-modifyjunit` Utility for adding additional properties to junit xml for IDM QE Jan 10, 2019 N/A N/A + :pypi:`pytest-molecule` PyTest Molecule Plugin :: discover and run molecule tests Mar 29, 2022 5 - Production/Stable pytest (>=7.0.0) + :pypi:`pytest-molecule-JC` PyTest Molecule Plugin :: discover and run molecule tests Jul 18, 2023 5 - Production/Stable pytest (>=7.0.0) + :pypi:`pytest-mongo` MongoDB process and client fixtures plugin for Pytest. Feb 04, 2026 5 - Production/Stable pytest>=8.4 + :pypi:`pytest-mongodb` pytest plugin for MongoDB fixtures May 16, 2023 5 - Production/Stable N/A + :pypi:`pytest-mongodb-nono` pytest plugin for MongoDB Jan 07, 2025 N/A N/A + :pypi:`pytest-mongodb-ry` pytest plugin for MongoDB Sep 25, 2025 N/A N/A + :pypi:`pytest-mongo-docker` A tiny plugin for pytest which runs MongoDB in Docker Mar 05, 2026 5 - Production/Stable pytest>=7.4 + :pypi:`pytest-monitor` Pytest plugin for analyzing resource usage. Jun 25, 2023 5 - Production/Stable pytest + :pypi:`pytest-monkeyplus` pytest's monkeypatch subclass with extra functionalities Sep 18, 2012 5 - Production/Stable N/A + :pypi:`pytest-monkeytype` pytest-monkeytype: Generate Monkeytype annotations from your pytest tests. Jul 29, 2020 4 - Beta N/A + :pypi:`pytest-moto` Fixtures for integration tests of AWS services,uses moto mocking library. Aug 28, 2015 1 - Planning N/A + :pypi:`pytest-moto-fixtures` Fixtures for testing code that interacts with AWS Nov 17, 2025 1 - Planning pytest<9.1,>=8.3; extra == "pytest" + :pypi:`pytest-motor` A pytest plugin for motor, the non-blocking MongoDB driver. Jul 21, 2021 3 - Alpha pytest + :pypi:`pytest-mp` A test batcher for multiprocessed Pytest runs May 23, 2018 4 - Beta pytest + :pypi:`pytest-mpi` pytest plugin to collect information from tests Jan 08, 2022 3 - Alpha pytest + :pypi:`pytest-mpiexec` pytest plugin for running individual tests with mpiexec Jul 29, 2024 3 - Alpha pytest + :pypi:`pytest-mpi-tmweigand` forked pytest plugin to collect information from tests Dec 27, 2025 3 - Alpha pytest + :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 + :pypi:`pytest-mpl-oggm` pytest plugin to help with testing figures output from Matplotlib Mar 06, 2026 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) + :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Jan 28, 2026 5 - Production/Stable pytest<10; extra == "test" + :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A + :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 28, 2025 N/A pytest + :pypi:`pytest-multithreading` a pytest plugin for th and concurrent testing Aug 05, 2024 N/A N/A + :pypi:`pytest-multithreading-allure` pytest_multithreading_allure Nov 25, 2022 N/A N/A + :pypi:`pytest-mutagen` Add the mutation testing feature to pytest Jul 24, 2020 N/A pytest (>=5.4) + :pypi:`pytest-my-cool-lib` Nov 02, 2023 N/A pytest (>=7.1.3,<8.0.0) + :pypi:`pytest-my-plugin` A pytest plugin that does awesome things Jan 27, 2025 N/A pytest>=6.0 + :pypi:`pytest-mypy` A Pytest Plugin for Mypy Apr 02, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-mypyd` Mypy static type checker plugin for Pytest Aug 20, 2019 4 - Beta pytest (<4.7,>=2.8) ; python_version < "3.5" + :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Feb 16, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 + :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 + :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 + :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Feb 25, 2026 4 - Beta pytest<9.1.0,>=7.0.0; python_version < "3.14" + :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Nov 05, 2025 2 - Pre-Alpha pytest>=8.3.2; extra == "dev" + :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest + :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) + :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) + :pypi:`pytest-neon` Pytest plugin for Neon database branch isolation in tests Feb 05, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-neos` Pytest plugin for neos Sep 10, 2024 5 - Production/Stable pytest<8.0,>=7.2; extra == "dev" + :pypi:`pytest-netconf` A pytest plugin that provides a mock NETCONF (RFC6241/RFC6242) server for local testing. Nov 03, 2025 N/A N/A + :pypi:`pytest-netdut` "Automated software testing for switches using pytest" Oct 09, 2025 N/A pytest>=3.5.0 + :pypi:`pytest-network` A simple plugin to disable network on socket level. May 07, 2020 N/A N/A + :pypi:`pytest-network-endpoints` Network endpoints plugin for pytest Mar 06, 2022 N/A pytest + :pypi:`pytest-never-sleep` pytest plugin helps to avoid adding tests without mock \`time.sleep\` May 05, 2021 3 - Alpha pytest (>=3.5.1) + :pypi:`pytest-nginx` nginx fixture for pytest May 03, 2025 5 - Production/Stable pytest>=3.0.0 + :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A + :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest + :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) + :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Feb 13, 2026 N/A pytest<9.0.0,>=8.2.0 + :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest + :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A + :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A + :pypi:`pytest-nocustom` Run all tests without custom markers Aug 05, 2024 5 - Production/Stable N/A + :pypi:`pytest-node-dependency` pytest plugin for controlling execution flow Apr 10, 2024 5 - Production/Stable N/A + :pypi:`pytest-nodev` Test-driven source code search for Python. Jul 21, 2016 4 - Beta pytest (>=2.8.1) + :pypi:`pytest-nogarbage` Ensure a test produces no garbage Feb 24, 2025 5 - Production/Stable pytest>=4.6.0 + :pypi:`pytest-no-problem` Pytest plugin to tell you when there's no problem Jan 11, 2026 N/A pytest>=7.0 + :pypi:`pytest-nose-attrib` pytest plugin to use nose @attrib marks decorators and pick tests based on attributes and partially uses nose-attrib plugin approach Aug 13, 2023 N/A N/A + :pypi:`pytest_notebook` A pytest plugin for testing Jupyter Notebooks. Nov 28, 2023 4 - Beta pytest>=3.5.0 + :pypi:`pytest-notice` Send pytest execution result email Nov 05, 2020 N/A N/A + :pypi:`pytest-notification` A pytest plugin for sending a desktop notification and playing a sound upon completion of tests Jun 19, 2020 N/A pytest (>=4) + :pypi:`pytest-notifier` A pytest plugin to notify test result Jun 12, 2020 3 - Alpha pytest + :pypi:`pytest-notifier-plugin` Pytest plugin для отправки нотификаций в различные каналы связи о статуе прохождения тестов. Dec 22, 2025 N/A pytest>=7.0 + :pypi:`pytest_notify` Get notifications when your tests ends Jul 05, 2017 N/A pytest>=3.0.0 + :pypi:`pytest-notimplemented` Pytest markers for not implemented features and tests. Aug 27, 2019 N/A pytest (>=5.1,<6.0) + :pypi:`pytest-notion` A PyTest Reporter to send test runs to Notion.so Aug 07, 2019 N/A N/A + :pypi:`pytest-nunit` A pytest plugin for generating NUnit3 test result XML output Feb 26, 2024 5 - Production/Stable N/A + :pypi:`pytest-oar` PyTest plugin for the OAR testing framework May 12, 2025 N/A pytest>=6.0.1 + :pypi:`pytest-oarepo` Feb 17, 2026 N/A pytest>=7.1.2; extra == "dev" + :pypi:`pytest-object-getter` Import any object from a 3rd party module while mocking its namespace on demand. Jul 31, 2022 5 - Production/Stable pytest + :pypi:`pytest-ochrus` pytest results data-base and HTML reporter Feb 21, 2018 4 - Beta N/A + :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-odoo` py.test plugin to run Odoo tests May 20, 2025 5 - Production/Stable pytest>=8 + :pypi:`pytest-odoo-fixtures` Project description Jun 25, 2019 N/A N/A + :pypi:`pytest-oduit` py.test plugin to run Odoo tests Feb 11, 2026 5 - Production/Stable pytest>=8 + :pypi:`pytest-oerp` pytest plugin to test OpenERP modules Feb 28, 2012 3 - Alpha N/A + :pypi:`pytest-offline` Mar 09, 2023 1 - Planning pytest (>=7.0.0,<8.0.0) + :pypi:`pytest-ogsm-plugin` 针对特定项目定制化插件,优化了pytest报告展示方式,并添加了项目所需特定参数 May 16, 2023 N/A N/A + :pypi:`pytest-ok` The ultimate pytest output plugin Apr 01, 2019 4 - Beta N/A + :pypi:`pytest-once` xdist-safe 'run once' fixture decorator for pytest (setup/teardown across workers) Oct 10, 2025 3 - Alpha pytest>=8.4.0 + :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 + :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A + :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Mar 04, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 + :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 + :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest + :pypi:`pytest-opentmi` pytest plugin for publish results to opentmi Feb 09, 2026 5 - Production/Stable pytest>=5.0 + :pypi:`pytest-operator` Fixtures for Charmed Operators Sep 28, 2022 N/A pytest + :pypi:`pytest-optional` include/exclude values of fixtures in pytest Oct 07, 2015 N/A N/A + :pypi:`pytest-optional-tests` Easy declaration of optional tests (i.e., that are not run by default) Jul 21, 2025 4 - Beta pytest; extra == "dev" + :pypi:`pytest-orchestration` A pytest plugin for orchestrating tests Jul 18, 2019 N/A N/A + :pypi:`pytest-order` pytest plugin to run your tests in a specific order Aug 22, 2024 5 - Production/Stable pytest>=5.0; python_version < "3.10" + :pypi:`pytest-ordered` Declare the order in which tests should run in your pytest.ini Nov 09, 2025 N/A pytest>=6.2.0 + :pypi:`pytest-ordering` pytest plugin to run your tests in a specific order Nov 14, 2018 4 - Beta pytest + :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A + :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A + :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Jan 02, 2026 N/A pytest==9.0.2 + :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 + :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A + :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest + :pypi:`pytest-pact` A simple plugin to use with pytest Jan 07, 2019 4 - Beta N/A + :pypi:`pytest-pagerduty` Pytest plugin for PagerDuty integration via automation testing. Mar 22, 2025 N/A pytest<9.0.0,>=7.4.0 + :pypi:`pytest-pahrametahrize` Parametrize your tests with a Boston accent. Nov 24, 2021 4 - Beta pytest (>=6.0,<7.0) + :pypi:`pytest-paia-blockly` pytest plugin for PAIA Blockly: verify get_solution() against test cases Mar 02, 2026 N/A pytest>=8.0 + :pypi:`pytest-paraflow` Deterministic pytest test sharding across CI machines Feb 26, 2026 3 - Alpha pytest>=9.0.0 + :pypi:`pytest-parallel` a pytest plugin for parallel and concurrent testing Oct 10, 2021 3 - Alpha pytest (>=3.0.0) + :pypi:`pytest-parallel-39` a pytest plugin for parallel and concurrent testing Jul 12, 2021 3 - Alpha pytest (>=3.0.0) + :pypi:`pytest-parallelize-tests` pytest plugin that parallelizes test execution across multiple hosts Jan 27, 2023 4 - Beta N/A + :pypi:`pytest-param` pytest plugin to test all, first, last or random params Sep 11, 2016 4 - Beta pytest (>=2.6.0) + :pypi:`pytest-parametrization` Simpler PyTest parametrization May 22, 2022 5 - Production/Stable N/A + :pypi:`pytest-parametrization-annotation` A pytest library for parametrizing tests using type hints. Dec 10, 2024 5 - Production/Stable pytest>=7 + :pypi:`pytest-parametrize` pytest decorator for parametrizing test cases in a dict-way Sep 25, 2025 5 - Production/Stable pytest<9.0.0,>=8.3.0 + :pypi:`pytest-parametrize-cases` A more user-friendly way to write parametrized tests. Mar 13, 2022 N/A pytest (>=6.1.2) + :pypi:`pytest-parametrized` Pytest decorator for parametrizing tests with default iterables. Dec 21, 2024 5 - Production/Stable pytest + :pypi:`pytest-parametrize-suite` A simple pytest extension for creating a named test suite. Jan 19, 2023 5 - Production/Stable pytest + :pypi:`pytest_param_files` Create pytest parametrize decorators from external files. Jul 29, 2023 N/A pytest + :pypi:`pytest-params` Simplified pytest test case parameters. Apr 27, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-param-scope` pytest parametrize scope fixture workaround Oct 18, 2023 N/A pytest + :pypi:`pytest-parawtf` Finally spell paramete?ri[sz]e correctly Dec 03, 2018 4 - Beta pytest (>=3.6.0) + :pypi:`pytest-park` Organise and analyse your pytest benchmarks Feb 22, 2026 N/A N/A + :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A + :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) + :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A + :pypi:`pytest-patch` An automagic \`patch\` fixture that can patch objects directly or by name. Apr 29, 2023 3 - Alpha pytest (>=7.0.0) + :pypi:`pytest-patches` A contextmanager pytest fixture for handling multiple mock patches Aug 30, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-patterns` pytest plugin to make testing complicated long string output easy to write and easy to debug Oct 22, 2024 4 - Beta pytest>=6 + :pypi:`pytest-pdb` pytest plugin which adds pdb helper commands related to pytest. Jul 31, 2018 N/A N/A + :pypi:`pytest-peach` pytest plugin for fuzzing with Peach API Security Apr 12, 2019 4 - Beta pytest (>=2.8.7) + :pypi:`pytest-pep257` py.test plugin for pep257 Jul 09, 2016 N/A N/A + :pypi:`pytest-pep8` pytest plugin to check PEP8 requirements Apr 27, 2014 N/A N/A + :pypi:`pytest-percent` Change the exit code of pytest test sessions when a required percent of tests pass. May 21, 2020 N/A pytest (>=5.2.0) + :pypi:`pytest-percents` Mar 16, 2024 N/A N/A + :pypi:`pytest-perf` Run performance tests against the mainline code. May 20, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" + :pypi:`pytest-performance` A simple plugin to ensure the execution of critical sections of code has not been impacted Sep 11, 2020 5 - Production/Stable pytest (>=3.7.0) + :pypi:`pytest-performancetotal` A performance plugin for pytest Aug 05, 2025 5 - Production/Stable N/A + :pypi:`pytest-persistence` Pytest tool for persistent objects Aug 21, 2024 N/A N/A + :pypi:`pytest-pexpect` Pytest pexpect plugin. Sep 10, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 18, 2025 5 - Production/Stable pytest>=7.4 + :pypi:`pytest-pgsql` Pytest plugins and helpers for tests using a Postgres database. May 13, 2020 5 - Production/Stable pytest (>=3.0.0) + :pypi:`pytest-phmdoctest` pytest plugin to test Python examples in Markdown using phmdoctest. Apr 15, 2022 4 - Beta pytest (>=5.4.3) + :pypi:`pytest-phoenix-interface` Pytest extension tool for phoenix projects. Mar 19, 2025 N/A N/A + :pypi:`pytest-picked` Run the tests related to the changed files Nov 06, 2024 N/A pytest>=3.7.0 + :pypi:`pytest-pickle-cache` A pytest plugin for caching test results using pickle. Feb 06, 2026 4 - Beta pytest>=9 + :pypi:`pytest-pigeonhole` Jun 25, 2018 5 - Production/Stable pytest (>=3.4) + :pypi:`pytest-pikachu` Show surprise when tests are passing Aug 05, 2021 5 - Production/Stable pytest + :pypi:`pytest-pilot` Slice in your test base thanks to powerful markers. Dec 17, 2025 5 - Production/Stable N/A + :pypi:`pytest-pingguo-pytest-plugin` pingguo test Oct 26, 2022 4 - Beta N/A + :pypi:`pytest-pings` 🦊 The pytest plugin for Firefox Telemetry 📊 Jun 29, 2019 3 - Alpha pytest (>=5.0.0) + :pypi:`pytest-pinned` A simple pytest plugin for pinning tests Sep 17, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) + :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A + :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 + :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Feb 04, 2026 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) + :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A + :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) + :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 + :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Feb 19, 2026 N/A N/A + :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A + :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 + :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A + :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A + :pypi:`pytest-playwright-snapshot` A pytest wrapper for snapshot testing with playwright Aug 19, 2021 N/A N/A + :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A + :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Feb 05, 2026 N/A N/A + :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 12, 2025 3 - Alpha pytest + :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 + :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Feb 10, 2026 N/A N/A + :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 + :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A + :pypi:`pytest-podman` Pytest plugin for Podman integration Feb 03, 2026 N/A N/A + :pypi:`pytest-pogo` Pytest plugin for pogo-migrate Jan 20, 2026 4 - Beta pytest>=7 + :pypi:`pytest-pointers` Pytest plugin to define functions you test with special marks for better navigation and reports Dec 26, 2022 N/A N/A + :pypi:`pytest-pokie` Pokie plugin for pytest Oct 19, 2023 5 - Production/Stable N/A + :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A + :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest + :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A + :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Feb 24, 2026 N/A N/A + :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) + :pypi:`pytest-poo` Visualize your crappy tests Mar 25, 2021 5 - Production/Stable pytest (>=2.3.4) + :pypi:`pytest-poo-fail` Visualize your failed tests with poo Feb 12, 2015 5 - Production/Stable N/A + :pypi:`pytest-pook` Pytest plugin for pook Feb 15, 2024 4 - Beta pytest + :pypi:`pytest-pop` A pytest plugin to help with testing pop projects May 09, 2023 5 - Production/Stable pytest + :pypi:`pytest-porcochu` Show surprise when tests are passing Nov 28, 2024 5 - Production/Stable N/A + :pypi:`pytest-portion` Select a portion of the collected tests Mar 04, 2026 4 - Beta pytest>=3.5.0 + :pypi:`pytest-postgres` Run PostgreSQL in Docker container in Pytest. Mar 22, 2020 N/A pytest + :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. Jan 23, 2026 5 - Production/Stable pytest>=8.2 + :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) + :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 + :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Jan 27, 2026 3 - Alpha pytest + :pypi:`pytest-prefer-nested-dup-tests` A Pytest plugin to drop duplicated tests during collection, but will prefer keeping nested packages. Apr 27, 2022 4 - Beta pytest (>=7.1.1,<8.0.0) + :pypi:`pytest-pretty` pytest plugin for printing summary data as I want it Jun 04, 2025 5 - Production/Stable pytest>=7 + :pypi:`pytest-pretty-terminal` pytest plugin for generating prettier terminal output Jan 31, 2022 N/A pytest (>=3.4.1) + :pypi:`pytest-pride` Minitest-style test colors Apr 02, 2016 3 - Alpha N/A + :pypi:`pytest-print` pytest-print adds the printer fixture you can use to print messages to the user (directly to the pytest runner, not stdout) Feb 11, 2026 5 - Production/Stable pytest>=9.0.2 + :pypi:`pytest-priority` pytest plugin for add priority for tests Aug 19, 2024 N/A pytest + :pypi:`pytest-proceed` Oct 01, 2024 N/A pytest + :pypi:`pytest-profiles` pytest plugin for configuration profiles Dec 09, 2021 4 - Beta pytest (>=3.7.0) + :pypi:`pytest-profiling` Profiling plugin for py.test Nov 29, 2024 5 - Production/Stable pytest + :pypi:`pytest-progress` pytest plugin for instant test progress status Nov 11, 2025 5 - Production/Stable pytest>=6.0 + :pypi:`pytest-prometheus` Report test pass / failures to a Prometheus PushGateway Oct 03, 2017 N/A N/A + :pypi:`pytest-prometheus-pushgateway` Pytest report plugin for Zulip Sep 27, 2022 5 - Production/Stable pytest + :pypi:`pytest-prometheus-pushgw` Pytest plugin to export test metrics to Prometheus Pushgateway May 19, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-proofy` Pytest plugin for Proofy test reporting Nov 13, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-prosper` Test helpers for Prosper projects Sep 24, 2018 N/A N/A + :pypi:`pytest-prysk` Pytest plugin for prysk Dec 10, 2024 4 - Beta pytest>=7.3.2 + :pypi:`pytest-pspec` A rspec format reporter for Python ptest Jun 02, 2020 4 - Beta pytest (>=3.0.0) + :pypi:`pytest-psqlgraph` pytest plugin for testing applications that use psqlgraph Oct 19, 2021 4 - Beta pytest (>=6.0) + :pypi:`pytest-pt` pytest plugin to use \*.pt files as tests Nov 21, 2025 5 - Production/Stable pytest + :pypi:`pytest-ptera` Use ptera probes in tests Mar 01, 2022 N/A pytest (>=6.2.4,<7.0.0) + :pypi:`pytest-publish` Jun 04, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-pudb` Pytest PuDB debugger integration Oct 25, 2018 3 - Alpha pytest (>=2.0) + :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A + :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A + :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) + :pypi:`pytest-pvcr` PyTest Process VCR Feb 25, 2026 3 - Alpha pytest>=3.5.0 + :pypi:`pytest-pve-cloud` Feb 27, 2026 N/A pytest==8.4.2 + :pypi:`pytest-py125` Dec 03, 2022 N/A N/A + :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) + :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 + :pypi:`pytest-pydantic-schema-sync` Pytest plugin to synchronise Pydantic model schemas with JSONSchema files Aug 29, 2024 N/A pytest>=6 + :pypi:`pytest-pydev` py.test plugin to connect to a remote debug server with PyDev or PyCharm. Nov 15, 2017 3 - Alpha N/A + :pypi:`pytest-pydocstyle` pytest plugin to run pydocstyle Oct 09, 2024 3 - Alpha pytest>=7.0 + :pypi:`pytest-pylembic` This package provides pytest plugin for validating Alembic migrations using the pylembic package. Jul 22, 2025 3 - Alpha N/A + :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 + :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A + :pypi:`pytest-pymysql-autorecord` Record PyMySQL queries and mock with the stored data. Sep 02, 2022 N/A N/A + :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Feb 27, 2026 N/A pytest + :pypi:`pytest-pypi` Easily test your HTTP library against a local copy of pypi Mar 04, 2018 3 - Alpha N/A + :pypi:`pytest-pypom-navigation` Core engine for cookiecutter-qa and pytest-play packages Feb 18, 2019 4 - Beta pytest (>=3.0.7) + :pypi:`pytest-pyppeteer` A plugin to run pyppeteer in pytest Apr 28, 2022 N/A pytest (>=6.2.5,<7.0.0) + :pypi:`pytest-pyq` Pytest fixture "q" for pyq Mar 10, 2020 5 - Production/Stable N/A + :pypi:`pytest-pyramid` pytest_pyramid - provides fixtures for testing pyramid applications with pytest test suite Sep 30, 2025 5 - Production/Stable pytest + :pypi:`pytest-pyramid-server` Pyramid server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-pyreport` PyReport is a lightweight reporting plugin for Pytest that provides concise HTML report May 05, 2024 N/A pytest + :pypi:`pytest-pyright` Pytest plugin for type checking code with Pyright Jan 26, 2024 4 - Beta pytest >=7.0.0 + :pypi:`pytest-pyspark-plugin` Pytest pyspark plugin (p3) Nov 23, 2025 4 - Beta pytest>=8.0.0 + :pypi:`pytest-pyspec` The pytest-pyspec plugin transforms pytest output into a beautiful, readable format similar to RSpec. It provides semantic meaning to your tests by organizing them into descriptive hierarchies, using the prefixes \`Describe\`/\`Test\`, \`With\`/\`Without\`/\`When\`, and \`test\`/\`it\`, while allowing docstrings and decorators to override the descriptions. Nov 18, 2025 5 - Production/Stable pytest<10,>=9 + :pypi:`pytest-pystack` Plugin to run pystack after a timeout for a test suite. Nov 16, 2024 N/A pytest>=3.5.0 + :pypi:`pytest-pytestdb` Add your description here Sep 14, 2025 N/A N/A + :pypi:`pytest-pytestrail` Pytest plugin for interaction with TestRail Aug 27, 2020 4 - Beta pytest (>=3.8.0) + :pypi:`pytest-pytestrail-internal` Pytest plugin for interaction with TestRail, Pytest plugin for TestRail (internal fork from: https://github.com/tolstislon/pytest-pytestrail with PR #25 fix) Jun 12, 2025 4 - Beta pytest>=3.8.0 + :pypi:`pytest-pythonhashseed` Pytest plugin to set PYTHONHASHSEED env var. Nov 16, 2025 4 - Beta pytest>=3.0.0 + :pypi:`pytest-pythonpath` pytest plugin for adding to the PYTHONPATH from command line or configs. Feb 10, 2022 5 - Production/Stable pytest (<7,>=2.5.2) + :pypi:`pytest-python-test-engineer-sort` Sort plugin for Pytest May 13, 2024 N/A pytest>=6.2.0 + :pypi:`pytest-pytorch` pytest plugin for a better developer experience when working with the PyTorch test suite May 25, 2021 4 - Beta pytest + :pypi:`pytest-pyvenv` A package for create venv in tests Feb 27, 2024 N/A pytest ; extra == 'test' + :pypi:`pytest-pyvista` Pytest-pyvista package. Dec 02, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-qanova` A pytest plugin to collect test information Sep 05, 2024 3 - Alpha pytest + :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 + :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) + :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) + :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Jun 14, 2024 5 - Production/Stable pytest>=6.0 + :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) + :pypi:`pytest-qr` pytest plugin to generate test result QR codes Nov 25, 2021 4 - Beta N/A + :pypi:`pytest-qt` pytest support for PyQt and PySide applications Jul 01, 2025 5 - Production/Stable pytest + :pypi:`pytest-qt-app` QT app fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-quarantine` A plugin for pytest to manage expected test failures Nov 24, 2019 5 - Production/Stable pytest (>=4.6) + :pypi:`pytest-quickcheck` pytest plugin to generate random data inspired by QuickCheck Nov 05, 2022 4 - Beta pytest (>=4.0) + :pypi:`pytest_quickify` Run test suites with pytest-quickify. Jun 14, 2019 N/A pytest + :pypi:`pytest-rabbitmq` RabbitMQ process and client fixtures for pytest Oct 15, 2024 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-race` Race conditions tester for pytest Jun 07, 2022 4 - Beta N/A + :pypi:`pytest-rage` pytest plugin to implement PEP712 Oct 21, 2011 3 - Alpha N/A + :pypi:`pytest-rail` pytest plugin for creating TestRail runs and adding results May 02, 2022 N/A pytest (>=3.6) + :pypi:`pytest-railflow-testrail-reporter` Generate json reports along with specified metadata defined in test markers. Jun 29, 2022 5 - Production/Stable pytest + :pypi:`pytest-raises` An implementation of pytest.raises as a pytest.mark fixture Apr 23, 2020 N/A pytest (>=3.2.2) + :pypi:`pytest-raisesregexp` Simple pytest plugin to look for regex in Exceptions Dec 18, 2015 N/A N/A + :pypi:`pytest-raisin` Plugin enabling the use of exception instances with pytest.raises Feb 06, 2022 N/A pytest + :pypi:`pytest-random` py.test plugin to randomize tests Apr 28, 2013 3 - Alpha N/A + :pypi:`pytest-randomly` Pytest plugin to randomly order tests and control random.seed. Sep 12, 2025 5 - Production/Stable pytest + :pypi:`pytest-randomness` Pytest plugin about random seed management May 30, 2019 3 - Alpha N/A + :pypi:`pytest-random-num` Randomise the order in which pytest tests are run with some control over the randomness Oct 19, 2020 5 - Production/Stable N/A + :pypi:`pytest-random-order` Randomise the order in which pytest tests are run with some control over the randomness Jun 22, 2025 5 - Production/Stable pytest + :pypi:`pytest-ranking` A Pytest plugin for faster fault detection via regression test prioritization Apr 08, 2025 4 - Beta pytest>=7.4.3 + :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A + :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest + :pypi:`pytest-reana` Pytest fixtures for REANA. Mar 03, 2026 3 - Alpha N/A + :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 + :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Dec 23, 2025 N/A pytest>=8.4.1 + :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A + :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A + :pypi:`pytest-redis` Redis fixtures and fixture factories for Pytest. Feb 28, 2026 5 - Production/Stable pytest>=8.4.0 + :pypi:`pytest-redislite` Pytest plugin for testing code using Redis Apr 05, 2022 4 - Beta pytest + :pypi:`pytest-redmine` Pytest plugin for redmine Mar 19, 2018 1 - Planning N/A + :pypi:`pytest-ref` A plugin to store reference files to ease regression testing Nov 23, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-reference-formatter` Conveniently run pytest with a dot-formatted test reference. Oct 01, 2019 4 - Beta N/A + :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest + :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 + :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 25, 2026 N/A pytest>7.2 + :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A + :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest + :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 + :pypi:`pytest_relay` A plugin to relay test information and control from and to pytest Jan 31, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-relay-run` A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. Jan 31, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest_relay_ws` An extension plugin to pytest-relay to relay pytest information via websockets Jan 31, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A + :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 + :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) + :pypi:`pytest-remove-stale-bytecode` py.test plugin to remove stale byte code files. Nov 19, 2025 4 - Beta pytest + :pypi:`pytest-reorder` Reorder tests depending on their paths and names. May 31, 2018 4 - Beta pytest + :pypi:`pytest-repeat` pytest plugin for repeating tests Apr 07, 2025 5 - Production/Stable pytest + :pypi:`pytest-repeated` A pytest module for very basic statistical tests. Repeat test multiple times and pass if the underlying test passes a threshold. Feb 24, 2026 N/A pytest>=7.0.0 + :pypi:`pytest_repeater` py.test plugin for repeating single test multiple times. Feb 09, 2018 1 - Planning N/A + :pypi:`pytest-replay` Saves previous test runs and allow re-execute previous pytest runs to reproduce crashes or flaky tests Dec 23, 2025 5 - Production/Stable pytest + :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest + :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A + :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest + :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A + :pypi:`pytest-reporter-html-dots` A basic HTML report for pytest using Jinja2 template engine. Apr 26, 2025 N/A N/A + :pypi:`pytest-reporter-plus` Lightweight enhanced HTML reporter for Pytest Jul 16, 2025 N/A N/A + :pypi:`pytest-report-extras` Pytest plugin to enhance pytest-html and allure reports by adding comments, screenshots, webpage sources and attachments. Dec 24, 2025 N/A pytest>=8.4.0 + :pypi:`pytest-reportinfra` Pytest plugin for reportinfra Aug 11, 2019 3 - Alpha N/A + :pypi:`pytest-reporting` A plugin to report summarized results in a table format Oct 25, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest + :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest + :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Dec 02, 2025 N/A pytest>=4.6.10 + :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A + :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A + :pypi:`pytest-req` pytest requests plugin Mar 02, 2026 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-reqcov` A pytest plugin for requirement coverage tracking Jul 04, 2025 3 - Alpha pytest>=6.0 + :pypi:`pytest-reqs` pytest plugin to check pinned requirements May 12, 2019 N/A pytest (>=2.4.2) + :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-requestselapsed` collect and show http requests elapsed time Aug 14, 2022 N/A N/A + :pypi:`pytest-requests-futures` Pytest Plugin to Mock Requests Futures Jul 06, 2022 5 - Production/Stable pytest + :pypi:`pytest-requirements` pytest plugin for using custom markers to relate tests to requirements and usecases Feb 28, 2025 N/A pytest + :pypi:`pytest-requires` A pytest plugin to elegantly skip tests with optional requirements Dec 21, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-reqyaml` This is a plugin where generate requests test cases from yaml. Aug 16, 2025 N/A pytest>=8.4.1 + :pypi:`pytest-reraise` Make multi-threaded pytest test cases fail when they should Sep 20, 2022 5 - Production/Stable pytest (>=4.6) + :pypi:`pytest-rerun` Re-run only changed files in specified branch Jul 08, 2019 N/A pytest (>=3.6) + :pypi:`pytest-rerun-all` Rerun testsuite for a certain time or iterations Jul 30, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 + :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 + :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A + :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 30, 2025 4 - Beta pytest + :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 + :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A + :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 + :pypi:`pytest-resource-usage` Pytest plugin for reporting running time and peak memory usage Nov 06, 2022 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-respect` Pytest plugin to load resource files relative to test code and to expect values to match them. Oct 21, 2025 5 - Production/Stable pytest>=8.0.0 + :pypi:`pytest-responsemock` Simplified requests calls mocking for pytest Mar 10, 2022 5 - Production/Stable N/A + :pypi:`pytest-responses` py.test integration for responses Oct 11, 2022 N/A pytest (>=2.5) + :pypi:`pytest-rest-api` Aug 08, 2022 N/A pytest (>=7.1.2,<8.0.0) + :pypi:`pytest-restrict` Pytest plugin to restrict the test types allowed Feb 09, 2026 5 - Production/Stable pytest + :pypi:`pytest-resttest` A REST API testing framework for Python, as plugin for pytest. Uses simple and readable YAML files for specifying test cases. Jan 01, 2026 5 - Production/Stable N/A + :pypi:`pytest-result-log` A pytest plugin that records the start, end, and result information of each use case in a log file Jan 10, 2024 N/A pytest>=7.2.0 + :pypi:`pytest-result-notify` Default template for PDM package Apr 27, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-results` Easily spot regressions in your tests. Oct 08, 2025 4 - Beta pytest + :pypi:`pytest-result-sender` Apr 20, 2023 N/A pytest>=7.3.1 + :pypi:`pytest-result-sender-jms` Default template for PDM package May 22, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-result-sender-lj` Default template for PDM package Dec 17, 2024 N/A pytest>=8.3.4 + :pypi:`pytest-result-sender-lyt` Default template for PDM package Mar 14, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-result-sender-misszhang` Default template for PDM package Mar 21, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-result-sender-r` Default template for PDM package Dec 26, 2025 N/A pytest>=8.4.2 + :pypi:`pytest-resume` A Pytest plugin to resuming from the last run test Apr 22, 2023 4 - Beta pytest (>=7.0) + :pypi:`pytest-rethinkdb` A RethinkDB plugin for pytest. Jul 24, 2016 4 - Beta N/A + :pypi:`pytest-retry` Adds the ability to retry flaky tests in CI environments Jan 19, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-retry-class` A pytest plugin to rerun entire class on failure Nov 24, 2024 N/A pytest>=5.3 + :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A + :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Feb 03, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest + :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 + :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest + :pypi:`pytest-rich-reporter` A pytest plugin using Rich for beautiful test result formatting. Feb 17, 2022 1 - Planning pytest (>=5.0.0) + :pypi:`pytest-richtrace` A pytest plugin that displays the names and information of the pytest hook functions as they are executed. Jun 20, 2023 N/A N/A + :pypi:`pytest-ringo` pytest plugin to test webapplications using the Ringo webframework Sep 27, 2017 3 - Alpha N/A + :pypi:`pytest-rmsis` Sycronise pytest results to Jira RMsis Aug 10, 2022 N/A pytest (>=5.3.5) + :pypi:`pytest-rmysql` This is a plugin which is able to connet MySQL easyly. Aug 17, 2025 N/A pytest>=8.4.1 + :pypi:`pytest-rng` Fixtures for seeding tests and making randomness reproducible Aug 08, 2019 5 - Production/Stable pytest + :pypi:`pytest-roast` pytest plugin for ROAST configuration override and fixtures Nov 09, 2022 5 - Production/Stable pytest + :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Dec 22, 2025 N/A pytest<10,>=7 + :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A + :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) + :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 + :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) + :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Jan 02, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-rst` Test code from RST documents with pytest Feb 22, 2026 N/A N/A + :pypi:`pytest-rt` pytest data collector plugin for Testgr May 05, 2022 N/A N/A + :pypi:`pytest-rts` Coverage-based regression test selection (RTS) plugin for pytest May 17, 2021 N/A pytest + :pypi:`pytest-ruff` pytest plugin to check ruff requirements. Jun 19, 2025 4 - Beta pytest>=5 + :pypi:`pytest-run-changed` Pytest plugin that runs changed tests only Apr 02, 2021 3 - Alpha pytest + :pypi:`pytest-runfailed` implement a --failed option for pytest Mar 24, 2016 N/A N/A + :pypi:`pytest-run-parallel` A simple pytest plugin to run tests concurrently Jan 14, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-run-subprocess` Pytest Plugin for running and testing subprocesses. Nov 12, 2022 5 - Production/Stable pytest + :pypi:`pytest-runtime-types` Checks type annotations on runtime while running tests. Feb 09, 2023 N/A pytest + :pypi:`pytest-runtime-xfail` Call runtime_xfail() to mark running test as xfail. Oct 10, 2025 5 - Production/Stable pytest>=5.0.0 + :pypi:`pytest-runtime-yoyo` run case mark timeout Jun 12, 2023 N/A pytest (>=7.2.0) + :pypi:`pytest-saccharin` pytest-saccharin is a updated fork of pytest-sugar, a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly). Oct 31, 2022 3 - Alpha N/A + :pypi:`pytest-salt` Pytest Salt Plugin Jan 27, 2020 4 - Beta N/A + :pypi:`pytest-salt-containers` A Pytest plugin that builds and creates docker containers Nov 09, 2016 4 - Beta N/A + :pypi:`pytest-salt-factories` Pytest Salt Plugin Jul 08, 2025 5 - Production/Stable pytest>=7.4.0 + :pypi:`pytest-salt-from-filenames` Simple PyTest Plugin For Salt's Test Suite Specifically Jan 29, 2019 4 - Beta pytest (>=4.1) + :pypi:`pytest-salt-runtests-bridge` Simple PyTest Plugin For Salt's Test Suite Specifically Dec 05, 2019 4 - Beta pytest (>=4.1) + :pypi:`pytest-sample-argvalues` A utility function to help choose a random sample from your argvalues in pytest. May 07, 2024 N/A pytest + :pypi:`pytest-sanic` a pytest plugin for Sanic Oct 25, 2021 N/A pytest (>=5.2) + :pypi:`pytest-sanitizer` A pytest plugin to sanitize output for LLMs (personal tool, no warranty or liability) Mar 16, 2025 3 - Alpha pytest>=6.0.0 + :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A + :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A + :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A + :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A + :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 + :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A + :pypi:`pytest-schedule` Automate and customize test scheduling effortlessly on local machines. Oct 31, 2024 N/A N/A + :pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0 + :pypi:`pytest-scim2-server` SCIM2 server fixture for Pytest Nov 14, 2025 4 - Beta pytest>=8.3.4 + :pypi:`pytest-screenshot-on-failure` Saves a screenshot when a test case from a pytest execution fails Jul 21, 2023 4 - Beta N/A + :pypi:`pytest-scrutinize` Scrutinize your pytest test suites for slow fixtures, tests and more. Aug 19, 2024 4 - Beta pytest>=6 + :pypi:`pytest-securestore` An encrypted password store for use within pytest cases Nov 08, 2021 4 - Beta N/A + :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) + :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 + :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A + :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A + :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A + :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 + :pypi:`pytest-semantic` A pytest plugin for testing LLM outputs using semantic similarity matching Nov 11, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-semantic-assert` Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. Jan 09, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-send-email` Send pytest execution result email Sep 02, 2024 N/A pytest + :pypi:`pytest-sentry` A pytest plugin to send testrun information to Sentry.io Jul 01, 2025 N/A pytest + :pypi:`pytest-sequence-markers` Pytest plugin for sequencing markers for execution of tests May 23, 2023 5 - Production/Stable N/A + :pypi:`pytest-server` test server exec cmd Sep 09, 2024 N/A N/A + :pypi:`pytest-server-fixtures` Extensible server fixtures for py.test Nov 29, 2024 5 - Production/Stable pytest + :pypi:`pytest-serverless` Automatically mocks resources from serverless.yml in pytest using moto. May 09, 2022 4 - Beta N/A + :pypi:`pytest-servers` pytest servers Dec 21, 2025 3 - Alpha pytest>=6.2 + :pypi:`pytest-service` Aug 06, 2024 5 - Production/Stable pytest>=6.0.0 + :pypi:`pytest-services` Services plugin for pytest testing framework Jul 16, 2025 6 - Mature pytest + :pypi:`pytest-session2file` pytest-session2file (aka: pytest-session_to_file for v0.1.0 - v0.1.2) is a py.test plugin for capturing and saving to file the stdout of py.test. Jan 26, 2021 3 - Alpha pytest + :pypi:`pytest-session-fixture-globalize` py.test plugin to make session fixtures behave as if written in conftest, even if it is written in some modules May 15, 2018 4 - Beta N/A + :pypi:`pytest-session_to_file` pytest-session_to_file is a py.test plugin for capturing and saving to file the stdout of py.test. Oct 01, 2015 3 - Alpha N/A + :pypi:`pytest-setupinfo` Displaying setup info during pytest command run Jan 23, 2023 N/A N/A + :pypi:`pytest-sftpserver` py.test plugin to locally test sftp server connections. Sep 16, 2019 4 - Beta N/A + :pypi:`pytest-shard` Dec 11, 2020 4 - Beta pytest + :pypi:`pytest-shard-fork` Shard tests to support parallelism across multiple machines Jun 13, 2025 4 - Beta pytest + :pypi:`pytest-shared-session-scope` Pytest session-scoped fixture that works with xdist Oct 31, 2025 N/A pytest>=7.0.0 + :pypi:`pytest-share-hdf` Plugin to save test data in HDF files and retrieve them for comparison Sep 21, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-sharkreport` this is pytest report plugin. Jul 11, 2022 N/A pytest (>=3.5) + :pypi:`pytest-shell` A pytest plugin to help with testing shell scripts / black box commands Mar 27, 2022 N/A N/A + :pypi:`pytest-shell-utilities` Pytest plugin to simplify running shell commands against the system Oct 22, 2024 5 - Production/Stable pytest>=7.4.0 + :pypi:`pytest-sheraf` Versatile ZODB abstraction layer - pytest fixtures Feb 11, 2020 N/A pytest + :pypi:`pytest-sherlock` pytest plugin help to find coupled tests Aug 14, 2023 5 - Production/Stable pytest >=3.5.1 + :pypi:`pytest-shortcuts` Expand command-line shortcuts listed in pytest configuration Oct 29, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-shutil` A goodie-bag of unix shell and environment tools for py.test Nov 29, 2024 5 - Production/Stable pytest + :pypi:`pytest-sigil` Proper fixture resource cleanup by handling signals Oct 21, 2025 N/A pytest<9.0.0,>=7.0.0 + :pypi:`pytest-simbind` Pytest plugin to operate with objects generated by Simbind tool. Mar 28, 2024 N/A pytest>=7.0.0 + :pypi:`pytest-simplehttpserver` Simple pytest fixture to spin up an HTTP server Jun 24, 2021 4 - Beta N/A + :pypi:`pytest-simple-plugin` Simple pytest plugin Nov 27, 2019 N/A N/A + :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest + :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 + :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 01, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest + :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 + :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) + :pypi:`pytest-skippy` Automatically skip tests that don't need to run! Jan 27, 2018 3 - Alpha pytest (>=2.3.4) + :pypi:`pytest-skip-slow` A pytest plugin to skip \`@pytest.mark.slow\` tests by default. Feb 09, 2023 N/A pytest>=6.2.0 + :pypi:`pytest-skipuntil` A simple pytest plugin to skip flapping test with deadline Nov 25, 2023 4 - Beta pytest >=3.8.0 + :pypi:`pytest-slack` Pytest to Slack reporting plugin Dec 15, 2020 5 - Production/Stable N/A + :pypi:`pytest-slow` A pytest plugin to skip \`@pytest.mark.slow\` tests by default. Sep 28, 2021 N/A N/A + :pypi:`pytest-slowest-first` Sort tests by their last duration, slowest first Dec 11, 2022 4 - Beta N/A + :pypi:`pytest-slow-first` Prioritize running the slowest tests first. Jan 30, 2024 4 - Beta pytest >=3.5.0 + :pypi:`pytest-slow-last` Run tests in order of execution time (faster tests first) Mar 16, 2025 4 - Beta pytest>=3.5.0 + :pypi:`pytest-smartcollect` A plugin for collecting tests that touch changed code Oct 04, 2018 N/A pytest (>=3.5.0) + :pypi:`pytest-smartcov` Smart coverage plugin for pytest. Sep 30, 2017 3 - Alpha N/A + :pypi:`pytest-smart-debugger-backend` Backend server for Pytest Smart Debugger Sep 17, 2025 N/A N/A + :pypi:`pytest-smart-rerun` A Pytest plugin for intelligent retrying of flaky tests. Oct 12, 2025 3 - Alpha N/A + :pypi:`pytest-smell` Automated bad smell detection tool for Pytest Jun 26, 2022 N/A N/A + :pypi:`pytest-smoke` Pytest plugin for smoke testing Nov 09, 2025 4 - Beta pytest<10,>=7.0.0 + :pypi:`pytest-smtp` Send email with pytest execution result Feb 20, 2021 N/A pytest + :pypi:`pytest-smtp4dev` Plugin for smtp4dev API Jun 27, 2023 5 - Production/Stable N/A + :pypi:`pytest-smtpd` An SMTP server for testing built on aiosmtpd May 15, 2023 N/A pytest + :pypi:`pytest-smtp-test-server` pytest plugin for using \`smtp-test-server\` as a fixture Dec 03, 2023 2 - Pre-Alpha pytest (>=7.4.3,<8.0.0) + :pypi:`pytest-snail` Plugin for adding a marker to slow running tests. 🐌 Nov 04, 2019 3 - Alpha pytest (>=5.0.1) + :pypi:`pytest-snap` A text-based snapshot testing library implemented as a pytest plugin Aug 25, 2025 N/A pytest>=8.0.0 + :pypi:`pytest-snapcheck` Minimal deterministic test-run snapshot capture for pytest. Sep 07, 2025 N/A pytest>=8.0 + :pypi:`pytest-snapci` py.test plugin for Snap-CI Nov 12, 2015 N/A N/A + :pypi:`pytest-snapmock` Snapshots for your mocks. Nov 15, 2024 N/A N/A + :pypi:`pytest-snapshot` A plugin for snapshot testing with pytest. Apr 23, 2022 4 - Beta pytest (>=3.0.0) + :pypi:`pytest-snapshot-with-message-generator` A plugin for snapshot testing with pytest. Jul 25, 2023 4 - Beta pytest (>=3.0.0) + :pypi:`pytest-snmpserver` May 12, 2021 N/A N/A + :pypi:`pytest-snob` A pytest plugin that only selects meaningful python tests to run. Jan 12, 2025 N/A pytest + :pypi:`pytest-snowflake-bdd` Setup test data and run tests on snowflake in BDD style! Jan 05, 2022 4 - Beta pytest (>=6.2.0) + :pypi:`pytest-socket` Pytest Plugin to disable socket calls during tests Jan 28, 2024 4 - Beta pytest (>=6.2.5) + :pypi:`pytest-sofaepione` Test the installation of SOFA and the SofaEpione plugin. Aug 17, 2022 N/A N/A + :pypi:`pytest-soft-assert` Pytest plugin for soft assertions. Dec 07, 2025 N/A pytest>=8.4.0 + :pypi:`pytest-soft-assertions` May 05, 2020 3 - Alpha pytest + :pypi:`pytest-solidity` A PyTest library plugin for Solidity language. Jan 15, 2022 1 - Planning pytest (<7,>=6.0.1) ; extra == 'tests' + :pypi:`pytest-solr` Solr process and client fixtures for py.test. May 11, 2020 3 - Alpha pytest (>=3.0.0) + :pypi:`pytest-sort` Tools for sorting test cases Mar 22, 2025 N/A pytest>=7.4.0 + :pypi:`pytest-sorter` A simple plugin to first execute tests that historically failed more Apr 20, 2021 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-sosu` Unofficial PyTest plugin for Sauce Labs Aug 04, 2023 2 - Pre-Alpha pytest + :pypi:`pytest-sourceorder` Test-ordering plugin for pytest Sep 01, 2021 4 - Beta pytest + :pypi:`pytest-spark` pytest plugin to run the tests with support of pyspark. May 21, 2025 4 - Beta pytest + :pypi:`pytest-spawner` py.test plugin to spawn process and communicate with them. Jul 31, 2015 4 - Beta N/A + :pypi:`pytest-spec` Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION. Feb 22, 2026 N/A pytest; extra == "test" + :pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0 + :pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7 + :pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Jan 21, 2026 4 - Beta pytest>=8.1.1 + :pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Feb 09, 2026 N/A pytest>=3.0.0 + :pypi:`pytest-splinter` Splinter plugin for pytest testing framework Sep 09, 2022 6 - Mature pytest (>=3.0.0) + :pypi:`pytest-splinter4` Pytest plugin for the splinter automation library Feb 01, 2024 6 - Mature pytest >=8.0.0 + :pypi:`pytest-split` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Feb 03, 2026 4 - Beta pytest<10,>=5 + :pypi:`pytest-split-ct` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 23, 2026 4 - Beta pytest<10,>=5 + :pypi:`pytest-split-ext` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Sep 23, 2023 4 - Beta pytest (>=5,<8) + :pypi:`pytest-splitio` Split.io SDK integration for e2e tests Sep 22, 2020 N/A pytest (<7,>=5.0) + :pypi:`pytest-split-ng` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 05, 2026 4 - Beta pytest<10,>=5 + :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) + :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A + :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 + :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 + :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 24, 2025 N/A N/A + :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) + :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A + :pypi:`pytest-sqlalchemy` pytest plugin with sqlalchemy related fixtures Apr 19, 2025 3 - Alpha pytest>=8.0 + :pypi:`pytest-sqlalchemy-mock` pytest sqlalchemy plugin for mock Aug 10, 2024 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-sqlalchemy-session` A pytest plugin for preserving test isolation that use SQLAlchemy. May 19, 2023 4 - Beta pytest (>=7.0) + :pypi:`pytest-sql-bigquery` Yet another SQL-testing framework for BigQuery provided by pytest plugin Dec 19, 2019 N/A pytest + :pypi:`pytest-sqlfluff` A pytest plugin to use sqlfluff to enable format checking of sql files. Dec 21, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-sqlguard` Pytest fixture to record and check SQL Queries made by SQLAlchemy Jun 06, 2025 4 - Beta pytest>=7 + :pypi:`pytest-squadcast` Pytest report plugin for Squadcast Feb 22, 2022 5 - Production/Stable pytest + :pypi:`pytest-srcpaths` Add paths to sys.path Oct 15, 2021 N/A pytest>=6.2.0 + :pypi:`pytest-ssh` pytest plugin for ssh command run May 27, 2019 N/A pytest + :pypi:`pytest-start-from` Start pytest run from a given point Apr 11, 2016 N/A N/A + :pypi:`pytest-static` pytest-static May 25, 2025 3 - Alpha pytest<8.0.0,>=7.4.3 + :pypi:`pytest-stats` Collects tests metadata for future analysis, easy to extend for any data store Jul 18, 2024 N/A pytest>=8.0.0 + :pypi:`pytest-statsd` pytest plugin for reporting to graphite Nov 30, 2018 5 - Production/Stable pytest (>=3.0.0) + :pypi:`pytest-status` Add status mark for tests Aug 22, 2024 N/A pytest + :pypi:`pytest-stderr-db` Add your description here Sep 14, 2025 N/A N/A + :pypi:`pytest-stdout-db` Add your description here Sep 14, 2025 N/A N/A + :pypi:`pytest-stepfunctions` A small description May 08, 2021 4 - Beta pytest + :pypi:`pytest-steps` Create step-wise / incremental tests in pytest. Sep 23, 2021 5 - Production/Stable N/A + :pypi:`pytest-stepthrough` Pause and wait for Enter after each test with --step Aug 14, 2025 N/A N/A + :pypi:`pytest-stepwise` Run a test suite one failing test at a time. Dec 01, 2015 4 - Beta N/A + :pypi:`pytest-stf` pytest plugin for openSTF Sep 23, 2025 N/A pytest>=5.0 + :pypi:`pytest-stochastic` A pytest plugin for principled stochastic unit testing using concentration inequalities Feb 24, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-stochastics` pytest plugin that allows selectively running tests several times and accepting \*some\* failures. Dec 01, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-stoq` A plugin to pytest stoq Feb 09, 2021 4 - Beta N/A + :pypi:`pytest-storage` Pytest plugin to store test artifacts Sep 12, 2025 3 - Alpha pytest>=8.4.2 + :pypi:`pytest-store` Pytest plugin to store values from test runs Jul 30, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-streaming` Plugin for testing pubsub, pulsar, and kafka systems with pytest locally and in ci/cd Jan 14, 2026 5 - Production/Stable pytest>=8.3.5 + :pypi:`pytest-stress` A Pytest plugin that allows you to loop tests for a user defined amount of time. Dec 07, 2019 4 - Beta pytest (>=3.6.0) + :pypi:`pytest-structlog` Structured logging assertions Sep 10, 2025 N/A pytest + :pypi:`pytest-structmpd` provide structured temporary directory Oct 17, 2018 N/A N/A + :pypi:`pytest-stub` Stub packages, modules and attributes. Apr 28, 2020 5 - Production/Stable N/A + :pypi:`pytest-stubprocess` Provide stub implementations for subprocesses in Python tests Sep 17, 2018 3 - Alpha pytest (>=3.5.0) + :pypi:`pytest-study` A pytest plugin to organize long run tests (named studies) without interfering the regular tests Sep 26, 2017 3 - Alpha pytest (>=2.0) + :pypi:`pytest-subinterpreter` Run pytest in a subinterpreter Nov 25, 2023 N/A pytest>=7.0.0 + :pypi:`pytest-subket` Pytest Plugin to disable socket calls during tests Jul 31, 2025 4 - Beta N/A + :pypi:`pytest-subprocess` A plugin to fake subprocess for pytest Jan 04, 2025 5 - Production/Stable pytest>=4.0.0 + :pypi:`pytest-subtesthack` A hack to explicitly set up and tear down fixtures. Jul 16, 2022 N/A N/A + :pypi:`pytest-subtests` unittest subTest() support and subtests fixture Oct 20, 2025 4 - Beta pytest>=7.4 + :pypi:`pytest-subunit` pytest-subunit is a plugin for py.test which outputs testsresult in subunit format. Sep 17, 2023 N/A pytest (>=2.3) + :pypi:`pytest-sugar` pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly). Aug 23, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-suitemanager` A simple plugin to use with pytest Apr 28, 2023 4 - Beta N/A + :pypi:`pytest-suite-timeout` A pytest plugin for ensuring max suite time Jan 26, 2024 N/A pytest>=7.0.0 + :pypi:`pytest-supercov` Pytest plugin for measuring explicit test-file to source-file coverage Jul 02, 2023 N/A N/A + :pypi:`pytest-svn` SVN repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-symbols` pytest-symbols is a pytest plugin that adds support for passing test environment symbols into pytest tests. Nov 20, 2017 3 - Alpha N/A + :pypi:`pytest-system-statistics` Pytest plugin to track and report system usage statistics Feb 16, 2022 5 - Production/Stable pytest (>=6.0.0) + :pypi:`pytest-system-test-plugin` Pyst - Pytest System-Test Plugin Feb 03, 2022 N/A N/A + :pypi:`pytest_tagging` a pytest plugin to tag tests Nov 08, 2024 N/A pytest>=7.1.3 + :pypi:`pytest-takeltest` Fixtures for ansible, testinfra and molecule Sep 07, 2024 N/A N/A + :pypi:`pytest-talisker` Nov 28, 2021 N/A N/A + :pypi:`pytest-tally` A Pytest plugin to generate realtime summary stats, and display them in-console using a text-based dashboard. May 22, 2023 4 - Beta pytest (>=6.2.5) + :pypi:`pytest-tap` Test Anything Protocol (TAP) reporting plugin for pytest Jan 30, 2025 5 - Production/Stable pytest>=3.0 + :pypi:`pytest-tape` easy assertion with expected results saved to yaml files Mar 17, 2021 4 - Beta N/A + :pypi:`pytest-target` Pytest plugin for remote target orchestration. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) + :pypi:`pytest-taskgraph` Add your description here Apr 09, 2025 N/A pytest + :pypi:`pytest-tblineinfo` tblineinfo is a py.test plugin that insert the node id in the final py.test report when --tb=line option is used Dec 01, 2015 3 - Alpha pytest (>=2.0) + :pypi:`pytest-tcpclient` A pytest plugin for testing TCP clients Nov 16, 2022 N/A pytest (<8,>=7.1.3) + :pypi:`pytest-tdd` run pytest on a python module Aug 18, 2023 4 - Beta N/A + :pypi:`pytest-teamcity-logblock` py.test plugin to introduce block structure in teamcity build log, if output is not captured May 15, 2018 4 - Beta N/A + :pypi:`pytest-teardown` Apr 15, 2025 N/A pytest<9.0.0,>=7.4.1 + :pypi:`pytest-telegram` Pytest to Telegram reporting plugin Apr 25, 2024 5 - Production/Stable N/A + :pypi:`pytest-telegram-notifier` Telegram notification plugin for Pytest Jun 27, 2023 5 - Production/Stable N/A + :pypi:`pytest-tempdir` Predictable and repeatable tempdir support. Oct 11, 2019 4 - Beta pytest (>=2.8.1) + :pypi:`pytest-terra-fixt` Terraform and Terragrunt fixtures for pytest Sep 15, 2022 N/A pytest (==6.2.5) + :pypi:`pytest-terraform` A pytest plugin for using terraform fixtures May 21, 2024 N/A pytest>=6.0 + :pypi:`pytest-terraform-fixture` generate terraform resources to use with pytest Nov 14, 2018 4 - Beta N/A + :pypi:`pytest-test-analyzer` A powerful tool for analyzing pytest test files and generating detailed reports Jun 14, 2025 4 - Beta N/A + :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A + :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Mar 04, 2026 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 11, 2026 N/A N/A + :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest + :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest + :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) + :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) + :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Mar 06, 2026 4 - Beta pytest>=7 + :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 + :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A + :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A + :pypi:`pytest-testit-parametrize` A pytest plugin for uploading parameterized tests parameters into TMS TestIT Dec 04, 2024 4 - Beta pytest>=8.3.3 + :pypi:`pytest-testlink-adaptor` pytest reporting plugin for testlink Dec 20, 2018 4 - Beta pytest (>=2.6) + :pypi:`pytest-testmon` selects tests affected by changed files and methods Dec 01, 2025 4 - Beta pytest<10,>=5 + :pypi:`pytest-testmon-dev` selects tests affected by changed files and methods Mar 30, 2023 4 - Beta pytest (<8,>=5) + :pypi:`pytest-testmon-oc` nOly selects tests affected by changed files and methods Jun 01, 2022 4 - Beta pytest (<8,>=5) + :pypi:`pytest-testmon-skip-libraries` selects tests affected by changed files and methods Mar 03, 2023 4 - Beta pytest (<8,>=5) + :pypi:`pytest-testobject` Plugin to use TestObject Suites with Pytest Sep 24, 2019 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-testpluggy` set your encoding Jan 07, 2022 N/A pytest + :pypi:`pytest-testrail` A pytest plugin for creating TestRail runs and adding results Jan 25, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-testrail2` A pytest plugin to upload results to TestRail. Feb 10, 2023 N/A pytest (<8.0,>=7.2.0) + :pypi:`pytest-testrail-api` TestRail Api Python Client Mar 17, 2025 N/A pytest + :pypi:`pytest-testrail-api-client` TestRail Api Python Client Dec 14, 2021 N/A pytest + :pypi:`pytest-testrail-appetize` pytest plugin for creating TestRail runs and adding results Sep 29, 2021 N/A N/A + :pypi:`pytest-testrail-client` pytest plugin for Testrail Sep 29, 2020 5 - Production/Stable N/A + :pypi:`pytest-testrail-e2e` pytest plugin for creating TestRail runs and adding results Oct 11, 2021 N/A pytest (>=3.6) + :pypi:`pytest-testrail-integrator` Pytest plugin for sending report to testrail system. Aug 01, 2022 N/A pytest (>=6.2.5) + :pypi:`pytest-testrail-ns` pytest plugin for creating TestRail runs and adding results Aug 12, 2022 N/A N/A + :pypi:`pytest-testrail-reporter` Sep 10, 2018 N/A N/A + :pypi:`pytest-testrail-results` A pytest plugin to upload results to TestRail. Mar 04, 2024 N/A pytest >=7.2.0 + :pypi:`pytest-testreport` Dec 01, 2022 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-testreport-new` Oct 07, 2023 4 - Beta pytest >=3.5.0 + :pypi:`pytest-testslide` TestSlide fixture for pytest Jan 07, 2021 5 - Production/Stable pytest (~=6.2) + :pypi:`pytest-test-this` Plugin for py.test to run relevant tests, based on naively checking if a test contains a reference to the symbol you supply Sep 15, 2019 2 - Pre-Alpha pytest (>=2.3) + :pypi:`pytest-test-tracer-for-pytest` A plugin that allows coll test data for use on Test Tracer Jun 28, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-test-tracer-for-pytest-bdd` A plugin that allows coll test data for use on Test Tracer Aug 20, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-test-utils` Feb 08, 2024 N/A pytest >=3.9 + :pypi:`pytest-tesults` Tesults plugin for pytest Nov 12, 2024 5 - Production/Stable pytest>=3.5.0 + :pypi:`pytest-texts-score` Texts content similarity scoring plugin Dec 17, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-textual-snapshot` Snapshot testing for Textual apps Jan 23, 2025 5 - Production/Stable pytest>=8.0.0 + :pypi:`pytest-tezos` pytest-ligo Jan 16, 2020 4 - Beta N/A + :pypi:`pytest-tf` Test your OpenTofu and Terraform config using a PyTest plugin May 29, 2024 N/A pytest<9.0.0,>=8.2.1 + :pypi:`pytest-th2-bdd` pytest_th2_bdd May 13, 2022 N/A N/A + :pypi:`pytest-thawgun` Pytest plugin for time travel May 26, 2020 3 - Alpha N/A + :pypi:`pytest-thread` Jul 07, 2023 N/A N/A + :pypi:`pytest-threadleak` Detects thread leaks Jul 03, 2022 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-tick` Ticking on tests Aug 31, 2021 5 - Production/Stable pytest (>=6.2.5,<7.0.0) + :pypi:`pytest_time` Dec 01, 2025 3 - Alpha pytest + :pypi:`pytest-timeassert-ethan` execution duration Dec 25, 2023 N/A pytest + :pypi:`pytest-timeit` A pytest plugin to time test function runs Oct 13, 2016 4 - Beta N/A + :pypi:`pytest-timeout` pytest plugin to abort hanging tests May 05, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-timeouts` Linux-only Pytest plugin to control durations of various test case execution phases Sep 21, 2019 5 - Production/Stable N/A + :pypi:`pytest-timer` A timer plugin for pytest Dec 26, 2023 N/A pytest + :pypi:`pytest-timestamper` Pytest plugin to add a timestamp prefix to the pytest output Mar 27, 2024 N/A N/A + :pypi:`pytest-timestamps` A simple plugin to view timestamps for each test Sep 11, 2023 N/A pytest (>=7.3,<8.0) + :pypi:`pytest-timing-plugin` pytest插件开发demo Jul 21, 2025 N/A N/A + :pypi:`pytest-tiny-api-client` The companion pytest plugin for tiny-api-client Jan 04, 2024 5 - Production/Stable pytest + :pypi:`pytest-tinybird` A pytest plugin to report test results to tinybird May 07, 2025 4 - Beta pytest>=3.8.0 + :pypi:`pytest-tipsi-django` Better fixtures for django Feb 05, 2024 5 - Production/Stable pytest>=6.0.0 + :pypi:`pytest-tipsi-testing` Better fixtures management. Various helpers Feb 04, 2024 5 - Production/Stable pytest>=3.3.0 + :pypi:`pytest-tldr` A pytest plugin that limits the output to just the things you need. Nov 10, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-tm4j-reporter` Cloud Jira Test Management (TM4J) PyTest reporter plugin Sep 01, 2020 N/A pytest + :pypi:`pytest-tmnet` A small example package Mar 01, 2022 N/A N/A + :pypi:`pytest-tmp-files` Utilities to create temporary file hierarchies in pytest. Dec 08, 2023 N/A pytest + :pypi:`pytest-tmpfs` A pytest plugin that helps you on using a temporary filesystem for testing. Aug 29, 2022 N/A pytest + :pypi:`pytest-tmreport` this is a vue-element ui report for pytest Aug 12, 2022 N/A N/A + :pypi:`pytest-tmux` A pytest plugin that enables tmux driven tests Sep 01, 2025 4 - Beta N/A + :pypi:`pytest-todo` A small plugin for the pytest testing framework, marking TODO comments as failure May 23, 2019 4 - Beta pytest + :pypi:`pytest-tomato` Mar 01, 2019 5 - Production/Stable N/A + :pypi:`pytest-toolbelt` This is just a collection of utilities for pytest, but don't really belong in pytest proper. Aug 12, 2019 3 - Alpha N/A + :pypi:`pytest-toolbox` Numerous useful plugins for pytest. Apr 07, 2018 N/A pytest (>=3.5.0) + :pypi:`pytest-toolkit` Useful utils for testing Jun 07, 2024 N/A N/A + :pypi:`pytest-tools` Pytest tools Oct 21, 2022 4 - Beta N/A + :pypi:`pytest-topo` Topological sorting for pytest Jun 05, 2024 N/A pytest>=7.0.0 + :pypi:`pytest-tornado` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Jun 17, 2020 5 - Production/Stable pytest (>=3.6) + :pypi:`pytest-tornado5` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Nov 16, 2018 5 - Production/Stable pytest (>=3.6) + :pypi:`pytest-tornado-yen3` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Oct 15, 2018 5 - Production/Stable N/A + :pypi:`pytest-tornasync` py.test plugin for testing Python 3.5+ Tornado code Jul 15, 2019 3 - Alpha pytest (>=3.0) + :pypi:`pytest-trace` Save OpenTelemetry spans generated during testing Jun 19, 2022 N/A pytest (>=4.6) + :pypi:`pytest-track` Feb 26, 2021 3 - Alpha pytest (>=3.0) + :pypi:`pytest-translations` Test your translation files. Sep 11, 2023 5 - Production/Stable pytest (>=7) + :pypi:`pytest-travis-fold` Folds captured output sections in Travis CI build log Nov 29, 2017 4 - Beta pytest (>=2.6.0) + :pypi:`pytest-trello` Plugin for py.test that integrates trello using markers Nov 20, 2015 5 - Production/Stable N/A + :pypi:`pytest-trepan` Pytest plugin for trepan debugger. Sep 11, 2025 5 - Production/Stable pytest>=4.0.0 + :pypi:`pytest-trialtemp` py.test plugin for using the same _trial_temp working directory as trial Jun 08, 2015 N/A N/A + :pypi:`pytest-trio` Pytest plugin for trio Nov 01, 2022 N/A pytest (>=7.2.0) + :pypi:`pytest-trytond` Pytest plugin for the Tryton server framework Nov 04, 2022 4 - Beta pytest (>=5) + :pypi:`pytest-tspwplib` A simple plugin to use with tspwplib Jan 08, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) + :pypi:`pytest-tstcls` Test Class Base Mar 23, 2020 5 - Production/Stable N/A + :pypi:`pytest-tui` Text User Interface (TUI) and HTML report for Pytest test runs Dec 08, 2023 4 - Beta N/A + :pypi:`pytest-tui-runner` Textual-based terminal UI for running pytest tests Dec 12, 2025 N/A pytest<=9.0.1,>=7.4 + :pypi:`pytest-tuitest` pytest plugin for testing TUI and regular command-line applications. Apr 11, 2025 N/A pytest>=7.4.0 + :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A + :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A + :pypi:`pytest-twisted` A twisted plugin for pytest. Sep 10, 2024 5 - Production/Stable pytest>=2.3 + :pypi:`pytest-ty` A pytest plugin to run the ty type checker Feb 18, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-typechecker` Run type checkers on specified test files Feb 04, 2022 N/A pytest (>=6.2.5,<7.0.0) + :pypi:`pytest-typed-schema-shot` Pytest plugin for automatic JSON Schema generation and validation from examples Jun 14, 2025 N/A pytest + :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A + :pypi:`pytest-typhoon-polarion` Typhoontest plugin for Siemens Polarion Feb 01, 2024 4 - Beta N/A + :pypi:`pytest-typhoon-xray` Typhoon HIL plugin for pytest Aug 15, 2023 4 - Beta N/A + :pypi:`pytest-typing-runner` Pytest plugin to make it easier to run and check python code against static type checkers May 31, 2025 N/A N/A + :pypi:`pytest-tytest` Typhoon HIL plugin for pytest May 25, 2020 4 - Beta pytest (>=5.4.2) + :pypi:`pytest-tzshift` A Pytest plugin that transparently re-runs tests under a matrix of timezones and locales. Jun 25, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-ubersmith` Easily mock calls to ubersmith at the \`requests\` level. Apr 13, 2015 N/A N/A + :pypi:`pytest-ui` Text User Interface for running python tests Jul 05, 2021 4 - Beta pytest + :pypi:`pytest-ui-failed-screenshot` UI自动测试失败时自动截图,并将截图加入到测试报告中 Dec 06, 2022 N/A N/A + :pypi:`pytest-ui-failed-screenshot-allure` UI自动测试失败时自动截图,并将截图加入到Allure测试报告中 Dec 06, 2022 N/A N/A + :pypi:`pytest-uncollect-if` A plugin to uncollect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-unflakable` Unflakable plugin for PyTest Apr 30, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-unhandled-exception-exit-code` Plugin for py.test set a different exit code on uncaught exceptions Jun 22, 2020 5 - Production/Stable pytest (>=2.3) + :pypi:`pytest-unique` Pytest fixture to generate unique values. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-unittest-filter` A pytest plugin for filtering unittest-based test classes Jan 12, 2019 4 - Beta pytest (>=3.1.0) + :pypi:`pytest-unittest-id-runner` A pytest plugin to run tests using unittest-style test IDs Feb 09, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-unmagic` Pytest fixtures with conventional import semantics Jul 14, 2025 5 - Production/Stable pytest + :pypi:`pytest-unmarked` Run only unmarked tests Aug 27, 2019 5 - Production/Stable N/A + :pypi:`pytest-unordered` Test equality of unordered collections in pytest Jun 03, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-unstable` Set a test as unstable to return 0 even if it failed Sep 27, 2022 4 - Beta N/A + :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Dec 23, 2025 4 - Beta pytest>7.3.2 + :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest + :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A + :pypi:`pytest-urllib3` A pytest plugin to mock urllib3 requests Mar 06, 2026 3 - Alpha pytest>=8 + :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) + :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Feb 27, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest + :pypi:`pytest-valgrind` May 19, 2021 N/A N/A + :pypi:`pytest-variables` pytest plugin for providing variables to tests/fixtures Feb 01, 2024 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-variant` Variant support for Pytest Jun 06, 2022 N/A N/A + :pypi:`pytest-vcr` Plugin for managing VCR.py cassettes Apr 26, 2019 5 - Production/Stable pytest (>=3.6.0) + :pypi:`pytest-vcr-delete-on-fail` A pytest plugin that automates vcrpy cassettes deletion on test failure. Feb 16, 2024 5 - Production/Stable pytest (>=8.0.0,<9.0.0) + :pypi:`pytest-vcrpandas` Test from HTTP interactions to dataframe processed. Jan 12, 2019 4 - Beta pytest + :pypi:`pytest-vcs` Sep 22, 2022 4 - Beta N/A + :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest + :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest + :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A + :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Mar 04, 2026 5 - Production/Stable pytest>=9.0.0 + :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) + :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest + :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 + :pypi:`pytest-vnc` VNC client for Pytest Nov 06, 2023 N/A pytest + :pypi:`pytest-voluptuous` Pytest plugin for asserting data against voluptuous schema. Jun 09, 2020 N/A pytest + :pypi:`pytest-vscodedebug` A pytest plugin to easily enable debugging tests within Visual Studio Code Dec 04, 2020 4 - Beta N/A + :pypi:`pytest-vscode-pycharm-cls` A PyTest helper to enable start remote debugger on test start or failure or when pytest.set_trace is used. Feb 01, 2023 N/A pytest + :pypi:`pytest-vtestify` A pytest plugin for visual assertion using SSIM and image comparison. Feb 04, 2025 N/A pytest + :pypi:`pytest-vts` pytest plugin for automatic recording of http stubbed tests Jun 05, 2019 N/A pytest (>=2.3) + :pypi:`pytest-vulture` A pytest plugin to checks dead code with vulture Nov 25, 2024 N/A pytest>=7.0.0 + :pypi:`pytest-vw` pytest-vw makes your failing test cases succeed under CI tools scrutiny Oct 07, 2015 4 - Beta N/A + :pypi:`pytest-vyper` Plugin for the vyper smart contract language. May 28, 2020 2 - Pre-Alpha N/A + :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-wake` Nov 19, 2024 N/A pytest + :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A + :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Jan 10, 2026 4 - Beta N/A + :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A + :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A + :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A + :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest + :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 + :pypi:`pytest-webtestpilot` Pytest plugin for running WebTestPilot JSON tests Dec 28, 2025 N/A pytest>=9.0.2 + :pypi:`pytest-wetest` Welian API Automation test framework pytest plugin Nov 10, 2018 4 - Beta N/A + :pypi:`pytest-when` Utility which makes mocking more readable and controllable Sep 25, 2025 N/A pytest>=7.3.1 + :pypi:`pytest-whirlwind` Testing Tornado. Jun 12, 2020 N/A N/A + :pypi:`pytest-wholenodeid` pytest addon for displaying the whole node id for failures Aug 26, 2015 4 - Beta pytest (>=2.0) + :pypi:`pytest-win32consoletitle` Pytest progress in console title (Win32 only) Aug 08, 2021 N/A N/A + :pypi:`pytest-winnotify` Windows tray notifications for py.test results. Apr 22, 2016 N/A N/A + :pypi:`pytest-wirefracture` Pytest fixtures for wirefracture Dec 31, 2025 N/A N/A + :pypi:`pytest-wiremock` A pytest plugin for programmatically using wiremock in integration tests Mar 27, 2022 N/A pytest (>=7.1.1,<8.0.0) + :pypi:`pytest-wiretap` \`pytest\` plugin for recording call stacks Mar 18, 2025 N/A pytest + :pypi:`pytest-with-docker` pytest with docker helpers. Nov 09, 2021 N/A pytest + :pypi:`pytest-workaround-12888` forces an import of readline early in the process to work around pytest bug #12888 Jan 15, 2025 N/A N/A + :pypi:`pytest-workflow` A pytest plugin for configuring workflow/pipeline tests using YAML files Mar 18, 2024 5 - Production/Stable pytest >=7.0.0 + :pypi:`pytest-xdist` pytest xdist plugin for distributed testing, most importantly across multiple CPUs Jul 01, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-xdist-debug-for-graingert` pytest xdist plugin for distributed testing and loop-on-failing modes Jul 24, 2019 5 - Production/Stable pytest (>=4.4.0) + :pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0) + :pypi:`pytest-xdist-gnumake` A small example package Jun 22, 2025 N/A pytest + :pypi:`pytest-xdist-load-testing` xdist scheduler to repeately run tests Nov 22, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Dec 31, 2025 4 - Beta pytest>=8.4.2 + :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) + :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Feb 16, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) + :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A + :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 + :pypi:`pytest-xhtml` pytest plugin for generating HTML reports Feb 26, 2026 5 - Production/Stable pytest>=7 + :pypi:`pytest-xiuyu` This is a pytest plugin Jul 25, 2023 5 - Production/Stable N/A + :pypi:`pytest-xlog` Extended logging for test and decorators May 31, 2020 4 - Beta N/A + :pypi:`pytest-xlsx` pytest plugin for generating test cases by xlsx(excel) Aug 07, 2024 N/A pytest~=8.2.2 + :pypi:`pytest-xml` Create simple XML results for parsing Nov 14, 2024 4 - Beta pytest>=8.0.0 + :pypi:`pytest-xpara` An extended parametrizing plugin of pytest. Aug 07, 2024 3 - Alpha pytest + :pypi:`pytest-xprocess` A pytest plugin for managing processes across test runs. May 19, 2024 4 - Beta pytest>=2.8 + :pypi:`pytest-xray` May 30, 2019 3 - Alpha N/A + :pypi:`pytest-xrayjira` Mar 17, 2020 3 - Alpha pytest (==4.3.1) + :pypi:`pytest-xray-reporter` Pytest plugin for generating Xray JSON reports May 21, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-xray-server` May 03, 2022 3 - Alpha pytest (>=5.3.1) + :pypi:`pytest-xstress` Jun 01, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-xtime` pytest plugin for recording execution time Jun 05, 2025 4 - Beta pytest + :pypi:`pytest-xvfb` A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests. Mar 12, 2025 4 - Beta pytest>=2.8.1 + :pypi:`pytest-xvirt` A pytest plugin to virtualize test. For example to transparently running them on a remote box. Dec 15, 2024 4 - Beta pytest>=7.2.2 + :pypi:`pytest-yaml` This plugin is used to load yaml output to your test using pytest framework. Oct 05, 2018 N/A pytest + :pypi:`pytest-yaml-fei` a pytest yaml allure package Jul 27, 2025 N/A pytest + :pypi:`pytest-yaml-sanmu` Pytest plugin for generating test cases with YAML. In test cases, you can use markers, fixtures, variables, and even call Python functions. Sep 16, 2025 N/A pytest>=8.2.2 + :pypi:`pytest-yamltree` Create or check file/directory trees described by YAML Mar 02, 2020 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-yamlwsgi` Run tests against wsgi apps defined in yaml May 11, 2010 N/A N/A + :pypi:`pytest-yaml-yoyo` http/https API run by yaml Jun 19, 2023 N/A pytest (>=7.2.0) + :pypi:`pytest-yapf` Run yapf Jul 06, 2017 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-yapf3` Validate your Python file format with yapf Mar 29, 2023 5 - Production/Stable pytest (>=7) + :pypi:`pytest-yield` PyTest plugin to run tests concurrently, each \`yield\` switch context to other one Jan 23, 2019 N/A N/A + :pypi:`pytest-yls` Pytest plugin to test the YLS as a whole. Apr 09, 2025 N/A pytest<9.0.0,>=8.3.3 + :pypi:`pytest-youqu-playwright` pytest-youqu-playwright Jun 12, 2024 N/A pytest + :pypi:`pytest-yuk` Display tests you are uneasy with, using 🤢/🤮 for pass/fail of tests marked with yuk. Mar 26, 2021 N/A pytest>=5.0.0 + :pypi:`pytest-zafira` A Zafira plugin for pytest Sep 18, 2019 5 - Production/Stable pytest (==4.1.1) + :pypi:`pytest-zap` OWASP ZAP plugin for py.test. May 12, 2014 4 - Beta N/A + :pypi:`pytest-zcc` eee Jun 02, 2024 N/A N/A + :pypi:`pytest-zebrunner` Pytest connector for Zebrunner reporting Jul 04, 2024 5 - Production/Stable pytest>=4.5.0 + :pypi:`pytest-zeebe` Pytest fixtures for testing Camunda 8 processes using a Zeebe test engine. Feb 01, 2024 N/A pytest (>=7.4.2,<8.0.0) + :pypi:`pytest-zephyr-scale-integration` A library for integrating Jira Zephyr Scale (Adaptavist\TM4J) with pytest Jun 26, 2025 N/A pytest + :pypi:`pytest-zephyr-telegram` Плагин для отправки данных автотестов в Телеграм и Зефир Sep 30, 2024 N/A pytest==8.3.2 + :pypi:`pytest-zest` Zesty additions to pytest. Nov 17, 2022 N/A N/A + :pypi:`pytest-zhongwen-wendang` PyTest 中文文档 Mar 04, 2024 4 - Beta N/A + :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) + :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest + :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 + :pypi:`tursu` 🎬 A pytest plugin that transpiles Gherkin feature files to Python using AST, enforcing typing for ease of use and debugging. Mar 02, 2026 5 - Production/Stable pytest>=8.3.5 + ======================================================= ====================================================================================================================================================================================================================================================================================================================================================================================== ============== ===================== ================================================ .. only:: latex @@ -1961,7 +1967,7 @@ This list contains 1872 plugins. A contextmanager pytest fixture for handling multiple mock abstracts :pypi:`pytest-accept` - *last release*: Aug 19, 2025, + *last release*: Mar 01, 2026, *status*: N/A, *requires*: pytest>=7 @@ -1981,6 +1987,13 @@ This list contains 1872 plugins. pytest plugin for generating test execution results within Jira Test Management (tm4j) + :pypi:`pytest-adbc-replay` + *last release*: Mar 02, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0 + + pytest plugin to record and replay ADBC database queries + :pypi:`pytest-addons-test` *last release*: Aug 02, 2021, *status*: N/A, @@ -2038,7 +2051,7 @@ This list contains 1872 plugins. Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts :pypi:`pytest-agent-evals` - *last release*: Feb 10, 2026, + *last release*: Mar 06, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -2402,7 +2415,7 @@ This list contains 1872 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Feb 26, 2026, + *last release*: Mar 03, 2026, *status*: N/A, *requires*: pytest==7.2.2 @@ -2479,19 +2492,26 @@ This list contains 1872 plugins. pyest results colection plugin :pypi:`pytest-argus-reporter` - *last release*: Feb 03, 2026, + *last release*: Mar 03, 2026, *status*: 4 - Beta, *requires*: pytest~=9.0.0; extra == "dev" A simple plugin to report results of test into argus :pypi:`pytest-argus-server` - *last release*: Mar 24, 2025, + *last release*: Mar 05, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 A plugin that provides a running Argus API server for tests + :pypi:`pytest-arrakis` + *last release*: Mar 05, 2026, + *status*: 3 - Alpha, + *requires*: pytest + + Pytest plugin providing Arrakis fixtures for testing + :pypi:`pytest-arraydiff` *last release*: Nov 27, 2023, *status*: 4 - Beta, @@ -2535,7 +2555,7 @@ This list contains 1872 plugins. test Answer Set Programming programs :pypi:`pytest-assay` - *last release*: Feb 15, 2026, + *last release*: Mar 04, 2026, *status*: 4 - Beta, *requires*: N/A @@ -3018,7 +3038,7 @@ This list contains 1872 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Feb 26, 2026, + *last release*: Mar 06, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3452,7 +3472,7 @@ This list contains 1872 plugins. Advanced pytest parametrization plugin that generates test case instances from sync or async factories. :pypi:`pytest-cases` - *last release*: Jun 09, 2025, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -3501,7 +3521,7 @@ This list contains 1872 plugins. A pytest plugin to split your test suite into multiple parts :pypi:`pytest-celery` - *last release*: Jul 30, 2025, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -3578,7 +3598,7 @@ This list contains 1872 plugins. A pytest fixture for changing current working directory :pypi:`pytest-check` - *last release*: Feb 28, 2026, + *last release*: Mar 05, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -3725,7 +3745,7 @@ This list contains 1872 plugins. Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 :pypi:`pytest-clab` - *last release*: Feb 27, 2026, + *last release*: Mar 02, 2026, *status*: N/A, *requires*: pytest>=9.0.2 @@ -3795,7 +3815,7 @@ This list contains 1872 plugins. A set of pytest fixtures to help with integration testing with Clerk. :pypi:`pytest-clerk-mock` - *last release*: Jan 25, 2026, + *last release*: Mar 01, 2026, *status*: N/A, *requires*: N/A @@ -3907,7 +3927,7 @@ This list contains 1872 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Feb 24, 2026, + *last release*: Mar 07, 2026, *status*: 4 - Beta, *requires*: pytest @@ -4614,7 +4634,7 @@ This list contains 1872 plugins. Pytest extension for dbt. :pypi:`pytest-dbt-duckdb` - *last release*: Jan 23, 2026, + *last release*: Mar 06, 2026, *status*: 4 - Beta, *requires*: pytest>=8.3.4 @@ -5034,9 +5054,9 @@ This list contains 1872 plugins. A pytest plugin for preserving the order in which Django runs tests. :pypi:`pytest-django-queries` - *last release*: Mar 01, 2021, - *status*: N/A, - *requires*: N/A + *last release*: Mar 01, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=7.2.0 Generate performance reports from your django database performance tests. @@ -5391,7 +5411,7 @@ This list contains 1872 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Feb 28, 2026, + *last release*: Mar 02, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5566,63 +5586,63 @@ This list contains 1872 plugins. Send execution result email :pypi:`pytest-embedded` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A pytest plugin that designed for embedded testing. :pypi:`pytest-embedded-arduino` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-idf` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with ESP-IDF. :pypi:`pytest-embedded-jtag` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with JTAG. :pypi:`pytest-embedded-nuttx` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with NuttX. :pypi:`pytest-embedded-qemu` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with QEMU. :pypi:`pytest-embedded-serial` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Serial. :pypi:`pytest-embedded-serial-esp` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Espressif target boards. :pypi:`pytest-embedded-wokwi` - *last release*: Jan 16, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -5874,7 +5894,7 @@ This list contains 1872 plugins. Pytest plugin for testing examples in docstrings and markdown files. :pypi:`pytest-exasol-backend` - *last release*: Feb 24, 2026, + *last release*: Mar 03, 2026, *status*: N/A, *requires*: pytest<9,>=7 @@ -6314,6 +6334,13 @@ This list contains 1872 plugins. + :pypi:`pytest-firestore` + *last release*: Mar 04, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A Pytest fixture for managing Google Cloud Firestore emulator + :pypi:`pytest-fixture-cache` *last release*: Jan 25, 2026, *status*: 4 - Beta, @@ -6476,7 +6503,7 @@ This list contains 1872 plugins. Continuously runs your tests to detect flaky tests :pypi:`pytest-flakefighters` - *last release*: Feb 19, 2026, + *last release*: Mar 05, 2026, *status*: N/A, *requires*: pytest>=6.2.0 @@ -6833,7 +6860,7 @@ This list contains 1872 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Feb 27, 2026, + *last release*: Mar 04, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -6882,9 +6909,9 @@ This list contains 1872 plugins. Plugin for py.test that associates tests with github issues using a marker. :pypi:`pytest-github-actions-annotate-failures` - *last release*: Jan 17, 2025, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=6.0.0 + *requires*: pytest>=7.0.0 pytest plugin to annotate failed tests with a workflow command for GitHub Actions @@ -7043,7 +7070,7 @@ This list contains 1872 plugins. :pypi:`pytest-gremlins` - *last release*: Feb 22, 2026, + *last release*: Mar 07, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7218,7 +7245,14 @@ This list contains 1872 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Feb 21, 2026, + *last release*: Mar 07, 2026, + *status*: 3 - Alpha, + *requires*: pytest==9.0.0 + + Experimental package to automatically extract test plugins for Home Assistant custom components + + :pypi:`pytest-homeassistant-custom-component-framework` + *last release*: Mar 07, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7736,7 +7770,7 @@ This list contains 1872 plugins. A py.test plugin providing fixtures to simplify inmanta modules testing. :pypi:`pytest-inmanta-extensions` - *last release*: Jan 30, 2026, + *last release*: Mar 03, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -7911,7 +7945,7 @@ This list contains 1872 plugins. Run pytest tests in isolated subprocesses :pypi:`pytest-isolated` - *last release*: Feb 17, 2026, + *last release*: Mar 04, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -8317,7 +8351,7 @@ This list contains 1872 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Feb 28, 2026, + *last release*: Mar 04, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8604,7 +8638,7 @@ This list contains 1872 plugins. Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed :pypi:`pytest-loco` - *last release*: Feb 25, 2026, + *last release*: Mar 02, 2026, *status*: 3 - Alpha, *requires*: pytest<10.0.0,>=9.0.2 @@ -8695,7 +8729,7 @@ This list contains 1872 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Feb 02, 2026, + *last release*: Mar 04, 2026, *status*: 5 - Production/Stable, *requires*: pytest==9.0.2 @@ -8758,9 +8792,9 @@ This list contains 1872 plugins. pytest marker for marking manual tests :pypi:`pytest-mark-ac` - *last release*: Jan 30, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, - *requires*: pytest~=8.4 + *requires*: pytest<10,>=8.4 Provides a marker to reference acceptance criteria from PyTest tests through annotations @@ -8947,7 +8981,7 @@ This list contains 1872 plugins. Pytest-style framework for evaluating Model Context Protocol (MCP) servers. :pypi:`pytest-mcp-tools` - *last release*: Feb 26, 2026, + *last release*: Mar 07, 2026, *status*: N/A, *requires*: pytest>=7.0.0; extra == "test" @@ -9241,7 +9275,7 @@ This list contains 1872 plugins. A pytest plugin for testing TCP clients :pypi:`pytest-mock-unity-catalog` - *last release*: Feb 28, 2026, + *last release*: Mar 01, 2026, *status*: N/A, *requires*: pytest @@ -9325,7 +9359,7 @@ This list contains 1872 plugins. pytest plugin for MongoDB :pypi:`pytest-mongo-docker` - *last release*: Feb 12, 2026, + *last release*: Mar 05, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.4 @@ -9408,6 +9442,13 @@ This list contains 1872 plugins. pytest plugin to help with testing figures output from Matplotlib + :pypi:`pytest-mpl-oggm` + *last release*: Mar 06, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=6.2.5 + + pytest plugin to help with testing figures output from Matplotlib + :pypi:`pytest-mproc` *last release*: Nov 15, 2022, *status*: 4 - Beta, @@ -9885,7 +9926,7 @@ This list contains 1872 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Feb 21, 2026, + *last release*: Mar 04, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10039,7 +10080,7 @@ This list contains 1872 plugins. Parametrize your tests with a Boston accent. :pypi:`pytest-paia-blockly` - *last release*: Feb 24, 2026, + *last release*: Mar 02, 2026, *status*: N/A, *requires*: pytest>=8.0 @@ -10641,7 +10682,7 @@ This list contains 1872 plugins. Show surprise when tests are passing :pypi:`pytest-portion` - *last release*: Dec 19, 2025, + *last release*: Mar 04, 2026, *status*: 4 - Beta, *requires*: pytest>=3.5.0 @@ -11285,7 +11326,7 @@ This list contains 1872 plugins. Test your README.md file :pypi:`pytest-reana` - *last release*: Jan 06, 2026, + *last release*: Mar 03, 2026, *status*: 3 - Alpha, *requires*: N/A @@ -11600,7 +11641,7 @@ This list contains 1872 plugins. Pytest Repo Structure :pypi:`pytest-req` - *last release*: Jan 19, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -12265,7 +12306,7 @@ This list contains 1872 plugins. A complete web automation framework for end-to-end testing. :pypi:`pytest-selenium-driver` - *last release*: Jan 09, 2026, + *last release*: Mar 07, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -12531,7 +12572,7 @@ This list contains 1872 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Feb 28, 2026, + *last release*: Mar 01, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13448,7 +13489,7 @@ This list contains 1872 plugins. A plugin to run tests written in Jupyter notebook :pypi:`pytest-test-categories` - *last release*: Dec 24, 2025, + *last release*: Mar 04, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -13504,7 +13545,7 @@ This list contains 1872 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. :pypi:`pytest-testinel` - *last release*: Feb 19, 2026, + *last release*: Mar 06, 2026, *status*: 4 - Beta, *requires*: pytest>=7 @@ -14308,6 +14349,13 @@ This list contains 1872 plugins. pytest-upload-report is a plugin for pytest that upload your test report for test results. + :pypi:`pytest-urllib3` + *last release*: Mar 06, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8 + + A pytest plugin to mock urllib3 requests + :pypi:`pytest-utils` *last release*: Feb 02, 2023, *status*: 4 - Beta, @@ -14400,7 +14448,7 @@ This list contains 1872 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. :pypi:`pytest-vigil` - *last release*: Feb 26, 2026, + *last release*: Mar 04, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.0 @@ -15009,7 +15057,7 @@ This list contains 1872 plugins. 接口自动化测试框架 :pypi:`tursu` - *last release*: Jan 28, 2026, + *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.3.5 From b8c6e2deb482a443e007b0b9b613df5fa8cd48b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 06:36:46 +0100 Subject: [PATCH 196/307] build(deps): Bump actions/upload-artifact from 6.0.0 to 7.0.0 (#14278) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/b7c566a772e6b6bfb58ed0dc250532a479d7789f...bbbca2ddaa5d8feaa63e36b76fdaad77386f024f) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ace50c4d666..e4ef7b7e618 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -64,7 +64,7 @@ jobs: tox -e generate-gh-release-notes -- "$VERSION" gh-release-notes.md - name: Upload release notes - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: release-notes path: gh-release-notes.md From f7338e05685c952f21f838f0beab95cd29e05452 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 07:17:51 +0100 Subject: [PATCH 197/307] build(deps): Bump actions/download-artifact from 7.0.0 to 8.0.0 (#14277) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7.0.0 to 8.0.0. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/37930b1c2abaa49bbe596cd826c3c89aef350131...70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 6 +++--- .github/workflows/test.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e4ef7b7e618..5d5baaef583 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -82,7 +82,7 @@ jobs: id-token: write steps: - name: Download Package - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: Packages path: dist @@ -121,13 +121,13 @@ jobs: contents: write steps: - name: Download Package - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: Packages path: dist - name: Download release notes - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: release-notes path: . diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a0ca095adc7..9eff874bbc5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -257,7 +257,7 @@ jobs: persist-credentials: false - name: Download Package - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: Packages path: dist From 9b02d88870339004aedf71721de8bd99070cd1d3 Mon Sep 17 00:00:00 2001 From: pytest bot Date: Sun, 15 Mar 2026 00:43:23 +0000 Subject: [PATCH 198/307] [automated] Update plugin list --- doc/en/reference/plugin_list.rst | 316 +++++++++++++++++++++++-------- 1 file changed, 238 insertions(+), 78 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index d416c1e1a24..75c3786308a 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7 :pypi:`pytest-adaptavist` pytest plugin for generating test execution results within Jira Test Management (tm4j) Oct 13, 2022 N/A pytest (>=5.4.0) :pypi:`pytest-adaptavist-fixed` pytest plugin for generating test execution results within Jira Test Management (tm4j) Jan 17, 2025 N/A pytest>=5.4.0 - :pypi:`pytest-adbc-replay` pytest plugin to record and replay ADBC database queries Mar 02, 2026 3 - Alpha pytest>=8.0 + :pypi:`pytest-adbc-replay` pytest plugin to record and replay ADBC database queries Mar 13, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-addons-test` 用于测试pytest的插件 Aug 02, 2021 N/A pytest (>=6.2.4,<7.0.0) :pypi:`pytest-adf` Pytest plugin for writing Azure Data Factory integration tests May 10, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-adf-azure-identity` Pytest plugin for writing Azure Data Factory integration tests Mar 06, 2021 4 - Beta pytest (>=3.5.0) @@ -53,7 +53,7 @@ This list contains 1878 plugins. :pypi:`pytest-affected` Nov 06, 2023 N/A N/A :pypi:`pytest-agent` Service that exposes a REST API that can be used to interract remotely with Pytest. It is shipped with a dashboard that enables running tests in a more convenient way. Nov 25, 2021 N/A N/A :pypi:`pytest-agentcontract` Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts Feb 18, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 06, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A @@ -154,6 +154,7 @@ This list contains 1878 plugins. :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 04, 2026 N/A pytest>=7.0 :pypi:`pytest-attrib` pytest plugin to select tests based on attributes similar to the nose-attrib plugin May 24, 2016 4 - Beta N/A :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-audioeval` Pytest plugin for STT/TTS integration testing with httpx, metrics, and embedded audio samples. Mar 13, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A :pypi:`pytest-autocap` automatically capture test & fixture stdout/stderr to files May 15, 2022 N/A pytest (<7.2,>=7.1.2) :pypi:`pytest-autochecklog` automatically check condition and log all the checks Apr 25, 2015 4 - Beta N/A @@ -162,7 +163,7 @@ This list contains 1878 plugins. :pypi:`pytest-automation` pytest plugin for building a test suite, using YAML files to extend pytest parameterize functionality. Apr 24, 2024 N/A pytest>=7.0.0 :pypi:`pytest-automock` Pytest plugin for automatical mocks creation May 16, 2023 N/A pytest ; extra == 'dev' :pypi:`pytest-auto-parametrize` pytest plugin: avoid repeating arguments in parametrize Oct 02, 2016 3 - Alpha N/A - :pypi:`pytest-autoprofile` \`line_profiler.autoprofile\`-ing your \`pytest\` test suite Dec 30, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-autoprofile` \`line_profiler.autoprofile\`-ing your \`pytest\` test suite Mar 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-autotest` This fixture provides a configured "driver" for Android Automated Testing, using uiautomator2. Aug 25, 2021 N/A pytest :pypi:`pytest-aviator` Aviator's Flakybot pytest plugin that automatically reruns flaky tests. Nov 04, 2022 4 - Beta pytest :pypi:`pytest-avoidance` Makes pytest skip tests that don not need rerunning May 23, 2019 4 - Beta pytest (>=3.5.0) @@ -187,6 +188,7 @@ This list contains 1878 plugins. :pypi:`pytest-bdd-html` pytest plugin to display BDD info in HTML test report Nov 22, 2022 3 - Alpha pytest (!=6.0.0,>=5.0) :pypi:`pytest-bdd-md-report` Markdown test report formatter for pytest-bdd with pytest-playwright screenshot support Feb 07, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-bdd-ng` BDD for pytest Nov 26, 2024 4 - Beta pytest>=5.2 + :pypi:`pytest-bdd-property` Property-based testing plugin for pytest-bdd — express universal invariants in standard Gherkin, executed by Hypothesis Mar 12, 2026 3 - Alpha pytest>=8.0 :pypi:`pytest-bdd-report` A pytest-bdd plugin for generating useful and informative BDD test reports Dec 29, 2025 N/A pytest>=7.1.3 :pypi:`pytest-bdd-reporter` Enterprise-grade BDD test reporting with interactive dashboards, suite management, and comprehensive email integration Oct 14, 2025 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) @@ -194,7 +196,7 @@ This list contains 1878 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 06, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 13, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -225,6 +227,7 @@ This list contains 1878 plugins. :pypi:`pytest-bpdb` A py.test plug-in to enable drop to bpdb debugger on test failure. Jan 19, 2015 2 - Pre-Alpha N/A :pypi:`pytest-bq` BigQuery fixtures and fixture factories for Pytest. May 08, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-bravado` Pytest-bravado automatically generates from OpenAPI specification client fixtures. Feb 15, 2022 N/A N/A + :pypi:`pytest-breadcrumb` Self-healing test framework for Playwright. Your tests survive app changes. Mar 09, 2026 2 - Pre-Alpha pytest>=8.0; extra == "dev" :pypi:`pytest-breakword` Use breakword with pytest Aug 04, 2021 N/A pytest (>=6.2.4,<7.0.0) :pypi:`pytest-breed-adapter` A simple plugin to connect with breed-server Nov 07, 2018 4 - Beta pytest (>=3.5.0) :pypi:`pytest-briefcase` A pytest plugin for running tests on a Briefcase project. Jun 14, 2020 4 - Beta pytest (>=3.5.0) @@ -305,7 +308,7 @@ This list contains 1878 plugins. :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Feb 04, 2026 N/A pytest<10.0.0,>=8.0.0 - :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Mar 01, 2026 N/A N/A + :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Mar 14, 2026 N/A N/A :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) @@ -391,13 +394,13 @@ This list contains 1878 plugins. :pypi:`pytest-custom-report` Configure the symbols displayed for test outcomes Jan 30, 2019 N/A pytest :pypi:`pytest-custom-scheduling` Custom grouping for pytest-xdist, rename test cases name and test cases nodeid, support allure report Mar 01, 2021 N/A N/A :pypi:`pytest-custom-timeout` Use custom logic when a test times out. Based on pytest-timeout. Jan 08, 2025 4 - Beta pytest>=8.0.0 - :pypi:`pytest-cython` A plugin for testing Cython extension modules Feb 07, 2026 5 - Production/Stable pytest>=8 + :pypi:`pytest-cython` A plugin for testing Cython extension modules. Mar 11, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest :pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1 :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 :pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A - :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Jan 20, 2026 4 - Beta pytest + :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Mar 10, 2026 4 - Beta pytest :pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest :pypi:`pytest-datadir` pytest plugin for test data directories and files Jul 30, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1) @@ -539,10 +542,11 @@ This list contains 1878 plugins. :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A - :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Aug 29, 2025 5 - Production/Stable pytest>=4.6 + :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Mar 13, 2026 5 - Production/Stable pytest>=4.6 :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-dynamic-params` Dynamic parameters plugin for pytest Mar 12, 2026 N/A pytest :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A - :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Apr 04, 2025 5 - Production/Stable pytest + :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Mar 13, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A :pypi:`pytest-easyMPI` Package that supports mpi tests in pytest Oct 21, 2020 N/A N/A :pypi:`pytest-easyread` pytest plugin that makes terminal printouts of the reports easier to read Nov 17, 2017 N/A N/A @@ -552,8 +556,10 @@ This list contains 1878 plugins. :pypi:`pytest-echo` pytest plugin that allows to dump environment variables, package version and generic attributes Apr 27, 2025 5 - Production/Stable pytest>=8.3.3 :pypi:`pytest-edit` Edit the source code of a failed test with \`pytest --edit\`. Nov 17, 2024 N/A pytest :pypi:`pytest-ekstazi` Pytest plugin to select test using Ekstazi algorithm Sep 10, 2022 N/A pytest + :pypi:`pytest-elastic-reporter` Mar 13, 2026 N/A pytest>=7.0 :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Mar 08, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 @@ -577,7 +583,7 @@ This list contains 1878 plugins. :pypi:`pytest_energy_reporter` An energy estimation reporter for pytest Mar 28, 2024 3 - Alpha pytest<9.0.0,>=8.1.1 :pypi:`pytest-enhanced-reports` Enhanced test reports for pytest Dec 15, 2022 N/A N/A :pypi:`pytest-enhancements` Improvements for pytest (rejected upstream) Oct 30, 2019 4 - Beta N/A - :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Feb 17, 2026 5 - Production/Stable pytest>=9.0.2 + :pypi:`pytest-env` pytest plugin that allows you to add environment variables. Mar 12, 2026 5 - Production/Stable pytest>=9.0.2 :pypi:`pytest-envfiles` A py.test plugin that parses environment files before running tests Oct 08, 2015 3 - Alpha N/A :pypi:`pytest-env-info` Push information about the running pytest into envvars Nov 25, 2017 4 - Beta pytest (>=3.1.1) :pypi:`pytest-environment` Pytest Environment Mar 17, 2024 1 - Planning N/A @@ -631,7 +637,7 @@ This list contains 1878 plugins. :pypi:`pytest_extra` Some helpers for writing tests with pytest. Aug 14, 2014 N/A N/A :pypi:`pytest-extra-durations` A pytest plugin to get durations on a per-function basis and per module basis. Apr 21, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-extra-markers` Additional pytest markers to dynamically enable/disable tests viia CLI flags Mar 05, 2023 4 - Beta pytest - :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Feb 20, 2026 N/A pytest<8.0.0,>=7.2.1 + :pypi:`pytest-f3ts` Pytest Plugin for communicating test results and information to a FixturFab Test Runner GUI Mar 09, 2026 N/A pytest<8.0.0,>=7.2.1 :pypi:`pytest-fabric` Provides test utilities to run fabric task tests by using docker containers Sep 12, 2018 5 - Production/Stable N/A :pypi:`pytest-factory` Use factories for test setup with py.test Sep 06, 2020 3 - Alpha pytest (>4.3) :pypi:`pytest-factoryboy` Factory Boy support for pytest. Jul 01, 2025 6 - Mature pytest>=7.0 @@ -665,7 +671,8 @@ This list contains 1878 plugins. :pypi:`pytest-find-dependencies` A pytest plugin to find dependencies between tests Jul 16, 2025 5 - Production/Stable pytest>=6.2.4 :pypi:`pytest-finer-verdicts` A pytest plugin to treat non-assertion failures as test errors. Jun 18, 2020 N/A pytest (>=5.4.3) :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A - :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 04, 2026 N/A pytest>=7.0 + :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 10, 2026 N/A pytest>=7.0 + :pypi:`pytest-fixedpoint` Pytest plugin for recording and replaying deterministic function calls Mar 12, 2026 N/A pytest>=7.0 :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A @@ -707,7 +714,7 @@ This list contains 1878 plugins. :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-forbid` Mar 07, 2023 N/A pytest (>=7.2.2,<8.0.0) :pypi:`pytest-forcefail` py.test plugin to make the test failing regardless of pytest.mark.xfail May 15, 2018 4 - Beta N/A - :pypi:`pytest-forger` Automatic test scaffolding and mock generation for Python Dec 26, 2025 N/A pytest>=7.4.0 + :pypi:`pytest-forger` Automatic test scaffolding and mock generation for Python Mar 09, 2026 N/A pytest>=7.4.0 :pypi:`pytest-forward-compatability` A name to avoid typosquating pytest-foward-compatibility Sep 06, 2020 N/A N/A :pypi:`pytest-forward-compatibility` A pytest plugin to shim pytest commandline options for fowards compatibility Sep 29, 2020 N/A N/A :pypi:`pytest-frappe` Pytest Frappe Plugin - A set of pytest fixtures to test Frappe applications Jul 30, 2024 4 - Beta pytest>=7.0.0 @@ -732,7 +739,7 @@ This list contains 1878 plugins. :pypi:`pytest-gather-fixtures` set up asynchronous pytest fixtures concurrently Aug 18, 2024 N/A pytest>=7.0.0 :pypi:`pytest-gc` The garbage collector plugin for py.test Feb 01, 2018 N/A N/A :pypi:`pytest-gcov` Uses gcov to measure test coverage of a C library Feb 01, 2018 3 - Alpha N/A - :pypi:`pytest-gcppubsub` A Pytest fixture for managing Google Cloud Platform PubSub emulator Feb 18, 2026 N/A pytest>=7.0 + :pypi:`pytest-gcppubsub` A Pytest fixture for managing Google Cloud Platform PubSub emulator Mar 10, 2026 N/A pytest>=7.0 :pypi:`pytest-gcpsecretmanager` A PyTest plugin for mocking GCP's Secret Manager Feb 18, 2026 N/A pytest>=7.0 :pypi:`pytest-gcs` GCS fixtures and fixture factories for Pytest. Jan 24, 2025 5 - Production/Stable pytest>=6.2 :pypi:`pytest-gee` The Python plugin for your GEE based packages. Oct 16, 2025 3 - Alpha pytest @@ -770,7 +777,7 @@ This list contains 1878 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 07, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 14, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) @@ -869,6 +876,7 @@ This list contains 1878 plugins. :pypi:`pytest-inject` A pytest plugin that allows you to inject arguments into fixtures and parametrized tests using pytest command-line options. Nov 25, 2025 N/A pytest>=6.0.0 :pypi:`pytest-inline` A pytest plugin for writing inline tests Oct 24, 2024 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A + :pypi:`pytest-inline-tdd` A pytest plugin for writing inline tests Mar 09, 2026 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest :pypi:`pytest-inmanta-extensions` Inmanta tests package Mar 03, 2026 5 - Production/Stable N/A :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Feb 12, 2026 5 - Production/Stable N/A @@ -908,6 +916,7 @@ This list contains 1878 plugins. :pypi:`pytest-jelastic` Pytest plugin defining the necessary command-line options to pass to pytests testing a Jelastic environment. Nov 16, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-jest` A custom jest-pytest oriented Pytest reporter May 22, 2018 4 - Beta pytest (>=3.3.2) :pypi:`pytest-jinja` A plugin to generate customizable jinja-based HTML reports in pytest Oct 04, 2022 3 - Alpha pytest (>=6.2.5,<7.0.0) + :pypi:`pytest-jinja-check` Pytest plugin to lint Jinja2 templates in FastAPI applications Mar 14, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-jira` py.test JIRA integration plugin, using markers Apr 15, 2025 3 - Alpha N/A :pypi:`pytest-jira-xfail` Plugin skips (xfail) tests if unresolved Jira issue(s) linked Jul 09, 2024 N/A pytest>=7.2.0 :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Oct 11, 2025 4 - Beta pytest>=6.2.4 @@ -921,9 +930,9 @@ This list contains 1878 plugins. :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Feb 04, 2026 N/A pytest + :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Mar 08, 2026 N/A pytest :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 - :pypi:`pytest-jubilant` Add your description here Jul 28, 2025 N/A pytest>=8.3.5 + :pypi:`pytest-jubilant` Add your description here Mar 13, 2026 N/A pytest>=8.3.5 :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 @@ -981,11 +990,13 @@ This list contains 1878 plugins. :pypi:`pytest-litf` A pytest plugin that stream output in LITF format Jan 18, 2021 4 - Beta pytest (>=3.1.1) :pypi:`pytest-litter` Pytest plugin which verifies that tests do not modify file trees. Nov 23, 2023 4 - Beta pytest >=6.1 :pypi:`pytest-live` Live results for pytest Mar 08, 2020 N/A pytest + :pypi:`pytest-liveview` Pytest plugin that shows a real-time test dashboard in a local web server Mar 09, 2026 N/A pytest>=7.0 :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-llmtest` The pytest for LLMs — fast, Pydantic-based assertions for AI applications Mar 08, 2026 3 - Alpha pytest>=7.0; extra == "dev" :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) :pypi:`pytest-localftpserver` A PyTest plugin which provides an FTP fixture for your tests Nov 16, 2025 5 - Production/Stable pytest @@ -994,7 +1005,8 @@ This list contains 1878 plugins. :pypi:`pytest-lock` pytest-lock is a pytest plugin that allows you to "lock" the results of unit tests, storing them in a local cache. This is particularly useful for tests that are resource-intensive or don't need to be run every time. When the tests are run subsequently, pytest-lock will compare the current results with the locked results and issue a warning if there are any discrepancies. Feb 03, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-lockable` lockable resource plugin for pytest Sep 08, 2025 5 - Production/Stable pytest :pypi:`pytest-locker` Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed Dec 20, 2024 N/A pytest>=5.4 - :pypi:`pytest-loco` Another one YAML-based DSL for testing Mar 02, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 + :pypi:`pytest-loco` Another one YAML-based DSL for testing Mar 08, 2026 3 - Alpha pytest<10.0.0,>=9.0.2 + :pypi:`pytest-loco-allure` Allure support for pytest-loco Mar 08, 2026 3 - Alpha N/A :pypi:`pytest-loco-http` HTTP support for pytest-loco Feb 25, 2026 3 - Alpha N/A :pypi:`pytest-loco-json` JSON support for pytest-loco Feb 25, 2026 3 - Alpha N/A :pypi:`pytest-log` print log Aug 15, 2021 N/A pytest (>=3.8) @@ -1007,7 +1019,7 @@ This list contains 1878 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Mar 04, 2026 5 - Production/Stable pytest==9.0.2 + :pypi:`pytest-logikal` Common testing environment Mar 13, 2026 5 - Production/Stable pytest==9.0.2 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -1043,7 +1055,7 @@ This list contains 1878 plugins. :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 - :pypi:`pytest-mcp-tools` Mar 07, 2026 N/A pytest>=7.0.0; extra == "test" + :pypi:`pytest-mcp-tools` Mar 12, 2026 N/A pytest>=7.0.0; extra == "test" :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 :pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Oct 08, 2024 N/A pytest>=7.4.3 @@ -1085,7 +1097,7 @@ This list contains 1878 plugins. :pypi:`pytest-mock-server` Mock server plugin for pytest Jan 09, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-mockservers` A set of fixtures to test your requests to HTTP/UDP servers Mar 31, 2020 N/A pytest (>=4.3.0) :pypi:`pytest-mocktcp` A pytest plugin for testing TCP clients Oct 11, 2022 N/A pytest - :pypi:`pytest-mock-unity-catalog` Unity Catalog pyspark fixtures Mar 01, 2026 N/A pytest + :pypi:`pytest-mock-unity-catalog` Unity Catalog pyspark fixtures Mar 12, 2026 N/A pytest :pypi:`pytest-modalt` Massively distributed pytest runs using modal.com Feb 27, 2024 4 - Beta pytest >=6.2.0 :pypi:`pytest-model-lib` pytest plugin for model-lib Feb 22, 2026 N/A N/A :pypi:`pytest-modern` A more modern pytest Aug 19, 2025 4 - Beta pytest>=8 @@ -1109,7 +1121,7 @@ This list contains 1878 plugins. :pypi:`pytest-mpiexec` pytest plugin for running individual tests with mpiexec Jul 29, 2024 3 - Alpha pytest :pypi:`pytest-mpi-tmweigand` forked pytest plugin to collect information from tests Dec 27, 2025 3 - Alpha pytest :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 - :pypi:`pytest-mpl-oggm` pytest plugin to help with testing figures output from Matplotlib Mar 06, 2026 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-mpl-oggm` pytest plugin to help with testing figures output from Matplotlib - OGGM fork Mar 09, 2026 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Jan 28, 2026 5 - Production/Stable pytest<10; extra == "test" :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A @@ -1121,7 +1133,7 @@ This list contains 1878 plugins. :pypi:`pytest-my-plugin` A pytest plugin that does awesome things Jan 27, 2025 N/A pytest>=6.0 :pypi:`pytest-mypy` A Pytest Plugin for Mypy Apr 02, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-mypyd` Mypy static type checker plugin for Pytest Aug 20, 2019 4 - Beta pytest (<4.7,>=2.8) ; python_version < "3.5" - :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Feb 16, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Mar 12, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 @@ -1193,7 +1205,7 @@ This list contains 1878 plugins. :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Jan 02, 2026 N/A pytest==9.0.2 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Mar 12, 2026 N/A pytest==9.0.2 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1213,10 +1225,10 @@ This list contains 1878 plugins. :pypi:`pytest-parametrized` Pytest decorator for parametrizing tests with default iterables. Dec 21, 2024 5 - Production/Stable pytest :pypi:`pytest-parametrize-suite` A simple pytest extension for creating a named test suite. Jan 19, 2023 5 - Production/Stable pytest :pypi:`pytest_param_files` Create pytest parametrize decorators from external files. Jul 29, 2023 N/A pytest - :pypi:`pytest-params` Simplified pytest test case parameters. Apr 27, 2025 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-params` Simplified pytest test case parameters. Mar 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-param-scope` pytest parametrize scope fixture workaround Oct 18, 2023 N/A pytest :pypi:`pytest-parawtf` Finally spell paramete?ri[sz]e correctly Dec 03, 2018 4 - Beta pytest (>=3.6.0) - :pypi:`pytest-park` Organise and analyse your pytest benchmarks Feb 22, 2026 N/A N/A + :pypi:`pytest-park` Organise and analyse your pytest benchmarks Mar 14, 2026 N/A N/A :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A @@ -1249,7 +1261,7 @@ This list contains 1878 plugins. :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Feb 04, 2026 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Mar 12, 2026 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) @@ -1314,17 +1326,20 @@ This list contains 1878 plugins. :pypi:`pytest-ptera` Use ptera probes in tests Mar 01, 2022 N/A pytest (>=6.2.4,<7.0.0) :pypi:`pytest-publish` Jun 04, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-pudb` Pytest PuDB debugger integration Oct 25, 2018 3 - Alpha pytest (>=2.0) + :pypi:`pytest-pudb-resurrected` Pytest PuDB debugger integration Mar 12, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) :pypi:`pytest-pvcr` PyTest Process VCR Feb 25, 2026 3 - Alpha pytest>=3.5.0 :pypi:`pytest-pve-cloud` Feb 27, 2026 N/A pytest==8.4.2 + :pypi:`pytest-pw-config-gen` Generate pytest-playwright configuration files (pytest.ini, pyproject.toml, conftest.py) via CLI Mar 14, 2026 N/A pytest>=7.4; extra == "dev" :pypi:`pytest-py125` Dec 03, 2022 N/A N/A :pypi:`pytest-pycharm` Plugin for py.test to enter PyCharm debugger on uncaught exceptions Aug 13, 2020 5 - Production/Stable pytest (>=2.3) :pypi:`pytest-pycodestyle` pytest plugin to run pycodestyle Jul 20, 2025 3 - Alpha pytest>=7.0 :pypi:`pytest-pydantic-schema-sync` Pytest plugin to synchronise Pydantic model schemas with JSONSchema files Aug 29, 2024 N/A pytest>=6 :pypi:`pytest-pydev` py.test plugin to connect to a remote debug server with PyDev or PyCharm. Nov 15, 2017 3 - Alpha N/A :pypi:`pytest-pydocstyle` pytest plugin to run pydocstyle Oct 09, 2024 3 - Alpha pytest>=7.0 + :pypi:`pytest-pyeval` pytest plugin integrating pydantic-evals Mar 14, 2026 N/A pytest>=8.0 :pypi:`pytest-pylembic` This package provides pytest plugin for validating Alembic migrations using the pylembic package. Jul 22, 2025 3 - Alpha N/A :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A @@ -1377,10 +1392,11 @@ This list contains 1878 plugins. :pypi:`pytest-random-order` Randomise the order in which pytest tests are run with some control over the randomness Jun 22, 2025 5 - Production/Stable pytest :pypi:`pytest-ranking` A Pytest plugin for faster fault detection via regression test prioritization Apr 08, 2025 4 - Beta pytest>=7.4.3 :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A + :pypi:`pytest-readable` Pytest plugin that renders readable test specifications and exports documentation Mar 12, 2026 3 - Alpha pytest<10.0,>=9.0 :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest :pypi:`pytest-reana` Pytest fixtures for REANA. Mar 03, 2026 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 - :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Dec 23, 2025 N/A pytest>=8.4.1 + :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Mar 12, 2026 N/A pytest>=8.4.1 :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A @@ -1411,6 +1427,7 @@ This list contains 1878 plugins. :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest + :pypi:`pytest-reporter-html` Pytest plugin that generates rich HTML test reports with step tracking, log capture, and interactive filtering Mar 14, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A :pypi:`pytest-reporter-html-dots` A basic HTML report for pytest using Jinja2 template engine. Apr 26, 2025 N/A N/A :pypi:`pytest-reporter-plus` Lightweight enhanced HTML reporter for Pytest Jul 16, 2025 N/A N/A @@ -1429,7 +1446,7 @@ This list contains 1878 plugins. :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-requestselapsed` collect and show http requests elapsed time Aug 14, 2022 N/A N/A :pypi:`pytest-requests-futures` Pytest Plugin to Mock Requests Futures Jul 06, 2022 5 - Production/Stable pytest - :pypi:`pytest-requirements` pytest plugin for using custom markers to relate tests to requirements and usecases Feb 28, 2025 N/A pytest + :pypi:`pytest-requirements` pytest plugin for using custom markers to relate tests to requirements and usecases Mar 10, 2026 N/A pytest :pypi:`pytest-requires` A pytest plugin to elegantly skip tests with optional requirements Dec 21, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-reqyaml` This is a plugin where generate requests test cases from yaml. Aug 16, 2025 N/A pytest>=8.4.1 :pypi:`pytest-reraise` Make multi-threaded pytest test cases fail when they should Sep 20, 2022 5 - Production/Stable pytest (>=4.6) @@ -1453,6 +1470,7 @@ This list contains 1878 plugins. :pypi:`pytest-result-notify` Default template for PDM package Apr 27, 2025 N/A pytest>=8.3.5 :pypi:`pytest-results` Easily spot regressions in your tests. Oct 08, 2025 4 - Beta pytest :pypi:`pytest-result-sender` Apr 20, 2023 N/A pytest>=7.3.1 + :pypi:`pytest-result-sender-fanrenbufan` Default template for PDM package Mar 12, 2026 N/A pytest>=8.4.2 :pypi:`pytest-result-sender-jms` Default template for PDM package May 22, 2025 N/A pytest>=8.3.5 :pypi:`pytest-result-sender-lj` Default template for PDM package Dec 17, 2024 N/A pytest>=8.3.4 :pypi:`pytest-result-sender-lyt` Default template for PDM package Mar 14, 2025 N/A pytest>=8.3.5 @@ -1465,7 +1483,7 @@ This list contains 1878 plugins. :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Feb 03, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Dec 19, 2025 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Mar 12, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest :pypi:`pytest-rich-reporter` A pytest plugin using Rich for beautiful test result formatting. Feb 17, 2022 1 - Planning pytest (>=5.0.0) @@ -1504,7 +1522,7 @@ This list contains 1878 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Mar 13, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1517,13 +1535,14 @@ This list contains 1878 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Feb 25, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Mar 13, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A :pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Dec 16, 2024 N/A pytest>=8.0.0 :pypi:`pytest-semantic` A pytest plugin for testing LLM outputs using semantic similarity matching Nov 11, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-semantic-assert` Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. Jan 09, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-semantic-llm` Semantic assertions for pytest using LLMs Mar 10, 2026 N/A pytest>=7.0.0 :pypi:`pytest-send-email` Send pytest execution result email Sep 02, 2024 N/A pytest :pypi:`pytest-sentry` A pytest plugin to send testrun information to Sentry.io Jul 01, 2025 N/A pytest :pypi:`pytest-sequence-markers` Pytest plugin for sequencing markers for execution of tests May 23, 2023 5 - Production/Stable N/A @@ -1636,6 +1655,7 @@ This list contains 1878 plugins. :pypi:`pytest-stderr-db` Add your description here Sep 14, 2025 N/A N/A :pypi:`pytest-stdout-db` Add your description here Sep 14, 2025 N/A N/A :pypi:`pytest-stepfunctions` A small description May 08, 2021 4 - Beta pytest + :pypi:`pytest-step-logger` Live Rich-rendered step trees in pytest terminal output Mar 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-steps` Create step-wise / incremental tests in pytest. Sep 23, 2021 5 - Production/Stable N/A :pypi:`pytest-stepthrough` Pause and wait for Enter after each test with --step Aug 14, 2025 N/A N/A :pypi:`pytest-stepwise` Run a test suite one failing test at a time. Dec 01, 2015 4 - Beta N/A @@ -1695,7 +1715,7 @@ This list contains 1878 plugins. :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Mar 06, 2026 4 - Beta pytest>=7 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Mar 13, 2026 4 - Beta pytest>=7 :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A @@ -1784,7 +1804,7 @@ This list contains 1878 plugins. :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A :pypi:`pytest-twisted` A twisted plugin for pytest. Sep 10, 2024 5 - Production/Stable pytest>=2.3 - :pypi:`pytest-ty` A pytest plugin to run the ty type checker Feb 18, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-ty` A pytest plugin to run the ty type checker Mar 08, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-typechecker` Run type checkers on specified test files Feb 04, 2022 N/A pytest (>=6.2.5,<7.0.0) :pypi:`pytest-typed-schema-shot` Pytest plugin for automatic JSON Schema generation and validation from examples Jun 14, 2025 N/A pytest :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A @@ -1810,7 +1830,7 @@ This list contains 1878 plugins. :pypi:`pytest-unused-fixtures` A pytest plugin to list unused fixtures after a test run. Dec 23, 2025 4 - Beta pytest>7.3.2 :pypi:`pytest-unused-port` pytest fixture finding an unused local port Oct 22, 2025 N/A pytest :pypi:`pytest-upload-report` pytest-upload-report is a plugin for pytest that upload your test report for test results. Jun 18, 2021 5 - Production/Stable N/A - :pypi:`pytest-urllib3` A pytest plugin to mock urllib3 requests Mar 06, 2026 3 - Alpha pytest>=8 + :pypi:`pytest-urllib3` A pytest plugin to mock urllib3 requests Mar 09, 2026 3 - Alpha pytest>=7 :pypi:`pytest-utils` Some helpers for pytest. Feb 02, 2023 4 - Beta pytest (>=7.0.0,<8.0.0) :pypi:`pytest-uuid` A pytest plugin for mocking uuid.uuid4() calls Feb 27, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-vagrant` A py.test plugin providing access to vagrant. Sep 07, 2021 5 - Production/Stable pytest @@ -1824,7 +1844,7 @@ This list contains 1878 plugins. :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A - :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Mar 04, 2026 5 - Production/Stable pytest>=9.0.0 + :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Mar 13, 2026 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 @@ -1988,8 +2008,8 @@ This list contains 1878 plugins. pytest plugin for generating test execution results within Jira Test Management (tm4j) :pypi:`pytest-adbc-replay` - *last release*: Mar 02, 2026, - *status*: 3 - Alpha, + *last release*: Mar 13, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=8.0 pytest plugin to record and replay ADBC database queries @@ -2051,7 +2071,7 @@ This list contains 1878 plugins. Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts :pypi:`pytest-agent-evals` - *last release*: Mar 06, 2026, + *last release*: Mar 13, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -2757,6 +2777,13 @@ This list contains 1878 plugins. A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. + :pypi:`pytest-audioeval` + *last release*: Mar 13, 2026, + *status*: 4 - Beta, + *requires*: pytest>=8.0 + + Pytest plugin for STT/TTS integration testing with httpx, metrics, and embedded audio samples. + :pypi:`pytest-austin` *last release*: Oct 11, 2020, *status*: 4 - Beta, @@ -2814,7 +2841,7 @@ This list contains 1878 plugins. pytest plugin: avoid repeating arguments in parametrize :pypi:`pytest-autoprofile` - *last release*: Dec 30, 2025, + *last release*: Mar 13, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -2988,6 +3015,13 @@ This list contains 1878 plugins. BDD for pytest + :pypi:`pytest-bdd-property` + *last release*: Mar 12, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0 + + Property-based testing plugin for pytest-bdd — express universal invariants in standard Gherkin, executed by Hypothesis + :pypi:`pytest-bdd-report` *last release*: Dec 29, 2025, *status*: N/A, @@ -3038,7 +3072,7 @@ This list contains 1878 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Mar 06, 2026, + *last release*: Mar 13, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3254,6 +3288,13 @@ This list contains 1878 plugins. Pytest-bravado automatically generates from OpenAPI specification client fixtures. + :pypi:`pytest-breadcrumb` + *last release*: Mar 09, 2026, + *status*: 2 - Pre-Alpha, + *requires*: pytest>=8.0; extra == "dev" + + Self-healing test framework for Playwright. Your tests survive app changes. + :pypi:`pytest-breakword` *last release*: Aug 04, 2021, *status*: N/A, @@ -3815,7 +3856,7 @@ This list contains 1878 plugins. A set of pytest fixtures to help with integration testing with Clerk. :pypi:`pytest-clerk-mock` - *last release*: Mar 01, 2026, + *last release*: Mar 14, 2026, *status*: N/A, *requires*: N/A @@ -4417,11 +4458,11 @@ This list contains 1878 plugins. Use custom logic when a test times out. Based on pytest-timeout. :pypi:`pytest-cython` - *last release*: Feb 07, 2026, + *last release*: Mar 11, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8 - A plugin for testing Cython extension modules + A plugin for testing Cython extension modules. :pypi:`pytest-cython-collect` *last release*: Jun 17, 2022, @@ -4459,7 +4500,7 @@ This list contains 1878 plugins. Useful functions for managing data for pytest fixtures :pypi:`pytest-databases` - *last release*: Jan 20, 2026, + *last release*: Mar 10, 2026, *status*: 4 - Beta, *requires*: pytest @@ -5453,7 +5494,7 @@ This list contains 1878 plugins. :pypi:`pytest-durations` - *last release*: Aug 29, 2025, + *last release*: Mar 13, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=4.6 @@ -5466,6 +5507,13 @@ This list contains 1878 plugins. A pytest plugin to dynamically parameterize tests based on external data sources. + :pypi:`pytest-dynamic-params` + *last release*: Mar 12, 2026, + *status*: N/A, + *requires*: pytest + + Dynamic parameters plugin for pytest + :pypi:`pytest-dynamicrerun` *last release*: Aug 15, 2020, *status*: 4 - Beta, @@ -5474,9 +5522,9 @@ This list contains 1878 plugins. A pytest plugin to rerun tests dynamically based off of test outcome and output. :pypi:`pytest-dynamodb` - *last release*: Apr 04, 2025, + *last release*: Mar 13, 2026, *status*: 5 - Production/Stable, - *requires*: pytest + *requires*: pytest>=8.4.0 DynamoDB fixtures for pytest @@ -5543,6 +5591,13 @@ This list contains 1878 plugins. Pytest plugin to select test using Ekstazi algorithm + :pypi:`pytest-elastic-reporter` + *last release*: Mar 13, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + + :pypi:`pytest-elasticsearch` *last release*: Feb 16, 2026, *status*: 5 - Production/Stable, @@ -5557,6 +5612,13 @@ This list contains 1878 plugins. Elasticsearch fixtures and fixture factories for Pytest. + :pypi:`pytest-elegant` + *last release*: Mar 08, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + A pytest plugin that provides elegant, beautiful test output + :pypi:`pytest-elements` *last release*: Jan 13, 2021, *status*: N/A, @@ -5719,7 +5781,7 @@ This list contains 1878 plugins. Improvements for pytest (rejected upstream) :pypi:`pytest-env` - *last release*: Feb 17, 2026, + *last release*: Mar 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.2 @@ -6097,7 +6159,7 @@ This list contains 1878 plugins. Additional pytest markers to dynamically enable/disable tests viia CLI flags :pypi:`pytest-f3ts` - *last release*: Feb 20, 2026, + *last release*: Mar 09, 2026, *status*: N/A, *requires*: pytest<8.0.0,>=7.2.1 @@ -6335,12 +6397,19 @@ This list contains 1878 plugins. :pypi:`pytest-firestore` - *last release*: Mar 04, 2026, + *last release*: Mar 10, 2026, *status*: N/A, *requires*: pytest>=7.0 A Pytest fixture for managing Google Cloud Firestore emulator + :pypi:`pytest-fixedpoint` + *last release*: Mar 12, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin for recording and replaying deterministic function calls + :pypi:`pytest-fixture-cache` *last release*: Jan 25, 2026, *status*: 4 - Beta, @@ -6629,7 +6698,7 @@ This list contains 1878 plugins. py.test plugin to make the test failing regardless of pytest.mark.xfail :pypi:`pytest-forger` - *last release*: Dec 26, 2025, + *last release*: Mar 09, 2026, *status*: N/A, *requires*: pytest>=7.4.0 @@ -6804,7 +6873,7 @@ This list contains 1878 plugins. Uses gcov to measure test coverage of a C library :pypi:`pytest-gcppubsub` - *last release*: Feb 18, 2026, + *last release*: Mar 10, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -7070,7 +7139,7 @@ This list contains 1878 plugins. :pypi:`pytest-gremlins` - *last release*: Mar 07, 2026, + *last release*: Mar 14, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7762,6 +7831,13 @@ This list contains 1878 plugins. inline-snapshot is the package you are looking for + :pypi:`pytest-inline-tdd` + *last release*: Mar 09, 2026, + *status*: 4 - Beta, + *requires*: pytest<9.0,>=7.0 + + A pytest plugin for writing inline tests + :pypi:`pytest-inmanta` *last release*: Nov 18, 2025, *status*: 5 - Production/Stable, @@ -8035,6 +8111,13 @@ This list contains 1878 plugins. A plugin to generate customizable jinja-based HTML reports in pytest + :pypi:`pytest-jinja-check` + *last release*: Mar 14, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Pytest plugin to lint Jinja2 templates in FastAPI applications + :pypi:`pytest-jira` *last release*: Apr 15, 2025, *status*: 3 - Alpha, @@ -8127,7 +8210,7 @@ This list contains 1878 plugins. A pytest plugin to perform JSONSchema validations :pypi:`pytest-jsonschema-snapshot` - *last release*: Feb 04, 2026, + *last release*: Mar 08, 2026, *status*: N/A, *requires*: pytest @@ -8141,7 +8224,7 @@ This list contains 1878 plugins. pytest plugin supporting json test report output :pypi:`pytest-jubilant` - *last release*: Jul 28, 2025, + *last release*: Mar 13, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -8546,6 +8629,13 @@ This list contains 1878 plugins. Live results for pytest + :pypi:`pytest-liveview` + *last release*: Mar 09, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin that shows a real-time test dashboard in a local web server + :pypi:`pytest-llm` *last release*: Oct 03, 2025, *status*: 3 - Alpha, @@ -8581,6 +8671,13 @@ This list contains 1878 plugins. Human-friendly pytest test reports with optional LLM annotations + :pypi:`pytest-llmtest` + *last release*: Mar 08, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0; extra == "dev" + + The pytest for LLMs — fast, Pydantic-based assertions for AI applications + :pypi:`pytest-lobster` *last release*: Jul 26, 2025, *status*: N/A, @@ -8638,12 +8735,19 @@ This list contains 1878 plugins. Used to lock object during testing. Essentially changing assertions from being hard coded to asserting that nothing changed :pypi:`pytest-loco` - *last release*: Mar 02, 2026, + *last release*: Mar 08, 2026, *status*: 3 - Alpha, *requires*: pytest<10.0.0,>=9.0.2 Another one YAML-based DSL for testing + :pypi:`pytest-loco-allure` + *last release*: Mar 08, 2026, + *status*: 3 - Alpha, + *requires*: N/A + + Allure support for pytest-loco + :pypi:`pytest-loco-http` *last release*: Feb 25, 2026, *status*: 3 - Alpha, @@ -8729,7 +8833,7 @@ This list contains 1878 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Mar 04, 2026, + *last release*: Mar 13, 2026, *status*: 5 - Production/Stable, *requires*: pytest==9.0.2 @@ -8981,7 +9085,7 @@ This list contains 1878 plugins. Pytest-style framework for evaluating Model Context Protocol (MCP) servers. :pypi:`pytest-mcp-tools` - *last release*: Mar 07, 2026, + *last release*: Mar 12, 2026, *status*: N/A, *requires*: pytest>=7.0.0; extra == "test" @@ -9275,7 +9379,7 @@ This list contains 1878 plugins. A pytest plugin for testing TCP clients :pypi:`pytest-mock-unity-catalog` - *last release*: Mar 01, 2026, + *last release*: Mar 12, 2026, *status*: N/A, *requires*: pytest @@ -9443,11 +9547,11 @@ This list contains 1878 plugins. pytest plugin to help with testing figures output from Matplotlib :pypi:`pytest-mpl-oggm` - *last release*: Mar 06, 2026, + *last release*: Mar 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.5 - pytest plugin to help with testing figures output from Matplotlib + pytest plugin to help with testing figures output from Matplotlib - OGGM fork :pypi:`pytest-mproc` *last release*: Nov 15, 2022, @@ -9527,7 +9631,7 @@ This list contains 1878 plugins. Mypy static type checker plugin for Pytest :pypi:`pytest-mypy-plugins` - *last release*: Feb 16, 2026, + *last release*: Mar 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -10031,7 +10135,7 @@ This list contains 1878 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Jan 02, 2026, + *last release*: Mar 12, 2026, *status*: N/A, *requires*: pytest==9.0.2 @@ -10171,7 +10275,7 @@ This list contains 1878 plugins. Create pytest parametrize decorators from external files. :pypi:`pytest-params` - *last release*: Apr 27, 2025, + *last release*: Mar 14, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -10192,7 +10296,7 @@ This list contains 1878 plugins. Finally spell paramete?ri[sz]e correctly :pypi:`pytest-park` - *last release*: Feb 22, 2026, + *last release*: Mar 14, 2026, *status*: N/A, *requires*: N/A @@ -10423,7 +10527,7 @@ This list contains 1878 plugins. runs tests in an order such that coverage increases as fast as possible :pypi:`pytest-platform-adapter` - *last release*: Feb 04, 2026, + *last release*: Mar 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.5 @@ -10877,6 +10981,13 @@ This list contains 1878 plugins. Pytest PuDB debugger integration + :pypi:`pytest-pudb-resurrected` + *last release*: Mar 12, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Pytest PuDB debugger integration + :pypi:`pytest-pumpkin-spice` *last release*: Sep 18, 2022, *status*: 4 - Beta, @@ -10912,6 +11023,13 @@ This list contains 1878 plugins. + :pypi:`pytest-pw-config-gen` + *last release*: Mar 14, 2026, + *status*: N/A, + *requires*: pytest>=7.4; extra == "dev" + + Generate pytest-playwright configuration files (pytest.ini, pyproject.toml, conftest.py) via CLI + :pypi:`pytest-py125` *last release*: Dec 03, 2022, *status*: N/A, @@ -10954,6 +11072,13 @@ This list contains 1878 plugins. pytest plugin to run pydocstyle + :pypi:`pytest-pyeval` + *last release*: Mar 14, 2026, + *status*: N/A, + *requires*: pytest>=8.0 + + pytest plugin integrating pydantic-evals + :pypi:`pytest-pylembic` *last release*: Jul 22, 2025, *status*: 3 - Alpha, @@ -11318,6 +11443,13 @@ This list contains 1878 plugins. Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard + :pypi:`pytest-readable` + *last release*: Mar 12, 2026, + *status*: 3 - Alpha, + *requires*: pytest<10.0,>=9.0 + + Pytest plugin that renders readable test specifications and exports documentation + :pypi:`pytest-readme` *last release*: Aug 01, 2025, *status*: 5 - Production/Stable, @@ -11340,7 +11472,7 @@ This list contains 1878 plugins. Capture your test sessions. Recap the results. :pypi:`pytest-recorder` - *last release*: Dec 23, 2025, + *last release*: Mar 12, 2026, *status*: N/A, *requires*: pytest>=8.4.1 @@ -11556,6 +11688,13 @@ This list contains 1878 plugins. Generate Pytest reports with templates + :pypi:`pytest-reporter-html` + *last release*: Mar 14, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=7.0 + + Pytest plugin that generates rich HTML test reports with step tracking, log capture, and interactive filtering + :pypi:`pytest-reporter-html1` *last release*: Oct 10, 2025, *status*: 4 - Beta, @@ -11683,7 +11822,7 @@ This list contains 1878 plugins. Pytest Plugin to Mock Requests Futures :pypi:`pytest-requirements` - *last release*: Feb 28, 2025, + *last release*: Mar 10, 2026, *status*: N/A, *requires*: pytest @@ -11850,6 +11989,13 @@ This list contains 1878 plugins. + :pypi:`pytest-result-sender-fanrenbufan` + *last release*: Mar 12, 2026, + *status*: N/A, + *requires*: pytest>=8.4.2 + + Default template for PDM package + :pypi:`pytest-result-sender-jms` *last release*: May 22, 2025, *status*: N/A, @@ -11935,7 +12081,7 @@ This list contains 1878 plugins. Pytest plugin to reverse test order. :pypi:`pytest-review` - *last release*: Dec 19, 2025, + *last release*: Mar 12, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -12208,7 +12354,7 @@ This list contains 1878 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Feb 25, 2026, + *last release*: Mar 13, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12299,7 +12445,7 @@ This list contains 1878 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Feb 25, 2026, + *last release*: Mar 13, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12347,6 +12493,13 @@ This list contains 1878 plugins. Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. + :pypi:`pytest-semantic-llm` + *last release*: Mar 10, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0 + + Semantic assertions for pytest using LLMs + :pypi:`pytest-send-email` *last release*: Sep 02, 2024, *status*: N/A, @@ -13131,6 +13284,13 @@ This list contains 1878 plugins. A small description + :pypi:`pytest-step-logger` + *last release*: Mar 11, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Live Rich-rendered step trees in pytest terminal output + :pypi:`pytest-steps` *last release*: Sep 23, 2021, *status*: 5 - Production/Stable, @@ -13545,7 +13705,7 @@ This list contains 1878 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. :pypi:`pytest-testinel` - *last release*: Mar 06, 2026, + *last release*: Mar 13, 2026, *status*: 4 - Beta, *requires*: pytest>=7 @@ -14168,7 +14328,7 @@ This list contains 1878 plugins. A twisted plugin for pytest. :pypi:`pytest-ty` - *last release*: Feb 18, 2026, + *last release*: Mar 08, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -14350,9 +14510,9 @@ This list contains 1878 plugins. pytest-upload-report is a plugin for pytest that upload your test report for test results. :pypi:`pytest-urllib3` - *last release*: Mar 06, 2026, + *last release*: Mar 09, 2026, *status*: 3 - Alpha, - *requires*: pytest>=8 + *requires*: pytest>=7 A pytest plugin to mock urllib3 requests @@ -14448,7 +14608,7 @@ This list contains 1878 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. :pypi:`pytest-vigil` - *last release*: Mar 04, 2026, + *last release*: Mar 13, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.0 From d4907e8499fc4c36493b61437b56cf2eabfdcebf Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 15 Mar 2026 12:35:30 +0200 Subject: [PATCH 199/307] nodes: remove deprecated `fspath` Node constructor parameter Deprecated feature scheduled for removal in pytest 9. Part of #13893. --- doc/en/deprecations.rst | 82 ++++++++++++++++++------------------ src/_pytest/config/compat.py | 13 ------ src/_pytest/deprecated.py | 9 ---- src/_pytest/nodes.py | 42 +++++------------- src/_pytest/python.py | 3 +- testing/deprecated_test.py | 22 ---------- testing/test_nodes.py | 17 +++----- 7 files changed, 58 insertions(+), 130 deletions(-) delete mode 100644 src/_pytest/config/compat.py diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index ea11696b47a..048c99cedf2 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -183,46 +183,6 @@ In ``9.0``, the warning will turn into an error, and in ``9.1`` :func:`pytest.im :class:`ImportError` by passing it to ``exc_type``. -.. _node-ctor-fspath-deprecation: - -``fspath`` argument for Node constructors replaced with ``pathlib.Path`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. deprecated:: 7.0 - -In order to support the transition from ``py.path.local`` to :mod:`pathlib`, -the ``fspath`` argument to :class:`~_pytest.nodes.Node` constructors like -:func:`pytest.Function.from_parent()` and :func:`pytest.Class.from_parent()` -is now deprecated. - -Plugins which construct nodes should pass the ``path`` argument, of type -:class:`pathlib.Path`, instead of the ``fspath`` argument. - -Plugins which implement custom items and collectors are encouraged to replace -``fspath`` parameters (``py.path.local``) with ``path`` parameters -(``pathlib.Path``), and drop any other usage of the ``py`` library if possible. - -If possible, plugins with custom items should use :ref:`cooperative -constructors ` to avoid hardcoding -arguments they only pass on to the superclass. - -.. note:: - The name of the :class:`~_pytest.nodes.Node` arguments and attributes (the - new attribute being ``path``) is **the opposite** of the situation for - hooks, :ref:`outlined below ` (the old - argument being ``path``). - - This is an unfortunate artifact due to historical reasons, which should be - resolved in future versions as we slowly get rid of the :pypi:`py` - dependency (see :issue:`9283` for a longer discussion). - -Due to the ongoing migration of methods like :meth:`~pytest.Item.reportinfo` -which still is expected to return a ``py.path.local`` object, nodes still have -both ``fspath`` (``py.path.local``) and ``path`` (``pathlib.Path``) attributes, -no matter what argument was used in the constructor. We expect to deprecate the -``fspath`` attribute in a future release. - - Configuring hook specs/impls using markers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -353,6 +313,48 @@ an appropriate period of deprecation has passed. Some breaking changes which could not be deprecated are also listed. + +.. _node-ctor-fspath-deprecation: + +``fspath`` argument for Node constructors replaced with ``pathlib.Path`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 7.0 +.. versionremoved:: 9.1 + +In order to support the transition from ``py.path.local`` to :mod:`pathlib`, +the ``fspath`` argument to :class:`~_pytest.nodes.Node` constructors like +:func:`pytest.Function.from_parent()` and :func:`pytest.Class.from_parent()` +is now deprecated. + +Plugins which construct nodes should pass the ``path`` argument, of type +:class:`pathlib.Path`, instead of the ``fspath`` argument. + +Plugins which implement custom items and collectors are encouraged to replace +``fspath`` parameters (``py.path.local``) with ``path`` parameters +(``pathlib.Path``), and drop any other usage of the ``py`` library if possible. + +If possible, plugins with custom items should use :ref:`cooperative +constructors ` to avoid hardcoding +arguments they only pass on to the superclass. + +.. note:: + The name of the :class:`~_pytest.nodes.Node` arguments and attributes (the + new attribute being ``path``) is **the opposite** of the situation for + hooks, :ref:`outlined below ` (the old + argument being ``path``). + + This is an unfortunate artifact due to historical reasons, which should be + resolved in future versions as we slowly get rid of the :pypi:`py` + dependency (see :issue:`9283` for a longer discussion). + +Due to the ongoing migration of methods like :meth:`~pytest.Item.reportinfo` +which still is expected to return a ``py.path.local`` object, nodes still have +both ``fspath`` (``py.path.local``) and ``path`` (``pathlib.Path``) attributes, +no matter what argument was used in the constructor. We expect to deprecate the +``fspath`` attribute in a future release. + + .. _sync-test-async-fixture: sync test depending on async fixture diff --git a/src/_pytest/config/compat.py b/src/_pytest/config/compat.py deleted file mode 100644 index 9c61b4dac09..00000000000 --- a/src/_pytest/config/compat.py +++ /dev/null @@ -1,13 +0,0 @@ -from __future__ import annotations - -from pathlib import Path - -from ..compat import LEGACY_PATH - - -def _check_path(path: Path, fspath: LEGACY_PATH) -> None: - if Path(fspath) != path: - raise ValueError( - f"Path({fspath!r}) != {path!r}\n" - "if both path and fspath are given they need to be equal" - ) diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index dd46a8b06ba..4c7824e6446 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -14,7 +14,6 @@ from warnings import warn from _pytest.warning_types import PytestDeprecationWarning -from _pytest.warning_types import PytestRemovedIn9Warning from _pytest.warning_types import PytestRemovedIn10Warning from _pytest.warning_types import UnformattedWarning @@ -39,14 +38,6 @@ PRIVATE = PytestDeprecationWarning("A private pytest class or function was used.") -NODE_CTOR_FSPATH_ARG = UnformattedWarning( - PytestRemovedIn9Warning, - "The (fspath: py.path.local) argument to {node_type_name} is deprecated. " - "Please use the (path: pathlib.Path) argument instead.\n" - "See https://docs.pytest.org/en/latest/deprecations.html" - "#fspath-argument-for-node-constructors-replaced-with-pathlib-path", -) - HOOK_LEGACY_MARKING = UnformattedWarning( PytestDeprecationWarning, "The hook{type} {fullname} uses old-style configuration options (marks or attributes).\n" diff --git a/src/_pytest/nodes.py b/src/_pytest/nodes.py index bc1dfc90d96..f0629c2daf7 100644 --- a/src/_pytest/nodes.py +++ b/src/_pytest/nodes.py @@ -31,8 +31,6 @@ from _pytest.compat import signature from _pytest.config import Config from _pytest.config import ConftestImportFailure -from _pytest.config.compat import _check_path -from _pytest.deprecated import NODE_CTOR_FSPATH_ARG from _pytest.mark.structures import Mark from _pytest.mark.structures import MarkDecorator from _pytest.mark.structures import NodeKeywords @@ -71,27 +69,6 @@ def norm_sep(path: str | os.PathLike[str]) -> str: _T = TypeVar("_T") -def _imply_path( - node_type: type[Node], - path: Path | None, - fspath: LEGACY_PATH | None, -) -> Path: - if fspath is not None: - warnings.warn( - NODE_CTOR_FSPATH_ARG.format( - node_type_name=node_type.__name__, - ), - stacklevel=6, - ) - if path is not None: - if fspath is not None: - _check_path(path, fspath) - return path - else: - assert fspath is not None - return Path(fspath) - - _NodeType = TypeVar("_NodeType", bound="Node") @@ -173,7 +150,7 @@ def __init__( parent: Node | None = None, config: Config | None = None, session: Session | None = None, - fspath: LEGACY_PATH | None = None, + fspath: None = None, path: Path | None = None, nodeid: str | None = None, ) -> None: @@ -199,10 +176,11 @@ def __init__( raise TypeError("session or parent must be provided") self.session = parent.session - if path is None and fspath is None: - path = getattr(parent, "path", None) - #: Filesystem path where this node was collected from (can be None). - self.path: pathlib.Path = _imply_path(type(self), path, fspath=fspath) + if path is None: + assert parent is not None + path = parent.path + #: Filesystem path where this node was collected from. + self.path: pathlib.Path = path # The explicit annotation is to avoid publicly exposing NodeKeywords. #: Keywords/markers collected from all scopes. @@ -248,7 +226,7 @@ def from_parent(cls, parent: Node, **kw) -> Self: @property def ihook(self) -> pluggy.HookRelay: - """fspath-sensitive hook proxy used to call pytest hooks.""" + """Path-sensitive hook proxy used to call pytest hooks.""" return self.session.gethookproxy(self.path) def __repr__(self) -> str: @@ -576,7 +554,7 @@ class FSCollector(Collector, abc.ABC): def __init__( self, - fspath: LEGACY_PATH | None = None, + fspath: None = None, path_or_parent: Path | Node | None = None, path: Path | None = None, name: str | None = None, @@ -592,8 +570,8 @@ def __init__( elif isinstance(path_or_parent, Path): assert path is None path = path_or_parent + assert path is not None - path = _imply_path(type(self), path, fspath=fspath) if name is None: name = path.name if parent is not None and parent.path != path: @@ -633,7 +611,7 @@ def from_parent( cls, parent, *, - fspath: LEGACY_PATH | None = None, + fspath: None = None, path: Path | None = None, **kw, ) -> Self: diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 7374fa3cee0..3556562b8c3 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -45,7 +45,6 @@ from _pytest.compat import get_real_func from _pytest.compat import getimfunc from _pytest.compat import is_async_function -from _pytest.compat import LEGACY_PATH from _pytest.compat import NOTSET from _pytest.compat import safe_getattr from _pytest.compat import safe_isclass @@ -654,7 +653,7 @@ class Package(nodes.Directory): def __init__( self, - fspath: LEGACY_PATH | None, + fspath: None, parent: nodes.Collector, # NOTE: following args are unused: config=None, diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index e7f1d396f3c..a55403b07ac 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -1,10 +1,7 @@ # mypy: allow-untyped-defs from __future__ import annotations -import re - from _pytest import deprecated -from _pytest.compat import legacy_path from _pytest.pytester import Pytester import pytest from pytest import PytestDeprecationWarning @@ -88,22 +85,3 @@ def __init__(self, foo: int, *, _ispytest: bool = False) -> None: # Doesn't warn. PrivateInit(10, _ispytest=True) - - -def test_node_ctor_fspath_argument_is_deprecated(pytester: Pytester) -> None: - mod = pytester.getmodulecol("") - - class MyFile(pytest.File): - def collect(self): - raise NotImplementedError() - - with pytest.warns( - pytest.PytestDeprecationWarning, - match=re.escape( - "The (fspath: py.path.local) argument to MyFile is deprecated." - ), - ): - MyFile.from_parent( - parent=mod.parent, - fspath=legacy_path("bla"), - ) diff --git a/testing/test_nodes.py b/testing/test_nodes.py index f66a11ce5c8..e976b9e6f11 100644 --- a/testing/test_nodes.py +++ b/testing/test_nodes.py @@ -6,7 +6,6 @@ import warnings from _pytest import nodes -from _pytest.compat import legacy_path from _pytest.outcomes import OutcomeException from _pytest.pytester import Pytester from _pytest.warning_types import PytestWarning @@ -36,18 +35,14 @@ def test_node_direct_construction_deprecated() -> None: def test_subclassing_both_item_and_collector_deprecated( request, tmp_path: Path ) -> None: - """ - Verifies we warn on diamond inheritance as well as correctly managing legacy - inheritance constructors with missing args as found in plugins. - """ - # We do not expect any warnings messages to issued during class definition. + """Verifies we warn on diamond inheritance from both Item and Collector.""" + # We do not expect any warnings messages to be issued during class definition. with warnings.catch_warnings(): warnings.simplefilter("error") class SoWrong(nodes.Item, nodes.File): - def __init__(self, fspath, parent): - """Legacy ctor with legacy call # don't wana see""" - super().__init__(fspath, parent) + def __init__(self, parent: nodes.Collector, path: Path) -> None: + super().__init__(name="broken", parent=parent, path=path) def collect(self): raise NotImplementedError() @@ -56,9 +51,7 @@ def runtest(self): raise NotImplementedError() with pytest.warns(PytestWarning) as rec: - SoWrong.from_parent( - request.session, fspath=legacy_path(tmp_path / "broken.txt") - ) + SoWrong.from_parent(request.session, path=tmp_path / "broken.txt") messages = [str(x.message) for x in rec] assert any( re.search(".*SoWrong.* not using a cooperative constructor.*", x) From af80fa56c2aef4455cfb8e6b38562171271f1b6a Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 14 Mar 2026 21:53:10 +0200 Subject: [PATCH 200/307] fixtures: remove dirty optimization for `request.getfixturevalue()` Currently for each `Function` we copy the `FunctionDefinition`'s `_arg2fixturedefs`. This is done due to an ineffective optimization for a dynamic `request.getfixturevalue()` when the fixture name wasn't statically requested. In this case, we would save the dynamically-found `FixtureDef` in `_arg2fixturedef`, such that if it is requested again in the same item, it is returned immediately instead of doing a `_matchfactories` check again. But this case is already covered by the `_fixture_defs` optimization. I've always disliked this copy and mutation. The `_arg2fixturedefs` shenanigans performed during collection are hard enough to follow, and this only adds to the complexity, due to the mutability and having multiple different `_arg2fixturedefs` with different contents. So summing up: Pros: faster repeated `request.getfixturevalue()` in same test (ineffective) Cons: complexity (reasoning about mutability), extra copy Even without the `_fixture_defs` optimization, since `request.getfixturevalue()` is mostly a last-resort thing, so shouldn't be too common, and *repeated* calls to it in the same test should be even less common, and if so `_matchfactories` shouldn't be *that* slow, it should be fine to remove it. --- src/_pytest/fixtures.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index acb9fc4c5ee..883ab462d83 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -363,7 +363,7 @@ def __init__( self, pyfuncitem: Function, fixturename: str | None, - arg2fixturedefs: dict[str, Sequence[FixtureDef[Any]]], + arg2fixturedefs: Mapping[str, Sequence[FixtureDef[Any]]], fixture_defs: dict[str, FixtureDef[Any]], *, _ispytest: bool = False, @@ -372,10 +372,9 @@ def __init__( #: Fixture for which this request is being performed. self.fixturename: Final = fixturename self._pyfuncitem: Final = pyfuncitem - # The FixtureDefs for each fixture name requested by this item. - # Starts from the statically-known fixturedefs resolved during - # collection. Dynamically requested fixtures (using - # `request.getfixturevalue("foo")`) are added dynamically. + # The FixtureDefs for each fixture name statically requested by this + # item (computed during collection). Dynamically requested fixtures + # (using `request.getfixturevalue("foo")`) are not included here. self._arg2fixturedefs: Final = arg2fixturedefs # The evaluated argnames so far, mapping to the FixtureDef they resolved # to. @@ -564,8 +563,6 @@ def _get_active_fixturedef(self, argname: str) -> FixtureDef[object]: # getfixturevalue(argname) which was naturally # not known at parsing/collection time. fixturedefs = self._fixturemanager.getfixturedefs(argname, self._pyfuncitem) - if fixturedefs is not None: - self._arg2fixturedefs[argname] = fixturedefs # No fixtures defined with this name. if fixturedefs is None: raise FixtureLookupError(argname, self) @@ -669,7 +666,7 @@ def __init__(self, pyfuncitem: Function, *, _ispytest: bool = False) -> None: super().__init__( fixturename=None, pyfuncitem=pyfuncitem, - arg2fixturedefs=pyfuncitem._fixtureinfo.name2fixturedefs.copy(), + arg2fixturedefs=pyfuncitem._fixtureinfo.name2fixturedefs, fixture_defs={}, _ispytest=_ispytest, ) From 18af2c9dc21efe850124ac5cf60ef7dc15c22a36 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 15 Mar 2026 23:59:22 +0200 Subject: [PATCH 201/307] fixtures: find SubRequest.node eagerly Currently `SubRequest.node` is a property which finds the node on every access. This is mildly expensive (need to search up the collection tree), and is almost guaranteed to be called several times (in `execute` and `finish`). Since the node can't change, let's find the node in the ctor once and save it. --- src/_pytest/fixtures.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index acb9fc4c5ee..cbe408052a4 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -726,22 +726,11 @@ def __init__( _ispytest=_ispytest, ) self._parent_request: Final[FixtureRequest] = request - self._scope_field: Final = scope self._fixturedef: Final[FixtureDef[object]] = fixturedef if param is not NOTSET: self.param = param self.param_index: Final = param_index - - def __repr__(self) -> str: - return f"" - - @property - def _scope(self) -> Scope: - return self._scope_field - - @property - def node(self): - scope = self._scope + self._scope_field: Final = scope if scope is Scope.Function: # This might also be a non-function Item despite its attribute name. node: nodes.Node | None = self._pyfuncitem @@ -755,7 +744,18 @@ def node(self): assert node, ( f'Could not obtain a node for scope "{scope}" for function {self._pyfuncitem!r}' ) - return node + self._node: Final = node + + def __repr__(self) -> str: + return f"" + + @property + def _scope(self) -> Scope: + return self._scope_field + + @property + def node(self): + return self._node def _check_scope( self, From 7320e9ed5fa58f9fd2de1d485359e7288140e2f6 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 14 Mar 2026 23:58:57 +0200 Subject: [PATCH 202/307] fixtures: make FixtureLookupError work from TopRequest with custom message In this case let's just show the test function. --- src/_pytest/fixtures.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index cbe408052a4..cb645d9458b 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -808,16 +808,7 @@ def formatrepr(self) -> FixtureLookupErrorRepr: stack = [self.request._pyfuncitem.obj] stack.extend(map(lambda x: x.func, self.fixturestack)) msg = self.msg - # This function currently makes an assumption that a non-None msg means we - # have a non-empty `self.fixturestack`. This is currently true, but if - # somebody at some point want to extend the use of FixtureLookupError to - # new cases it might break. - # Add the assert to make it clearer to developer that this will fail, otherwise - # it crashes because `fspath` does not get set due to `stack` being empty. - assert self.msg is None or self.fixturestack, ( - "formatrepr assumptions broken, rewrite it to handle it" - ) - if msg is not None: + if msg is not None and len(stack) > 1: # The last fixture raise an error, let's present # it at the requesting side. stack = stack[:-1] From e96f81f4a651a89e02ae6475882c974bd212b05e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 14 Mar 2026 23:29:27 +0200 Subject: [PATCH 203/307] fixtures: deprecate calling `request.getfixturevalue()` during teardown on a fixture that hasn't already been requested. Fix #12882. --- changelog/12882.deprecation.rst | 3 + doc/en/deprecations.rst | 23 +++++++ src/_pytest/deprecated.py | 8 +++ src/_pytest/fixtures.py | 29 ++++++++- src/_pytest/runner.py | 5 ++ testing/python/fixtures.py | 109 ++++++++++++++++++++++++++++++++ 6 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 changelog/12882.deprecation.rst diff --git a/changelog/12882.deprecation.rst b/changelog/12882.deprecation.rst new file mode 100644 index 00000000000..ba5f3240946 --- /dev/null +++ b/changelog/12882.deprecation.rst @@ -0,0 +1,3 @@ +Calling :meth:`request.getfixturevalue() ` during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10. + +See :ref:`dynamic-fixture-request-during-teardown` for details. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 048c99cedf2..4043b4fa7f8 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -15,6 +15,29 @@ Below is a complete list of all pytest features which are considered deprecated. :class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters `. +.. _dynamic-fixture-request-during-teardown: + +``request.getfixturevalue()`` during fixture teardown +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 9.1 + +Calling :meth:`request.getfixturevalue() ` +during teardown to request a fixture that was not already requested is deprecated. + +This pattern is brittle because teardown runs after pytest has started unwinding active scopes. +Depending on the requested fixture's scope and the current teardown order, the lookup may appear +to work, or it may fail. + +In pytest 10, first-time fixture requests made during teardown will become an error. +If teardown logic needs another fixture, request it before teardown begins, either by +declaring it in the fixture signature or by calling ``request.getfixturevalue()`` before +the fixture yields. + +Fixtures that were already requested before teardown started are unaffected and may still +be retrieved while they remain active, though this is discouraged. + + .. _config-inicfg: ``config.inicfg`` diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index 4c7824e6446..9fe761e8ab4 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -67,6 +67,14 @@ "See https://docs.pytest.org/en/stable/deprecations.html#config-inicfg" ) +FIXTURE_GETFIXTUREVALUE_DURING_TEARDOWN = UnformattedWarning( + PytestRemovedIn10Warning, + 'Calling request.getfixturevalue("{argname}") during teardown is deprecated.\n' + "Please request the fixture before teardown begins, either by declaring it in the fixture signature " + "or by calling request.getfixturevalue() before the fixture yields.\n" + "See https://docs.pytest.org/en/stable/deprecations.html#dynamic-fixture-request-during-teardown", +) + # You want to make some `__init__` or function "private". # # def my_private_function(some, args): diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index cb645d9458b..9a5c1f113aa 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -54,6 +54,7 @@ from _pytest.config import ExitCode from _pytest.config.argparsing import Parser from _pytest.deprecated import check_ispytest +from _pytest.deprecated import FIXTURE_GETFIXTUREVALUE_DURING_TEARDOWN from _pytest.deprecated import YIELD_FIXTURE from _pytest.main import Session from _pytest.mark import ParameterSet @@ -507,6 +508,16 @@ def raiseerror(self, msg: str | None) -> NoReturn: """ raise FixtureLookupError(None, self, msg) + def _raise_teardown_lookup_error(self, argname: str) -> NoReturn: + msg = ( + f'The fixture value for "{argname}" is not available during teardown ' + "because it was not previously requested.\n" + "Only fixtures that were already active can be retrieved during teardown.\n" + "Request the fixture before teardown begins by declaring it in the fixture " + "signature or by calling request.getfixturevalue() before the fixture yields." + ) + raise FixtureLookupError(argname, self, msg) + def getfixturevalue(self, argname: str) -> Any: """Dynamically run a named fixture function. @@ -516,8 +527,12 @@ def getfixturevalue(self, argname: str) -> Any: or test function body. This method can be used during the test setup phase or the test run - phase, but during the test teardown phase a fixture's value may not - be available. + phase. Avoid using it during the teardown phase. + + .. versionchanged:: 9.1 + Calling ``request.getfixturevalue()`` during teardown to request a + fixture that was not already requested + :ref:`is deprecated `. :param argname: The fixture name. @@ -616,6 +631,16 @@ def _get_active_fixturedef(self, argname: str) -> FixtureDef[object]: self, scope, param, param_index, fixturedef, _ispytest=True ) + if not self.session._setupstate.is_node_active(self.node): + # TODO(pytest10.1): Remove the `warn` and `if` and call + # _raise_teardown_lookup_error unconditionally. + warnings.warn( + FIXTURE_GETFIXTUREVALUE_DURING_TEARDOWN.format(argname=argname), + stacklevel=3, + ) + if subrequest.node not in self.session._setupstate.stack: + self._raise_teardown_lookup_error(argname) + # Make sure the fixture value is cached, running it if it isn't fixturedef.execute(request=subrequest) diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py index d1090aace89..18d3591abfe 100644 --- a/src/_pytest/runner.py +++ b/src/_pytest/runner.py @@ -507,6 +507,11 @@ def __init__(self) -> None: ], ] = {} + def is_node_active(self, node: Node) -> bool: + """Check if a node is currently active in the stack -- set up and not + torn down yet.""" + return node in self.stack + def setup(self, item: Item) -> None: """Setup objects along the collector chain to the item.""" needed_collectors = item.listchain() diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 4d8dfc3958f..38d219a547b 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -871,6 +871,115 @@ def test_func(resource): result = pytester.runpytest() result.stdout.fnmatch_lines(["* 2 passed in *"]) + def test_getfixturevalue_teardown_previously_requested_does_not_warn( + self, pytester: Pytester + ) -> None: + """Test that requesting a fixture during teardown that was previously + requested is OK (#12882). + + Note: this is still kinda dubious so don't let this test lock you in to + allowing this behavior forever... + """ + pytester.makepyfile( + """ + import pytest + + @pytest.fixture + def fix(request, tmp_path): + yield + assert request.getfixturevalue("tmp_path") == tmp_path + + def test_it(fix): + pass + """ + ) + result = pytester.runpytest("-Werror") + result.assert_outcomes(passed=1) + + def test_getfixturevalue_teardown_new_fixture_deprecated( + self, pytester: Pytester + ) -> None: + """Test that requesting a fixture during teardown that was not + previously requested raises a deprecation warning (#12882). + + Note: this is a case that previously worked but will become a hard + error after the deprecation is completed. + """ + pytester.makepyfile( + """ + import pytest + + @pytest.fixture(scope="session") + def resource(): + return "value" + + @pytest.fixture + def fix(request): + yield + with pytest.warns( + pytest.PytestRemovedIn10Warning, + match=r'Calling request\\.getfixturevalue\\("resource"\\) during teardown is deprecated', + ): + assert request.getfixturevalue("resource") == "value" + + def test_it(fix): + pass + """ + ) + result = pytester.runpytest() + result.assert_outcomes(passed=1) + + def test_getfixturevalue_teardown_new_inactive_fixture_errors( + self, pytester: Pytester + ) -> None: + """Test that requesting a fixture during teardown that was not + previously requested raises an error (#12882).""" + pytester.makepyfile( + """ + import pytest + + @pytest.fixture + def fix(request): + yield + request.getfixturevalue("tmp_path") + + def test_it(fix): + pass + """ + ) + result = pytester.runpytest() + result.assert_outcomes(passed=1, errors=1) + result.stdout.fnmatch_lines( + [ + ( + '*The fixture value for "tmp_path" is not available during ' + "teardown because it was not previously requested.*" + ), + ] + ) + + def test_getfixturevalue_teardown_new_inactive_fixture_errors_top_request( + self, pytester: Pytester + ) -> None: + """Test that requesting a fixture during teardown that was not + previously requested raises an error (tricky case) (#12882).""" + pytester.makepyfile( + """ + def test_it(request): + request.addfinalizer(lambda: request.getfixturevalue("tmp_path")) + """ + ) + result = pytester.runpytest() + result.assert_outcomes(passed=1, errors=1) + result.stdout.fnmatch_lines( + [ + ( + '*The fixture value for "tmp_path" is not available during ' + "teardown because it was not previously requested.*" + ), + ] + ) + def test_getfixturevalue(self, pytester: Pytester) -> None: item = pytester.getitem( """ From 10929dcd8ac8484331be9f686a85ce02d09fefdf Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 15 Mar 2026 13:26:12 +0200 Subject: [PATCH 204/307] outcomes: remove deprecated `importorskip` `ImportError` behavior Deprecated scheduled for removal in pytest 9. Part of #13893. --- doc/en/deprecations.rst | 59 +++++++++++++++++------------------------ src/_pytest/outcomes.py | 43 +++++++----------------------- testing/test_runner.py | 55 +++++++++++--------------------------- 3 files changed, 49 insertions(+), 108 deletions(-) diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 048c99cedf2..5207af0c65a 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -148,41 +148,6 @@ Simply remove the ``__init__.py`` file entirely. Python 3.3+ natively supports namespace packages without ``__init__.py``. -.. _import-or-skip-import-error: - -``pytest.importorskip`` default behavior regarding :class:`ImportError` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. deprecated:: 8.2 - -Traditionally :func:`pytest.importorskip` will capture :class:`ImportError`, with the original intent being to skip -tests where a dependent module is not installed, for example testing with different dependencies. - -However some packages might be installed in the system, but are not importable due to -some other issue, for example, a compilation error or a broken installation. In those cases :func:`pytest.importorskip` -would still silently skip the test, but more often than not users would like to see the unexpected -error so the underlying issue can be fixed. - -In ``8.2`` the ``exc_type`` parameter has been added, giving users the ability of passing :class:`ModuleNotFoundError` -to skip tests only if the module cannot really be found, and not because of some other error. - -Catching only :class:`ModuleNotFoundError` by default (and letting other errors propagate) would be the best solution, -however for backward compatibility, pytest will keep the existing behavior but raise a warning if: - -1. The captured exception is of type :class:`ImportError`, and: -2. The user does not pass ``exc_type`` explicitly. - -If the import attempt raises :class:`ModuleNotFoundError` (the usual case), then the module is skipped and no -warning is emitted. - -This way, the usual cases will keep working the same way, while unexpected errors will now issue a warning, with -users being able to suppress the warning by passing ``exc_type=ImportError`` explicitly. - -In ``9.0``, the warning will turn into an error, and in ``9.1`` :func:`pytest.importorskip` will only capture -:class:`ModuleNotFoundError` by default and no warnings will be issued anymore -- but users can still capture -:class:`ImportError` by passing it to ``exc_type``. - - Configuring hook specs/impls using markers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -314,6 +279,30 @@ an appropriate period of deprecation has passed. Some breaking changes which could not be deprecated are also listed. +.. _import-or-skip-import-error: + +``pytest.importorskip`` default behavior regarding :class:`ImportError` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 8.2 +.. versionremoved:: 9.1 + +Traditionally :func:`pytest.importorskip` captured :class:`ImportError`, with the original intent being to skip +tests where a dependent module is not installed, for example testing with different dependencies. + +However, some packages might be installed in the system but not importable due to some other issue, for example +a compilation error or a broken installation. In those cases, :func:`pytest.importorskip` would still silently skip +the test, but more often than not users would rather see the unexpected error so the underlying issue can be fixed. + +In ``8.2``, the ``exc_type`` parameter was added, giving users the ability to pass +:class:`ModuleNotFoundError` to skip tests only if the module cannot really be found, and not because of some other +error. + +As of ``9.1``, :func:`pytest.importorskip` only captures :class:`ModuleNotFoundError` by default. +If you want to preserve the previous behavior and skip on other :class:`ImportError` exceptions during import, +pass ``exc_type=ImportError`` explicitly. + + .. _node-ctor-fspath-deprecation: ``fspath`` argument for Node constructors replaced with ``pathlib.Path`` diff --git a/src/_pytest/outcomes.py b/src/_pytest/outcomes.py index 09d0a6eccea..257b95cf585 100644 --- a/src/_pytest/outcomes.py +++ b/src/_pytest/outcomes.py @@ -9,8 +9,6 @@ from typing import ClassVar from typing import NoReturn -from .warning_types import PytestDeprecationWarning - class OutcomeException(BaseException): """OutcomeException and its subclass instances indicate and contain info @@ -219,11 +217,10 @@ def importorskip( The exception that should be captured in order to skip modules. Must be :py:class:`ImportError` or a subclass. - If the module can be imported but raises :class:`ImportError`, pytest will - issue a warning to the user, as often users expect the module not to be - found (which would raise :class:`ModuleNotFoundError` instead). - - This warning can be suppressed by passing ``exc_type=ImportError`` explicitly. + Defaults to :class:`ModuleNotFoundError` when not given, which means + the module must be missing for the test to be skipped. + Pass ``exc_type=ImportError`` to also skip modules that raise + :class:`ImportError` during import. See :ref:`import-or-skip-import-error` for details. @@ -241,26 +238,21 @@ def importorskip( .. versionadded:: 8.2 The ``exc_type`` parameter. + + .. versionchanged:: 9.1 + + The default for ``exc_type`` is now :class:`ModuleNotFoundError`. """ import warnings __tracebackhide__ = True compile(modname, "", "eval") # to catch syntaxerrors - # Until pytest 9.1, we will warn the user if we catch ImportError (instead of ModuleNotFoundError), - # as this might be hiding an installation/environment problem, which is not usually what is intended - # when using importorskip() (#11523). - # In 9.1, to keep the function signature compatible, we just change the code below to: - # 1. Use `exc_type = ModuleNotFoundError` if `exc_type` is not given. - # 2. Remove `warn_on_import` and the warning handling. + # Keep the public signature compatible while using the pytest 9.1 default behavior. if exc_type is None: - exc_type = ImportError - warn_on_import_error = True - else: - warn_on_import_error = False + exc_type = ModuleNotFoundError skipped: Skipped | None = None - warning: Warning | None = None with warnings.catch_warnings(): # Make sure to ignore ImportWarnings that might happen because @@ -275,21 +267,6 @@ def importorskip( if reason is None: reason = f"could not import {modname!r}: {exc}" skipped = Skipped(reason, allow_module_level=True) - - if warn_on_import_error and not isinstance(exc, ModuleNotFoundError): - lines = [ - "", - f"Module '{modname}' was found, but when imported by pytest it raised:", - f" {exc!r}", - "In pytest 9.1 this warning will become an error by default.", - "You can fix the underlying problem, or alternatively overwrite this behavior and silence this " - "warning by passing exc_type=ImportError explicitly.", - "See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror", - ] - warning = PytestDeprecationWarning("\n".join(lines)) - - if warning: - warnings.warn(warning, stacklevel=2) if skipped: raise skipped diff --git a/testing/test_runner.py b/testing/test_runner.py index 0245438a47d..6ecdfe7e62c 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -7,7 +7,6 @@ from pathlib import Path import sys import types -import warnings from _pytest import outcomes from _pytest import reports @@ -799,50 +798,29 @@ def test_importorskip_imports_last_module_part() -> None: class TestImportOrSkipExcType: - """Tests for #11523.""" + """Tests for importorskip's exc_type behavior.""" - def test_no_warning(self) -> None: - # An attempt on a module which does not exist will raise ModuleNotFoundError, so it will - # be skipped normally and no warning will be issued. - with warnings.catch_warnings(record=True) as captured: - warnings.simplefilter("always") - - with pytest.raises(pytest.skip.Exception): - pytest.importorskip("TestImportOrSkipExcType_test_no_warning") - - assert captured == [] + def test_module_not_found_skips_by_default(self) -> None: + with pytest.raises(pytest.skip.Exception): + pytest.importorskip( + "TestImportOrSkipExcType_test_module_not_found_skips_without_warning" + ) - def test_import_error_with_warning(self, pytester: Pytester) -> None: - # Create a module which exists and can be imported, however it raises - # ImportError due to some other problem. In this case we will issue a warning - # about the future behavior change. + def test_import_error_is_propagated_by_default(self, pytester: Pytester) -> None: fn = pytester.makepyfile("raise ImportError('some specific problem')") pytester.syspathinsert() - with warnings.catch_warnings(record=True) as captured: - warnings.simplefilter("always") - - with pytest.raises(pytest.skip.Exception): - pytest.importorskip(fn.stem) + with pytest.raises(ImportError, match="some specific problem"): + pytest.importorskip(fn.stem) - [warning] = captured - assert warning.category is pytest.PytestDeprecationWarning - - def test_import_error_suppress_warning(self, pytester: Pytester) -> None: - # Same as test_import_error_with_warning, but we can suppress the warning - # by passing ImportError as exc_type. + def test_import_error_can_be_captured_explicitly(self, pytester: Pytester) -> None: fn = pytester.makepyfile("raise ImportError('some specific problem')") pytester.syspathinsert() - with warnings.catch_warnings(record=True) as captured: - warnings.simplefilter("always") - - with pytest.raises(pytest.skip.Exception): - pytest.importorskip(fn.stem, exc_type=ImportError) - - assert captured == [] + with pytest.raises(pytest.skip.Exception): + pytest.importorskip(fn.stem, exc_type=ImportError) - def test_warning_integration(self, pytester: Pytester) -> None: + def test_import_error_integration(self, pytester: Pytester) -> None: pytester.makepyfile( """ import pytest @@ -857,12 +835,9 @@ def test_foo(): ) result = pytester.runpytest() result.stdout.fnmatch_lines( - [ - "*Module 'warning_integration_module' was found, but when imported by pytest it raised:", - "* ImportError('required library foobar not compiled properly')", - "*1 skipped, 1 warning*", - ] + ["*ImportError: required library foobar not compiled properly*"] ) + result.assert_outcomes(failed=1) def test_importorskip_dev_module(monkeypatch) -> None: From 5de1f491fe02110686ffdeb68bef3d855687ecab Mon Sep 17 00:00:00 2001 From: Freya Bruhin Date: Tue, 17 Mar 2026 13:19:52 +0100 Subject: [PATCH 205/307] doc: Update training info (#14298) --- doc/en/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/index.rst b/doc/en/index.rst index fa05b3a0c48..1140640c80a 100644 --- a/doc/en/index.rst +++ b/doc/en/index.rst @@ -2,7 +2,7 @@ .. sidebar:: **Next Open Trainings and Events** - - `Professional Testing with Python `_, via `Python Academy `_ (3 day in-depth training), **March 3rd -- 5th 2026**, Remote + - `Professional Testing with Python `_, via `Python Academy `_ (3 day in-depth training), **March 9th -- 11th 2027**, Leipzig (DE) / Remote Also see :doc:`previous talks and blogposts ` From 582e24dd9a4957f6acc9e17dfd440ed227b576b8 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 18 Mar 2026 14:44:06 +0200 Subject: [PATCH 206/307] doc: sphinx-trio now supports Sphinx>=9 so allow (and require) it --- changelog/14303.doc.rst | 1 + doc/en/conf.py | 2 ++ doc/en/requirements.txt | 5 ++--- 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 changelog/14303.doc.rst diff --git a/changelog/14303.doc.rst b/changelog/14303.doc.rst new file mode 100644 index 00000000000..377c6d6057b --- /dev/null +++ b/changelog/14303.doc.rst @@ -0,0 +1 @@ +The documentation is now built with Sphinx >= 9. diff --git a/doc/en/conf.py b/doc/en/conf.py index 81156493131..39cd169cdb3 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -89,6 +89,8 @@ ("py:class", "_pytest.python_api.RaisesContext"), ("py:class", "_pytest.recwarn.WarningsChecker"), ("py:class", "_pytest.reports.BaseReport"), + # Sphinx bugs(?) + ("py:class", "RewriteHook"), # Undocumented third parties ("py:class", "_tracing.TagTracerSub"), ("py:class", "warnings.WarningMessage"), diff --git a/doc/en/requirements.txt b/doc/en/requirements.txt index d672a9d7e15..ecaf889cd9e 100644 --- a/doc/en/requirements.txt +++ b/doc/en/requirements.txt @@ -2,9 +2,8 @@ pluggy>=1.5.0 pygments-pytest>=2.5.0 sphinx-removed-in>=0.2.0 -# Pinning to <9.0 due to https://github.com/python-trio/sphinxcontrib-trio/issues/399. -sphinx>=7,<9.0 -sphinxcontrib-trio +sphinx>=9 +sphinxcontrib-trio>=1.2.0 sphinxcontrib-svg2pdfconverter furo sphinxcontrib-towncrier From 1613a12c2948ec22e4703387e97ff4acf172e66c Mon Sep 17 00:00:00 2001 From: Kadir Can Ozden <101993364+bysiber@users.noreply.github.com> Date: Fri, 20 Feb 2026 05:27:57 +0300 Subject: [PATCH 207/307] raises: fix regex escaping warning not considering `|` as needs escaping The pipe character is a regex metacharacter (alternation operator) but is_fully_escaped did not include it, so a match pattern like '^foo|bar$' would be wrongly identified as a fully-escaped literal. This causes rawmatch to be set incorrectly, leading to misleading diff output on match failure. Also add | to the unescape function's character class for consistency. --- changelog/13192.bugfix.rst | 1 + src/_pytest/raises.py | 4 ++-- testing/python/raises.py | 9 +++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 changelog/13192.bugfix.rst diff --git a/changelog/13192.bugfix.rst b/changelog/13192.bugfix.rst new file mode 100644 index 00000000000..cc7f9bc5487 --- /dev/null +++ b/changelog/13192.bugfix.rst @@ -0,0 +1 @@ +Fixed `|` (pipe) not being treated as a regex meta-character that needs escaping in :func:`pytest.raises(match=...) `. diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 7c246fde280..75eea7d8cc9 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -363,14 +363,14 @@ def _check_raw_type( def is_fully_escaped(s: str) -> bool: # we know we won't compile with re.VERBOSE, so whitespace doesn't need to be escaped - metacharacters = "{}()+.*?^$[]" + metacharacters = "{}()+.*?^$[]|" return not any( c in metacharacters and (i == 0 or s[i - 1] != "\\") for (i, c) in enumerate(s) ) def unescape(s: str) -> str: - return re.sub(r"\\([{}()+-.*?^$\[\]\s\\])", r"\1", s) + return re.sub(r"\\([{}()+-.*?^$\[\]\s\\|])", r"\1", s) # These classes conceptually differ from ExceptionInfo in that ExceptionInfo is tied, and diff --git a/testing/python/raises.py b/testing/python/raises.py index 6b2a765e7fb..43a10d8a4f6 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -430,3 +430,12 @@ def test_raises_match_compiled_regex(self) -> None: pattern_with_flags = re.compile(r"INVALID LITERAL", re.IGNORECASE) with pytest.raises(ValueError, match=pattern_with_flags): int("asdf") + + def test_pipe_is_treated_as_regex_metacharacter(self) -> None: + """| (pipe) must be recognized as a regex metacharacter.""" + from _pytest.raises import is_fully_escaped + from _pytest.raises import unescape + + assert not is_fully_escaped("foo|bar") + assert is_fully_escaped(r"foo\|bar") + assert unescape(r"foo\|bar") == "foo|bar" From 17f08d356a82a02f88aaa837a573fa3b642dbaab Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 20 Mar 2026 13:58:04 +0200 Subject: [PATCH 208/307] docs: update `tox -e docs`/RTD from Python 3.13 to 3.14 --- .readthedocs.yaml | 2 +- doc/en/conf.py | 2 ++ tox.ini | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 6380b34adec..26a07283f6d 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -17,7 +17,7 @@ build: os: ubuntu-24.04 tools: python: >- - 3.13 + 3.14 apt_packages: - inkscape jobs: diff --git a/doc/en/conf.py b/doc/en/conf.py index 39cd169cdb3..8b259b03bf5 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -94,6 +94,8 @@ # Undocumented third parties ("py:class", "_tracing.TagTracerSub"), ("py:class", "warnings.WarningMessage"), + # Python 3.14+ exposes the C accelerator module name. + ("py:class", "_py_warnings.WarningMessage"), # Undocumented type aliases ("py:class", "LEGACY_PATH"), ("py:class", "_PluggyPlugin"), diff --git a/tox.ini b/tox.ini index 5a8fa240898..515313a9bf6 100644 --- a/tox.ini +++ b/tox.ini @@ -128,7 +128,7 @@ setenv = description = build the documentation site under \ `{toxinidir}{/}doc{/}en{/}_build{/}html` with `{basepython}` -basepython = python3.13 # Sync with .readthedocs.yaml to get errors. +basepython = python3.14 # Sync with .readthedocs.yaml to get errors. usedevelop = True deps = -r{toxinidir}/doc/en/requirements.txt From ecac57287b679cc707fb4d22aa9d48426eaacac4 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 20 Mar 2026 21:04:28 +0200 Subject: [PATCH 209/307] Remove `PytestRemovedIn9Warning` (#14299) Per our deprecation policy. Fix #13893. --- doc/en/conf.py | 20 ++++++++++++++++++++ doc/en/reference/reference.rst | 2 +- src/_pytest/warning_types.py | 6 ------ src/_pytest/warnings.py | 3 ++- src/pytest/__init__.py | 2 -- testing/test_warnings.py | 9 ++++----- 6 files changed, 27 insertions(+), 15 deletions(-) diff --git a/doc/en/conf.py b/doc/en/conf.py index 8b259b03bf5..eb95727d159 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -306,4 +306,24 @@ def setup(app: sphinx.application.Sphinx) -> None: # legacypath.py monkey-patches pytest.Testdir in. Import the file so # that autodoc can discover references to it. + # Workaround for Sphinx bug with Python 3.14: + # inspect.getsource() returns '\n' instead of raising OSError for classes + # whose __module__ doesn't match the file they're defined in, causing + # get_type_comment() to crash with IndexError on empty ast.parse result. + # See: https://github.com/sphinx-doc/sphinx/issues/14345 + import sys + import _pytest.legacypath # noqa: F401 + + if sys.version_info >= (3, 14): + from sphinx.ext.autodoc._dynamic import _type_comments + + _orig_get_type_comment = _type_comments.get_type_comment + + def _get_type_comment_safe(obj: object, bound_method: bool = False) -> object: + try: + return _orig_get_type_comment(obj, bound_method) + except IndexError: + return None + + _type_comments.get_type_comment = _get_type_comment_safe # type: ignore[assignment] diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 644a687af53..4e5c7cfd644 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1291,7 +1291,7 @@ Custom warnings generated in some situations such as improper usage or deprecate .. autoclass:: pytest.PytestReturnNotNoneWarning :show-inheritance: -.. autoclass:: pytest.PytestRemovedIn9Warning +.. autoclass:: pytest.PytestRemovedIn10Warning :show-inheritance: .. autoclass:: pytest.PytestUnknownMarkWarning diff --git a/src/_pytest/warning_types.py b/src/_pytest/warning_types.py index 93071b4a1b2..8fd62ff84b0 100644 --- a/src/_pytest/warning_types.py +++ b/src/_pytest/warning_types.py @@ -50,12 +50,6 @@ class PytestDeprecationWarning(PytestWarning, DeprecationWarning): __module__ = "pytest" -class PytestRemovedIn9Warning(PytestDeprecationWarning): - """Warning class for features that will be removed in pytest 9.""" - - __module__ = "pytest" - - class PytestRemovedIn10Warning(PytestDeprecationWarning): """Warning class for features that will be removed in pytest 10.""" diff --git a/src/_pytest/warnings.py b/src/_pytest/warnings.py index 1dbf0025a31..d599d6c27e6 100644 --- a/src/_pytest/warnings.py +++ b/src/_pytest/warnings.py @@ -41,7 +41,8 @@ def catch_warnings_for_item( warnings.filterwarnings("always", category=DeprecationWarning) warnings.filterwarnings("always", category=PendingDeprecationWarning) - warnings.filterwarnings("error", category=pytest.PytestRemovedIn9Warning) + # To be enabled in pytest 10.0.0. + # warnings.filterwarnings("error", category=pytest.PytestRemovedIn10Warning) apply_warning_filters(config_filters, cmdline_filters) diff --git a/src/pytest/__init__.py b/src/pytest/__init__.py index 3e6281ac388..d53edb93728 100644 --- a/src/pytest/__init__.py +++ b/src/pytest/__init__.py @@ -83,7 +83,6 @@ from _pytest.warning_types import PytestDeprecationWarning from _pytest.warning_types import PytestExperimentalApiWarning from _pytest.warning_types import PytestFDWarning -from _pytest.warning_types import PytestRemovedIn9Warning from _pytest.warning_types import PytestRemovedIn10Warning from _pytest.warning_types import PytestReturnNotNoneWarning from _pytest.warning_types import PytestUnhandledThreadExceptionWarning @@ -135,7 +134,6 @@ "PytestExperimentalApiWarning", "PytestFDWarning", "PytestPluginManager", - "PytestRemovedIn9Warning", "PytestRemovedIn10Warning", "PytestReturnNotNoneWarning", "PytestUnhandledThreadExceptionWarning", diff --git a/testing/test_warnings.py b/testing/test_warnings.py index e3221da7569..2625f0959e6 100644 --- a/testing/test_warnings.py +++ b/testing/test_warnings.py @@ -562,8 +562,7 @@ def test_invalid_regex_in_filterwarning(self, pytester: Pytester) -> None: ) -# In 9.1, uncomment below and change RemovedIn9 -> RemovedIn10. -# @pytest.mark.skip("not relevant until pytest 10.0") +@pytest.mark.skip("not relevant until pytest 10.0") @pytest.mark.parametrize("change_default", [None, "ini", "cmdline"]) def test_removed_in_x_warning_as_error(pytester: Pytester, change_default) -> None: """This ensures that PytestRemovedInXWarnings raised by pytest are turned into errors. @@ -575,7 +574,7 @@ def test_removed_in_x_warning_as_error(pytester: Pytester, change_default) -> No """ import warnings, pytest def test(): - warnings.warn(pytest.PytestRemovedIn9Warning("some warning")) + warnings.warn(pytest.PytestRemovedIn10Warning("some warning")) """ ) if change_default == "ini": @@ -583,12 +582,12 @@ def test(): """ [pytest] filterwarnings = - ignore::pytest.PytestRemovedIn9Warning + ignore::pytest.PytestRemovedIn10Warning """ ) args = ( - ("-Wignore::pytest.PytestRemovedIn9Warning",) + ("-Wignore::pytest.PytestRemovedIn10Warning",) if change_default == "cmdline" else () ) From 76667b24b86e5fa3c976640b1120dda6855fa8a8 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 21 Mar 2026 22:54:15 +0200 Subject: [PATCH 210/307] config: slightly simplify `_set_initial_conftests` Rework the logic a bit to collect the anchors and only then load them. This allows inlining `_try_load_conftest` and making the logic easier to follow. --- src/_pytest/config/__init__.py | 50 ++++++++++------------------------ 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 21dc35219d8..f7c4de5d7e9 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -589,7 +589,8 @@ def _set_initial_conftests( ) self._noconftest = noconftest self._using_pyargs = pyargs - foundanchor = False + + anchors = [] for initial_path in args: path = str(initial_path) # remove node-id syntax @@ -601,16 +602,18 @@ def _set_initial_conftests( # Ensure we do not break if what appears to be an anchor # is in fact a very long option (#10169, #11394). if safe_exists(anchor): - self._try_load_conftest( - anchor, - importmode, - rootpath, - consider_namespace_packages=consider_namespace_packages, - ) - foundanchor = True - if not foundanchor: - self._try_load_conftest( - invocation_dir, + anchors.append(anchor) + # Let's also consider test* subdirs. + if anchor.is_dir(): + for x in anchor.glob("test*"): + if x.is_dir(): + anchors.append(x) + if not anchors: + anchors = [invocation_dir] + + for anchor in anchors: + self._loadconftestmodules( + anchor, importmode, rootpath, consider_namespace_packages=consider_namespace_packages, @@ -631,31 +634,6 @@ def _is_in_confcutdir(self, path: pathlib.Path) -> bool: # (see #9767 for a regression where the logic was inverted). return path not in self._confcutdir.parents - def _try_load_conftest( - self, - anchor: pathlib.Path, - importmode: str | ImportMode, - rootpath: pathlib.Path, - *, - consider_namespace_packages: bool, - ) -> None: - self._loadconftestmodules( - anchor, - importmode, - rootpath, - consider_namespace_packages=consider_namespace_packages, - ) - # let's also consider test* subdirs - if anchor.is_dir(): - for x in anchor.glob("test*"): - if x.is_dir(): - self._loadconftestmodules( - x, - importmode, - rootpath, - consider_namespace_packages=consider_namespace_packages, - ) - def _loadconftestmodules( self, path: pathlib.Path, From 3886a9444da6fc0afc1b8101a33a5ec109d01f3d Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 21 Mar 2026 23:31:42 +0200 Subject: [PATCH 211/307] hookspec: remove no longer exist legacy path `:param:`s Forgot to remove the `:param:`s when finally removed the params. --- src/_pytest/hookspec.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/_pytest/hookspec.py b/src/_pytest/hookspec.py index 4688c056141..6c5dd4b7c4a 100644 --- a/src/_pytest/hookspec.py +++ b/src/_pytest/hookspec.py @@ -315,7 +315,6 @@ def pytest_ignore_collect(collection_path: Path, config: Config) -> bool | None: :param collection_path: The path to analyze. :type collection_path: pathlib.Path - :param path: The path to analyze (deprecated). :param config: The pytest config object. .. versionchanged:: 7.0.0 @@ -373,7 +372,6 @@ def pytest_collect_file(file_path: Path, parent: Collector) -> Collector | None: :param file_path: The path to analyze. :type file_path: pathlib.Path - :param path: The path to collect (deprecated). .. versionchanged:: 7.0.0 The ``file_path`` parameter was added as a :class:`pathlib.Path` @@ -492,7 +490,6 @@ def pytest_pycollect_makemodule(module_path: Path, parent) -> Module | None: :param module_path: The path of the module to collect. :type module_path: pathlib.Path - :param path: The path of the module to collect (deprecated). .. versionchanged:: 7.0.0 The ``module_path`` parameter was added as a :class:`pathlib.Path` @@ -1011,7 +1008,6 @@ def pytest_report_header(config: Config, start_path: Path) -> str | list[str]: :param config: The pytest config object. :param start_path: The starting dir. :type start_path: pathlib.Path - :param startdir: The starting dir (deprecated). .. note:: @@ -1047,7 +1043,6 @@ def pytest_report_collectionfinish( # type: ignore[empty-body] :param config: The pytest config object. :param start_path: The starting dir. :type start_path: pathlib.Path - :param startdir: The starting dir (deprecated). :param items: List of pytest items that are going to be executed; this list should not be modified. .. note:: From 09d01042fe6ee88b667b8b854d10bce12f69aacb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 22 Mar 2026 12:56:33 +0100 Subject: [PATCH 212/307] [automated] Update plugin list (#14309) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 230 ++++++++++++++++++++++--------- 1 file changed, 167 insertions(+), 63 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 75c3786308a..1b168fe7488 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.0 + :pypi:`pytest-agent-digest` A Pytest plugin to generate a Markdown report for AI Agents Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) @@ -105,7 +106,7 @@ This list contains 1898 plugins. :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Mar 03, 2026 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Mar 16, 2026 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest @@ -118,7 +119,7 @@ This list contains 1898 plugins. :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Mar 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 05, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Mar 05, 2026 3 - Alpha pytest + :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Mar 19, 2026 3 - Alpha pytest :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-artifact` Pytest plugin for managing test artifacts Feb 09, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 @@ -154,7 +155,7 @@ This list contains 1898 plugins. :pypi:`pytest-attempt-summary` Enhanced Allure Attempt Summary for Playwright + Pytest Jan 04, 2026 N/A pytest>=7.0 :pypi:`pytest-attrib` pytest plugin to select tests based on attributes similar to the nose-attrib plugin May 24, 2016 4 - Beta N/A :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-audioeval` Pytest plugin for STT/TTS integration testing with httpx, metrics, and embedded audio samples. Mar 13, 2026 4 - Beta pytest>=8.0 + :pypi:`pytest-audioeval` Pytest plugin for STT/TTS integration testing with httpx, metrics, and embedded audio samples. Mar 18, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A :pypi:`pytest-autocap` automatically capture test & fixture stdout/stderr to files May 15, 2022 N/A pytest (<7.2,>=7.1.2) :pypi:`pytest-autochecklog` automatically check condition and log all the checks Apr 25, 2015 4 - Beta N/A @@ -196,7 +197,7 @@ This list contains 1898 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 13, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 20, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -277,7 +278,7 @@ This list contains 1898 plugins. :pypi:`pytest-change-report` turn . into √,turn F into x Sep 14, 2020 N/A pytest :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) - :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Mar 05, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Mar 20, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-checkdocs` check the README when running tests Dec 26, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 27, 2025 N/A pytest>=9.0.2 :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 @@ -362,7 +363,7 @@ This list contains 1898 plugins. :pypi:`pytest-copier` A pytest plugin to help testing Copier templates Dec 11, 2023 4 - Beta pytest>=7.3.2 :pypi:`pytest-couchdbkit` py.test extension for per-test couchdb databases using couchdbkit Apr 17, 2012 N/A N/A :pypi:`pytest-count` count erros and send email Jan 12, 2018 4 - Beta N/A - :pypi:`pytest-cov` Pytest plugin for measuring coverage. Sep 09, 2025 5 - Production/Stable pytest>=7 + :pypi:`pytest-cov` Pytest plugin for measuring coverage. Mar 21, 2026 5 - Production/Stable pytest>=7 :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A @@ -465,12 +466,13 @@ This list contains 1898 plugins. :pypi:`pytest-disable-plugin` Disable plugins per test Feb 28, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-discord` A pytest plugin to notify test results to a Discord channel. May 11, 2024 4 - Beta pytest!=6.0.0,<9,>=3.3.2 :pypi:`pytest-discover` Pytest plugin to record discovered tests in a file Mar 26, 2024 N/A pytest - :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats. Jun 09, 2024 4 - Beta pytest>=3.5.0 + :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible recorders. Mar 21, 2026 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-ditto-pandas` pytest-ditto plugin for pandas snapshots. May 29, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow tables. Jun 09, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-django` A Django plugin for pytest. Feb 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest + :pypi:`pytest-django-asyncio` Temporary pytest plugin backport for async Django DB fixture handling. Mar 16, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A :pypi:`pytest-django-casperjs` Integrate CasperJS with your django tests as a pytest fixture. Mar 15, 2015 2 - Pre-Alpha N/A :pypi:`pytest-django-class` A pytest plugin for running django in class-scoped fixtures Aug 08, 2023 4 - Beta N/A @@ -559,7 +561,7 @@ This list contains 1898 plugins. :pypi:`pytest-elastic-reporter` Mar 13, 2026 N/A pytest>=7.0 :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Mar 08, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Mar 16, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 @@ -612,7 +614,7 @@ This list contains 1898 plugins. :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 - :pypi:`pytest-exasol-slc` Feb 12, 2026 N/A pytest<9,>=7 + :pypi:`pytest-exasol-slc` Mar 17, 2026 N/A pytest<9,>=7 :pypi:`pytest-excel` pytest plugin for generating excel reports Jul 22, 2025 5 - Production/Stable pytest :pypi:`pytest-exceptional` Better exceptions Mar 16, 2017 4 - Beta N/A :pypi:`pytest-exception-script` Walk your code through exception script to check it's resiliency to failures. Aug 04, 2020 3 - Alpha pytest @@ -747,7 +749,7 @@ This list contains 1898 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Mar 04, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Mar 20, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -777,13 +779,14 @@ This list contains 1898 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 14, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 15, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) :pypi:`pytest-grpc-aio` pytest plugin for grpc.aio Oct 28, 2025 N/A pytest>=3.6.0 :pypi:`pytest-grunnur` Py.Test plugin for Grunnur-based packages. Jul 26, 2024 N/A pytest>=6 :pypi:`pytest_gui_status` Show pytest status in gui Jan 23, 2016 N/A pytest + :pypi:`pytest-hammer` tools such as db tools of pytest Mar 20, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-hammertime` Display "🔨 " instead of "." for passed pytest tests. Jul 28, 2018 N/A pytest :pypi:`pytest-hardware-test-report` A simple plugin to use with pytest Apr 01, 2024 4 - Beta pytest<9.0.0,>=8.0.0 :pypi:`pytest-harmony` Chain tests and data with pytest Jan 17, 2023 N/A pytest (>=7.2.1,<8.0.0) @@ -802,8 +805,8 @@ This list contains 1898 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 07, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 07, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 21, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 21, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -860,6 +863,7 @@ This list contains 1898 plugins. :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Feb 12, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-imply` Pytest plugin for test implication — skip tests implied by stronger ones Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A :pypi:`pytest-in-docker` Seamlessly run pytest tests inside docker containers Feb 09, 2026 3 - Alpha pytest>=9.0.2 @@ -869,7 +873,7 @@ This list contains 1898 plugins. :pypi:`pytest-info-collector` pytest plugin to collect information from tests May 26, 2019 3 - Alpha N/A :pypi:`pytest-info-plugin` Get executed interface information in pytest interface automation framework Sep 14, 2023 N/A N/A :pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A - :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Jan 29, 2026 4 - Beta pytest~=9.0 + :pypi:`pytest-infrahouse` A set of fixtures to use with pytest Mar 17, 2026 4 - Beta pytest~=9.0 :pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A :pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A :pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 30, 2024 N/A pytest<9.0.0,>=8.1.1 @@ -895,7 +899,7 @@ This list contains 1898 plugins. :pypi:`pytest-interactive` A pytest plugin for console based interactive test selection just after the collection phase Nov 30, 2017 3 - Alpha N/A :pypi:`pytest-intercept-remote` Pytest plugin for intercepting outgoing connection requests during pytest run. May 24, 2021 4 - Beta pytest (>=4.6) :pypi:`pytest-interface-tester` Pytest plugin for checking charm relation interface protocol compliance. Feb 11, 2026 4 - Beta pytest - :pypi:`pytest-invenio` Pytest fixtures for Invenio. Jan 27, 2026 5 - Production/Stable pytest<9.0.0,>=6 + :pypi:`pytest-invenio` Pytest fixtures for Invenio. Mar 16, 2026 5 - Production/Stable pytest<9.0.0,>=6 :pypi:`pytest-involve` Run tests covering a specific file or changeset Feb 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-iovis` A Pytest plugin to enable Jupyter Notebook testing with Papermill Nov 06, 2024 4 - Beta pytest>=7.1.0 :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A @@ -917,7 +921,7 @@ This list contains 1898 plugins. :pypi:`pytest-jest` A custom jest-pytest oriented Pytest reporter May 22, 2018 4 - Beta pytest (>=3.3.2) :pypi:`pytest-jinja` A plugin to generate customizable jinja-based HTML reports in pytest Oct 04, 2022 3 - Alpha pytest (>=6.2.5,<7.0.0) :pypi:`pytest-jinja-check` Pytest plugin to lint Jinja2 templates in FastAPI applications Mar 14, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-jira` py.test JIRA integration plugin, using markers Apr 15, 2025 3 - Alpha N/A + :pypi:`pytest-jira` py.test JIRA integration plugin, using markers Mar 19, 2026 4 - Beta pytest>=2.2.4 :pypi:`pytest-jira-xfail` Plugin skips (xfail) tests if unresolved Jira issue(s) linked Jul 09, 2024 N/A pytest>=7.2.0 :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Oct 11, 2025 4 - Beta pytest>=6.2.4 :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) @@ -936,6 +940,7 @@ This list contains 1898 plugins. :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 + :pypi:`pytest-jupyter-deploy` Pytest plugin for E2E testing of jupyter-deploy templates Mar 16, 2026 3 - Alpha pytest>=8.3.5 :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 @@ -996,6 +1001,7 @@ This list contains 1898 plugins. :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-llm-rubric` A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and calibration Mar 20, 2026 3 - Alpha pytest>=8 :pypi:`pytest-llmtest` The pytest for LLMs — fast, Pydantic-based assertions for AI applications Mar 08, 2026 3 - Alpha pytest>=7.0; extra == "dev" :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) @@ -1019,7 +1025,7 @@ This list contains 1898 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Mar 13, 2026 5 - Production/Stable pytest==9.0.2 + :pypi:`pytest-logikal` Common testing environment Mar 16, 2026 5 - Production/Stable pytest==9.0.2 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -1188,9 +1194,10 @@ This list contains 1898 plugins. :pypi:`pytest-ok` The ultimate pytest output plugin Apr 01, 2019 4 - Beta N/A :pypi:`pytest-once` xdist-safe 'run once' fixture decorator for pytest (setup/teardown across workers) Oct 10, 2025 3 - Alpha pytest>=8.4.0 :pypi:`pytest-only` Use @pytest.mark.only to run a single test May 27, 2024 5 - Production/Stable pytest<9,>=3.6.0 + :pypi:`pytest-only-markers` A pytest plugin that isolates test execution to only tests decorated with ONLY\* markers, stripping all other markers from matching items. Mar 17, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Mar 04, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Mar 20, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1212,7 +1219,7 @@ This list contains 1898 plugins. :pypi:`pytest-pact` A simple plugin to use with pytest Jan 07, 2019 4 - Beta N/A :pypi:`pytest-pagerduty` Pytest plugin for PagerDuty integration via automation testing. Mar 22, 2025 N/A pytest<9.0.0,>=7.4.0 :pypi:`pytest-pahrametahrize` Parametrize your tests with a Boston accent. Nov 24, 2021 4 - Beta pytest (>=6.0,<7.0) - :pypi:`pytest-paia-blockly` pytest plugin for PAIA Blockly: verify get_solution() against test cases Mar 02, 2026 N/A pytest>=8.0 + :pypi:`pytest-paia-blockly` pytest plugin for PAIA Blockly: verify get_solution() against test cases Mar 19, 2026 N/A pytest>=8.0 :pypi:`pytest-paraflow` Deterministic pytest test sharding across CI machines Feb 26, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-parallel` a pytest plugin for parallel and concurrent testing Oct 10, 2021 3 - Alpha pytest (>=3.0.0) :pypi:`pytest-parallel-39` a pytest plugin for parallel and concurrent testing Jul 12, 2021 3 - Alpha pytest (>=3.0.0) @@ -1228,7 +1235,7 @@ This list contains 1898 plugins. :pypi:`pytest-params` Simplified pytest test case parameters. Mar 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-param-scope` pytest parametrize scope fixture workaround Oct 18, 2023 N/A pytest :pypi:`pytest-parawtf` Finally spell paramete?ri[sz]e correctly Dec 03, 2018 4 - Beta pytest (>=3.6.0) - :pypi:`pytest-park` Organise and analyse your pytest benchmarks Mar 14, 2026 N/A N/A + :pypi:`pytest-park` Organise and analyse your pytest benchmarks Mar 20, 2026 N/A N/A :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A @@ -1266,7 +1273,7 @@ This list contains 1898 plugins. :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Feb 19, 2026 N/A N/A + :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Mar 17, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A @@ -1339,7 +1346,7 @@ This list contains 1898 plugins. :pypi:`pytest-pydantic-schema-sync` Pytest plugin to synchronise Pydantic model schemas with JSONSchema files Aug 29, 2024 N/A pytest>=6 :pypi:`pytest-pydev` py.test plugin to connect to a remote debug server with PyDev or PyCharm. Nov 15, 2017 3 - Alpha N/A :pypi:`pytest-pydocstyle` pytest plugin to run pydocstyle Oct 09, 2024 3 - Alpha pytest>=7.0 - :pypi:`pytest-pyeval` pytest plugin integrating pydantic-evals Mar 14, 2026 N/A pytest>=8.0 + :pypi:`pytest-pyeval` pytest plugin integrating pydantic-evals Mar 15, 2026 N/A pytest>=8.0 :pypi:`pytest-pylembic` This package provides pytest plugin for validating Alembic migrations using the pylembic package. Jul 22, 2025 3 - Alpha N/A :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A @@ -1369,11 +1376,12 @@ This list contains 1898 plugins. :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) - :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Jun 14, 2024 5 - Production/Stable pytest>=6.0 + :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Mar 18, 2026 5 - Production/Stable pytest>=6.0 :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) :pypi:`pytest-qr` pytest plugin to generate test result QR codes Nov 25, 2021 4 - Beta N/A :pypi:`pytest-qt` pytest support for PyQt and PySide applications Jul 01, 2025 5 - Production/Stable pytest :pypi:`pytest-qt-app` QT app fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-quantum` A cross-framework pytest plugin for quantum program testing Mar 21, 2026 3 - Alpha pytest>=8.0 :pypi:`pytest-quarantine` A plugin for pytest to manage expected test failures Nov 24, 2019 5 - Production/Stable pytest (>=4.6) :pypi:`pytest-quickcheck` pytest plugin to generate random data inspired by QuickCheck Nov 05, 2022 4 - Beta pytest (>=4.0) :pypi:`pytest_quickify` Run test suites with pytest-quickify. Jun 14, 2019 N/A pytest @@ -1415,6 +1423,7 @@ This list contains 1898 plugins. :pypi:`pytest_relay` A plugin to relay test information and control from and to pytest Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-relay-run` A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest_relay_ws` An extension plugin to pytest-relay to relay pytest information via websockets Jan 31, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-remaster` Golden master testing for pytest with automatic regeneration. Mar 21, 2026 3 - Alpha pytest>=7 :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) @@ -1427,7 +1436,7 @@ This list contains 1898 plugins. :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest - :pypi:`pytest-reporter-html` Pytest plugin that generates rich HTML test reports with step tracking, log capture, and interactive filtering Mar 14, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-reporter-html` Pytest plugin that generates rich HTML test reports with step tracking, log capture, and interactive filtering Mar 15, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A :pypi:`pytest-reporter-html-dots` A basic HTML report for pytest using Jinja2 template engine. Apr 26, 2025 N/A N/A :pypi:`pytest-reporter-plus` Lightweight enhanced HTML reporter for Pytest Jul 16, 2025 N/A N/A @@ -1437,7 +1446,7 @@ This list contains 1898 plugins. :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Dec 02, 2025 N/A pytest>=4.6.10 + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Mar 20, 2026 N/A pytest>=4.6.10 :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A :pypi:`pytest-req` pytest requests plugin Mar 02, 2026 5 - Production/Stable pytest>=8.4.2 @@ -1510,6 +1519,7 @@ This list contains 1898 plugins. :pypi:`pytest-runtime-types` Checks type annotations on runtime while running tests. Feb 09, 2023 N/A pytest :pypi:`pytest-runtime-xfail` Call runtime_xfail() to mark running test as xfail. Oct 10, 2025 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-runtime-yoyo` run case mark timeout Jun 12, 2023 N/A pytest (>=7.2.0) + :pypi:`pytest-rxdist` Rust-accelerated next-generation execution engine for pytest (planned). Mar 17, 2026 1 - Planning N/A :pypi:`pytest-saccharin` pytest-saccharin is a updated fork of pytest-sugar, a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly). Oct 31, 2022 3 - Alpha N/A :pypi:`pytest-salt` Pytest Salt Plugin Jan 27, 2020 4 - Beta N/A :pypi:`pytest-salt-containers` A Pytest plugin that builds and creates docker containers Nov 09, 2016 4 - Beta N/A @@ -1522,7 +1532,7 @@ This list contains 1898 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Mar 13, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Mar 17, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1535,7 +1545,7 @@ This list contains 1898 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Mar 13, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Mar 17, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1575,7 +1585,7 @@ This list contains 1898 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 01, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 21, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1674,7 +1684,7 @@ This list contains 1898 plugins. :pypi:`pytest-study` A pytest plugin to organize long run tests (named studies) without interfering the regular tests Sep 26, 2017 3 - Alpha pytest (>=2.0) :pypi:`pytest-subinterpreter` Run pytest in a subinterpreter Nov 25, 2023 N/A pytest>=7.0.0 :pypi:`pytest-subket` Pytest Plugin to disable socket calls during tests Jul 31, 2025 4 - Beta N/A - :pypi:`pytest-subprocess` A plugin to fake subprocess for pytest Jan 04, 2025 5 - Production/Stable pytest>=4.0.0 + :pypi:`pytest-subprocess` A plugin to fake subprocess for pytest Mar 21, 2026 5 - Production/Stable pytest>=4.0.0 :pypi:`pytest-subtesthack` A hack to explicitly set up and tear down fixtures. Jul 16, 2022 N/A N/A :pypi:`pytest-subtests` unittest subTest() support and subtests fixture Oct 20, 2025 4 - Beta pytest>=7.4 :pypi:`pytest-subunit` pytest-subunit is a plugin for py.test which outputs testsresult in subunit format. Sep 17, 2023 N/A pytest (>=2.3) @@ -1754,6 +1764,7 @@ This list contains 1898 plugins. :pypi:`pytest-thawgun` Pytest plugin for time travel May 26, 2020 3 - Alpha N/A :pypi:`pytest-thread` Jul 07, 2023 N/A N/A :pypi:`pytest-threadleak` Detects thread leaks Jul 03, 2022 4 - Beta pytest (>=3.1.1) + :pypi:`pytest-threadpool` Parallel test execution using threads — true parallelism on free-threaded Python, concurrent I/O on standard builds Mar 19, 2026 4 - Beta pytest<=9.0.2,>=9.0.0 :pypi:`pytest-tick` Ticking on tests Aug 31, 2021 5 - Production/Stable pytest (>=6.2.5,<7.0.0) :pypi:`pytest_time` Dec 01, 2025 3 - Alpha pytest :pypi:`pytest-timeassert-ethan` execution duration Dec 25, 2023 N/A pytest @@ -1788,6 +1799,7 @@ This list contains 1898 plugins. :pypi:`pytest-tornasync` py.test plugin for testing Python 3.5+ Tornado code Jul 15, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-trace` Save OpenTelemetry spans generated during testing Jun 19, 2022 N/A pytest (>=4.6) :pypi:`pytest-track` Feb 26, 2021 3 - Alpha pytest (>=3.0) + :pypi:`pytest-translate` pytest terminal output in your language — 134 languages supported Mar 21, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-translations` Test your translation files. Sep 11, 2023 5 - Production/Stable pytest (>=7) :pypi:`pytest-travis-fold` Folds captured output sections in Travis CI build log Nov 29, 2017 4 - Beta pytest (>=2.6.0) :pypi:`pytest-trello` Plugin for py.test that integrates trello using markers Nov 20, 2015 5 - Production/Stable N/A @@ -1810,6 +1822,7 @@ This list contains 1898 plugins. :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A :pypi:`pytest-typhoon-polarion` Typhoontest plugin for Siemens Polarion Feb 01, 2024 4 - Beta N/A :pypi:`pytest-typhoon-xray` Typhoon HIL plugin for pytest Aug 15, 2023 4 - Beta N/A + :pypi:`pytest-typing` Test your types by running typecheckers on them. Mar 20, 2026 3 - Alpha pytest :pypi:`pytest-typing-runner` Pytest plugin to make it easier to run and check python code against static type checkers May 31, 2025 N/A N/A :pypi:`pytest-tytest` Typhoon HIL plugin for pytest May 25, 2020 4 - Beta pytest (>=5.4.2) :pypi:`pytest-tzshift` A Pytest plugin that transparently re-runs tests under a matrix of timezones and locales. Jun 25, 2025 4 - Beta pytest>=7.0 @@ -2070,6 +2083,13 @@ This list contains 1898 plugins. Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts + :pypi:`pytest-agent-digest` + *last release*: Mar 21, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + A Pytest plugin to generate a Markdown report for AI Agents + :pypi:`pytest-agent-evals` *last release*: Mar 13, 2026, *status*: 4 - Beta, @@ -2435,7 +2455,7 @@ This list contains 1898 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Mar 03, 2026, + *last release*: Mar 16, 2026, *status*: N/A, *requires*: pytest==7.2.2 @@ -2526,7 +2546,7 @@ This list contains 1898 plugins. A plugin that provides a running Argus API server for tests :pypi:`pytest-arrakis` - *last release*: Mar 05, 2026, + *last release*: Mar 19, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -2778,7 +2798,7 @@ This list contains 1898 plugins. A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. :pypi:`pytest-audioeval` - *last release*: Mar 13, 2026, + *last release*: Mar 18, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0 @@ -3072,7 +3092,7 @@ This list contains 1898 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Mar 13, 2026, + *last release*: Mar 20, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3639,7 +3659,7 @@ This list contains 1898 plugins. A pytest fixture for changing current working directory :pypi:`pytest-check` - *last release*: Mar 05, 2026, + *last release*: Mar 20, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -4234,7 +4254,7 @@ This list contains 1898 plugins. count erros and send email :pypi:`pytest-cov` - *last release*: Sep 09, 2025, + *last release*: Mar 21, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7 @@ -4955,11 +4975,11 @@ This list contains 1898 plugins. Pytest plugin to record discovered tests in a file :pypi:`pytest-ditto` - *last release*: Jun 09, 2024, - *status*: 4 - Beta, + *last release*: Mar 21, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=3.5.0 - Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats. + Snapshot testing pytest plugin with minimal ceremony and flexible recorders. :pypi:`pytest-ditto-pandas` *last release*: May 29, 2024, @@ -4996,6 +5016,13 @@ This list contains 1898 plugins. Nice pytest plugin to help you with Django pluggable application testing. + :pypi:`pytest-django-asyncio` + *last release*: Mar 16, 2026, + *status*: 4 - Beta, + *requires*: pytest>=8.0 + + Temporary pytest plugin backport for async Django DB fixture handling. + :pypi:`pytest-django-cache-xdist` *last release*: May 12, 2020, *status*: 4 - Beta, @@ -5613,7 +5640,7 @@ This list contains 1898 plugins. Elasticsearch fixtures and fixture factories for Pytest. :pypi:`pytest-elegant` - *last release*: Mar 08, 2026, + *last release*: Mar 16, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -5984,7 +6011,7 @@ This list contains 1898 plugins. :pypi:`pytest-exasol-slc` - *last release*: Feb 12, 2026, + *last release*: Mar 17, 2026, *status*: N/A, *requires*: pytest<9,>=7 @@ -6929,7 +6956,7 @@ This list contains 1898 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Mar 04, 2026, + *last release*: Mar 20, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7139,7 +7166,7 @@ This list contains 1898 plugins. :pypi:`pytest-gremlins` - *last release*: Mar 14, 2026, + *last release*: Mar 15, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7187,6 +7214,13 @@ This list contains 1898 plugins. Show pytest status in gui + :pypi:`pytest-hammer` + *last release*: Mar 20, 2026, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + tools such as db tools of pytest + :pypi:`pytest-hammertime` *last release*: Jul 28, 2018, *status*: N/A, @@ -7314,14 +7348,14 @@ This list contains 1898 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Mar 07, 2026, + *last release*: Mar 21, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Mar 07, 2026, + *last release*: Mar 21, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7719,6 +7753,13 @@ This list contains 1898 plugins. A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. + :pypi:`pytest-imply` + *last release*: Mar 21, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + Pytest plugin for test implication — skip tests implied by stronger ones + :pypi:`pytest-import-check` *last release*: Jul 19, 2024, *status*: 3 - Alpha, @@ -7783,7 +7824,7 @@ This list contains 1898 plugins. display more node ininformation. :pypi:`pytest-infrahouse` - *last release*: Jan 29, 2026, + *last release*: Mar 17, 2026, *status*: 4 - Beta, *requires*: pytest~=9.0 @@ -7965,7 +8006,7 @@ This list contains 1898 plugins. Pytest plugin for checking charm relation interface protocol compliance. :pypi:`pytest-invenio` - *last release*: Jan 27, 2026, + *last release*: Mar 16, 2026, *status*: 5 - Production/Stable, *requires*: pytest<9.0.0,>=6 @@ -8119,9 +8160,9 @@ This list contains 1898 plugins. Pytest plugin to lint Jinja2 templates in FastAPI applications :pypi:`pytest-jira` - *last release*: Apr 15, 2025, - *status*: 3 - Alpha, - *requires*: N/A + *last release*: Mar 19, 2026, + *status*: 4 - Beta, + *requires*: pytest>=2.2.4 py.test JIRA integration plugin, using markers @@ -8251,6 +8292,13 @@ This list contains 1898 plugins. A pytest plugin for testing Jupyter libraries and extensions. + :pypi:`pytest-jupyter-deploy` + *last release*: Mar 16, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.3.5 + + Pytest plugin for E2E testing of jupyter-deploy templates + :pypi:`pytest-jupyterhub` *last release*: Apr 25, 2023, *status*: 5 - Production/Stable, @@ -8671,6 +8719,13 @@ This list contains 1898 plugins. Human-friendly pytest test reports with optional LLM annotations + :pypi:`pytest-llm-rubric` + *last release*: Mar 20, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8 + + A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and calibration + :pypi:`pytest-llmtest` *last release*: Mar 08, 2026, *status*: 3 - Alpha, @@ -8833,7 +8888,7 @@ This list contains 1898 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Mar 13, 2026, + *last release*: Mar 16, 2026, *status*: 5 - Production/Stable, *requires*: pytest==9.0.2 @@ -10015,6 +10070,13 @@ This list contains 1898 plugins. Use @pytest.mark.only to run a single test + :pypi:`pytest-only-markers` + *last release*: Mar 17, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=9.0.1 + + A pytest plugin that isolates test execution to only tests decorated with ONLY\* markers, stripping all other markers from matching items. + :pypi:`pytest-oof` *last release*: Dec 11, 2023, *status*: 4 - Beta, @@ -10030,7 +10092,7 @@ This list contains 1898 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Mar 04, 2026, + *last release*: Mar 20, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10184,7 +10246,7 @@ This list contains 1898 plugins. Parametrize your tests with a Boston accent. :pypi:`pytest-paia-blockly` - *last release*: Mar 02, 2026, + *last release*: Mar 19, 2026, *status*: N/A, *requires*: pytest>=8.0 @@ -10296,7 +10358,7 @@ This list contains 1898 plugins. Finally spell paramete?ri[sz]e correctly :pypi:`pytest-park` - *last release*: Mar 14, 2026, + *last release*: Mar 20, 2026, *status*: N/A, *requires*: N/A @@ -10562,7 +10624,7 @@ This list contains 1898 plugins. A pytest wrapper with fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-artifacts` - *last release*: Feb 19, 2026, + *last release*: Mar 17, 2026, *status*: N/A, *requires*: N/A @@ -11073,7 +11135,7 @@ This list contains 1898 plugins. pytest plugin to run pydocstyle :pypi:`pytest-pyeval` - *last release*: Mar 14, 2026, + *last release*: Mar 15, 2026, *status*: N/A, *requires*: pytest>=8.0 @@ -11283,7 +11345,7 @@ This list contains 1898 plugins. Pytest plugin for uploading test results to your QA Touch Testrun. :pypi:`pytest-qgis` - *last release*: Jun 14, 2024, + *last release*: Mar 18, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.0 @@ -11317,6 +11379,13 @@ This list contains 1898 plugins. QT app fixture for py.test + :pypi:`pytest-quantum` + *last release*: Mar 21, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0 + + A cross-framework pytest plugin for quantum program testing + :pypi:`pytest-quarantine` *last release*: Nov 24, 2019, *status*: 5 - Production/Stable, @@ -11604,6 +11673,13 @@ This list contains 1898 plugins. An extension plugin to pytest-relay to relay pytest information via websockets + :pypi:`pytest-remaster` + *last release*: Mar 21, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7 + + Golden master testing for pytest with automatic regeneration. + :pypi:`pytest-remfiles` *last release*: Jul 01, 2019, *status*: 5 - Production/Stable, @@ -11689,7 +11765,7 @@ This list contains 1898 plugins. Generate Pytest reports with templates :pypi:`pytest-reporter-html` - *last release*: Mar 14, 2026, + *last release*: Mar 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 @@ -11759,7 +11835,7 @@ This list contains 1898 plugins. pytest plugin for adding tests' parameters to junit report :pypi:`pytest-reportportal` - *last release*: Dec 02, 2025, + *last release*: Mar 20, 2026, *status*: N/A, *requires*: pytest>=4.6.10 @@ -12269,6 +12345,13 @@ This list contains 1898 plugins. run case mark timeout + :pypi:`pytest-rxdist` + *last release*: Mar 17, 2026, + *status*: 1 - Planning, + *requires*: N/A + + Rust-accelerated next-generation execution engine for pytest (planned). + :pypi:`pytest-saccharin` *last release*: Oct 31, 2022, *status*: 3 - Alpha, @@ -12354,7 +12437,7 @@ This list contains 1898 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Mar 13, 2026, + *last release*: Mar 17, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12445,7 +12528,7 @@ This list contains 1898 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Mar 13, 2026, + *last release*: Mar 17, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12725,7 +12808,7 @@ This list contains 1898 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Mar 01, 2026, + *last release*: Mar 21, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13418,7 +13501,7 @@ This list contains 1898 plugins. Pytest Plugin to disable socket calls during tests :pypi:`pytest-subprocess` - *last release*: Jan 04, 2025, + *last release*: Mar 21, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=4.0.0 @@ -13977,6 +14060,13 @@ This list contains 1898 plugins. Detects thread leaks + :pypi:`pytest-threadpool` + *last release*: Mar 19, 2026, + *status*: 4 - Beta, + *requires*: pytest<=9.0.2,>=9.0.0 + + Parallel test execution using threads — true parallelism on free-threaded Python, concurrent I/O on standard builds + :pypi:`pytest-tick` *last release*: Aug 31, 2021, *status*: 5 - Production/Stable, @@ -14215,6 +14305,13 @@ This list contains 1898 plugins. + :pypi:`pytest-translate` + *last release*: Mar 21, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0.0 + + pytest terminal output in your language — 134 languages supported + :pypi:`pytest-translations` *last release*: Sep 11, 2023, *status*: 5 - Production/Stable, @@ -14369,6 +14466,13 @@ This list contains 1898 plugins. Typhoon HIL plugin for pytest + :pypi:`pytest-typing` + *last release*: Mar 20, 2026, + *status*: 3 - Alpha, + *requires*: pytest + + Test your types by running typecheckers on them. + :pypi:`pytest-typing-runner` *last release*: May 31, 2025, *status*: N/A, From ade2314b9424fc79580e2d102a486f66776c2274 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Fri, 27 Feb 2026 10:17:14 +0100 Subject: [PATCH 213/307] [pre-commit] Fix the version of pyproject-fmt by using our fork --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d53253810c5..dcae1c110c0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -67,7 +67,7 @@ repos: - exceptiongroup>=1.0.0rc8 # Manual because passing pyright is a work in progress. stages: [manual] -- repo: https://github.com/tox-dev/pyproject-fmt +- repo: https://github.com/pytest-dev/pyproject-fmt rev: "v2.12.1" hooks: - id: pyproject-fmt From 840b2d69f6a5628623d8764360d82d5571ba66fa Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Fri, 13 Feb 2026 08:22:07 +0100 Subject: [PATCH 214/307] [ruff] Upgrade ruff to 0.15.7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.14 → v0.15.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.14...v0.15.7) --- .pre-commit-config.yaml | 2 +- pyproject.toml | 4 ++++ src/_pytest/config/findpaths.py | 2 +- src/_pytest/terminal.py | 6 ++++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dcae1c110c0..f12b286c9d6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.14" + rev: "v0.15.7" hooks: - id: ruff-check args: ["--fix"] diff --git a/pyproject.toml b/pyproject.toml index 7ae76a3c8dd..c0d733de077 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -155,12 +155,14 @@ lint.ignore = [ "PLR2004", # Magic value used in comparison "PLR2044", # Line with empty comment "PLR5501", # Use `elif` instead of `else` then `if` + "PLW0108", # Lambda may be unnecessary; consider inlining inner function "PLW0120", # remove the else and dedent its contents "PLW0603", # Using the global statement "PLW1641", # Does not implement the __hash__ method "PLW2901", # for loop variable overwritten by assignment target # ruff ignore "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar` + "RUF061", # Use context-manager form of `pytest.raises()` ] lint.per-file-ignores."src/_pytest/_py/**/*.py" = [ "B", @@ -169,6 +171,8 @@ lint.per-file-ignores."src/_pytest/_py/**/*.py" = [ lint.per-file-ignores."src/_pytest/_version.py" = [ "I001", ] +# 'Unnecessary membership test on empty collection', always voluntary in tests +lint.per-file-ignores."testing/**/*.py" = [ "RUF060" ] # can't be disabled on a line-by-line basis in file lint.per-file-ignores."testing/code/test_source.py" = [ "F841", diff --git a/src/_pytest/config/findpaths.py b/src/_pytest/config/findpaths.py index 3c628a09c2d..e74546c6e28 100644 --- a/src/_pytest/config/findpaths.py +++ b/src/_pytest/config/findpaths.py @@ -233,7 +233,7 @@ def is_option(x: str) -> bool: return x.startswith("-") def get_file_part_from_node_id(x: str) -> str: - return x.split("::")[0] + return x.split("::", maxsplit=1)[0] def get_dir_from_path(path: Path) -> Path: if path.is_dir(): diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index bb6f35633b9..1a4b6f20b44 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -476,7 +476,7 @@ def hasopt(self, char: str) -> bool: return char in self.reportchars def write_fspath_result(self, nodeid: str, res: str, **markup: bool) -> None: - fspath = self.config.rootpath / nodeid.split("::")[0] + fspath = self.config.rootpath / nodeid.split("::", maxsplit=1)[0] if self.currentfspath is None or fspath != self.currentfspath: if self.currentfspath is not None and self._show_progress_info: self._write_progress_information_filling_space() @@ -1034,7 +1034,9 @@ def mkrel(nodeid: str) -> str: # fspath comes from testid which has a "/"-normalized path. if fspath: res = mkrel(nodeid) - if self.verbosity >= 2 and nodeid.split("::")[0] != nodes.norm_sep(fspath): + if self.verbosity >= 2 and nodeid.split("::", maxsplit=1)[ + 0 + ] != nodes.norm_sep(fspath): res += " <- " + bestrelpath(self.startpath, Path(fspath)) else: res = "[location]" From 45c926f1273261c4748dd28c2f557add884f7075 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Fri, 13 Feb 2026 08:05:11 +0100 Subject: [PATCH 215/307] [ruff-fmt] Nudge the auto-formatter to properly separate lines --- src/_pytest/terminal.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 1a4b6f20b44..e9049bb82ec 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -1034,9 +1034,9 @@ def mkrel(nodeid: str) -> str: # fspath comes from testid which has a "/"-normalized path. if fspath: res = mkrel(nodeid) - if self.verbosity >= 2 and nodeid.split("::", maxsplit=1)[ - 0 - ] != nodes.norm_sep(fspath): + if self.verbosity >= 2 and ( + nodeid.split("::", maxsplit=1)[0] != nodes.norm_sep(fspath) + ): res += " <- " + bestrelpath(self.startpath, Path(fspath)) else: res = "[location]" From a7429edb39ceedcf09d714861be56052e9ae23a0 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Tue, 10 Feb 2026 15:36:50 +0100 Subject: [PATCH 216/307] [lint] PLW0108: lambda used to correctly get the mocked time via `MockTiming` --- pyproject.toml | 1 - src/_pytest/timing.py | 6 ++++-- testing/_py/test_local.py | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c0d733de077..4abc125d836 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -155,7 +155,6 @@ lint.ignore = [ "PLR2004", # Magic value used in comparison "PLR2044", # Line with empty comment "PLR5501", # Use `elif` instead of `else` then `if` - "PLW0108", # Lambda may be unnecessary; consider inlining inner function "PLW0120", # remove the else and dedent its contents "PLW0603", # Using the global statement "PLW1641", # Does not implement the __hash__ method diff --git a/src/_pytest/timing.py b/src/_pytest/timing.py index 51c3db23f6f..639bd99bd3e 100644 --- a/src/_pytest/timing.py +++ b/src/_pytest/timing.py @@ -32,12 +32,14 @@ class Instant: # Creation time of this instant, using time.time(), to measure actual time. # Note: using a `lambda` to correctly get the mocked time via `MockTiming`. - time: float = dataclasses.field(default_factory=lambda: time(), init=False) + # pylint: disable-next=lambda-assignment + time: float = dataclasses.field(default_factory=lambda: time(), init=False) # noqa: PLW0108 # Performance counter tick of the instant, used to measure precise elapsed time. # Note: using a `lambda` to correctly get the mocked time via `MockTiming`. perf_count: float = dataclasses.field( - default_factory=lambda: perf_counter(), init=False + default_factory=lambda: perf_counter(), # noqa: PLW0108 + init=False, ) def elapsed(self) -> Duration: diff --git a/testing/_py/test_local.py b/testing/_py/test_local.py index 6b7d756a45c..c32e71f6542 100644 --- a/testing/_py/test_local.py +++ b/testing/_py/test_local.py @@ -1388,7 +1388,7 @@ def test_stat_helpers(self, tmpdir, monkeypatch): def test_stat_non_raising(self, tmpdir): path1 = tmpdir.join("file") - pytest.raises(error.ENOENT, lambda: path1.stat()) + pytest.raises(error.ENOENT, path1.stat) res = path1.stat(raising=False) assert res is None From ad1d8491da9a1db4cd52331e3bcca07ddcf45d95 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Fri, 13 Feb 2026 08:33:27 +0100 Subject: [PATCH 217/307] [pylint] sort the disable alphabetically, remove duplicate --- pyproject.toml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4abc125d836..e51cafbd747 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -220,31 +220,30 @@ disable = [ "comparison-with-callable", "comparison-with-itself", # PLR0124 from ruff "condition-evals-to-constant", - "consider-alternative-union-syntax", "confusing-consecutive-elif", + "consider-alternative-union-syntax", + "consider-ternary-expression", "consider-using-assignment-expr", "consider-using-dict-items", - "consider-using-from-import", + "consider-using-from-import", # not activated by default, PLR0402 disabled in ruff "consider-using-f-string", "consider-using-in", "consider-using-namedtuple-or-dataclass", "consider-using-ternary", "consider-using-tuple", "consider-using-with", - "consider-using-from-import", # not activated by default, PLR0402 disabled in ruff - "consider-ternary-expression", "cyclic-import", - "differing-param-doc", - "docstring-first-line-empty", "deprecated-argument", "deprecated-attribute", "deprecated-class", + "differing-param-doc", "disallowed-name", # foo / bar are used often in tests + "docstring-first-line-empty", "duplicate-code", "else-if-used", # not activated by default, PLR5501 disabled in ruff "empty-comment", # not activated by default, PLR2044 disabled in ruff - "eval-used", "eq-without-hash", # PLW1641 disabled in ruff + "eval-used", "exec-used", "expression-not-assigned", "fixme", @@ -261,13 +260,13 @@ disable = [ "line-too-long", "magic-value-comparison", # not activated by default, PLR2004 disabled in ruff "method-hidden", + "misplaced-bare-raise", # PLE0704 from ruff + "misplaced-comparison-constant", "missing-docstring", "missing-param-doc", "missing-raises-doc", "missing-timeout", "missing-type-doc", - "misplaced-bare-raise", # PLE0704 from ruff - "misplaced-comparison-constant", "multiple-statements", # multiple-statements-on-one-line-colon (E701) from ruff "no-else-break", "no-else-continue", @@ -332,10 +331,10 @@ disable = [ "use-dict-literal", "use-implicit-booleaness-not-comparison", "use-implicit-booleaness-not-len", - "use-set-for-membership", "useless-else-on-loop", # PLC0414 disabled in ruff "useless-import-alias", "useless-return", + "use-set-for-membership", "using-constant-test", "while-used", "wrong-import-order", # handled by isort / ruff From 51eb7a4e1788ca2a05ca4599ad4d371b3e796321 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:38:06 +0000 Subject: [PATCH 218/307] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/woodruffw/zizmor-pre-commit: v1.22.0 → v1.23.1](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.22.0...v1.23.1) - [github.com/codespell-project/codespell: v2.4.1 → v2.4.2](https://github.com/codespell-project/codespell/compare/v2.4.1...v2.4.2) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f12b286c9d6..f27e82577eb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.22.0 + rev: v1.23.1 hooks: - id: zizmor args: ["--fix", "--no-progress"] @@ -23,7 +23,7 @@ repos: - id: blacken-docs additional_dependencies: [black==24.1.1] - repo: https://github.com/codespell-project/codespell - rev: v2.4.1 + rev: v2.4.2 hooks: - id: codespell args: ["--toml=pyproject.toml"] From 75609e71415e67c0f74492d192ca99ca94a3f582 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 06:01:16 +0100 Subject: [PATCH 219/307] build(deps): Bump actions/download-artifact from 8.0.0 to 8.0.1 (#14316) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3...3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 6 +++--- .github/workflows/test.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5d5baaef583..dd3f2a1eafc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -82,7 +82,7 @@ jobs: id-token: write steps: - name: Download Package - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages path: dist @@ -121,13 +121,13 @@ jobs: contents: write steps: - name: Download Package - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages path: dist - name: Download release notes - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: release-notes path: . diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9eff874bbc5..b37f64c458f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -257,7 +257,7 @@ jobs: persist-credentials: false - name: Download Package - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages path: dist From bc57e69aaa01ae0271463f3cd85e8388d16da55e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=82=AC=EC=9E=AC=ED=98=81?= Date: Fri, 27 Mar 2026 03:52:15 +0900 Subject: [PATCH 220/307] recwarn: improved `warns(match=...)` error message on regex mismatch (closes #11225) (#14310) When using pytest.warns(match=...), even if a warning of the expected type was emitted, the first sentence of the error message said "DID NOT WARN" when the regex did not match. Since this made it seem as though no warning had been emitted at all, I updated it to make the situation clearer. Closes #11225 --- AUTHORS | 1 + changelog/11225.improvement.rst | 1 + doc/en/how-to/capture-warnings.rst | 4 ++- src/_pytest/recwarn.py | 17 ++++++++++--- testing/test_recwarn.py | 39 +++++++++++++++++++++++++++--- 5 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 changelog/11225.improvement.rst diff --git a/AUTHORS b/AUTHORS index 6885ec6e793..523b8f6d657 100644 --- a/AUTHORS +++ b/AUTHORS @@ -209,6 +209,7 @@ Israël Hallé Itxaso Aizpurua Iwan Briquemont Jaap Broekhuizen +JaeHyuck Sa Jake VanderPlas Jakob van Santen Jakub Mitoraj diff --git a/changelog/11225.improvement.rst b/changelog/11225.improvement.rst new file mode 100644 index 00000000000..53005bfa505 --- /dev/null +++ b/changelog/11225.improvement.rst @@ -0,0 +1 @@ +:func:`pytest.warns` now shows "Regex pattern did not match" instead of "DID NOT WARN" when warnings were emitted but the ``match`` pattern did not match. diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index 38e18b042d8..e5bc4d27874 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -363,7 +363,9 @@ Some examples: ... Traceback (most recent call last): ... - Failed: DID NOT WARN. No warnings of type ...UserWarning... were emitted... + Failed: Regex pattern did not match any of the 1 warnings emitted. + Regex: ... + Emitted warnings: ...UserWarning... >>> with warns(UserWarning, match=re.escape("issue with foo() func")): ... warnings.warn("issue with foo() func") diff --git a/src/_pytest/recwarn.py b/src/_pytest/recwarn.py index e3db717bfe4..3351e9ed395 100644 --- a/src/_pytest/recwarn.py +++ b/src/_pytest/recwarn.py @@ -139,7 +139,9 @@ def warns( ... warnings.warn("this is not here", UserWarning) Traceback (most recent call last): ... - Failed: DID NOT WARN. No warnings of type ...UserWarning... were emitted... + Failed: Regex pattern did not match any of the 1 warnings emitted. + Regex: ... + Emitted warnings: ...UserWarning... **Using with** ``pytest.mark.parametrize`` @@ -321,10 +323,17 @@ def found_str() -> str: f" Emitted warnings: {found_str()}." ) elif not any(self.matches(w) for w in self): + escape_hint = "" + if isinstance(self.match_expr, str) and any( + self.match_expr == str(w.message) + for w in self + if issubclass(w.category, self.expected_warning) + ): + escape_hint = "\n Did you mean to `re.escape()` the regex?" fail( - f"DID NOT WARN. No warnings of type {self.expected_warning} matching the regex were emitted.\n" - f" Regex: {self.match_expr}\n" - f" Emitted warnings: {found_str()}." + f"Regex pattern did not match any of the {len(self)} warnings emitted.\n" + f" Regex: {self.match_expr!r}\n" + f" Emitted warnings: {found_str()}.{escape_hint}" ) finally: # Whether or not any warnings matched, we want to re-emit all unmatched warnings. diff --git a/testing/test_recwarn.py b/testing/test_recwarn.py index 384f2b66a15..3f89a8ed21c 100644 --- a/testing/test_recwarn.py +++ b/testing/test_recwarn.py @@ -243,7 +243,9 @@ def test_deprecated_call_supports_match(self) -> None: warnings.warn("value must be 42", DeprecationWarning) with pytest.deprecated_call(): - with pytest.raises(pytest.fail.Exception, match="DID NOT WARN"): + with pytest.raises( + pytest.fail.Exception, match="Regex pattern did not match" + ): with pytest.deprecated_call(match=r"must be \d+$"): warnings.warn("this is not here", DeprecationWarning) @@ -406,7 +408,9 @@ def test_match_regex(self) -> None: def test_one_from_multiple_warns(self) -> None: with pytest.warns(): - with pytest.raises(pytest.fail.Exception, match="DID NOT WARN"): + with pytest.raises( + pytest.fail.Exception, match="Regex pattern did not match" + ): with pytest.warns(UserWarning, match=r"aaa"): with pytest.warns(UserWarning, match=r"aaa"): warnings.warn("cccccccccc", UserWarning) @@ -415,11 +419,38 @@ def test_one_from_multiple_warns(self) -> None: def test_none_of_multiple_warns(self) -> None: with pytest.warns(): - with pytest.raises(pytest.fail.Exception, match="DID NOT WARN"): + with pytest.raises( + pytest.fail.Exception, match="Regex pattern did not match" + ): with pytest.warns(UserWarning, match=r"aaa"): warnings.warn("bbbbbbbbbb", UserWarning) warnings.warn("cccccccccc", UserWarning) + def test_warns_match_failure_message_detail(self) -> None: + with pytest.warns(): + with pytest.raises(pytest.fail.Exception) as excinfo: + with pytest.warns(UserWarning, match=r"must be \d+$"): + warnings.warn("this is not here", UserWarning) + msg = str(excinfo.value) + assert "Regex pattern did not match" in msg + assert "this is not here" in msg + assert "DID NOT WARN" not in msg + + def test_warns_match_re_escape_hint(self) -> None: + with pytest.warns(): + with pytest.raises(pytest.fail.Exception) as excinfo: + with pytest.warns(UserWarning, match="foo (bar)"): + warnings.warn("foo (bar)", UserWarning) + assert "re.escape()" in str(excinfo.value) + + def test_warns_match_re_escape_hint_no_false_positive(self) -> None: + with pytest.warns(): + with pytest.raises(pytest.fail.Exception) as excinfo: + with pytest.warns(DeprecationWarning, match="foo (bar)"): + warnings.warn("some deprecation msg", DeprecationWarning) + warnings.warn("foo (bar)", UserWarning) + assert "re.escape()" not in str(excinfo.value) + @pytest.mark.filterwarnings("ignore") def test_can_capture_previously_warned(self) -> None: def f() -> int: @@ -589,7 +620,7 @@ def __init__(self, a, b): pass with pytest.warns(CustomWarning): - with pytest.raises(pytest.fail.Exception, match="DID NOT WARN"): + with pytest.raises(pytest.fail.Exception, match="Regex pattern did not match"): with pytest.warns(CustomWarning, match="not gonna match"): a, b = 1, 2 warnings.warn(CustomWarning(a, b)) From 928febcd4d67fc9201a9ed27348f44c890e62e93 Mon Sep 17 00:00:00 2001 From: pytest bot Date: Sun, 29 Mar 2026 00:44:37 +0000 Subject: [PATCH 221/307] [automated] Update plugin list --- doc/en/reference/plugin_list.rst | 318 +++++++++++++++++++++---------- 1 file changed, 219 insertions(+), 99 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 1b168fe7488..4f2ccd3226b 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.1.1,<8.0.0) :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-api-coverage` Pytest plugin for API test coverage analysis Mar 24, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Mar 16, 2026 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Mar 26, 2026 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Jan 27, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Mar 24, 2026 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 @@ -143,7 +144,7 @@ This list contains 1911 plugins. :pypi:`pytest_async` pytest-async - Run your coroutine in event loop without decorator Feb 26, 2020 N/A N/A :pypi:`pytest-async-benchmark` pytest-async-benchmark: Modern pytest benchmarking for async code. 🚀 May 28, 2025 N/A pytest>=8.3.5 :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A - :pypi:`pytest-asyncio` Pytest support for asyncio Nov 10, 2025 5 - Production/Stable pytest<10,>=8.2 + :pypi:`pytest-asyncio` Pytest support for asyncio Mar 25, 2026 5 - Production/Stable pytest<10,>=8.2 :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. May 17, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) @@ -157,6 +158,7 @@ This list contains 1911 plugins. :pypi:`pytest-attributes` A plugin that allows users to add attributes to their tests. These attributes can then be referenced by fixtures or the test itself. Jun 24, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-audioeval` Pytest plugin for STT/TTS integration testing with httpx, metrics, and embedded audio samples. Mar 18, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-austin` Austin plugin for pytest Oct 11, 2020 4 - Beta N/A + :pypi:`pytest-auto-api2-cli` CLI for generating and running pytest-auto-api2 test cases. Mar 26, 2026 N/A pytest==8.4.1 :pypi:`pytest-autocap` automatically capture test & fixture stdout/stderr to files May 15, 2022 N/A pytest (<7.2,>=7.1.2) :pypi:`pytest-autochecklog` automatically check condition and log all the checks Apr 25, 2015 4 - Beta N/A :pypi:`pytest-autofixture` simplify pytest fixtures Aug 01, 2024 N/A pytest>=8 @@ -197,7 +199,7 @@ This list contains 1911 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 20, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 24, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -278,7 +280,7 @@ This list contains 1911 plugins. :pypi:`pytest-change-report` turn . into √,turn F into x Sep 14, 2020 N/A pytest :pypi:`pytest-change-xds` turn . into √,turn F into x Apr 16, 2022 N/A pytest :pypi:`pytest-chdir` A pytest fixture for changing current working directory Jan 28, 2020 N/A pytest (>=5.0.0,<6.0.0) - :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Mar 20, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-check` A pytest plugin that allows multiple failures per test. Mar 22, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-checkdocs` check the README when running tests Dec 26, 2025 5 - Production/Stable pytest!=8.1.*,>=6; extra == "test" :pypi:`pytest-checkers` Pytest Plugin for dry-run checks LSPs, Type Checkers, Linters, and Formatters during testing Dec 27, 2025 N/A pytest>=9.0.2 :pypi:`pytest-checkipdb` plugin to check if there are ipdb debugs left Dec 04, 2023 5 - Production/Stable pytest >=2.9.2 @@ -300,6 +302,7 @@ This list contains 1911 plugins. :pypi:`pytest-circleci-parallelized-rjp` Parallelize pytest across CircleCI workers. Jun 21, 2022 N/A pytest :pypi:`pytest-ckan` Backport of CKAN 2.9 pytest plugin and fixtures to CAKN 2.8 Apr 28, 2020 4 - Beta pytest :pypi:`pytest-clab` A pytest plugin for managing containerlab topologies in tests. Mar 02, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-clang-tidy` A pytest plugin that runs clang-tidy static analysis on C/C++ source files Mar 27, 2026 N/A pytest>=7.0 :pypi:`pytest-clarity` A plugin providing an alternative, colourful diff output for failing assertions. Jun 11, 2021 N/A N/A :pypi:`pytest-class-fixtures` Class as PyTest fixtures (and BDD steps) Nov 15, 2024 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-claude-agent-sdk` Use Claude Code in your pytests, or pytest your own Claude Code agents — or both Jan 19, 2026 3 - Alpha pytest>=6.0 @@ -348,6 +351,7 @@ This list contains 1911 plugins. :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) :pypi:`pytest-common-subject` pytest framework for testing different aspects of a common method Oct 22, 2025 N/A pytest<9,>=3.6 :pypi:`pytest-compare` pytest plugin for comparing call arguments. Jun 22, 2023 5 - Production/Stable N/A + :pypi:`pytest-concurrency` A pytest plugin for parallel test execution with configurable concurrency Mar 26, 2026 N/A pytest>=7.0 :pypi:`pytest-concurrent` Concurrently execute test cases with multithread, multiprocess and gevent Jan 12, 2019 4 - Beta pytest (>=3.1.1) :pypi:`pytest-conductor` Pytest plugin for coordinating the order in which marked tests run. Jul 30, 2025 N/A pytest<8.4; python_version == "3.8" :pypi:`pytest-config` Base configurations and utilities for developing your Python project test suite with pytest. Nov 07, 2014 5 - Production/Stable N/A @@ -364,6 +368,7 @@ This list contains 1911 plugins. :pypi:`pytest-couchdbkit` py.test extension for per-test couchdb databases using couchdbkit Apr 17, 2012 N/A N/A :pypi:`pytest-count` count erros and send email Jan 12, 2018 4 - Beta N/A :pypi:`pytest-cov` Pytest plugin for measuring coverage. Mar 21, 2026 5 - Production/Stable pytest>=7 + :pypi:`pytest-cov-container` Pytest plugin to collect code coverage from applications running inside Docker containers Mar 23, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A @@ -372,6 +377,8 @@ This list contains 1911 plugins. :pypi:`pytest-cov-exclude` Pytest plugin for excluding tests based on coverage data Apr 29, 2016 4 - Beta pytest (>=2.8.0,<2.9.0); extra == 'dev' :pypi:`pytest_covid` Too many faillure, less tests. Jun 24, 2020 N/A N/A :pypi:`pytest-cpp` Use pytest's runner to discover and execute C++ tests Sep 18, 2024 5 - Production/Stable pytest + :pypi:`pytest-cppcheck` A pytest plugin that runs cppcheck static analysis on C/C++ source files Mar 26, 2026 N/A pytest>=7.0 + :pypi:`pytest-cpplint` A pytest plugin that runs cpplint style checking on C/C++ source files Mar 26, 2026 N/A pytest>=7.0 :pypi:`pytest-cqase` Custom qase pytest plugin Aug 22, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-cram` Run cram tests with pytest. Aug 08, 2020 N/A N/A :pypi:`pytest-crap` pytest plugin that calculates CRAP scores to guide test writing Dec 02, 2025 4 - Beta pytest>=7.0 @@ -440,7 +447,7 @@ This list contains 1911 plugins. :pypi:`pytest-demo-plugin` pytest示例插件 May 15, 2021 N/A N/A :pypi:`pytest-dependency` Manage dependencies of tests Feb 15, 2026 4 - Beta N/A :pypi:`pytest-depends` Tests that depend on other tests Apr 05, 2020 5 - Production/Stable pytest (>=3) - :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-depends-on` A Python package for managing test dependencies in pytest. Mar 28, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-depper` Smart test selection based on AST-level code dependency analysis Oct 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-deprecate` Mark tests as testing a deprecated feature with a warning note. Jul 01, 2019 N/A N/A :pypi:`pytest-deprecator` A simple plugin to use with pytest Dec 02, 2024 4 - Beta pytest>=6.2.0 @@ -466,13 +473,13 @@ This list contains 1911 plugins. :pypi:`pytest-disable-plugin` Disable plugins per test Feb 28, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-discord` A pytest plugin to notify test results to a Discord channel. May 11, 2024 4 - Beta pytest!=6.0.0,<9,>=3.3.2 :pypi:`pytest-discover` Pytest plugin to record discovered tests in a file Mar 26, 2024 N/A pytest - :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible recorders. Mar 21, 2026 5 - Production/Stable pytest>=3.5.0 - :pypi:`pytest-ditto-pandas` pytest-ditto plugin for pandas snapshots. May 29, 2024 4 - Beta pytest>=3.5.0 - :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow tables. Jun 09, 2024 4 - Beta pytest>=3.5.0 + :pypi:`pytest-ditto` Snapshot testing pytest plugin with minimal ceremony and flexible recorders. Mar 22, 2026 5 - Production/Stable pytest>=3.5.0 + :pypi:`pytest-ditto-pandas` pytest-ditto plugin for pandas DataFrame snapshots. Mar 22, 2026 5 - Production/Stable pytest>=3.5.0 + :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow table snapshots. Mar 22, 2026 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-django` A Django plugin for pytest. Feb 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest - :pypi:`pytest-django-asyncio` Temporary pytest plugin backport for async Django DB fixture handling. Mar 16, 2026 4 - Beta pytest>=8.0 + :pypi:`pytest-django-asyncio` Temporary pytest plugin backport for async Django DB fixture handling. Mar 26, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A :pypi:`pytest-django-casperjs` Integrate CasperJS with your django tests as a pytest fixture. Mar 15, 2015 2 - Pre-Alpha N/A :pypi:`pytest-django-class` A pytest plugin for running django in class-scoped fixtures Aug 08, 2023 4 - Beta N/A @@ -520,6 +527,7 @@ This list contains 1911 plugins. :pypi:`pytest-doctest-mkdocstrings` Run pytest --doctest-modules with markdown docstrings in code blocks (\`\`\`) Mar 02, 2024 N/A pytest :pypi:`pytest-doctest-only` A plugin to run only doctest Jul 30, 2025 4 - Beta pytest>=8.3.0 :pypi:`pytest-doctestplus` Pytest plugin with advanced doctest features. Jan 26, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-doctor` A CLI tool that diagnoses weak or broken pytest suites and provides a 0-100 health score with actionable recommendations Mar 22, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-documentary` A simple pytest plugin to generate test documentation Jul 11, 2024 N/A pytest :pypi:`pytest-dogu-report` pytest plugin for dogu report Jul 07, 2023 N/A N/A :pypi:`pytest-dogu-sdk` pytest plugin for the Dogu Dec 14, 2023 N/A N/A @@ -561,7 +569,7 @@ This list contains 1911 plugins. :pypi:`pytest-elastic-reporter` Mar 13, 2026 N/A pytest>=7.0 :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Mar 16, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Mar 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 @@ -700,8 +708,9 @@ This list contains 1911 plugins. :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Mar 05, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) + :pypi:`pytest-flakemark` FLAKEMARK — Differential execution tracer that finds the exact file, line, and root cause of any flaky test. Mar 23, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Feb 28, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Mar 24, 2026 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) @@ -733,7 +742,7 @@ This list contains 1911 plugins. :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A - :pypi:`pytest-fxa-mte` pytest plugin for Firefox Accounts Oct 02, 2024 5 - Production/Stable N/A + :pypi:`pytest-fxa-mte` pytest plugin for Firefox Accounts Mar 23, 2026 5 - Production/Stable N/A :pypi:`pytest-fxtest` Oct 27, 2020 N/A N/A :pypi:`pytest-fzf` fzf-based test selector for pytest Jan 06, 2025 4 - Beta pytest>=6.0.0 :pypi:`pytest_gae` pytest plugin for apps written with Google's AppEngine Aug 03, 2016 3 - Alpha N/A @@ -749,7 +758,7 @@ This list contains 1911 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Mar 20, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Mar 26, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -779,14 +788,14 @@ This list contains 1911 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 15, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 28, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) :pypi:`pytest-grpc-aio` pytest plugin for grpc.aio Oct 28, 2025 N/A pytest>=3.6.0 :pypi:`pytest-grunnur` Py.Test plugin for Grunnur-based packages. Jul 26, 2024 N/A pytest>=6 :pypi:`pytest_gui_status` Show pytest status in gui Jan 23, 2016 N/A pytest - :pypi:`pytest-hammer` tools such as db tools of pytest Mar 20, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-hammer` tools such as db tools of pytest Mar 27, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-hammertime` Display "🔨 " instead of "." for passed pytest tests. Jul 28, 2018 N/A pytest :pypi:`pytest-hardware-test-report` A simple plugin to use with pytest Apr 01, 2024 4 - Beta pytest<9.0.0,>=8.0.0 :pypi:`pytest-harmony` Chain tests and data with pytest Jan 17, 2023 N/A pytest (>=7.2.1,<8.0.0) @@ -805,8 +814,8 @@ This list contains 1911 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 21, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 21, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 25, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 28, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -862,7 +871,8 @@ This list contains 1911 plugins. :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Feb 12, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Mar 23, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). Mar 23, 2026 4 - Beta N/A :pypi:`pytest-imply` Pytest plugin for test implication — skip tests implied by stronger ones Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A @@ -903,6 +913,7 @@ This list contains 1911 plugins. :pypi:`pytest-involve` Run tests covering a specific file or changeset Feb 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-iovis` A Pytest plugin to enable Jupyter Notebook testing with Papermill Nov 06, 2024 4 - Beta pytest>=7.1.0 :pypi:`pytest-ipdb` A py.test plug-in to enable drop to ipdb debugger on test failure. Mar 20, 2013 2 - Pre-Alpha N/A + :pypi:`pytest-ipso` pytest plugin for running ipso notebook cell tests Mar 24, 2026 N/A pytest :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest :pypi:`pytest-ipywidgets` Feb 24, 2026 N/A pytest @@ -927,6 +938,7 @@ This list contains 1911 plugins. :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. Feb 02, 2026 5 - Production/Stable pytest :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) + :pypi:`pytest-jscov` Pytest plugin for JavaScript coverage via Playwright CDP Mar 28, 2026 N/A pytest :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Dec 28, 2025 N/A pytest>6.0.0 :pypi:`pytest-json-fixtures` JSON output for the --fixtures flag Mar 14, 2023 4 - Beta N/A @@ -942,6 +954,7 @@ This list contains 1911 plugins. :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 :pypi:`pytest-jupyter-deploy` Pytest plugin for E2E testing of jupyter-deploy templates Mar 16, 2026 3 - Alpha pytest>=8.3.5 :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest + :pypi:`pytest-just` A pytest plugin for testing justfile recipes Mar 22, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest @@ -1001,7 +1014,7 @@ This list contains 1911 plugins. :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-llm-rubric` A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and calibration Mar 20, 2026 3 - Alpha pytest>=8 + :pypi:`pytest-llm-rubric` A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and preflight Mar 28, 2026 3 - Alpha pytest>=8 :pypi:`pytest-llmtest` The pytest for LLMs — fast, Pydantic-based assertions for AI applications Mar 08, 2026 3 - Alpha pytest>=7.0; extra == "dev" :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) @@ -1039,7 +1052,7 @@ This list contains 1911 plugins. :pypi:`pytest-markdir` Feb 01, 2026 N/A pytest<10,>=8.0 :pypi:`pytest-markdoctest` A pytest plugin to doctest your markdown files Jul 22, 2022 4 - Beta pytest (>=6) :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) - :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Jan 28, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Mar 23, 2026 N/A pytest>=7.0.0 :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 10, 2026 N/A pytest>=7.0 :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 @@ -1126,9 +1139,9 @@ This list contains 1911 plugins. :pypi:`pytest-mpi` pytest plugin to collect information from tests Jan 08, 2022 3 - Alpha pytest :pypi:`pytest-mpiexec` pytest plugin for running individual tests with mpiexec Jul 29, 2024 3 - Alpha pytest :pypi:`pytest-mpi-tmweigand` forked pytest plugin to collect information from tests Dec 27, 2025 3 - Alpha pytest - :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Nov 15, 2025 5 - Production/Stable pytest>=5.4.0 + :pypi:`pytest-mpl` pytest plugin to help with testing figures output from Matplotlib Mar 25, 2026 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-mpl-oggm` pytest plugin to help with testing figures output from Matplotlib - OGGM fork Mar 09, 2026 5 - Production/Stable pytest>=6.2.5 - :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Nov 15, 2022 4 - Beta pytest (>=6) + :pypi:`pytest-mproc` low-startup-overhead, scalable, distributed-testing pytest plugin Mar 27, 2026 4 - Beta pytest>=6 :pypi:`pytest-mqtt` pytest-mqtt supports testing systems based on MQTT Jan 28, 2026 5 - Production/Stable pytest<10; extra == "test" :pypi:`pytest-multihost` Utility for writing multi-host tests for pytest Apr 07, 2020 4 - Beta N/A :pypi:`pytest-multilog` Multi-process logs handling and other helpers for pytest Dec 28, 2025 N/A pytest @@ -1146,7 +1159,7 @@ This list contains 1911 plugins. :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Feb 25, 2026 4 - Beta pytest<9.1.0,>=7.0.0; python_version < "3.14" - :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Nov 05, 2025 2 - Pre-Alpha pytest>=8.3.2; extra == "dev" + :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Mar 23, 2026 2 - Pre-Alpha pytest>=8 :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) @@ -1197,7 +1210,7 @@ This list contains 1911 plugins. :pypi:`pytest-only-markers` A pytest plugin that isolates test execution to only tests decorated with ONLY\* markers, stripping all other markers from matching items. Mar 17, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Mar 20, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Mar 27, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1250,7 +1263,7 @@ This list contains 1911 plugins. :pypi:`pytest-percents` Mar 16, 2024 N/A N/A :pypi:`pytest-perf` Run performance tests against the mainline code. May 20, 2024 5 - Production/Stable pytest!=8.1.*,>=6; extra == "testing" :pypi:`pytest-performance` A simple plugin to ensure the execution of critical sections of code has not been impacted Sep 11, 2020 5 - Production/Stable pytest (>=3.7.0) - :pypi:`pytest-performancetotal` A performance plugin for pytest Aug 05, 2025 5 - Production/Stable N/A + :pypi:`pytest-performancetotal` A performance plugin for pytest Mar 24, 2026 5 - Production/Stable N/A :pypi:`pytest-persistence` Pytest tool for persistent objects Aug 21, 2024 N/A N/A :pypi:`pytest-pexpect` Pytest pexpect plugin. Sep 10, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 18, 2025 5 - Production/Stable pytest>=7.4 @@ -1268,12 +1281,12 @@ This list contains 1911 plugins. :pypi:`pytest-pinpoint` A pytest plugin which runs SBFL algorithms to detect faults. Sep 25, 2020 N/A pytest (>=4.4.0) :pypi:`pytest-pipeline` Pytest plugin for functional testing of data analysispipelines Jan 24, 2017 3 - Alpha N/A :pypi:`pytest-pitch` runs tests in an order such that coverage increases as fast as possible Nov 02, 2023 4 - Beta pytest >=7.3.1 - :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Mar 12, 2026 5 - Production/Stable pytest>=6.2.5 + :pypi:`pytest-platform-adapter` Pytest集成自动化平台插件 Mar 23, 2026 5 - Production/Stable pytest>=6.2.5 :pypi:`pytest-platform-markers` Markers for pytest to skip tests on specific platforms Sep 09, 2019 4 - Beta pytest (>=3.6.0) :pypi:`pytest-play` pytest plugin that let you automate actions and assertions with test metrics reporting executing plain YAML files Jun 12, 2019 5 - Production/Stable N/A :pypi:`pytest-playbook` Pytest plugin for reading playbooks. Jan 21, 2021 3 - Alpha pytest (>=6.1.2,<7.0.0) :pypi:`pytest-playwright` A pytest wrapper with fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Mar 17, 2026 N/A N/A + :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Mar 23, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A @@ -1288,7 +1301,7 @@ This list contains 1911 plugins. :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-plugins` A Python package for managing pytest plugins. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Feb 10, 2026 N/A N/A + :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Mar 26, 2026 N/A N/A :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-podman` Pytest plugin for Podman integration Feb 03, 2026 N/A N/A @@ -1310,7 +1323,7 @@ This list contains 1911 plugins. :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. Jan 23, 2026 5 - Production/Stable pytest>=8.2 :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 - :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Jan 27, 2026 3 - Alpha pytest + :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Mar 26, 2026 3 - Alpha pytest :pypi:`pytest-prefer-nested-dup-tests` A Pytest plugin to drop duplicated tests during collection, but will prefer keeping nested packages. Apr 27, 2022 4 - Beta pytest (>=7.1.1,<8.0.0) :pypi:`pytest-pretty` pytest plugin for printing summary data as I want it Jun 04, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-pretty-terminal` pytest plugin for generating prettier terminal output Jan 31, 2022 N/A pytest (>=3.4.1) @@ -1376,16 +1389,17 @@ This list contains 1911 plugins. :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) - :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Mar 18, 2026 5 - Production/Stable pytest>=6.0 + :pypi:`pytest-qfield` A pytest plugin for testing QField qml plugins Mar 27, 2026 N/A N/A + :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Mar 25, 2026 5 - Production/Stable pytest>=6.0 :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) :pypi:`pytest-qr` pytest plugin to generate test result QR codes Nov 25, 2021 4 - Beta N/A :pypi:`pytest-qt` pytest support for PyQt and PySide applications Jul 01, 2025 5 - Production/Stable pytest :pypi:`pytest-qt-app` QT app fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-quantum` A cross-framework pytest plugin for quantum program testing Mar 21, 2026 3 - Alpha pytest>=8.0 + :pypi:`pytest-quantum` A cross-framework pytest plugin for quantum program testing Mar 22, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-quarantine` A plugin for pytest to manage expected test failures Nov 24, 2019 5 - Production/Stable pytest (>=4.6) :pypi:`pytest-quickcheck` pytest plugin to generate random data inspired by QuickCheck Nov 05, 2022 4 - Beta pytest (>=4.0) :pypi:`pytest_quickify` Run test suites with pytest-quickify. Jun 14, 2019 N/A pytest - :pypi:`pytest-rabbitmq` RabbitMQ process and client fixtures for pytest Oct 15, 2024 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-rabbitmq` RabbitMQ process and client fixtures for pytest Mar 22, 2026 5 - Production/Stable pytest>=6.2 :pypi:`pytest-race` Race conditions tester for pytest Jun 07, 2022 4 - Beta N/A :pypi:`pytest-rage` pytest plugin to implement PEP712 Oct 21, 2011 3 - Alpha N/A :pypi:`pytest-rail` pytest plugin for creating TestRail runs and adding results May 02, 2022 N/A pytest (>=3.6) @@ -1400,7 +1414,7 @@ This list contains 1911 plugins. :pypi:`pytest-random-order` Randomise the order in which pytest tests are run with some control over the randomness Jun 22, 2025 5 - Production/Stable pytest :pypi:`pytest-ranking` A Pytest plugin for faster fault detection via regression test prioritization Apr 08, 2025 4 - Beta pytest>=7.4.3 :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A - :pypi:`pytest-readable` Pytest plugin that renders readable test specifications and exports documentation Mar 12, 2026 3 - Alpha pytest<10.0,>=9.0 + :pypi:`pytest-readable` Pytest plugin that renders readable test specifications and exports documentation Mar 23, 2026 3 - Alpha pytest<10.0,>=9.0 :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest :pypi:`pytest-reana` Pytest fixtures for REANA. Mar 03, 2026 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 @@ -1423,7 +1437,7 @@ This list contains 1911 plugins. :pypi:`pytest_relay` A plugin to relay test information and control from and to pytest Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-relay-run` A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest_relay_ws` An extension plugin to pytest-relay to relay pytest information via websockets Jan 31, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-remaster` Golden master testing for pytest with automatic regeneration. Mar 21, 2026 3 - Alpha pytest>=7 + :pypi:`pytest-remaster` Pytest plugin for golden master (characterisation) testing with automatic expected file regeneration. Mar 23, 2026 3 - Alpha pytest>=7 :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) @@ -1532,7 +1546,7 @@ This list contains 1911 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Mar 17, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Mar 26, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1545,7 +1559,7 @@ This list contains 1911 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Mar 17, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Mar 26, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1568,6 +1582,7 @@ This list contains 1911 plugins. :pypi:`pytest-setupinfo` Displaying setup info during pytest command run Jan 23, 2023 N/A N/A :pypi:`pytest-sftpserver` py.test plugin to locally test sftp server connections. Sep 16, 2019 4 - Beta N/A :pypi:`pytest-shard` Dec 11, 2020 4 - Beta pytest + :pypi:`pytest-shard-cloudc` Shard tests to support parallelism across multiple machines. Mar 28, 2026 4 - Beta pytest :pypi:`pytest-shard-fork` Shard tests to support parallelism across multiple machines Jun 13, 2025 4 - Beta pytest :pypi:`pytest-shared-session-scope` Pytest session-scoped fixture that works with xdist Oct 31, 2025 N/A pytest>=7.0.0 :pypi:`pytest-share-hdf` Plugin to save test data in HDF files and retrieve them for comparison Sep 21, 2022 4 - Beta pytest (>=3.5.0) @@ -1585,7 +1600,7 @@ This list contains 1911 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 21, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 23, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1644,8 +1659,8 @@ This list contains 1911 plugins. :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Aug 19, 2025 N/A pytest<8,>5.4.0 - :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Nov 24, 2025 N/A N/A + :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Mar 27, 2026 N/A pytest<8,>5.4.0 + :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Mar 25, 2026 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A :pypi:`pytest-sqlalchemy` pytest plugin with sqlalchemy related fixtures Apr 19, 2025 3 - Alpha pytest>=8.0 @@ -1822,7 +1837,7 @@ This list contains 1911 plugins. :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A :pypi:`pytest-typhoon-polarion` Typhoontest plugin for Siemens Polarion Feb 01, 2024 4 - Beta N/A :pypi:`pytest-typhoon-xray` Typhoon HIL plugin for pytest Aug 15, 2023 4 - Beta N/A - :pypi:`pytest-typing` Test your types by running typecheckers on them. Mar 20, 2026 3 - Alpha pytest + :pypi:`pytest-typing` Test your types by running typecheckers on them. Mar 24, 2026 3 - Alpha pytest :pypi:`pytest-typing-runner` Pytest plugin to make it easier to run and check python code against static type checkers May 31, 2025 N/A N/A :pypi:`pytest-tytest` Typhoon HIL plugin for pytest May 25, 2020 4 - Beta pytest (>=5.4.2) :pypi:`pytest-tzshift` A Pytest plugin that transparently re-runs tests under a matrix of timezones and locales. Jun 25, 2025 4 - Beta pytest>=7.0 @@ -1833,7 +1848,7 @@ This list contains 1911 plugins. :pypi:`pytest-uncollect-if` A plugin to uncollect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-unflakable` Unflakable plugin for PyTest Apr 30, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-unhandled-exception-exit-code` Plugin for py.test set a different exit code on uncaught exceptions Jun 22, 2020 5 - Production/Stable pytest (>=2.3) - :pypi:`pytest-unique` Pytest fixture to generate unique values. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-unique` Pytest fixture to generate unique values. Mar 27, 2026 N/A pytest>=9.0.0 :pypi:`pytest-unittest-filter` A pytest plugin for filtering unittest-based test classes Jan 12, 2019 4 - Beta pytest (>=3.1.0) :pypi:`pytest-unittest-id-runner` A pytest plugin to run tests using unittest-style test IDs Feb 09, 2025 N/A pytest>=6.0.0 :pypi:`pytest-unmagic` Pytest fixtures with conventional import semantics Jul 14, 2025 5 - Production/Stable pytest @@ -1901,7 +1916,7 @@ This list contains 1911 plugins. :pypi:`pytest-xdist-rate-limit` Shared state management and rate limiting for pytest-xdist workers Dec 31, 2025 4 - Beta pytest>=8.4.2 :pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1) :pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Feb 16, 2026 4 - Beta pytest>=7.0.0 - :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Dec 08, 2025 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-xdocker` Pytest fixture to run docker across test runs. Mar 27, 2026 N/A pytest>=9.0.0 :pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0) :pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A :pypi:`pytest-xflaky` A simple plugin to use with pytest Oct 14, 2024 4 - Beta pytest>=8.2.1 @@ -2447,6 +2462,13 @@ This list contains 1911 plugins. Pytest Plugin to provide API Coverage statistics for Python Web Frameworks + :pypi:`pytest-api-coverage` + *last release*: Mar 24, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + Pytest plugin for API test coverage analysis + :pypi:`pytest-api-framework` *last release*: Jun 22, 2025, *status*: N/A, @@ -2455,7 +2477,7 @@ This list contains 1911 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Mar 16, 2026, + *last release*: Mar 26, 2026, *status*: N/A, *requires*: pytest==7.2.2 @@ -2497,7 +2519,7 @@ This list contains 1911 plugins. Pytest plugin for appium :pypi:`pytest-approval` - *last release*: Jan 27, 2026, + *last release*: Mar 24, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -2714,7 +2736,7 @@ This list contains 1911 plugins. Pytest fixtures for async generators :pypi:`pytest-asyncio` - *last release*: Nov 10, 2025, + *last release*: Mar 25, 2026, *status*: 5 - Production/Stable, *requires*: pytest<10,>=8.2 @@ -2811,6 +2833,13 @@ This list contains 1911 plugins. Austin plugin for pytest + :pypi:`pytest-auto-api2-cli` + *last release*: Mar 26, 2026, + *status*: N/A, + *requires*: pytest==8.4.1 + + CLI for generating and running pytest-auto-api2 test cases. + :pypi:`pytest-autocap` *last release*: May 15, 2022, *status*: N/A, @@ -3092,7 +3121,7 @@ This list contains 1911 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Mar 20, 2026, + *last release*: Mar 24, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3659,7 +3688,7 @@ This list contains 1911 plugins. A pytest fixture for changing current working directory :pypi:`pytest-check` - *last release*: Mar 20, 2026, + *last release*: Mar 22, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -3812,6 +3841,13 @@ This list contains 1911 plugins. A pytest plugin for managing containerlab topologies in tests. + :pypi:`pytest-clang-tidy` + *last release*: Mar 27, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin that runs clang-tidy static analysis on C/C++ source files + :pypi:`pytest-clarity` *last release*: Jun 11, 2021, *status*: N/A, @@ -4148,6 +4184,13 @@ This list contains 1911 plugins. pytest plugin for comparing call arguments. + :pypi:`pytest-concurrency` + *last release*: Mar 26, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin for parallel test execution with configurable concurrency + :pypi:`pytest-concurrent` *last release*: Jan 12, 2019, *status*: 4 - Beta, @@ -4260,6 +4303,13 @@ This list contains 1911 plugins. Pytest plugin for measuring coverage. + :pypi:`pytest-cov-container` + *last release*: Mar 23, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Pytest plugin to collect code coverage from applications running inside Docker containers + :pypi:`pytest-cover` *last release*: Aug 01, 2015, *status*: 5 - Production/Stable, @@ -4316,6 +4366,20 @@ This list contains 1911 plugins. Use pytest's runner to discover and execute C++ tests + :pypi:`pytest-cppcheck` + *last release*: Mar 26, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin that runs cppcheck static analysis on C/C++ source files + + :pypi:`pytest-cpplint` + *last release*: Mar 26, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin that runs cpplint style checking on C/C++ source files + :pypi:`pytest-cqase` *last release*: Aug 22, 2022, *status*: N/A, @@ -4793,7 +4857,7 @@ This list contains 1911 plugins. Tests that depend on other tests :pypi:`pytest-depends-on` - *last release*: Feb 07, 2026, + *last release*: Mar 28, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -4975,25 +5039,25 @@ This list contains 1911 plugins. Pytest plugin to record discovered tests in a file :pypi:`pytest-ditto` - *last release*: Mar 21, 2026, + *last release*: Mar 22, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=3.5.0 Snapshot testing pytest plugin with minimal ceremony and flexible recorders. :pypi:`pytest-ditto-pandas` - *last release*: May 29, 2024, - *status*: 4 - Beta, + *last release*: Mar 22, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=3.5.0 - pytest-ditto plugin for pandas snapshots. + pytest-ditto plugin for pandas DataFrame snapshots. :pypi:`pytest-ditto-pyarrow` - *last release*: Jun 09, 2024, - *status*: 4 - Beta, + *last release*: Mar 22, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=3.5.0 - pytest-ditto plugin for pyarrow tables. + pytest-ditto plugin for pyarrow table snapshots. :pypi:`pytest-django` *last release*: Feb 14, 2026, @@ -5017,7 +5081,7 @@ This list contains 1911 plugins. Nice pytest plugin to help you with Django pluggable application testing. :pypi:`pytest-django-asyncio` - *last release*: Mar 16, 2026, + *last release*: Mar 26, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0 @@ -5352,6 +5416,13 @@ This list contains 1911 plugins. Pytest plugin with advanced doctest features. + :pypi:`pytest-doctor` + *last release*: Mar 22, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0.0 + + A CLI tool that diagnoses weak or broken pytest suites and provides a 0-100 health score with actionable recommendations + :pypi:`pytest-documentary` *last release*: Jul 11, 2024, *status*: N/A, @@ -5640,7 +5711,7 @@ This list contains 1911 plugins. Elasticsearch fixtures and fixture factories for Pytest. :pypi:`pytest-elegant` - *last release*: Mar 16, 2026, + *last release*: Mar 25, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -6612,6 +6683,13 @@ This list contains 1911 plugins. Runs tests multiple times to expose flakiness. + :pypi:`pytest-flakemark` + *last release*: Mar 23, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + FLAKEMARK — Differential execution tracer that finds the exact file, line, and root cause of any flaky test. + :pypi:`pytest-flakes` *last release*: Dec 02, 2021, *status*: 5 - Production/Stable, @@ -6620,7 +6698,7 @@ This list contains 1911 plugins. pytest plugin to check source code with pyflakes :pypi:`pytest-flakiness` - *last release*: Feb 28, 2026, + *last release*: Mar 24, 2026, *status*: N/A, *requires*: pytest>=9.0.2 @@ -6844,7 +6922,7 @@ This list contains 1911 plugins. pytest plugin for Firefox Accounts :pypi:`pytest-fxa-mte` - *last release*: Oct 02, 2024, + *last release*: Mar 23, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -6956,7 +7034,7 @@ This list contains 1911 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Mar 20, 2026, + *last release*: Mar 26, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7166,7 +7244,7 @@ This list contains 1911 plugins. :pypi:`pytest-gremlins` - *last release*: Mar 15, 2026, + *last release*: Mar 28, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7215,7 +7293,7 @@ This list contains 1911 plugins. Show pytest status in gui :pypi:`pytest-hammer` - *last release*: Mar 20, 2026, + *last release*: Mar 27, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -7348,14 +7426,14 @@ This list contains 1911 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Mar 21, 2026, + *last release*: Mar 25, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Mar 21, 2026, + *last release*: Mar 28, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7747,12 +7825,19 @@ This list contains 1911 plugins. A pytest plugin for image snapshot management and comparison. :pypi:`pytest-impacted` - *last release*: Feb 12, 2026, + *last release*: Mar 23, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0.0 A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. + :pypi:`pytest-impacted-rs` + *last release*: Mar 23, 2026, + *status*: 4 - Beta, + *requires*: N/A + + Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). + :pypi:`pytest-imply` *last release*: Mar 21, 2026, *status*: 4 - Beta, @@ -8033,6 +8118,13 @@ This list contains 1911 plugins. A py.test plug-in to enable drop to ipdb debugger on test failure. + :pypi:`pytest-ipso` + *last release*: Mar 24, 2026, + *status*: N/A, + *requires*: pytest + + pytest plugin for running ipso notebook cell tests + :pypi:`pytest-ipynb` *last release*: Jan 29, 2019, *status*: 3 - Alpha, @@ -8201,6 +8293,13 @@ This list contains 1911 plugins. Test failures are better served with humor. + :pypi:`pytest-jscov` + *last release*: Mar 28, 2026, + *status*: N/A, + *requires*: pytest + + Pytest plugin for JavaScript coverage via Playwright CDP + :pypi:`pytest-json` *last release*: Jan 18, 2016, *status*: 4 - Beta, @@ -8306,6 +8405,13 @@ This list contains 1911 plugins. A reusable JupyterHub pytest plugin + :pypi:`pytest-just` + *last release*: Mar 22, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0.0 + + A pytest plugin for testing justfile recipes + :pypi:`pytest-jux` *last release*: Jan 08, 2026, *status*: 3 - Alpha, @@ -8720,11 +8826,11 @@ This list contains 1911 plugins. Human-friendly pytest test reports with optional LLM annotations :pypi:`pytest-llm-rubric` - *last release*: Mar 20, 2026, + *last release*: Mar 28, 2026, *status*: 3 - Alpha, *requires*: pytest>=8 - A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and calibration + A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and preflight :pypi:`pytest-llmtest` *last release*: Mar 08, 2026, @@ -8986,7 +9092,7 @@ This list contains 1911 plugins. Test your markdown docs with pytest :pypi:`pytest-markdown-docs` - *last release*: Jan 28, 2026, + *last release*: Mar 23, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -9595,9 +9701,9 @@ This list contains 1911 plugins. forked pytest plugin to collect information from tests :pypi:`pytest-mpl` - *last release*: Nov 15, 2025, + *last release*: Mar 25, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=5.4.0 + *requires*: pytest>=6.2.5 pytest plugin to help with testing figures output from Matplotlib @@ -9609,9 +9715,9 @@ This list contains 1911 plugins. pytest plugin to help with testing figures output from Matplotlib - OGGM fork :pypi:`pytest-mproc` - *last release*: Nov 15, 2022, + *last release*: Mar 27, 2026, *status*: 4 - Beta, - *requires*: pytest (>=6) + *requires*: pytest>=6 low-startup-overhead, scalable, distributed-testing pytest plugin @@ -9735,9 +9841,9 @@ This list contains 1911 plugins. Use notebooks as pytests. Keep your notebooks working. :pypi:`pytest-nbgrader` - *last release*: Nov 05, 2025, + *last release*: Mar 23, 2026, *status*: 2 - Pre-Alpha, - *requires*: pytest>=8.3.2; extra == "dev" + *requires*: pytest>=8 Pytest plugin for using with nbgrader and generating test cases. @@ -10092,7 +10198,7 @@ This list contains 1911 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Mar 20, 2026, + *last release*: Mar 27, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10463,7 +10569,7 @@ This list contains 1911 plugins. A simple plugin to ensure the execution of critical sections of code has not been impacted :pypi:`pytest-performancetotal` - *last release*: Aug 05, 2025, + *last release*: Mar 24, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -10589,7 +10695,7 @@ This list contains 1911 plugins. runs tests in an order such that coverage increases as fast as possible :pypi:`pytest-platform-adapter` - *last release*: Mar 12, 2026, + *last release*: Mar 23, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2.5 @@ -10624,7 +10730,7 @@ This list contains 1911 plugins. A pytest wrapper with fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-artifacts` - *last release*: Mar 17, 2026, + *last release*: Mar 23, 2026, *status*: N/A, *requires*: N/A @@ -10729,7 +10835,7 @@ This list contains 1911 plugins. A Python package for managing pytest plugins. :pypi:`pytest-plugin-utils` - *last release*: Feb 10, 2026, + *last release*: Mar 26, 2026, *status*: N/A, *requires*: N/A @@ -10883,7 +10989,7 @@ This list contains 1911 plugins. A plugin containing extra batteries for pytest :pypi:`pytest-prairielearn-grader` - *last release*: Jan 27, 2026, + *last release*: Mar 26, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -11344,8 +11450,15 @@ This list contains 1911 plugins. Pytest plugin for uploading test results to your QA Touch Testrun. + :pypi:`pytest-qfield` + *last release*: Mar 27, 2026, + *status*: N/A, + *requires*: N/A + + A pytest plugin for testing QField qml plugins + :pypi:`pytest-qgis` - *last release*: Mar 18, 2026, + *last release*: Mar 25, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.0 @@ -11380,8 +11493,8 @@ This list contains 1911 plugins. QT app fixture for py.test :pypi:`pytest-quantum` - *last release*: Mar 21, 2026, - *status*: 3 - Alpha, + *last release*: Mar 22, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=8.0 A cross-framework pytest plugin for quantum program testing @@ -11408,7 +11521,7 @@ This list contains 1911 plugins. Run test suites with pytest-quickify. :pypi:`pytest-rabbitmq` - *last release*: Oct 15, 2024, + *last release*: Mar 22, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.2 @@ -11513,7 +11626,7 @@ This list contains 1911 plugins. Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard :pypi:`pytest-readable` - *last release*: Mar 12, 2026, + *last release*: Mar 23, 2026, *status*: 3 - Alpha, *requires*: pytest<10.0,>=9.0 @@ -11674,11 +11787,11 @@ This list contains 1911 plugins. An extension plugin to pytest-relay to relay pytest information via websockets :pypi:`pytest-remaster` - *last release*: Mar 21, 2026, + *last release*: Mar 23, 2026, *status*: 3 - Alpha, *requires*: pytest>=7 - Golden master testing for pytest with automatic regeneration. + Pytest plugin for golden master (characterisation) testing with automatic expected file regeneration. :pypi:`pytest-remfiles` *last release*: Jul 01, 2019, @@ -12437,7 +12550,7 @@ This list contains 1911 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Mar 17, 2026, + *last release*: Mar 26, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12528,7 +12641,7 @@ This list contains 1911 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Mar 17, 2026, + *last release*: Mar 26, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12688,6 +12801,13 @@ This list contains 1911 plugins. + :pypi:`pytest-shard-cloudc` + *last release*: Mar 28, 2026, + *status*: 4 - Beta, + *requires*: pytest + + Shard tests to support parallelism across multiple machines. + :pypi:`pytest-shard-fork` *last release*: Jun 13, 2025, *status*: 4 - Beta, @@ -12808,7 +12928,7 @@ This list contains 1911 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Mar 21, 2026, + *last release*: Mar 23, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13221,14 +13341,14 @@ This list contains 1911 plugins. Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. :pypi:`pytest-splunk-addon` - *last release*: Aug 19, 2025, + *last release*: Mar 27, 2026, *status*: N/A, *requires*: pytest<8,>5.4.0 A Dynamic test tool for Splunk Apps and Add-ons :pypi:`pytest-splunk-addon-ui-smartx` - *last release*: Nov 24, 2025, + *last release*: Mar 25, 2026, *status*: N/A, *requires*: N/A @@ -14467,7 +14587,7 @@ This list contains 1911 plugins. Typhoon HIL plugin for pytest :pypi:`pytest-typing` - *last release*: Mar 20, 2026, + *last release*: Mar 24, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -14544,9 +14664,9 @@ This list contains 1911 plugins. Plugin for py.test set a different exit code on uncaught exceptions :pypi:`pytest-unique` - *last release*: Dec 08, 2025, + *last release*: Mar 27, 2026, *status*: N/A, - *requires*: pytest<10.0.0,>=9.0.0 + *requires*: pytest>=9.0.0 Pytest fixture to generate unique values. @@ -15020,9 +15140,9 @@ This list contains 1911 plugins. A pytest plugin to list worker statistics after a xdist run. :pypi:`pytest-xdocker` - *last release*: Dec 08, 2025, + *last release*: Mar 27, 2026, *status*: N/A, - *requires*: pytest<10.0.0,>=9.0.0 + *requires*: pytest>=9.0.0 Pytest fixture to run docker across test runs. From fc54e3523bcc828d3746befa1551103ff92191b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 06:30:04 +0200 Subject: [PATCH 222/307] build(deps): Bump pytest-cov in /testing/plugins_integration (#14337) Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 7.0.0 to 7.1.0. - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v7.0.0...v7.1.0) --- updated-dependencies: - dependency-name: pytest-cov dependency-version: 7.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index db654256a4a..af665b28dca 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -2,7 +2,7 @@ anyio[trio]==4.12.1 django==6.0.3 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 -pytest-cov==7.0.0 +pytest-cov==7.1.0 pytest-django==4.12.0 pytest-flakes==4.0.5 pytest-html==4.2.0 From 3e27786ce7d8e484d3011e0eea09dcca5b07a97c Mon Sep 17 00:00:00 2001 From: Marco Edward Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:26:01 +0100 Subject: [PATCH 223/307] Make FixtureFuction type alias instead of TypeVar (#14339) Both times, it only appears once in a function signature. Therefore, the TypeVar has no effect. pyright warns about this too. --- src/_pytest/fixtures.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 70d3a7457f6..bad6eb185a5 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -82,8 +82,8 @@ # The value of the fixture -- return/yield of the fixture function (type variable). FixtureValue = TypeVar("FixtureValue", covariant=True) -# The type of the fixture function (type variable). -FixtureFunction = TypeVar("FixtureFunction", bound=Callable[..., object]) +# The type of the fixture function (type alias). +FixtureFunction = Callable[..., object] # The type of a fixture function (type alias generic in fixture value). _FixtureFunc = Callable[..., FixtureValue] | Callable[..., Generator[FixtureValue]] # The type of FixtureDef.cached_result (type alias generic in fixture value). From 2a74cdfaff97f2405c0d747075d20da2df123786 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 21:49:18 +0000 Subject: [PATCH 224/307] [pre-commit.ci] pre-commit autoupdate (#14341) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.7 → v0.15.8](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.7...v0.15.8) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f27e82577eb..e3c0cdaca75 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.7" + rev: "v0.15.8" hooks: - id: ruff-check args: ["--fix"] From bf9977f0b65e6c7ef677a2959324f1378deb517e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 28 Mar 2026 23:12:07 +0300 Subject: [PATCH 225/307] Schedule deprecated legacy hook marks for removal in pytest 10 By the time pytest 10 is released, this will have been deprecated for more than 5 years (0fdacb6db5806dcc2c01d80e6dfe0e5fcd24034e), and the alternative syntax available for over 10 years (d2a5c7f99b8d178f170c1ca6579690ce84e00b3d), which seems like enough time. Removal will simplify PytestPluginManager and leave us with one way for setting hookspec/hookimpl options (the plan after removal is to just treat the old markers as normal markers, not hard-error on them). --- changelog/14335.deprecation.rst | 2 ++ doc/en/deprecations.rst | 4 ++++ src/_pytest/deprecated.py | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 changelog/14335.deprecation.rst diff --git a/changelog/14335.deprecation.rst b/changelog/14335.deprecation.rst new file mode 100644 index 00000000000..e173ac6938f --- /dev/null +++ b/changelog/14335.deprecation.rst @@ -0,0 +1,2 @@ +The method of configuring hooks using markers, deprecated since pytest 7.2, is now scheduled to be removed in pytest 10. +See :ref:`hook-markers` for more details. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 75e7a180eb0..8f9504f8609 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -171,9 +171,13 @@ Simply remove the ``__init__.py`` file entirely. Python 3.3+ natively supports namespace packages without ``__init__.py``. +.. _hook-markers: + Configuring hook specs/impls using markers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. deprecated:: 7.2 + Before pluggy, pytest's plugin library, was its own package and had a clear API, pytest just used ``pytest.mark`` to configure hooks. diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index 9fe761e8ab4..ec3f9fcbfd8 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -39,7 +39,7 @@ HOOK_LEGACY_MARKING = UnformattedWarning( - PytestDeprecationWarning, + PytestRemovedIn10Warning, "The hook{type} {fullname} uses old-style configuration options (marks or attributes).\n" "Please use the pytest.hook{type}({hook_opts}) decorator instead\n" " to configure the hooks.\n" From 7161cfec0da7ecbbbf136f7176e90ec36288c935 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 31 Mar 2026 16:58:20 +0300 Subject: [PATCH 226/307] tmpdir: fix insecure temporary directory vulnerability (CVE-2025-71176) A previous fix for insecure temporary directory issue c49100cef8073c5de117199d17d632cfd8cb11c1 wasn't sufficient because it followed symlinks. Stop following symlinks, and reject if a symlink; we know it shouldn't be. Fix #14279. [0] https://www.openwall.com/lists/oss-security/2026/01/21/5 --- changelog/14343.bugfix.rst | 1 + src/_pytest/tmpdir.py | 26 ++++++++++++++++++++++++-- testing/test_tmpdir.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 changelog/14343.bugfix.rst diff --git a/changelog/14343.bugfix.rst b/changelog/14343.bugfix.rst new file mode 100644 index 00000000000..a52028d9f86 --- /dev/null +++ b/changelog/14343.bugfix.rst @@ -0,0 +1 @@ +Fixed use of insecure temporary directory (CVE-2025-71176). diff --git a/src/_pytest/tmpdir.py b/src/_pytest/tmpdir.py index 855ad273ecf..66ca9f190e3 100644 --- a/src/_pytest/tmpdir.py +++ b/src/_pytest/tmpdir.py @@ -9,6 +9,7 @@ from pathlib import Path import re from shutil import rmtree +import stat import tempfile from typing import Any from typing import final @@ -170,16 +171,37 @@ def getbasetemp(self) -> Path: # Also, to keep things private, fixup any world-readable temp # rootdir's permissions. Historically 0o755 was used, so we can't # just error out on this, at least for a while. + # Don't follow symlinks, otherwise we're open to symlink-swapping + # TOCTOU vulnerability. + # This check makes us vulnerable to a DoS - a user can `mkdir + # /tmp/pytest-of-otheruser` and then `otheruser` will fail this + # check. For now we don't consider it a real problem. otheruser can + # change their TMPDIR or --basetemp, and maybe give the prankster a + # good scolding. uid = get_user_id() if uid is not None: - rootdir_stat = rootdir.stat() + stat_follow_symlinks = ( + False if os.stat in os.supports_follow_symlinks else True + ) + rootdir_stat = rootdir.stat(follow_symlinks=stat_follow_symlinks) + if stat.S_ISLNK(rootdir_stat.st_mode): + raise OSError( + f"The temporary directory {rootdir} is a symbolic link. " + "Fix this and try again." + ) if rootdir_stat.st_uid != uid: raise OSError( f"The temporary directory {rootdir} is not owned by the current user. " "Fix this and try again." ) if (rootdir_stat.st_mode & 0o077) != 0: - os.chmod(rootdir, rootdir_stat.st_mode & ~0o077) + chmod_follow_symlinks = ( + False if os.chmod in os.supports_follow_symlinks else True + ) + rootdir.chmod( + rootdir_stat.st_mode & ~0o077, + follow_symlinks=chmod_follow_symlinks, + ) keep = self._retention_count if self._retention_policy == "none": keep = 0 diff --git a/testing/test_tmpdir.py b/testing/test_tmpdir.py index 12891d81488..096527e6273 100644 --- a/testing/test_tmpdir.py +++ b/testing/test_tmpdir.py @@ -5,6 +5,7 @@ import dataclasses import os from pathlib import Path +import shutil import stat import sys from typing import cast @@ -619,3 +620,33 @@ def test_tmp_path_factory_fixes_up_world_readable_permissions( # After - fixed. assert (basetemp.parent.stat().st_mode & 0o077) == 0 + + +@pytest.mark.skipif( + not hasattr(os, "getuid") or os.stat not in os.supports_follow_symlinks, + reason="checks unix permissions and symlinks", +) +def test_tmp_path_factory_doesnt_follow_symlinks( + tmp_path: Path, monkeypatch: MonkeyPatch +) -> None: + """Verify that if a /tmp/pytest-of-foo directory is a symbolic link, + it is rejected (#13669, CVE-2025-71176).""" + attacker_controlled = tmp_path / "attacker_controlled" + attacker_controlled.mkdir() + + # Use the test's tmp_path as the system temproot (/tmp). + monkeypatch.setenv("PYTEST_DEBUG_TEMPROOT", str(tmp_path)) + + # First just get the pytest-of-user path. + tmp_factory = TempPathFactory(None, 3, "all", lambda *args: None, _ispytest=True) + pytest_of_user = tmp_factory.getbasetemp().parent + # Just for safety in the test, before we nuke it. + assert "pytest-of-" in str(pytest_of_user) + shutil.rmtree(pytest_of_user) + + pytest_of_user.symlink_to(attacker_controlled) + + # This now tries to use the directory when it's a symlink. + tmp_factory = TempPathFactory(None, 3, "all", lambda *args: None, _ispytest=True) + with pytest.raises(OSError, match=r"temporary directory .* is a symbolic link"): + tmp_factory.getbasetemp() From 80f54926278ad4a489030c8c189b359bf2b9658a Mon Sep 17 00:00:00 2001 From: Freya Bruhin Date: Wed, 1 Apr 2026 14:22:11 +0200 Subject: [PATCH 227/307] Mark `yield_fixture` as deprecated (#14342) Co-authored-by: Marco Gorelli Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- changelog/14342.improvement.rst | 2 ++ doc/en/deprecations.rst | 2 ++ src/_pytest/fixtures.py | 5 +++++ src/pytest/__init__.py | 2 +- testing/deprecated_test.py | 2 +- 5 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 changelog/14342.improvement.rst diff --git a/changelog/14342.improvement.rst b/changelog/14342.improvement.rst new file mode 100644 index 00000000000..5b1d8d2afe7 --- /dev/null +++ b/changelog/14342.improvement.rst @@ -0,0 +1,2 @@ +Marked ``yield_fixture`` as deprecated to type checkers using the ``deprecated`` decorator. Note it +:ref:`has originally been deprecated ` in pytest 6.2 already. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 8f9504f8609..aa05f7ff611 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -287,6 +287,8 @@ conflicts (such as :class:`pytest.File` now taking ``path`` instead of deprecation warning is now raised. +.. _yield-fixture-deprecated: + The ``yield_fixture`` function/decorator ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index bad6eb185a5..3e36fe9c504 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -32,6 +32,7 @@ from typing import TypeVar import warnings +from .compat import deprecated import _pytest from _pytest import nodes from _pytest._code import getfslineno @@ -1416,6 +1417,10 @@ def fixture( return fixture_marker +@deprecated( + "@pytest.yield_fixture is deprecated. Use @pytest.fixture instead; they are the same.", + category=None, # We have our own runtime warning logic +) def yield_fixture( fixture_function=None, *args, diff --git a/src/pytest/__init__.py b/src/pytest/__init__.py index d53edb93728..a35b8965460 100644 --- a/src/pytest/__init__.py +++ b/src/pytest/__init__.py @@ -26,7 +26,7 @@ from _pytest.fixtures import FixtureDef from _pytest.fixtures import FixtureLookupError from _pytest.fixtures import FixtureRequest -from _pytest.fixtures import yield_fixture +from _pytest.fixtures import yield_fixture # type: ignore[deprecated] from _pytest.freeze_support import freeze_includes from _pytest.legacypath import TempdirFactory from _pytest.legacypath import Testdir diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index a55403b07ac..c49a6e084ce 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -68,7 +68,7 @@ def pytest_runtest_call(self): def test_yield_fixture_is_deprecated() -> None: with pytest.warns(DeprecationWarning, match=r"yield_fixture is deprecated"): - @pytest.yield_fixture + @pytest.yield_fixture # type: ignore[deprecated] def fix(): assert False From f93656d611f3c9cd22f346dfeda52cddb778c589 Mon Sep 17 00:00:00 2001 From: Julia Knaak <116320535+JuliaKnaak@users.noreply.github.com> Date: Wed, 1 Apr 2026 08:35:35 -0700 Subject: [PATCH 228/307] Make ScopeName public to enable downstream type checking (#14325) Closes #14137 --- AUTHORS | 3 +++ changelog/14137.improvement.rst | 1 + doc/en/conf.py | 2 +- src/_pytest/fixtures.py | 22 +++++++++++----------- src/_pytest/mark/structures.py | 6 +++--- src/_pytest/python.py | 4 ++-- src/_pytest/scope.py | 4 ++-- src/pytest/__init__.py | 2 ++ testing/typing_checks.py | 8 ++++++++ 9 files changed, 33 insertions(+), 19 deletions(-) create mode 100644 changelog/14137.improvement.rst diff --git a/AUTHORS b/AUTHORS index 523b8f6d657..2f8e26b2cb1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -57,6 +57,7 @@ Aron Curzon Arthur Richard Ashish Kurmi Ashley Whetter +Ava Birtwistle Aviral Verma Aviv Palivoda Babak Keyvani @@ -239,6 +240,7 @@ Joseph Hunkeler Joseph Sawaya Josh Karpel Joshua Bronson +Julia Knaak Julian Valentin Junhao Liao Jurko Gospodnetić @@ -300,6 +302,7 @@ Martijn Faassen Martin Altmayer Martin K. Scherer Martin Prusse +Mateya Berezowsky Mathieu Clabaut Matt Bachmann Matt Duck diff --git a/changelog/14137.improvement.rst b/changelog/14137.improvement.rst new file mode 100644 index 00000000000..7585433ac9c --- /dev/null +++ b/changelog/14137.improvement.rst @@ -0,0 +1 @@ +`pytest.ScopeName` is now public to allow using it in function signatures. diff --git a/doc/en/conf.py b/doc/en/conf.py index eb95727d159..81cb9086703 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -110,7 +110,7 @@ ("py:class", "_pytest.runner.TResult"), ("py:obj", "_pytest.fixtures.FixtureValue"), ("py:obj", "_pytest.stash.T"), - ("py:class", "_ScopeName"), + ("py:class", "ScopeName"), ("py:class", "BaseExcT_1"), ("py:class", "ExcT_1"), ] diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 3e36fe9c504..f667c40ea78 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -65,9 +65,9 @@ from _pytest.outcomes import TEST_OUTCOME from _pytest.pathlib import absolutepath from _pytest.pathlib import bestrelpath -from _pytest.scope import _ScopeName from _pytest.scope import HIGH_SCOPES from _pytest.scope import Scope +from _pytest.scope import ScopeName from _pytest.warning_types import PytestWarning @@ -401,7 +401,7 @@ def _scope(self) -> Scope: raise NotImplementedError() @property - def scope(self) -> _ScopeName: + def scope(self) -> ScopeName: """Scope string, one of "function", "class", "module", "package", "session".""" return self._scope.value @@ -942,10 +942,10 @@ def _teardown_yield_fixture(fixturefunc, it) -> None: def _eval_scope_callable( - scope_callable: Callable[[str, Config], _ScopeName], + scope_callable: Callable[[str, Config], ScopeName], fixture_name: str, config: Config, -) -> _ScopeName: +) -> ScopeName: try: # Type ignored because there is no typing mechanism to specify # keyword arguments, currently. @@ -977,7 +977,7 @@ def __init__( baseid: str | None, argname: str, func: _FixtureFunc[FixtureValue], - scope: Scope | _ScopeName | Callable[[str, Config], _ScopeName] | None, + scope: Scope | ScopeName | Callable[[str, Config], ScopeName] | None, params: Sequence[object] | None, ids: tuple[object | None, ...] | Callable[[Any], object | None] | None = None, *, @@ -1034,7 +1034,7 @@ def __init__( self._autouse = _autouse @property - def scope(self) -> _ScopeName: + def scope(self) -> ScopeName: """Scope string, one of "function", "class", "module", "package", "session".""" return self._scope.value @@ -1228,7 +1228,7 @@ def pytest_fixture_setup( @final @dataclasses.dataclass(frozen=True) class FixtureFunctionMarker: - scope: _ScopeName | Callable[[str, Config], _ScopeName] + scope: ScopeName | Callable[[str, Config], ScopeName] params: tuple[object, ...] | None autouse: bool = False ids: tuple[object | None, ...] | Callable[[Any], object | None] | None = None @@ -1322,7 +1322,7 @@ def _get_wrapped_function(self) -> Callable[..., Any]: def fixture( fixture_function: Callable[..., object], *, - scope: _ScopeName | Callable[[str, Config], _ScopeName] = ..., + scope: ScopeName | Callable[[str, Config], ScopeName] = ..., params: Iterable[object] | None = ..., autouse: bool = ..., ids: Sequence[object | None] | Callable[[Any], object | None] | None = ..., @@ -1334,7 +1334,7 @@ def fixture( def fixture( fixture_function: None = ..., *, - scope: _ScopeName | Callable[[str, Config], _ScopeName] = ..., + scope: ScopeName | Callable[[str, Config], ScopeName] = ..., params: Iterable[object] | None = ..., autouse: bool = ..., ids: Sequence[object | None] | Callable[[Any], object | None] | None = ..., @@ -1345,7 +1345,7 @@ def fixture( def fixture( fixture_function: FixtureFunction | None = None, *, - scope: _ScopeName | Callable[[str, Config], _ScopeName] = "function", + scope: ScopeName | Callable[[str, Config], ScopeName] = "function", params: Iterable[object] | None = None, autouse: bool = False, ids: Sequence[object | None] | Callable[[Any], object | None] | None = None, @@ -1799,7 +1799,7 @@ def _register_fixture( name: str, func: _FixtureFunc[object], nodeid: str | None, - scope: Scope | _ScopeName | Callable[[str, Config], _ScopeName] = "function", + scope: Scope | ScopeName | Callable[[str, Config], ScopeName] = "function", params: Sequence[object] | None = None, ids: tuple[object | None, ...] | Callable[[Any], object | None] | None = None, autouse: bool = False, diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 0fa6e8babba..5c9e6601e8a 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -29,7 +29,7 @@ from _pytest.deprecated import PARAMETRIZE_NON_COLLECTION_ITERABLE from _pytest.outcomes import fail from _pytest.raises import AbstractRaises -from _pytest.scope import _ScopeName +from _pytest.scope import ScopeName from _pytest.warning_types import PytestUnknownMarkWarning @@ -535,7 +535,7 @@ def __call__( ids: Iterable[None | str | float | int | bool] | Callable[[Any], object | None] | None = ..., - scope: _ScopeName | None = ..., + scope: ScopeName | None = ..., ) -> MarkDecorator: ... @overload @@ -552,7 +552,7 @@ def __call__( ids: Iterable[None | str | float | int | bool] | Callable[[Any], object | None] | None = ..., - scope: _ScopeName | None = ..., + scope: ScopeName | None = ..., ) -> MarkDecorator: ... class _UsefixturesMarkDecorator(MarkDecorator): diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 3556562b8c3..13932e548c5 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -71,8 +71,8 @@ from _pytest.pathlib import import_path from _pytest.pathlib import ImportPathMismatchError from _pytest.pathlib import scandir -from _pytest.scope import _ScopeName from _pytest.scope import Scope +from _pytest.scope import ScopeName from _pytest.stash import StashKey from _pytest.warning_types import PytestCollectionWarning from _pytest.warning_types import PytestReturnNotNoneWarning @@ -1209,7 +1209,7 @@ def parametrize( argvalues: Iterable[ParameterSet | Sequence[object] | object], indirect: bool | Sequence[str] = False, ids: Iterable[object | None] | Callable[[Any], object | None] | None = None, - scope: _ScopeName | None = None, + scope: ScopeName | None = None, *, _param_mark: Mark | None = None, ) -> None: diff --git a/src/_pytest/scope.py b/src/_pytest/scope.py index 2b007e87893..68a9da0e6b8 100644 --- a/src/_pytest/scope.py +++ b/src/_pytest/scope.py @@ -15,7 +15,7 @@ from typing import Literal -_ScopeName = Literal["session", "package", "module", "class", "function"] +ScopeName = Literal["session", "package", "module", "class", "function"] @total_ordering @@ -60,7 +60,7 @@ def __lt__(self, other: Scope) -> bool: @classmethod def from_user( - cls, scope_name: _ScopeName, descr: str, where: str | None = None + cls, scope_name: ScopeName, descr: str, where: str | None = None ) -> Scope: """ Given a scope name from the user, return the equivalent Scope enum. Should be used diff --git a/src/pytest/__init__.py b/src/pytest/__init__.py index a35b8965460..a74136f77b5 100644 --- a/src/pytest/__init__.py +++ b/src/pytest/__init__.py @@ -69,6 +69,7 @@ from _pytest.reports import CollectReport from _pytest.reports import TestReport from _pytest.runner import CallInfo +from _pytest.scope import ScopeName from _pytest.stash import Stash from _pytest.stash import StashKey from _pytest.subtests import SubtestReport @@ -145,6 +146,7 @@ "RaisesGroup", "RecordedHookCall", "RunResult", + "ScopeName", "Session", "Stash", "StashKey", diff --git a/testing/typing_checks.py b/testing/typing_checks.py index ff1c0e60cd9..2eb8322d83a 100644 --- a/testing/typing_checks.py +++ b/testing/typing_checks.py @@ -14,6 +14,7 @@ import pytest from pytest import MonkeyPatch +from pytest import ScopeName from pytest import TestReport @@ -65,3 +66,10 @@ def check_testreport_attributes(report: TestReport) -> None: @pytest.mark.parametrize("x", iter(range(10))) # type: ignore[deprecated] def test_it(x: int) -> None: pass + + +# Issue #14137. +def check_scope_typing() -> None: + + custom_scope: ScopeName = "function" + assert_type(custom_scope, ScopeName) From 9e6755a891aa9db7381eca6db4a2f87026dcd29c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 05:55:11 +0000 Subject: [PATCH 229/307] [automated] Update plugin list (#14350) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 246 +++++++++++++++++-------------- 1 file changed, 135 insertions(+), 111 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 4f2ccd3226b..89875dc2566 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.3 :pypi:`logassert` Simple but powerful assertion and verification of logged lines Aug 14, 2025 5 - Production/Stable pytest; extra == "dev" - :pypi:`logot` Test whether your code is logging correctly 🪵 Feb 22, 2026 5 - Production/Stable pytest<10,>=7; extra == "pytest" + :pypi:`logot` Test whether your code is logging correctly 🪵 Mar 31, 2026 5 - Production/Stable pytest<10,>=7; extra == "pytest" :pypi:`nuts` Network Unit Testing System Nov 17, 2025 N/A pytest<8,>=7 :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A @@ -55,6 +55,7 @@ This list contains 1926 plugins. :pypi:`pytest-agentcontract` Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts Feb 18, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-digest` A Pytest plugin to generate a Markdown report for AI Agents Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 13, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agent-health` Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. Apr 03, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A @@ -72,7 +73,6 @@ This list contains 1926 plugins. :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 :pypi:`pytest-airflow` pytest support for airflow. Apr 03, 2019 3 - Alpha pytest (>=4.4.0) :pypi:`pytest-airflow-utils` Nov 15, 2021 N/A N/A - :pypi:`pytest-aitest` Pytest plugin for testing AI agents with MCP and CLI servers Feb 20, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-alembic` A pytest plugin for verifying alembic migrations. May 27, 2025 N/A pytest>=7.0 :pypi:`pytest-alerts` A pytest plugin for sending test results to Slack and Telegram Feb 21, 2025 4 - Beta pytest>=7.4.0 :pypi:`pytest-allclose` Pytest fixture extending Numpy's allclose function Jul 30, 2019 5 - Production/Stable pytest @@ -93,7 +93,7 @@ This list contains 1926 plugins. :pypi:`pytest-anki` A pytest plugin for testing Anki add-ons Jul 31, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-annotate` pytest-annotate: Generate PyAnnotate annotations from your pytest tests. Jun 07, 2022 3 - Alpha pytest (<8.0.0,>=3.2.0) :pypi:`pytest-annotated` Pytest plugin to allow use of Annotated in tests to resolve fixtures Sep 30, 2024 N/A pytest>=8.3.3 - :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Feb 24, 2026 5 - Production/Stable pytest>=6 + :pypi:`pytest-ansible` Plugin for pytest to simplify calling ansible modules from tests or fixtures Apr 01, 2026 5 - Production/Stable pytest>=6 :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A @@ -127,7 +127,7 @@ This list contains 1926 plugins. :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A :pypi:`pytest-asptest` test Answer Set Programming programs Apr 28, 2018 4 - Beta N/A - :pypi:`pytest-assay` Evaluation framework for Pydantic AI agents Mar 04, 2026 4 - Beta N/A + :pypi:`pytest-assay` Evaluation framework for Pydantic AI agents Mar 30, 2026 4 - Beta N/A :pypi:`pytest-assertcount` Plugin to count actual number of asserts in pytest Oct 23, 2022 N/A pytest (>=5.0.0) :pypi:`pytest-assertions` Pytest Assertions Apr 27, 2022 N/A N/A :pypi:`pytest-assert-type` Use typing.assert_type() to test runtime behavior Oct 26, 2025 3 - Alpha pytest>=6.2.0 @@ -199,7 +199,7 @@ This list contains 1926 plugins. :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Mar 24, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 03, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -256,6 +256,7 @@ This list contains 1926 plugins. :pypi:`pytest-camel-collect` Enable CamelCase-aware pytest class collection Aug 02, 2020 N/A pytest (>=2.9) :pypi:`pytest-canonical-data` A plugin which allows to compare results with canonical results, based on previous runs May 08, 2020 2 - Pre-Alpha pytest (>=3.5.0) :pypi:`pytest-canvas` A minimal pytest plugin that streamlines testing for projects using the Canvas SDK. Jul 22, 2025 N/A pytest<9,>=8.4 + :pypi:`pytest-capquery` A pytest fixture for high-precision SQL testing in SQLAlchemy. Apr 04, 2026 N/A pytest :pypi:`pytest-caprng` A plugin that replays pRNG state on failure. May 02, 2018 4 - Beta N/A :pypi:`pytest-capsqlalchemy` Pytest plugin to allow capturing SQLAlchemy queries. Mar 19, 2025 4 - Beta N/A :pypi:`pytest-capture-deprecatedwarnings` pytest plugin to capture all deprecatedwarnings and put them in one file Apr 30, 2019 N/A N/A @@ -312,7 +313,7 @@ This list contains 1926 plugins. :pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A :pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Jul 22, 2025 5 - Production/Stable N/A :pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Feb 04, 2026 N/A pytest<10.0.0,>=8.0.0 - :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Mar 14, 2026 N/A N/A + :pypi:`pytest-clerk-mock` A pytest plugin for mocking Clerk authentication Apr 01, 2026 N/A N/A :pypi:`pytest-cli2-ansible` Mar 05, 2025 N/A N/A :pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0) @@ -336,7 +337,6 @@ This list contains 1926 plugins. :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codingagents` Pytest plugin for testing real coding agents via their SDK Feb 20, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Feb 09, 2026 5 - Production/Stable pytest>=3.8 :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A @@ -351,7 +351,7 @@ This list contains 1926 plugins. :pypi:`pytest-commander` An interactive GUI test runner for PyTest Aug 17, 2021 N/A pytest (<7.0.0,>=6.2.4) :pypi:`pytest-common-subject` pytest framework for testing different aspects of a common method Oct 22, 2025 N/A pytest<9,>=3.6 :pypi:`pytest-compare` pytest plugin for comparing call arguments. Jun 22, 2023 5 - Production/Stable N/A - :pypi:`pytest-concurrency` A pytest plugin for parallel test execution with configurable concurrency Mar 26, 2026 N/A pytest>=7.0 + :pypi:`pytest-concurrency` A pytest plugin for parallel test execution with configurable concurrency Apr 02, 2026 N/A pytest>=7.0 :pypi:`pytest-concurrent` Concurrently execute test cases with multithread, multiprocess and gevent Jan 12, 2019 4 - Beta pytest (>=3.1.1) :pypi:`pytest-conductor` Pytest plugin for coordinating the order in which marked tests run. Jul 30, 2025 N/A pytest<8.4; python_version == "3.8" :pypi:`pytest-config` Base configurations and utilities for developing your Python project test suite with pytest. Nov 07, 2014 5 - Production/Stable N/A @@ -404,6 +404,7 @@ This list contains 1926 plugins. :pypi:`pytest-custom-timeout` Use custom logic when a test times out. Based on pytest-timeout. Jan 08, 2025 4 - Beta pytest>=8.0.0 :pypi:`pytest-cython` A plugin for testing Cython extension modules. Mar 11, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest + :pypi:`pytest-dag` A pytest plugin that enforces test execution order via a dependency DAG Apr 03, 2026 N/A pytest>=7.0 :pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1 :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 @@ -546,7 +547,7 @@ This list contains 1926 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Mar 02, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 01, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest @@ -683,6 +684,7 @@ This list contains 1926 plugins. :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 10, 2026 N/A pytest>=7.0 :pypi:`pytest-fixedpoint` Pytest plugin for recording and replaying deterministic function calls Mar 12, 2026 N/A pytest>=7.0 + :pypi:`pytest-fixkit` A very micro http framework. Apr 02, 2026 5 - Production/Stable pytest :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A @@ -758,7 +760,7 @@ This list contains 1926 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Mar 26, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 02, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -788,7 +790,7 @@ This list contains 1926 plugins. :pypi:`pytest-greener` Pytest plugin for Greener Dec 24, 2025 N/A pytest<9.0.0,>=8.3.3 :pypi:`pytest-green-light` Pytest plugin that gives SQLAlchemy async engines the green light - automatically fixes MissingGreenlet errors Nov 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-greet` Oct 21, 2025 N/A N/A - :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Mar 28, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-gremlins` Fast-first mutation testing for pytest. Let the gremlins loose, see which ones survive. Apr 03, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-group-by-class` A Pytest plugin for running a subset of your tests by splitting them in to groups of classes. Jun 27, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-growl` Growl notifications for pytest results. Jan 13, 2014 5 - Production/Stable N/A :pypi:`pytest-grpc` pytest plugin for grpc May 01, 2020 N/A pytest (>=3.6.0) @@ -814,8 +816,8 @@ This list contains 1926 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 25, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Mar 28, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 04, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 04, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -830,9 +832,9 @@ This list contains 1926 plugins. :pypi:`pytest-html-dashboard` Beautiful dashboard-style HTML reports for pytest with charts, error analysis, and visual insights Nov 24, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-html-lee` optimized pytest plugin for generating HTML reports Jun 30, 2020 5 - Production/Stable pytest (>=5.0) :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A - :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Nov 05, 2025 N/A N/A + :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Mar 30, 2026 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Feb 06, 2026 N/A N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Apr 04, 2026 4 - Beta N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A @@ -841,13 +843,14 @@ This list contains 1926 plugins. :pypi:`pytest-htmlx` Custom HTML report plugin for Pytest with charts and tables Sep 09, 2025 4 - Beta pytest :pypi:`pytest-http` Fixture "http" for http requests Aug 22, 2024 N/A pytest :pypi:`pytest-httpbin` Easily test your HTTP library against a local copy of httpbin Sep 18, 2024 5 - Production/Stable pytest; extra == "test" - :pypi:`pytest-httpchain` pytest plugin for HTTP testing using JSON files Jan 09, 2026 5 - Production/Stable N/A - :pypi:`pytest-httpchain-jsonref` JSON reference ($ref) support for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-mcp` MCP server for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-models` Pydantic models for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-templates` Templating support for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpchain-userfunc` User functions support for pytest-httpchain Jan 09, 2026 N/A N/A - :pypi:`pytest-httpdbg` A pytest plugin to record HTTP(S) requests with stack trace. Oct 26, 2025 4 - Beta pytest>=7.0.0 + :pypi:`pytest-httpchain` pytest plugin for HTTP testing using JSON files Apr 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-httpchain-core` Shared base types for pytest-httpchain Apr 02, 2026 N/A N/A + :pypi:`pytest-httpchain-jsonref` JSON reference ($ref) support for pytest-httpchain Apr 02, 2026 N/A N/A + :pypi:`pytest-httpchain-mcp` MCP server for pytest-httpchain Apr 02, 2026 N/A N/A + :pypi:`pytest-httpchain-models` Pydantic models for pytest-httpchain Apr 02, 2026 N/A N/A + :pypi:`pytest-httpchain-templates` Templating support for pytest-httpchain Apr 02, 2026 N/A N/A + :pypi:`pytest-httpchain-userfunc` User functions support for pytest-httpchain Apr 02, 2026 N/A N/A + :pypi:`pytest-httpdbg` A pytest plugin to record HTTP(S) requests with stack trace. Mar 29, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-http-mocker` Pytest plugin for http mocking (via https://github.com/vilus/mocker) Oct 20, 2019 N/A N/A :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Feb 14, 2026 3 - Alpha N/A @@ -938,17 +941,17 @@ This list contains 1926 plugins. :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. Feb 02, 2026 5 - Production/Stable pytest :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) - :pypi:`pytest-jscov` Pytest plugin for JavaScript coverage via Playwright CDP Mar 28, 2026 N/A pytest + :pypi:`pytest-jscov` Pytest plugin for JavaScript coverage via Playwright CDP Apr 04, 2026 N/A pytest :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A - :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Dec 28, 2025 N/A pytest>6.0.0 + :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Mar 31, 2026 N/A pytest>6.0.0 :pypi:`pytest-json-fixtures` JSON output for the --fixtures flag Mar 14, 2023 4 - Beta N/A :pypi:`pytest-jsonlint` UNKNOWN Aug 04, 2016 N/A N/A :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) :pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Jul 23, 2025 4 - Beta pytest >=3.8.0 :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Mar 08, 2026 N/A pytest + :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Mar 29, 2026 N/A pytest :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 - :pypi:`pytest-jubilant` Add your description here Mar 13, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-jubilant` Add your description here Mar 29, 2026 N/A pytest>=8.3.5 :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 @@ -958,7 +961,7 @@ This list contains 1926 plugins. :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest - :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Feb 15, 2026 N/A N/A + :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Apr 03, 2026 N/A N/A :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) @@ -991,12 +994,12 @@ This list contains 1926 plugins. :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Feb 19, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Apr 04, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Feb 27, 2026 4 - Beta pytest>=8.3.5 :pypi:`pytest-libfaketime` A python-libfaketime plugin for pytest Apr 12, 2024 4 - Beta pytest>=3.0.0 - :pypi:`pytest-libiio` A pytest plugin for testing libiio based devices Aug 15, 2025 N/A pytest>=3.5.0 + :pypi:`pytest-libiio` A pytest plugin for testing libiio based devices Apr 03, 2026 N/A pytest>=3.5.0 :pypi:`pytest-libnotify` Pytest plugin that shows notifications about the test run Apr 02, 2021 3 - Alpha pytest :pypi:`pytest-ligo` Jan 16, 2020 4 - Beta N/A :pypi:`pytest-lineno` A pytest plugin to show the line numbers of test functions Dec 04, 2020 N/A pytest @@ -1011,7 +1014,7 @@ This list contains 1926 plugins. :pypi:`pytest-liveview` Pytest plugin that shows a real-time test dashboard in a local web server Mar 09, 2026 N/A pytest>=7.0 :pypi:`pytest-llm` pytest-llm: A pytest plugin for testing LLM outputs with success rate thresholds. Oct 03, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-agent` LLM Agent for working with pytest Dec 16, 2025 N/A pytest>=9.0.2 - :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Feb 03, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Mar 31, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-llm-rubric` A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and preflight Mar 28, 2026 3 - Alpha pytest>=8 @@ -1159,7 +1162,7 @@ This list contains 1926 plugins. :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Feb 25, 2026 4 - Beta pytest<9.1.0,>=7.0.0; python_version < "3.14" - :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Mar 23, 2026 2 - Pre-Alpha pytest>=8 + :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Mar 31, 2026 3 - Alpha pytest>=8 :pypi:`pytest-ndb` pytest notebook debugger Apr 28, 2024 N/A pytest :pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0) :pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0) @@ -1194,7 +1197,7 @@ This list contains 1926 plugins. :pypi:`pytest-notion` A PyTest Reporter to send test runs to Notion.so Aug 07, 2019 N/A N/A :pypi:`pytest-nunit` A pytest plugin for generating NUnit3 test result XML output Feb 26, 2024 5 - Production/Stable N/A :pypi:`pytest-oar` PyTest plugin for the OAR testing framework May 12, 2025 N/A pytest>=6.0.1 - :pypi:`pytest-oarepo` Feb 17, 2026 N/A pytest>=7.1.2; extra == "dev" + :pypi:`pytest-oarepo` Apr 01, 2026 N/A pytest>=7.1.2; extra == "dev" :pypi:`pytest-object-getter` Import any object from a 3rd party module while mocking its namespace on demand. Jul 31, 2022 5 - Production/Stable pytest :pypi:`pytest-ochrus` pytest results data-base and HTML reporter Feb 21, 2018 4 - Beta N/A :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) @@ -1240,7 +1243,7 @@ This list contains 1926 plugins. :pypi:`pytest-param` pytest plugin to test all, first, last or random params Sep 11, 2016 4 - Beta pytest (>=2.6.0) :pypi:`pytest-parametrization` Simpler PyTest parametrization May 22, 2022 5 - Production/Stable N/A :pypi:`pytest-parametrization-annotation` A pytest library for parametrizing tests using type hints. Dec 10, 2024 5 - Production/Stable pytest>=7 - :pypi:`pytest-parametrize` pytest decorator for parametrizing test cases in a dict-way Sep 25, 2025 5 - Production/Stable pytest<9.0.0,>=8.3.0 + :pypi:`pytest-parametrize` pytest decorator for parametrizing test cases in a dict-way Apr 03, 2026 5 - Production/Stable pytest<10.0,>=8.3 :pypi:`pytest-parametrize-cases` A more user-friendly way to write parametrized tests. Mar 13, 2022 N/A pytest (>=6.1.2) :pypi:`pytest-parametrized` Pytest decorator for parametrizing tests with default iterables. Dec 21, 2024 5 - Production/Stable pytest :pypi:`pytest-parametrize-suite` A simple pytest extension for creating a named test suite. Jan 19, 2023 5 - Production/Stable pytest @@ -1289,7 +1292,7 @@ This list contains 1926 plugins. :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Mar 23, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Jan 12, 2026 5 - Production/Stable N/A + :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Apr 03, 2026 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A @@ -1300,7 +1303,7 @@ This list contains 1926 plugins. :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Apr 01, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Mar 26, 2026 N/A N/A :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A @@ -1390,7 +1393,7 @@ This list contains 1926 plugins. :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) :pypi:`pytest-qfield` A pytest plugin for testing QField qml plugins Mar 27, 2026 N/A N/A - :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Mar 25, 2026 5 - Production/Stable pytest>=6.0 + :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Apr 01, 2026 5 - Production/Stable pytest>=6.0 :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) :pypi:`pytest-qr` pytest plugin to generate test result QR codes Nov 25, 2021 4 - Beta N/A :pypi:`pytest-qt` pytest support for PyQt and PySide applications Jul 01, 2025 5 - Production/Stable pytest @@ -1460,7 +1463,7 @@ This list contains 1926 plugins. :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Mar 20, 2026 N/A pytest>=4.6.10 + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Apr 03, 2026 N/A N/A :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A :pypi:`pytest-req` pytest requests plugin Mar 02, 2026 5 - Production/Stable pytest>=8.4.2 @@ -1519,6 +1522,7 @@ This list contains 1926 plugins. :pypi:`pytest_robotframework` a pytest plugin that can run both python and robotframework tests while generating robot reports for them Dec 22, 2025 N/A pytest<10,>=7 :pypi:`pytest-rocketchat` Pytest to Rocket.Chat reporting plugin Apr 18, 2021 5 - Production/Stable N/A :pypi:`pytest-rotest` Pytest integration with rotest Sep 08, 2019 N/A pytest (>=3.5.0) + :pypi:`pytest-route-coverage` pytest plugin to generate reports on routes coverage for web applications. Apr 02, 2026 N/A pytest>=7.2.2 :pypi:`pytest-routes` Property-based smoke testing for ASGI application routes Dec 01, 2025 3 - Alpha pytest>=7.0 :pypi:`pytest-rpc` Extend py.test for RPC OpenStack testing. Feb 22, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-r-snapshot` A pytest plugin for snapshot testing against R code outputs Jan 02, 2026 3 - Alpha pytest>=7.0.0 @@ -1546,7 +1550,7 @@ This list contains 1926 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Mar 26, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 01, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1559,7 +1563,7 @@ This list contains 1926 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Mar 26, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 01, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1582,7 +1586,7 @@ This list contains 1926 plugins. :pypi:`pytest-setupinfo` Displaying setup info during pytest command run Jan 23, 2023 N/A N/A :pypi:`pytest-sftpserver` py.test plugin to locally test sftp server connections. Sep 16, 2019 4 - Beta N/A :pypi:`pytest-shard` Dec 11, 2020 4 - Beta pytest - :pypi:`pytest-shard-cloudc` Shard tests to support parallelism across multiple machines. Mar 28, 2026 4 - Beta pytest + :pypi:`pytest-shard-cloudc` Shard tests to support parallelism across multiple machines. Apr 02, 2026 4 - Beta pytest :pypi:`pytest-shard-fork` Shard tests to support parallelism across multiple machines Jun 13, 2025 4 - Beta pytest :pypi:`pytest-shared-session-scope` Pytest session-scoped fixture that works with xdist Oct 31, 2025 N/A pytest>=7.0.0 :pypi:`pytest-share-hdf` Plugin to save test data in HDF files and retrieve them for comparison Sep 21, 2022 4 - Beta pytest (>=3.5.0) @@ -1600,7 +1604,7 @@ This list contains 1926 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 23, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 31, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1638,7 +1642,7 @@ This list contains 1926 plugins. :pypi:`pytest-soft-assertions` May 05, 2020 3 - Alpha pytest :pypi:`pytest-solidity` A PyTest library plugin for Solidity language. Jan 15, 2022 1 - Planning pytest (<7,>=6.0.1) ; extra == 'tests' :pypi:`pytest-solr` Solr process and client fixtures for py.test. May 11, 2020 3 - Alpha pytest (>=3.0.0) - :pypi:`pytest-sort` Tools for sorting test cases Mar 22, 2025 N/A pytest>=7.4.0 + :pypi:`pytest-sort` Tools for sorting test cases Apr 04, 2026 N/A pytest>=7.4.0 :pypi:`pytest-sorter` A simple plugin to first execute tests that historically failed more Apr 20, 2021 4 - Beta pytest (>=3.1.1) :pypi:`pytest-sosu` Unofficial PyTest plugin for Sauce Labs Aug 04, 2023 2 - Pre-Alpha pytest :pypi:`pytest-sourceorder` Test-ordering plugin for pytest Sep 01, 2021 4 - Beta pytest @@ -1659,7 +1663,7 @@ This list contains 1926 plugins. :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Mar 27, 2026 N/A pytest<8,>5.4.0 + :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Apr 01, 2026 N/A pytest<8,>5.4.0 :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Mar 25, 2026 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A @@ -1955,7 +1959,6 @@ This list contains 1926 plugins. :pypi:`pytest-zephyr-scale-integration` A library for integrating Jira Zephyr Scale (Adaptavist\TM4J) with pytest Jun 26, 2025 N/A pytest :pypi:`pytest-zephyr-telegram` Плагин для отправки данных автотестов в Телеграм и Зефир Sep 30, 2024 N/A pytest==8.3.2 :pypi:`pytest-zest` Zesty additions to pytest. Nov 17, 2022 N/A N/A - :pypi:`pytest-zhongwen-wendang` PyTest 中文文档 Mar 04, 2024 4 - Beta N/A :pypi:`pytest-zigzag` Extend py.test for RPC OpenStack testing. Feb 27, 2019 4 - Beta pytest (~=3.6) :pypi:`pytest-zulip` Pytest report plugin for Zulip May 07, 2022 5 - Production/Stable pytest :pypi:`pytest-zy` 接口自动化测试框架 Mar 24, 2024 N/A pytest~=7.2.0 @@ -1980,7 +1983,7 @@ This list contains 1926 plugins. Simple but powerful assertion and verification of logged lines :pypi:`logot` - *last release*: Feb 22, 2026, + *last release*: Mar 31, 2026, *status*: 5 - Production/Stable, *requires*: pytest<10,>=7; extra == "pytest" @@ -2112,6 +2115,13 @@ This list contains 1926 plugins. Pytest plugin for evaluating AI Agents + :pypi:`pytest-agent-health` + *last release*: Apr 03, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. + :pypi:`pytest-agents` *last release*: Feb 20, 2026, *status*: 3 - Alpha, @@ -2231,13 +2241,6 @@ This list contains 1926 plugins. - :pypi:`pytest-aitest` - *last release*: Feb 20, 2026, - *status*: 3 - Alpha, - *requires*: pytest>=9.0 - - Pytest plugin for testing AI agents with MCP and CLI servers - :pypi:`pytest-alembic` *last release*: May 27, 2025, *status*: N/A, @@ -2379,7 +2382,7 @@ This list contains 1926 plugins. Pytest plugin to allow use of Annotated in tests to resolve fixtures :pypi:`pytest-ansible` - *last release*: Feb 24, 2026, + *last release*: Apr 01, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6 @@ -2617,7 +2620,7 @@ This list contains 1926 plugins. test Answer Set Programming programs :pypi:`pytest-assay` - *last release*: Mar 04, 2026, + *last release*: Mar 30, 2026, *status*: 4 - Beta, *requires*: N/A @@ -3121,7 +3124,7 @@ This list contains 1926 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Mar 24, 2026, + *last release*: Apr 03, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3519,6 +3522,13 @@ This list contains 1926 plugins. A minimal pytest plugin that streamlines testing for projects using the Canvas SDK. + :pypi:`pytest-capquery` + *last release*: Apr 04, 2026, + *status*: N/A, + *requires*: pytest + + A pytest fixture for high-precision SQL testing in SQLAlchemy. + :pypi:`pytest-caprng` *last release*: May 02, 2018, *status*: 4 - Beta, @@ -3912,7 +3922,7 @@ This list contains 1926 plugins. A set of pytest fixtures to help with integration testing with Clerk. :pypi:`pytest-clerk-mock` - *last release*: Mar 14, 2026, + *last release*: Apr 01, 2026, *status*: N/A, *requires*: N/A @@ -4079,13 +4089,6 @@ This list contains 1926 plugins. pytest plugin to run pycodestyle - :pypi:`pytest-codingagents` - *last release*: Feb 20, 2026, - *status*: 3 - Alpha, - *requires*: pytest>=9.0 - - Pytest plugin for testing real coding agents via their SDK - :pypi:`pytest-codspeed` *last release*: Feb 09, 2026, *status*: 5 - Production/Stable, @@ -4185,7 +4188,7 @@ This list contains 1926 plugins. pytest plugin for comparing call arguments. :pypi:`pytest-concurrency` - *last release*: Mar 26, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -4555,6 +4558,13 @@ This list contains 1926 plugins. + :pypi:`pytest-dag` + *last release*: Apr 03, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin that enforces test execution order via a dependency DAG + :pypi:`pytest-darker` *last release*: Feb 25, 2024, *status*: N/A, @@ -5550,7 +5560,7 @@ This list contains 1926 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Mar 02, 2026, + *last release*: Apr 01, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -6508,6 +6518,13 @@ This list contains 1926 plugins. Pytest plugin for recording and replaying deterministic function calls + :pypi:`pytest-fixkit` + *last release*: Apr 02, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest + + A very micro http framework. + :pypi:`pytest-fixture-cache` *last release*: Jan 25, 2026, *status*: 4 - Beta, @@ -7034,7 +7051,7 @@ This list contains 1926 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Mar 26, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7244,7 +7261,7 @@ This list contains 1926 plugins. :pypi:`pytest-gremlins` - *last release*: Mar 28, 2026, + *last release*: Apr 03, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -7426,14 +7443,14 @@ This list contains 1926 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Mar 25, 2026, + *last release*: Apr 04, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Mar 28, 2026, + *last release*: Apr 04, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7538,7 +7555,7 @@ This list contains 1926 plugins. Pytest HTML reports merging utility :pypi:`pytest-html-nova-act` - *last release*: Nov 05, 2025, + *last release*: Mar 30, 2026, *status*: N/A, *requires*: N/A @@ -7552,8 +7569,8 @@ This list contains 1926 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Feb 06, 2026, - *status*: N/A, + *last release*: Apr 04, 2026, + *status*: 4 - Beta, *requires*: N/A Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. @@ -7615,49 +7632,56 @@ This list contains 1926 plugins. Easily test your HTTP library against a local copy of httpbin :pypi:`pytest-httpchain` - *last release*: Jan 09, 2026, + *last release*: Apr 02, 2026, *status*: 5 - Production/Stable, *requires*: N/A pytest plugin for HTTP testing using JSON files + :pypi:`pytest-httpchain-core` + *last release*: Apr 02, 2026, + *status*: N/A, + *requires*: N/A + + Shared base types for pytest-httpchain + :pypi:`pytest-httpchain-jsonref` - *last release*: Jan 09, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: N/A JSON reference ($ref) support for pytest-httpchain :pypi:`pytest-httpchain-mcp` - *last release*: Jan 09, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: N/A MCP server for pytest-httpchain :pypi:`pytest-httpchain-models` - *last release*: Jan 09, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: N/A Pydantic models for pytest-httpchain :pypi:`pytest-httpchain-templates` - *last release*: Jan 09, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: N/A Templating support for pytest-httpchain :pypi:`pytest-httpchain-userfunc` - *last release*: Jan 09, 2026, + *last release*: Apr 02, 2026, *status*: N/A, *requires*: N/A User functions support for pytest-httpchain :pypi:`pytest-httpdbg` - *last release*: Oct 26, 2025, + *last release*: Mar 29, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -8294,7 +8318,7 @@ This list contains 1926 plugins. Test failures are better served with humor. :pypi:`pytest-jscov` - *last release*: Mar 28, 2026, + *last release*: Apr 04, 2026, *status*: N/A, *requires*: pytest @@ -8308,7 +8332,7 @@ This list contains 1926 plugins. Generate JSON test reports :pypi:`pytest-json-ctrf` - *last release*: Dec 28, 2025, + *last release*: Mar 31, 2026, *status*: N/A, *requires*: pytest>6.0.0 @@ -8350,7 +8374,7 @@ This list contains 1926 plugins. A pytest plugin to perform JSONSchema validations :pypi:`pytest-jsonschema-snapshot` - *last release*: Mar 08, 2026, + *last release*: Mar 29, 2026, *status*: N/A, *requires*: pytest @@ -8364,7 +8388,7 @@ This list contains 1926 plugins. pytest plugin supporting json test report output :pypi:`pytest-jubilant` - *last release*: Mar 13, 2026, + *last release*: Mar 29, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -8434,7 +8458,7 @@ This list contains 1926 plugins. Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest :pypi:`pytest-kafka-broker` - *last release*: Feb 15, 2026, + *last release*: Apr 03, 2026, *status*: N/A, *requires*: N/A @@ -8665,7 +8689,7 @@ This list contains 1926 plugins. A simple plugin to use with pytest :pypi:`pytest-leela` - *last release*: Feb 19, 2026, + *last release*: Apr 04, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 @@ -8700,7 +8724,7 @@ This list contains 1926 plugins. A python-libfaketime plugin for pytest :pypi:`pytest-libiio` - *last release*: Aug 15, 2025, + *last release*: Apr 03, 2026, *status*: N/A, *requires*: pytest>=3.5.0 @@ -8805,7 +8829,7 @@ This list contains 1926 plugins. LLM Agent for working with pytest :pypi:`pytest-llm-assert` - *last release*: Feb 03, 2026, + *last release*: Mar 31, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -9841,8 +9865,8 @@ This list contains 1926 plugins. Use notebooks as pytests. Keep your notebooks working. :pypi:`pytest-nbgrader` - *last release*: Mar 23, 2026, - *status*: 2 - Pre-Alpha, + *last release*: Mar 31, 2026, + *status*: 3 - Alpha, *requires*: pytest>=8 Pytest plugin for using with nbgrader and generating test cases. @@ -10086,7 +10110,7 @@ This list contains 1926 plugins. PyTest plugin for the OAR testing framework :pypi:`pytest-oarepo` - *last release*: Feb 17, 2026, + *last release*: Apr 01, 2026, *status*: N/A, *requires*: pytest>=7.1.2; extra == "dev" @@ -10408,9 +10432,9 @@ This list contains 1926 plugins. A pytest library for parametrizing tests using type hints. :pypi:`pytest-parametrize` - *last release*: Sep 25, 2025, + *last release*: Apr 03, 2026, *status*: 5 - Production/Stable, - *requires*: pytest<9.0.0,>=8.3.0 + *requires*: pytest<10.0,>=8.3 pytest decorator for parametrizing test cases in a dict-way @@ -10751,7 +10775,7 @@ This list contains 1926 plugins. A pytest wrapper with async fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-axe` - *last release*: Jan 12, 2026, + *last release*: Apr 03, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -10828,7 +10852,7 @@ This list contains 1926 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Feb 07, 2026, + *last release*: Apr 01, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -11458,7 +11482,7 @@ This list contains 1926 plugins. A pytest plugin for testing QField qml plugins :pypi:`pytest-qgis` - *last release*: Mar 25, 2026, + *last release*: Apr 01, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=6.0 @@ -11948,9 +11972,9 @@ This list contains 1926 plugins. pytest plugin for adding tests' parameters to junit report :pypi:`pytest-reportportal` - *last release*: Mar 20, 2026, + *last release*: Apr 03, 2026, *status*: N/A, - *requires*: pytest>=4.6.10 + *requires*: N/A Agent for Reporting results of tests to the Report Portal @@ -12360,6 +12384,13 @@ This list contains 1926 plugins. Pytest integration with rotest + :pypi:`pytest-route-coverage` + *last release*: Apr 02, 2026, + *status*: N/A, + *requires*: pytest>=7.2.2 + + pytest plugin to generate reports on routes coverage for web applications. + :pypi:`pytest-routes` *last release*: Dec 01, 2025, *status*: 3 - Alpha, @@ -12550,7 +12581,7 @@ This list contains 1926 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Mar 26, 2026, + *last release*: Apr 01, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12641,7 +12672,7 @@ This list contains 1926 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Mar 26, 2026, + *last release*: Apr 01, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12802,7 +12833,7 @@ This list contains 1926 plugins. :pypi:`pytest-shard-cloudc` - *last release*: Mar 28, 2026, + *last release*: Apr 02, 2026, *status*: 4 - Beta, *requires*: pytest @@ -12928,7 +12959,7 @@ This list contains 1926 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Mar 23, 2026, + *last release*: Mar 31, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13194,7 +13225,7 @@ This list contains 1926 plugins. Solr process and client fixtures for py.test. :pypi:`pytest-sort` - *last release*: Mar 22, 2025, + *last release*: Apr 04, 2026, *status*: N/A, *requires*: pytest>=7.4.0 @@ -13341,7 +13372,7 @@ This list contains 1926 plugins. Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. :pypi:`pytest-splunk-addon` - *last release*: Mar 27, 2026, + *last release*: Apr 01, 2026, *status*: N/A, *requires*: pytest<8,>5.4.0 @@ -15412,13 +15443,6 @@ This list contains 1926 plugins. Zesty additions to pytest. - :pypi:`pytest-zhongwen-wendang` - *last release*: Mar 04, 2024, - *status*: 4 - Beta, - *requires*: N/A - - PyTest 中文文档 - :pypi:`pytest-zigzag` *last release*: Feb 27, 2019, *status*: 4 - Beta, From 3e39c0ae5397a971544e5496dd64a2839f1da6c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 07:14:07 +0200 Subject: [PATCH 230/307] build(deps): Bump codecov/codecov-action from 5.5.2 to 6.0.0 (#14353) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.2 to 6.0.0. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/671740ac38dd9b0130fbe1cec585b89eea48d3de...57e3a136b779b570ffcdbf80b3bdc90e7fab3de2) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b37f64c458f..7c69cb02cc6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -290,14 +290,14 @@ jobs: - name: Upload coverage to Codecov if: "matrix.use_coverage" - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 with: fail_ci_if_error: false files: ./coverage.xml verbose: true - name: Upload JUnit report to Codecov - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 with: fail_ci_if_error: false files: junit.xml From 728652641b378bb6ff31843698e562fc45536634 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 07:14:46 +0200 Subject: [PATCH 231/307] build(deps): Bump anyio in /testing/plugins_integration (#14352) Bumps [anyio](https://github.com/agronholm/anyio) from 4.12.1 to 4.13.0. - [Release notes](https://github.com/agronholm/anyio/releases) - [Commits](https://github.com/agronholm/anyio/compare/4.12.1...4.13.0) --- updated-dependencies: - dependency-name: anyio dependency-version: 4.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index af665b28dca..bd44e659721 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,4 +1,4 @@ -anyio[trio]==4.12.1 +anyio[trio]==4.13.0 django==6.0.3 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 From f0554edaddd091fd93716aaf8c8d94dc101d8b0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 07:45:18 -0300 Subject: [PATCH 232/307] build(deps): Bump hynek/build-and-inspect-python-package (#14354) Bumps [hynek/build-and-inspect-python-package](https://github.com/hynek/build-and-inspect-python-package) from 2.14.0 to 2.17.0. - [Release notes](https://github.com/hynek/build-and-inspect-python-package/releases) - [Changelog](https://github.com/hynek/build-and-inspect-python-package/blob/main/CHANGELOG.md) - [Commits](https://github.com/hynek/build-and-inspect-python-package/compare/efb823f52190ad02594531168b7a2d5790e66516...fe0a0fb1925ca263d076ca4f2c13e93a6e92a33e) --- updated-dependencies: - dependency-name: hynek/build-and-inspect-python-package dependency-version: 2.17.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index dd3f2a1eafc..7169014f518 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -31,7 +31,7 @@ jobs: persist-credentials: false - name: Build and Check Package - uses: hynek/build-and-inspect-python-package@efb823f52190ad02594531168b7a2d5790e66516 + uses: hynek/build-and-inspect-python-package@fe0a0fb1925ca263d076ca4f2c13e93a6e92a33e with: attest-build-provenance-github: 'true' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7c69cb02cc6..3f3334b0bd4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,7 @@ jobs: fetch-depth: 0 persist-credentials: false - name: Build and Check Package - uses: hynek/build-and-inspect-python-package@efb823f52190ad02594531168b7a2d5790e66516 + uses: hynek/build-and-inspect-python-package@fe0a0fb1925ca263d076ca4f2c13e93a6e92a33e build: needs: [package] From c23393a20a36443789d5daf7a9e793b60af38f8a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 15:10:40 +0000 Subject: [PATCH 233/307] Merge pull request #14360 from pytest-dev/pre-commit-ci-update-config [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 4 ++-- src/_pytest/raises.py | 3 +-- testing/code/test_code.py | 4 ++-- testing/code/test_excinfo.py | 2 +- testing/test_capture.py | 2 +- testing/test_collection.py | 1 + 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e3c0cdaca75..3da6a52e66a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.8" + rev: "v0.15.9" hooks: - id: ruff-check args: ["--fix"] @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.19.1 + rev: v1.20.0 hooks: - id: mypy files: ^(src/|testing/|scripts/) diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 75eea7d8cc9..76199e3df02 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -1482,8 +1482,7 @@ def set_result(self, expected: int, actual: int, result: str | None) -> None: def get_result(self, expected: int, actual: int) -> str | None: res = self.results[actual][expected] assert res is not NotChecked - # mypy doesn't support identity checking against anything but None - return res # type: ignore[return-value] + return res def has_result(self, expected: int, actual: int) -> bool: return self.results[actual][expected] is not NotChecked diff --git a/testing/code/test_code.py b/testing/code/test_code.py index ae5e0e949cf..63f6031e396 100644 --- a/testing/code/test_code.py +++ b/testing/code/test_code.py @@ -148,7 +148,7 @@ class TestExceptionInfo: def test_bad_getsource(self) -> None: try: if False: - pass + pass # type: ignore[unreachable] else: assert False except AssertionError: @@ -164,7 +164,7 @@ class TestTracebackEntry: def test_getsource(self) -> None: try: if False: - pass + pass # type: ignore[unreachable] else: assert False except AssertionError: diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index 70499fec893..9998ad1b141 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -768,7 +768,7 @@ def func1(m): reprfuncargs = p.repr_args(entry) assert reprfuncargs is not None assert reprfuncargs.args[0] == ("m", repr("m" * 500)) - assert "..." not in cast(str, reprfuncargs.args[0][1]) + assert "..." not in reprfuncargs.args[0][1] def test_repr_tracebackentry_lines(self, importasmod) -> None: mod = importasmod( diff --git a/testing/test_capture.py b/testing/test_capture.py index 11fd18f08ff..88368fadaae 100644 --- a/testing/test_capture.py +++ b/testing/test_capture.py @@ -920,7 +920,7 @@ def test_dontreadfrominput() -> None: f = DontReadFromInput() assert f.buffer is f # type: ignore[comparison-overlap] - assert not f.isatty() + assert not f.isatty() # type: ignore[unreachable] pytest.raises(OSError, f.read) pytest.raises(OSError, f.readlines) iter_f = iter(f) diff --git a/testing/test_collection.py b/testing/test_collection.py index f83bfd9a712..093162ddec4 100644 --- a/testing/test_collection.py +++ b/testing/test_collection.py @@ -84,6 +84,7 @@ def test_foo(self): assert isinstance(fn, pytest.Function) assert fn.getparent(pytest.Module) is modcol + assert modcol is not None assert modcol.module is not None assert modcol.cls is None assert modcol.instance is None From 94fc487b964fd11763b57765ce9666c9c2d376a4 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 7 Apr 2026 20:16:51 +0300 Subject: [PATCH 234/307] Merge pull request #14367 from pytest-dev/release-9.0.3 Release 9.0.3 (cherry picked from commit 4afcd4906b9cf4468dc9ca8cf7c53126e190d008) --- changelog/12444.bugfix.rst | 1 - changelog/12689.contrib.rst | 5 --- changelog/13388.doc.rst | 1 - changelog/13634.bugfix.rst | 5 --- changelog/13731.doc.rst | 1 - changelog/13734.bugfix.rst | 1 - changelog/14088.doc.rst | 1 - changelog/14195.bugfix.rst | 1 - changelog/14255.doc.rst | 1 - changelog/14343.bugfix.rst | 1 - doc/en/announce/index.rst | 1 + doc/en/announce/release-9.0.3.rst | 38 +++++++++++++++++++++ doc/en/builtin.rst | 4 +-- doc/en/changelog.rst | 52 +++++++++++++++++++++++++++++ doc/en/example/parametrize.rst | 6 ++-- doc/en/example/pythoncollection.rst | 4 +-- doc/en/getting-started.rst | 2 +- doc/en/how-to/fixtures.rst | 2 +- 18 files changed, 100 insertions(+), 27 deletions(-) delete mode 100644 changelog/12444.bugfix.rst delete mode 100644 changelog/12689.contrib.rst delete mode 100644 changelog/13388.doc.rst delete mode 100644 changelog/13634.bugfix.rst delete mode 100644 changelog/13731.doc.rst delete mode 100644 changelog/13734.bugfix.rst delete mode 100644 changelog/14088.doc.rst delete mode 100644 changelog/14195.bugfix.rst delete mode 100644 changelog/14255.doc.rst delete mode 100644 changelog/14343.bugfix.rst create mode 100644 doc/en/announce/release-9.0.3.rst diff --git a/changelog/12444.bugfix.rst b/changelog/12444.bugfix.rst deleted file mode 100644 index d4e804ac613..00000000000 --- a/changelog/12444.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed :func:`pytest.approx` which now correctly takes into account :class:`~collections.abc.Mapping` keys order to compare them. diff --git a/changelog/12689.contrib.rst b/changelog/12689.contrib.rst deleted file mode 100644 index 81bb5577d97..00000000000 --- a/changelog/12689.contrib.rst +++ /dev/null @@ -1,5 +0,0 @@ -The test reports are now published to Codecov from GitHub Actions. -The test statistics is visible `on the web interface -`__. - --- by :user:`aleguy02` diff --git a/changelog/13388.doc.rst b/changelog/13388.doc.rst deleted file mode 100644 index bade402a60d..00000000000 --- a/changelog/13388.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Clarified documentation for ``-p`` vs ``PYTEST_PLUGINS`` plugin loading and fixed an incorrect ``-p`` example. diff --git a/changelog/13634.bugfix.rst b/changelog/13634.bugfix.rst deleted file mode 100644 index ee12aeafc3a..00000000000 --- a/changelog/13634.bugfix.rst +++ /dev/null @@ -1,5 +0,0 @@ -Blocking a ``conftest.py`` file using the ``-p no:`` option is now explicitly disallowed. - -Previously this resulted in an internal assertion failure during plugin loading. - -Pytest now raises a clear ``UsageError`` explaining that conftest files are not plugins and cannot be disabled via ``-p``. diff --git a/changelog/13731.doc.rst b/changelog/13731.doc.rst deleted file mode 100644 index 0cfdbebfc40..00000000000 --- a/changelog/13731.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Clarified that capture fixtures (e.g. ``capsys`` and ``capfd``) take precedence over the ``-s`` / ``--capture=no`` command-line options in :ref:`Accessing captured output from a test function `. diff --git a/changelog/13734.bugfix.rst b/changelog/13734.bugfix.rst deleted file mode 100644 index de1d7368cd4..00000000000 --- a/changelog/13734.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed crash when a test raises an exceptiongroup with ``__tracebackhide__ = True``. diff --git a/changelog/14088.doc.rst b/changelog/14088.doc.rst deleted file mode 100644 index 3f3a0963516..00000000000 --- a/changelog/14088.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Clarified that the default :hook:`pytest_collection` hook sets ``session.items`` before it calls :hook:`pytest_collection_finish`, not after. diff --git a/changelog/14195.bugfix.rst b/changelog/14195.bugfix.rst deleted file mode 100644 index 29ae149dd98..00000000000 --- a/changelog/14195.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed an issue where non-string messages passed to `unittest.TestCase.subTest()` were not printed. diff --git a/changelog/14255.doc.rst b/changelog/14255.doc.rst deleted file mode 100644 index b96d2c2a1b9..00000000000 --- a/changelog/14255.doc.rst +++ /dev/null @@ -1 +0,0 @@ -TOML integer log levels must be quoted: Updating reference documentation. diff --git a/changelog/14343.bugfix.rst b/changelog/14343.bugfix.rst deleted file mode 100644 index a52028d9f86..00000000000 --- a/changelog/14343.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed use of insecure temporary directory (CVE-2025-71176). diff --git a/doc/en/announce/index.rst b/doc/en/announce/index.rst index b92b8d4a56b..4a5e8b86544 100644 --- a/doc/en/announce/index.rst +++ b/doc/en/announce/index.rst @@ -6,6 +6,7 @@ Release announcements :maxdepth: 2 + release-9.0.3 release-9.0.2 release-9.0.1 release-9.0.0 diff --git a/doc/en/announce/release-9.0.3.rst b/doc/en/announce/release-9.0.3.rst new file mode 100644 index 00000000000..c9540218764 --- /dev/null +++ b/doc/en/announce/release-9.0.3.rst @@ -0,0 +1,38 @@ +pytest-9.0.3 +======================================= + +pytest 9.0.3 has just been released to PyPI. + +This is a bug-fix release, being a drop-in replacement. + +The full changelog is available at https://docs.pytest.org/en/stable/changelog.html. + +Thanks to all of the contributors to this release: + +* Aditya Giri +* Alejandro Villate +* Bruno Oliveira +* Bubble-Interface +* Charles-Meldhine Madi Mnemoi +* DavidAG +* Denis Cherednichenko +* Dr Alex Mitre +* Freya +* Freya Bruhin +* Hugo van Kemenade +* John Litborn +* Liam DeVoe +* Lily Wu +* Maxime Grenu +* Ran Benita +* Randy Döring +* Ronald Eddy Jr +* Samuel Newbold +* Tejas Verma +* Vladimir +* jxramos +* 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) + + +Happy testing, +The pytest Development Team diff --git a/doc/en/builtin.rst b/doc/en/builtin.rst index 6a96bb0a304..9d38b329454 100644 --- a/doc/en/builtin.rst +++ b/doc/en/builtin.rst @@ -257,10 +257,10 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a subtests -- .../_pytest/subtests.py:129 Provides subtests functionality. - tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:243 + tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:265 Return a :class:`pytest.TempPathFactory` instance for the test session. - tmp_path -- .../_pytest/tmpdir.py:258 + tmp_path -- .../_pytest/tmpdir.py:280 Return a temporary directory (as :class:`pathlib.Path` object) which is unique to each test function invocation. The temporary directory is created as a subdirectory diff --git a/doc/en/changelog.rst b/doc/en/changelog.rst index e33a68a5015..6b1793bd503 100644 --- a/doc/en/changelog.rst +++ b/doc/en/changelog.rst @@ -31,6 +31,58 @@ with advance notice in the **Deprecations** section of releases. .. towncrier release notes start +pytest 9.0.3 (2026-04-07) +========================= + +Bug fixes +--------- + +- `#12444 `_: Fixed :func:`pytest.approx` which now correctly takes into account :class:`~collections.abc.Mapping` keys order to compare them. + + +- `#13634 `_: Blocking a ``conftest.py`` file using the ``-p no:`` option is now explicitly disallowed. + + Previously this resulted in an internal assertion failure during plugin loading. + + Pytest now raises a clear ``UsageError`` explaining that conftest files are not plugins and cannot be disabled via ``-p``. + + +- `#13734 `_: Fixed crash when a test raises an exceptiongroup with ``__tracebackhide__ = True``. + + +- `#14195 `_: Fixed an issue where non-string messages passed to `unittest.TestCase.subTest()` were not printed. + + +- `#14343 `_: Fixed use of insecure temporary directory (CVE-2025-71176). + + + +Improved documentation +---------------------- + +- `#13388 `_: Clarified documentation for ``-p`` vs ``PYTEST_PLUGINS`` plugin loading and fixed an incorrect ``-p`` example. + + +- `#13731 `_: Clarified that capture fixtures (e.g. ``capsys`` and ``capfd``) take precedence over the ``-s`` / ``--capture=no`` command-line options in :ref:`Accessing captured output from a test function `. + + +- `#14088 `_: Clarified that the default :hook:`pytest_collection` hook sets ``session.items`` before it calls :hook:`pytest_collection_finish`, not after. + + +- `#14255 `_: TOML integer log levels must be quoted: Updating reference documentation. + + + +Contributor-facing changes +-------------------------- + +- `#12689 `_: The test reports are now published to Codecov from GitHub Actions. + The test statistics is visible `on the web interface + `__. + + -- by :user:`aleguy02` + + pytest 9.0.2 (2025-12-06) ========================= diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index b25b822618a..ae64a7c62d5 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -162,7 +162,7 @@ objects, they are still using the default pytest representation: rootdir: /home/sweet/project collected 8 items - + @@ -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 - + @@ -318,7 +318,7 @@ Let's first see how it looks like at collection time: rootdir: /home/sweet/project collected 2 items - + diff --git a/doc/en/example/pythoncollection.rst b/doc/en/example/pythoncollection.rst index 26fdb68b08f..48ee2c8533f 100644 --- a/doc/en/example/pythoncollection.rst +++ b/doc/en/example/pythoncollection.rst @@ -142,7 +142,7 @@ The test collection would look like this: configfile: pytest.toml collected 2 items - + @@ -205,7 +205,7 @@ You can always peek at the collection tree without running tests like this: configfile: pytest.toml collected 3 items - + diff --git a/doc/en/getting-started.rst b/doc/en/getting-started.rst index 3ba30a90b34..76a4428c163 100644 --- a/doc/en/getting-started.rst +++ b/doc/en/getting-started.rst @@ -20,7 +20,7 @@ Install ``pytest`` .. code-block:: bash $ pytest --version - pytest 9.0.2 + pytest 9.0.3 .. _`simpletest`: diff --git a/doc/en/how-to/fixtures.rst b/doc/en/how-to/fixtures.rst index 991256e7473..35e4a02a69f 100644 --- a/doc/en/how-to/fixtures.rst +++ b/doc/en/how-to/fixtures.rst @@ -1423,7 +1423,7 @@ Running the above tests results in the following test IDs being used: rootdir: /home/sweet/project collected 12 items - + From 5d674ca2f246f7ff612afb28ae978d07e90ee483 Mon Sep 17 00:00:00 2001 From: Sylvain MARIE Date: Wed, 8 Apr 2026 12:21:16 +0300 Subject: [PATCH 235/307] testing/python/fixtures: add xfail test for static fixture closure with overrides and parametrization Based on existing tests, just adding the parametrization. Refs #14248. --- testing/python/fixtures.py | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 38d219a547b..3f4b745d586 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -5451,6 +5451,48 @@ def test_something(self, request, app): result.assert_outcomes(passed=1) +@pytest.mark.xfail(reason="#14248 still not fixed") +def test_fixture_closure_with_overrides_and_parametrization(pytester: Pytester) -> None: + """Test that an item's static fixture closure properly includes transitive + dependencies through overridden fixtures (#13773) when also including + parametrization (#14248).""" + pytester.makeconftest( + """ + import pytest + + @pytest.fixture + def db(): pass + + @pytest.fixture + def app(db): pass + """ + ) + pytester.makepyfile( + """ + import pytest + + # Overrides conftest-level `app` and requests it. + @pytest.fixture + def app(app): pass + + class TestClass: + # Overrides module-level `app` and requests it. + @pytest.fixture + def app(self, app): pass + + @pytest.mark.parametrize("a", [1]) + def test_something(self, request, app, a): + # Both dynamic and static fixture closures should include 'db'. + assert 'db' in request.fixturenames + assert 'db' in request.node.fixturenames + # No dynamic dependencies, should be equal. + assert set(request.fixturenames) == set(request.node.fixturenames) + """ + ) + result = pytester.runpytest("-v") + result.assert_outcomes(passed=1) + + def test_fixture_closure_with_broken_override_chain(pytester: Pytester) -> None: """Test that an item's static fixture closure properly includes transitive dependencies through overridden fixtures (#13773). From 702b1a81e7ef2c853fc18db80dc3dda6330a235f Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 8 Apr 2026 12:52:56 +0300 Subject: [PATCH 236/307] testing/python/fixtures: modernize test_parametrization_setup_teardown_ordering No functional changes, just making it easier to follow. --- testing/python/fixtures.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 3f4b745d586..716dc230b94 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -2424,30 +2424,43 @@ def test_parametrization_setup_teardown_ordering(self, pytester: Pytester) -> No pytester.makepyfile( """ import pytest + values = [] + def pytest_generate_tests(metafunc): if metafunc.cls is None: assert metafunc.function is test_finish if metafunc.cls is not None: metafunc.parametrize("item", [1,2], scope="class") - class TestClass(object): + + class TestClass: @pytest.fixture(scope="class", autouse=True) - def addteardown(self, item, request): + def setup_teardown(self, item): values.append("setup-%d" % item) - request.addfinalizer(lambda: values.append("teardown-%d" % item)) + yield + values.append("teardown-%d" % item) + def test_step1(self, item): values.append("step1-%d" % item) + def test_step2(self, item): values.append("step2-%d" % item) def test_finish(): - print(values) - assert values == ["setup-1", "step1-1", "step2-1", "teardown-1", - "setup-2", "step1-2", "step2-2", "teardown-2",] - """ - ) - reprec = pytester.inline_run("-s") - reprec.assertoutcome(passed=5) + assert values == [ + "setup-1", + "step1-1", + "step2-1", + "teardown-1", + "setup-2", + "step1-2", + "step2-2", + "teardown-2", + ] + """ + ) + result = pytester.inline_run("-vv") + result.assertoutcome(passed=5) def test_ordering_autouse_before_explicit(self, pytester: Pytester) -> None: pytester.makepyfile( From c4e38858817b02b33aec103e049b16630449c46f Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 8 Apr 2026 15:15:13 +0300 Subject: [PATCH 237/307] testing/python/fixtures: rewrite test_func_closure_with_native_fixtures without monkeypatching Seems better to avoid this monkeypatch-pytest-to-smuggle-info-out-of-pytester pattern. --- testing/python/fixtures.py | 66 ++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 716dc230b94..a14ff4d6a07 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -4497,62 +4497,74 @@ def test_func(m1): request = TopRequest(items[0], _ispytest=True) assert request.fixturenames == "m1 f1".split() - def test_func_closure_with_native_fixtures( - self, pytester: Pytester, monkeypatch: MonkeyPatch - ) -> None: - """Sanity check that verifies the order returned by the closures and the actual fixture execution order: - The execution order may differ because of fixture inter-dependencies. - """ - monkeypatch.setattr(pytest, "FIXTURE_ORDER", [], raising=False) + def test_func_closure_with_native_fixtures(self, pytester: Pytester) -> None: + """Sanity check that verifies the order returned by the closures and the + actual fixture execution order: the execution order may differ because + of fixture inter-dependencies.""" pytester.makepyfile( """ import pytest - FIXTURE_ORDER = pytest.FIXTURE_ORDER + fixture_order = [] @pytest.fixture(scope="session") def s1(): - FIXTURE_ORDER.append('s1') + fixture_order.append("s1") @pytest.fixture(scope="package") def p1(): - FIXTURE_ORDER.append('p1') + fixture_order.append("p1") @pytest.fixture(scope="module") def m1(): - FIXTURE_ORDER.append('m1') + fixture_order.append("m1") - @pytest.fixture(scope='session') + @pytest.fixture(scope="session") def my_tmp_path_factory(): - FIXTURE_ORDER.append('my_tmp_path_factory') + fixture_order.append("my_tmp_path_factory") @pytest.fixture def my_tmp_path(my_tmp_path_factory): - FIXTURE_ORDER.append('my_tmp_path') + fixture_order.append("my_tmp_path") @pytest.fixture def f1(my_tmp_path): - FIXTURE_ORDER.append('f1') + fixture_order.append("f1") @pytest.fixture def f2(): - FIXTURE_ORDER.append('f2') - - def test_foo(f1, p1, m1, f2, s1): pass + fixture_order.append("f2") + + def test_foo(f1, p1, m1, f2, s1): + # Actual fixture execution differs from static order: dependent + # fixtures must be created first ("my_tmp_path"). + assert fixture_order == [ + "s1", + "my_tmp_path_factory", + "p1", + "m1", + "my_tmp_path", + "f1", + "f2", + ] """ ) items, _ = pytester.inline_genitems() assert isinstance(items[0], Function) request = TopRequest(items[0], _ispytest=True) - # order of fixtures based on their scope and position in the parameter list - assert ( - request.fixturenames - == "s1 my_tmp_path_factory p1 m1 f1 f2 my_tmp_path".split() - ) - pytester.runpytest() - # actual fixture execution differs: dependent fixtures must be created first ("my_tmp_path") - FIXTURE_ORDER = pytest.FIXTURE_ORDER # type: ignore[attr-defined] - assert FIXTURE_ORDER == "s1 my_tmp_path_factory p1 m1 my_tmp_path f1 f2".split() + # Static order of fixtures based on their scope and position in the + # parameter list. + assert request.fixturenames == [ + "s1", + "my_tmp_path_factory", + "p1", + "m1", + "f1", + "f2", + "my_tmp_path", + ] + result = pytester.runpytest("-vv") + result.assert_outcomes(passed=1) def test_func_closure_module(self, pytester: Pytester) -> None: pytester.makepyfile( From 920b9c44785662e1f073190c9848d910cd3cccf7 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 8 Apr 2026 13:18:48 +0300 Subject: [PATCH 238/307] fixtures: fix parametrization losing (static) transitive dependencies from overridden fixtures As the xfail'ed test `test_fixture_closure_with_overrides_and_parametrization` demonstrates, adding any direct parametrization causes the statically computed fixture closure to omit transitive dependencies from overridden (but still requested) fixtures. (The dynamic algorithm does get it right). The `prune_dependency_tree()` function did not account for overridden fixtures properly (only checked `-1`). Make it share the core recursive DFS traversal used by `getfixtureclosure()`, which already fixed a similar problem (#13789). An alternative solution is to replace `prune_dependency_tree` wholesale with another call to `getfixtureclosure`, as proposed in PR #11243, however it's somewhat harder to get working, so let's go with this solution for now. Fix #14248 --- changelog/14248.bugfix.rst | 1 + src/_pytest/fixtures.py | 92 ++++++++++++++++++++++++-------------- testing/python/fixtures.py | 1 - 3 files changed, 59 insertions(+), 35 deletions(-) create mode 100644 changelog/14248.bugfix.rst diff --git a/changelog/14248.bugfix.rst b/changelog/14248.bugfix.rst new file mode 100644 index 00000000000..1c8563fa954 --- /dev/null +++ b/changelog/14248.bugfix.rst @@ -0,0 +1 @@ +Fixed direct parametrization causing the static fixture closure (as reflected in :data:`request.fixturenames `) to omit fixtures that are requested transitively from overridden fixtures. diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index f667c40ea78..c25c590b7c3 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -300,6 +300,49 @@ def reorder_items_atscope( return items_done +def traverse_fixture_closure( + initialnames: Iterable[str], + *, + getfixturedefs: Callable[[str], Sequence[FixtureDef[Any]] | None], +) -> Iterator[str]: + """Statically traverse the fixture dependency closure in DFS order starting + from initialnames, yielding all requested fixture names (argnames). + + argnames may be yielded more than once. + """ + # Track the index for each fixture name in the simulated stack. + # Needed for handling override chains correctly, similar to + # FixtureRequest._get_active_fixturedef. + # Using negative indices: -1 is the most specific (last), -2 is second to + # last, etc. + current_indices: dict[str, int] = {} + + def process_argname(argname: str) -> Iterator[str]: + # Optimization: already processed this argname. + if current_indices.get(argname) == -1: + return + + yield argname + + fixturedefs = getfixturedefs(argname) + if not fixturedefs: + return + + index = current_indices.get(argname, -1) + if -index > len(fixturedefs): + # Exhausted the override chain (will error during runtest). + return + fixturedef = fixturedefs[index] + + current_indices[argname] = index - 1 + for dep in fixturedef.argnames: + yield from process_argname(dep) + current_indices[argname] = index + + for argname in initialnames: + yield from process_argname(argname) + + @dataclasses.dataclass(frozen=True) class FuncFixtureInfo: """Fixture-related information for a fixture-requesting item (e.g. test @@ -343,13 +386,12 @@ def prune_dependency_tree(self) -> None: of argnames may get reduced. """ closure: set[str] = set() - working_set = set(self.initialnames) - while working_set: - argname = working_set.pop() - if argname not in closure and argname in self.names_closure: + for argname in traverse_fixture_closure( + self.initialnames, + getfixturedefs=self.name2fixturedefs.get, + ): + if argname in self.names_closure: closure.add(argname) - if argname in self.name2fixturedefs: - working_set.update(self.name2fixturedefs[argname][-1].argnames) self.names_closure[:] = sorted(closure, key=self.names_closure.index) @@ -1708,43 +1750,25 @@ def getfixtureclosure( arg2fixturedefs: dict[str, Sequence[FixtureDef[Any]]] = {} - # Track the index for each fixture name in the simulated stack. - # Needed for handling override chains correctly, similar to _get_active_fixturedef. - # Using negative indices: -1 is the most specific (last), -2 is second to last, etc. - current_indices: dict[str, int] = {} - - def process_argname(argname: str) -> None: - # Optimization: already processed this argname. - if current_indices.get(argname) == -1: - return - - if argname not in fixturenames_closure: - fixturenames_closure.append(argname) - + def getfixturedefs(argname: str) -> Sequence[FixtureDef[Any]] | None: if argname in ignore_args: - return + return None fixturedefs = arg2fixturedefs.get(argname) if not fixturedefs: fixturedefs = self.getfixturedefs(argname, parentnode) if not fixturedefs: # Fixture not defined or not visible (will error during runtest). - return + return None arg2fixturedefs[argname] = fixturedefs + return fixturedefs - index = current_indices.get(argname, -1) - if -index > len(fixturedefs): - # Exhausted the override chain (will error during runtest). - return - fixturedef = fixturedefs[index] - - current_indices[argname] = index - 1 - for dep in fixturedef.argnames: - process_argname(dep) - current_indices[argname] = index - - for name in initialnames: - process_argname(name) + for argname in traverse_fixture_closure( + initialnames, + getfixturedefs=getfixturedefs, + ): + if argname not in fixturenames_closure: + fixturenames_closure.append(argname) def sort_by_scope(arg_name: str) -> Scope: try: diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index a14ff4d6a07..d76fd528bd8 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -5476,7 +5476,6 @@ def test_something(self, request, app): result.assert_outcomes(passed=1) -@pytest.mark.xfail(reason="#14248 still not fixed") def test_fixture_closure_with_overrides_and_parametrization(pytester: Pytester) -> None: """Test that an item's static fixture closure properly includes transitive dependencies through overridden fixtures (#13773) when also including From 8e53c6bf531c3afe8fe41687ae339cf8727c7e07 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 8 Apr 2026 14:42:32 +0300 Subject: [PATCH 239/307] fixtures: optimize a bit around `traverse_fixture_closure` Didn't include this in the previous commit, in case it causes regressions. --- src/_pytest/fixtures.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index c25c590b7c3..f7f0be96649 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -308,7 +308,7 @@ def traverse_fixture_closure( """Statically traverse the fixture dependency closure in DFS order starting from initialnames, yielding all requested fixture names (argnames). - argnames may be yielded more than once. + Each argname is only yielded once. """ # Track the index for each fixture name in the simulated stack. # Needed for handling override chains correctly, similar to @@ -318,11 +318,16 @@ def traverse_fixture_closure( current_indices: dict[str, int] = {} def process_argname(argname: str) -> Iterator[str]: + index = current_indices.get(argname) + # Optimization: already processed this argname. - if current_indices.get(argname) == -1: + if index == -1: return - yield argname + # Only yield each argname once. + if index is None: + yield argname + current_indices[argname] = -1 fixturedefs = getfixturedefs(argname) if not fixturedefs: @@ -385,15 +390,13 @@ def prune_dependency_tree(self) -> None: tree. In this way the dependency tree can get pruned, and the closure of argnames may get reduced. """ - closure: set[str] = set() - for argname in traverse_fixture_closure( - self.initialnames, - getfixturedefs=self.name2fixturedefs.get, - ): - if argname in self.names_closure: - closure.add(argname) - - self.names_closure[:] = sorted(closure, key=self.names_closure.index) + closure = set( + traverse_fixture_closure( + self.initialnames, + getfixturedefs=self.name2fixturedefs.get, + ) + ) + self.names_closure[:] = (name for name in self.names_closure if name in closure) class FixtureRequest(abc.ABC): @@ -1746,8 +1749,6 @@ def getfixtureclosure( # to re-discover fixturedefs again for each fixturename # (discovering matching fixtures for a given name/node is expensive). - fixturenames_closure = list(initialnames) - arg2fixturedefs: dict[str, Sequence[FixtureDef[Any]]] = {} def getfixturedefs(argname: str) -> Sequence[FixtureDef[Any]] | None: @@ -1763,11 +1764,12 @@ def getfixturedefs(argname: str) -> Sequence[FixtureDef[Any]] | None: arg2fixturedefs[argname] = fixturedefs return fixturedefs + fixturenames_closure = list(initialnames) for argname in traverse_fixture_closure( initialnames, getfixturedefs=getfixturedefs, ): - if argname not in fixturenames_closure: + if argname not in initialnames: fixturenames_closure.append(argname) def sort_by_scope(arg_name: str) -> Scope: @@ -1779,6 +1781,7 @@ def sort_by_scope(arg_name: str) -> Scope: return fixturedefs[-1]._scope fixturenames_closure.sort(key=sort_by_scope, reverse=True) + return fixturenames_closure, arg2fixturedefs def pytest_generate_tests(self, metafunc: Metafunc) -> None: From 4722f2472dfb2dad48420cc22e24cd06256ac7bc Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 8 Apr 2026 14:55:18 +0300 Subject: [PATCH 240/307] fixtures: change static fixture closure order fully to DFS (I am talking here about `names_closure`/`fixturenames`.) Before 72ae3dbf9608a70df683d081cf53146a8d79f1ea, the static traversal order was BFS (unlike the dynamic order which is DFS). So it was natural that `initialnames` was always at the beginning of the closure, since it consists the initial working set. When we changed to DFS, we kept this. But it's a bit weird, now the initialnames are in BFS, but all transitive dependencies are in DFS. Remove this special case, making both the static and dynamic order fully DFS. --- src/_pytest/fixtures.py | 17 ++++++++--------- .../fixtures/test_getfixturevalue_dynamic.py | 2 +- testing/python/fixtures.py | 10 +++++----- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index f7f0be96649..7041d971592 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1764,14 +1764,6 @@ def getfixturedefs(argname: str) -> Sequence[FixtureDef[Any]] | None: arg2fixturedefs[argname] = fixturedefs return fixturedefs - fixturenames_closure = list(initialnames) - for argname in traverse_fixture_closure( - initialnames, - getfixturedefs=getfixturedefs, - ): - if argname not in initialnames: - fixturenames_closure.append(argname) - def sort_by_scope(arg_name: str) -> Scope: try: fixturedefs = arg2fixturedefs[arg_name] @@ -1780,7 +1772,14 @@ def sort_by_scope(arg_name: str) -> Scope: else: return fixturedefs[-1]._scope - fixturenames_closure.sort(key=sort_by_scope, reverse=True) + fixturenames_closure = sorted( + traverse_fixture_closure( + initialnames, + getfixturedefs=getfixturedefs, + ), + key=sort_by_scope, + reverse=True, + ) return fixturenames_closure, arg2fixturedefs diff --git a/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py b/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py index 0559905cea4..5ea5e6ace79 100644 --- a/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py +++ b/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py @@ -20,4 +20,4 @@ def b(a): def test(b, request): - assert request.fixturenames == ["b", "request", "a", "dynamic"] + assert request.fixturenames == ["b", "a", "request", "dynamic"] diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index d76fd528bd8..d02cd28c452 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -1178,7 +1178,7 @@ def test_function(request, farg): def test_request_fixturenames_dynamic_fixture(self, pytester: Pytester) -> None: """Regression test for #3057""" pytester.copy_example("fixtures/test_getfixturevalue_dynamic.py") - result = pytester.runpytest() + result = pytester.runpytest("-vv") result.stdout.fnmatch_lines(["*1 passed*"]) def test_setupdecorator_and_xunit(self, pytester: Pytester) -> None: @@ -4539,8 +4539,8 @@ def test_foo(f1, p1, m1, f2, s1): # Actual fixture execution differs from static order: dependent # fixtures must be created first ("my_tmp_path"). assert fixture_order == [ - "s1", "my_tmp_path_factory", + "s1", "p1", "m1", "my_tmp_path", @@ -4555,13 +4555,13 @@ def test_foo(f1, p1, m1, f2, s1): # Static order of fixtures based on their scope and position in the # parameter list. assert request.fixturenames == [ - "s1", "my_tmp_path_factory", + "s1", "p1", "m1", "f1", - "f2", "my_tmp_path", + "f2", ] result = pytester.runpytest("-vv") result.assert_outcomes(passed=1) @@ -5593,7 +5593,7 @@ def test_circular_deps(fix_a, fix_x): ) items, _hookrec = pytester.inline_genitems() assert isinstance(items[0], Function) - assert items[0].fixturenames == ["fix_a", "fix_x", "fix_b", "fix_y", "fix_z"] + assert items[0].fixturenames == ["fix_a", "fix_b", "fix_x", "fix_y", "fix_z"] def test_fixture_closure_handles_diamond_dependencies(pytester: Pytester) -> None: From 48fcc261764ca8c06246bfc0fce86f749e51ed48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 19:00:26 +0200 Subject: [PATCH 241/307] build(deps): Bump django in /testing/plugins_integration (#14370) Bumps [django](https://github.com/django/django) from 6.0.3 to 6.0.4. - [Commits](https://github.com/django/django/compare/6.0.3...6.0.4) --- updated-dependencies: - dependency-name: django dependency-version: 6.0.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index bd44e659721..cb130820c74 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.13.0 -django==6.0.3 +django==6.0.4 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.1.0 From 8805c1f8d12c8ab98a0776a9f60d229cba6dfe69 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 29 Nov 2025 01:07:47 +0200 Subject: [PATCH 242/307] doc: use builtin `confval` directive Since version 7.4, Sphinx had a standard `confval` directive: https://www.sphinx-doc.org/en/master/usage/domains/standard.html#directive-confval So we can drop our custom one. --- doc/en/conf.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/doc/en/conf.py b/doc/en/conf.py index 81cb9086703..25dc526c4da 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -283,13 +283,6 @@ def setup(app: sphinx.application.Sphinx) -> None: indextemplate="pair: %s; fixture", ) - app.add_object_type( - "confval", - "confval", - objname="configuration value", - indextemplate="pair: %s; configuration value", - ) - app.add_object_type( "globalvar", "globalvar", From eb8249abedb7761e494b660fd72773db62b6206c Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 29 Nov 2025 01:28:32 +0200 Subject: [PATCH 243/307] doc: make use of `confval`'s `type' and `default` options Seems good to have it in a structured form. --- changelog/14012.doc.rst | 1 + doc/en/reference/reference.rst | 196 ++++++++++++++++++++------------- 2 files changed, 121 insertions(+), 76 deletions(-) create mode 100644 changelog/14012.doc.rst diff --git a/changelog/14012.doc.rst b/changelog/14012.doc.rst new file mode 100644 index 00000000000..95942e4a86f --- /dev/null +++ b/changelog/14012.doc.rst @@ -0,0 +1 @@ +The :ref:`ini options ref` section of the API Reference now specified the type and default value of every configuration option. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index 4e5c7cfd644..c1df110e822 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1330,6 +1330,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: addopts + :type: ``list[str]`` Add the specified ``OPTS`` to the set of command line arguments as if they had been specified by the user. Example: if you have this configuration file content: @@ -1346,19 +1347,20 @@ passed multiple times. The expected format is ``name=value``. For example:: pytest --maxfail=2 -rf test_hello.py - Default is to add no options. - .. confval:: cache_dir + :type: ``str`` + :default: ``".pytest_cache"`` - Sets the directory where the cache plugin's content is stored. Default directory is - ``.pytest_cache`` which is created in :ref:`rootdir `. Directory may be - relative or absolute path. If setting relative path, then directory is created + Sets the directory where the cache plugin's content is stored. + Directory may be relative or absolute path. If setting relative path, then directory is created relative to :ref:`rootdir `. Additionally, a path may contain environment variables, that will be expanded. For more information about cache plugin please refer to :ref:`cache_provider`. .. confval:: collect_imported_tests + :type: ``bool`` + :default: ``true`` .. versionadded:: 8.4 @@ -1379,8 +1381,6 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] collect_imported_tests = false - Default: ``true`` - pytest traditionally collects classes/functions in the test module namespace even if they are imported from another file. For example: @@ -1402,9 +1402,11 @@ passed multiple times. The expected format is ``name=value``. For example:: Set ``collected_imported_tests`` to ``false`` in the configuration file prevents that. .. confval:: consider_namespace_packages + :type: ``bool`` + :default: ``false`` Controls if pytest should attempt to identify `namespace packages `__ - when collecting Python modules. Default is ``False``. + when collecting Python modules. Set to ``True`` if the package you are testing is part of a namespace package. Namespace packages are also supported as :option:`--pyargs` target. @@ -1415,6 +1417,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. versionadded:: 8.1 .. confval:: console_output_style + :type: ``str`` + :default: ``"progress"`` Sets the console output style while running tests: @@ -1424,7 +1428,7 @@ passed multiple times. The expected format is ``name=value``. For example:: * ``count``: like progress, but shows progress as the number of tests completed instead of a percent. * ``times``: show tests duration. - The default is ``progress``, but you can fallback to ``classic`` if you prefer or + You can fallback to ``classic`` if you prefer or the new mode is causing unexpected problems: .. tab:: toml @@ -1443,6 +1447,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: disable_test_id_escaping_and_forfeit_all_rights_to_community_support + :type: ``bool`` + :default: ``false`` .. versionadded:: 4.4 @@ -1470,31 +1476,30 @@ passed multiple times. The expected format is ``name=value``. For example:: even bugs depending on the OS used and plugins currently installed, so use it at your own risk. - Default: ``False``. - See :ref:`parametrizemark`. .. confval:: doctest_encoding - - + :type: ``str`` + :default: ``"utf-8"`` Default encoding to use to decode text files with docstrings. :ref:`See how pytest handles doctests `. .. confval:: doctest_optionflags + :type: ``list[str]`` One or more doctest flag names from the standard ``doctest`` module. :ref:`See how pytest handles doctests `. .. confval:: empty_parameter_set_mark - - + :type: ``str`` + :default: ``"skip"`` Allows to pick the action for empty parametersets in parameterization - * ``skip`` skips tests with an empty parameterset (default) + * ``skip`` skips tests with an empty parameterset * ``xfail`` marks tests with an empty parameterset as xfail(run=False) * ``fail_at_collect`` raises an exception if parametrize collects an empty parameter set @@ -1519,6 +1524,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: enable_assertion_pass_hook + :type: ``bool`` + :default: ``false`` Enables the :hook:`pytest_assertion_pass` hook. Make sure to delete any previously generated ``.pyc`` cache files. @@ -1539,14 +1546,14 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: faulthandler_exit_on_timeout + :type: ``bool`` + :default: ``false`` Exit the pytest process after the per-test timeout is reached by passing `exit=True` to the :func:`faulthandler.dump_traceback_later` function. This is particularly useful to avoid wasting CI resources for test suites that are prone to putting the main Python interpreter into a deadlock state. - This option is set to 'false' by default. - .. tab:: toml .. code-block:: toml @@ -1566,6 +1573,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: faulthandler_timeout + :type: ``float`` + :default: ``0`` (disabled) Dumps the tracebacks of all threads if a test takes longer than ``X`` seconds to run (including fixture setup and teardown). Implemented using the :func:`faulthandler.dump_traceback_later` function, @@ -1589,6 +1598,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: filterwarnings + :type: ``list[str]`` Sets a list of filters and actions that should be taken for matched warnings. By default all warnings emitted during the test session @@ -1621,12 +1631,14 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: junit_duration_report + :type: ``str`` + :default: ``"total"`` .. versionadded:: 4.1 Configures how durations are recorded into the JUnit XML report: - * ``total`` (the default): duration times reported include setup, call, and teardown times. + * ``total``: duration times reported include setup, call, and teardown times. * ``call``: duration times reported include only call times, excluding setup and teardown. .. tab:: toml @@ -1645,6 +1657,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: junit_family + :type: ``str`` + :default: ``"xunit2"`` .. versionadded:: 4.2 .. versionchanged:: 6.1 @@ -1653,7 +1667,7 @@ passed multiple times. The expected format is ``name=value``. For example:: Configures the format of the generated JUnit XML file. The possible options are: * ``xunit1`` (or ``legacy``): produces old style output, compatible with the xunit 1.0 format. - * ``xunit2``: produces `xunit 2.0 style output `__, which should be more compatible with latest Jenkins versions. **This is the default**. + * ``xunit2``: produces `xunit 2.0 style output `__, which should be more compatible with latest Jenkins versions. .. tab:: toml @@ -1671,11 +1685,13 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: junit_log_passing_tests + :type: ``bool`` + :default: ``true`` .. versionadded:: 4.6 If ``junit_logging != "no"``, configures if the captured output should be written - to the JUnit XML file for **passing** tests. Default is ``True``. + to the JUnit XML file for **passing** tests. .. tab:: toml @@ -1693,6 +1709,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: junit_logging + :type: ``str`` + :default: ``"no"`` .. versionadded:: 3.5 .. versionchanged:: 5.4 @@ -1705,7 +1723,7 @@ passed multiple times. The expected format is ``name=value``. For example:: * ``system-err``: write captured ``stderr`` contents. * ``out-err``: write both captured ``stdout`` and ``stderr`` contents. * ``all``: write captured ``logging``, ``stdout`` and ``stderr`` contents. - * ``no`` (the default): no captured output is written. + * ``no``: no captured output is written. .. tab:: toml @@ -1723,6 +1741,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: junit_suite_name + :type: ``str`` + :default: ``"pytest"`` To set the name of the root test suite xml item, you can configure the ``junit_suite_name`` option in your config file: @@ -1741,6 +1761,8 @@ passed multiple times. The expected format is ``name=value``. For example:: junit_suite_name = my_suite .. confval:: log_auto_indent + :type: ``str`` + :default: ``"false"`` Allow selective auto-indentation of multiline log messages. @@ -1749,16 +1771,16 @@ passed multiple times. The expected format is ``name=value``. For example:: auto-indentation behavior for all logging. ``[value]`` can be: - * True or "On" - Dynamically auto-indent multiline log messages - * False or "Off" or 0 - Do not auto-indent multiline log messages (the default behavior) - * [positive integer] - auto-indent multiline log messages by [value] spaces + * "True" or "On" - Dynamically auto-indent multiline log messages + * "False" or "Off" or "0" - Do not auto-indent multiline log messages + * "[positive integer]" - auto-indent multiline log messages by [value] spaces .. tab:: toml .. code-block:: toml [pytest] - log_auto_indent = false + log_auto_indent = "false" .. tab:: ini @@ -1773,9 +1795,10 @@ passed multiple times. The expected format is ``name=value``. For example:: on the command line or in the config. .. confval:: log_cli + :type: ``bool`` + :default: ``false`` Enable log display during test run (also known as :ref:`"live logging" `). - The default is ``False``. .. tab:: toml @@ -1792,8 +1815,8 @@ passed multiple times. The expected format is ``name=value``. For example:: log_cli = true .. confval:: log_cli_date_format - - + :type: ``str`` + :default: Fallback to ``log_date_format`` Sets a :py:func:`time.strftime`-compatible string that will be used when formatting dates for live logging. @@ -1814,8 +1837,8 @@ passed multiple times. The expected format is ``name=value``. For example:: For more information, see :ref:`live_logs`. .. confval:: log_cli_format - - + :type: ``str`` + :default: Fallback to ``log_format`` Sets a :py:mod:`logging`-compatible string used to format live logging messages. @@ -1837,8 +1860,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_cli_level - - + :type: ``str`` + :default: Fallback to ``log_level`` Sets the minimum log message level that should be captured for live logging. The integer value or the names of the levels can be used. Note in TOML the integer must be quoted, as there is no support @@ -1864,8 +1887,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_date_format - - + :type: ``str`` + :default: ``"%H:%M:%S"`` Sets a :py:func:`time.strftime`-compatible string that will be used when formatting dates for logging capture. @@ -1887,8 +1910,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_file - - + :type: ``str`` Sets a file name relative to the current working directory where log messages should be written to, in addition to the other logging facilities that are active. @@ -1911,8 +1933,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_file_date_format - - + :type: ``str`` + :default: Fallback to ``log_date_format`` Sets a :py:func:`time.strftime`-compatible string that will be used when formatting dates for the logging file. @@ -1933,8 +1955,8 @@ passed multiple times. The expected format is ``name=value``. For example:: For more information, see :ref:`logging`. .. confval:: log_file_format - - + :type: ``str`` + :default: Fallback to ``log_format`` Sets a :py:mod:`logging`-compatible string used to format logging messages redirected to the logging file. @@ -1955,12 +1977,11 @@ passed multiple times. The expected format is ``name=value``. For example:: For more information, see :ref:`logging`. .. confval:: log_file_level + :type: ``str`` + :default: Fallback to ``log_level`` - - - Sets the minimum log message level that should be captured for the logging file. The integer value or - the names of the levels can be used. Note in TOML the integer must be quoted, as there is no support - for config parameters of mixed type. + Sets the minimum log message level that should be captured for the logging file. + The integer value (in TOML, as a string) or the names of the levels can be used. .. tab:: toml @@ -1982,9 +2003,11 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_file_mode + :type: ``str`` + :default: ``"w"`` Sets the mode that the logging file is opened with. - The options are ``"w"`` to recreate the file (the default) or ``"a"`` to append to the file. + The options are ``"w"`` to recreate the file or ``"a"`` to append to the file. .. tab:: toml @@ -2004,8 +2027,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_format - - + :type: ``str`` + :default: ``%(levelname)-8s %(name)s:%(filename)s:%(lineno)d %(message)s`` Sets a :py:mod:`logging`-compatible string used to format captured logging messages. @@ -2027,12 +2050,12 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: log_level + :type: ``str`` - - - Sets the minimum log message level that should be captured for logging capture. The integer value or - the names of the levels can be used. Note in TOML the integer must be quoted, as there is no support - for config parameters of mixed type. + Sets the minimum log message level that should be captured for logging capture. + Not set by default, so it depends on the root/parent log handler's effective level, + where it is ``"WARNING"`` by default. + The integer value (in TOML, as a string) or the names of the levels can be used. .. tab:: toml @@ -2054,6 +2077,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: markers + :type: ``list[str]`` When the :confval:`strict_markers` configuration option is set, only known markers - defined in code by core pytest or some plugin - are allowed. @@ -2082,6 +2106,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: minversion + :type: ``str`` Specifies a minimal pytest version required for running tests. @@ -2101,6 +2126,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: norecursedirs + :type: ``list[str]`` + :default: ``["*.egg", ".*", "_darcs", "build", "CVS", "dist", "node_modules", "venv", "{arch}"]`` Set the directory basename patterns to avoid when recursing for test discovery. The individual (fnmatch-style) patterns are @@ -2112,8 +2139,6 @@ passed multiple times. The expected format is ``name=value``. For example:: [seq] matches any character in seq [!seq] matches any char not in seq - Default patterns are ``'*.egg'``, ``'.*'``, ``'_darcs'``, ``'build'``, - ``'CVS'``, ``'dist'``, ``'node_modules'``, ``'venv'``, ``'{arch}'``. Setting a ``norecursedirs`` replaces the default. Here is an example of how to avoid certain directories: @@ -2145,6 +2170,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: python_classes + :type: ``list[str]`` + :default: ``["Test"]`` One or more name prefixes or glob-style patterns determining which classes are considered for test collection. Search for multiple glob patterns by @@ -2172,6 +2199,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: python_files + :type: ``list[str]`` + :default: ``["test_*.py", "*_test.py"]`` One or more Glob-style file patterns determining which python files are considered as test modules. Search for multiple glob patterns by @@ -2201,11 +2230,11 @@ passed multiple times. The expected format is ``name=value``. For example:: check_*.py example_*.py - By default, files matching ``test_*.py`` and ``*_test.py`` will be considered - test modules. .. confval:: python_functions + :type: ``list[str]`` + :default: ``["test"]`` One or more name prefixes or glob-patterns determining which test functions and methods are considered tests. Search for multiple glob patterns by @@ -2235,6 +2264,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: pythonpath + :type: ``list[str]`` Sets list of directories that should be added to the python search path. Directories will be added to the head of :data:`sys.path`. @@ -2259,6 +2289,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: required_plugins + :type: ``list[str]`` A space separated list of plugins that must be present for pytest to run. Plugins can be listed with or without version specifiers directly following @@ -2281,6 +2312,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: strict + :type: ``bool`` + :default: ``false`` If set to ``true``, enable "strict mode", which enables the following options: @@ -2316,6 +2349,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: strict_config + :type: ``bool`` + :default: ``false`` If set to ``true``, any warnings encountered while parsing the ``pytest`` section of the configuration file will raise errors. @@ -2337,6 +2372,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: strict_markers + :type: ``bool`` + :default: ``false`` If set to ``true``, markers not registered in the ``markers`` section of the configuration file will raise errors. @@ -2358,10 +2395,12 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: strict_parametrization_ids + :type: ``bool`` + :default: ``false`` If set to ``true``, pytest emits an error if it detects non-unique parameter set IDs. - If not set (the default), pytest automatically handles this by adding `0`, `1`, ... to duplicate IDs, + If not set, pytest automatically handles this by adding `0`, `1`, ... to duplicate IDs, making them unique. .. tab:: toml @@ -2408,6 +2447,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: strict_xfail + :type: ``bool`` + :default: ``false`` If set to ``true``, tests marked with ``@pytest.mark.xfail`` that actually succeed will by default fail the test suite. @@ -2435,6 +2476,7 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: testpaths + :type: ``list[str]`` Sets list of directories that should be searched for tests when no specific directories, files or test ids are given in the command line when @@ -2472,8 +2514,10 @@ passed multiple times. The expected format is ``name=value``. For example:: pytest testing doc .. confval:: tmp_path_retention_count + :type: ``str`` + :default: ``"3"`` - How many sessions should we keep the `tmp_path` directories, + How many sessions should pytest keep the `tmp_path` directories, according to :confval:`tmp_path_retention_policy`. .. tab:: toml @@ -2490,12 +2534,10 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] tmp_path_retention_count = 3 - Default: ``3`` - .. confval:: tmp_path_retention_policy - - + :type: ``str`` + :default: ``"all"`` Controls which directories created by the `tmp_path` fixture are kept around, based on test outcome. @@ -2518,10 +2560,10 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] tmp_path_retention_policy = all - Default: ``all`` - .. confval:: truncation_limit_chars + :type: ``int`` + :default: ``640`` Controls maximum number of characters to truncate assertion message contents. @@ -2543,14 +2585,14 @@ passed multiple times. The expected format is ``name=value``. For example:: pytest truncates the assert messages to a certain limit by default to prevent comparison with large data to overload the console output. - Default: ``640`` - .. note:: If pytest detects it is :ref:`running on CI `, truncation is disabled automatically. .. confval:: truncation_limit_lines + :type: ``int`` + :default: ``8`` Controls maximum number of lines to truncate assertion message contents. @@ -2572,14 +2614,13 @@ passed multiple times. The expected format is ``name=value``. For example:: pytest truncates the assert messages to a certain limit by default to prevent comparison with large data to overload the console output. - Default: ``8`` - .. note:: If pytest detects it is :ref:`running on CI `, truncation is disabled automatically. .. confval:: usefixtures + :type: ``list[str]`` List of fixtures that will be applied to all test functions; this is semantically the same to apply the ``@pytest.mark.usefixtures`` marker to all test functions. @@ -2602,6 +2643,8 @@ passed multiple times. The expected format is ``name=value``. For example:: .. confval:: verbosity_assertions + :type: ``str`` + :default: ``"auto"`` Set a verbosity level specifically for assertion related output, overriding the application wide level. @@ -2619,11 +2662,12 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] verbosity_assertions = 2 - If not set, defaults to application wide verbosity level (via the :option:`-v` command-line option). A special value of - ``"auto"`` can be used to explicitly use the global verbosity level. + A special value of ``"auto"`` can be used to explicitly use the global verbosity level. .. confval:: verbosity_subtests + :type: ``str`` + :default: ``"auto"`` Set the verbosity level specifically for **passed** subtests. @@ -2644,13 +2688,14 @@ passed multiple times. The expected format is ``name=value``. For example:: A value of ``1`` or higher will show output for **passed** subtests (**failed** subtests are always reported). Passed subtests output can be suppressed with the value ``0``, which overwrites the :option:`-v` command-line option. - If not set, defaults to application wide verbosity level (via the :option:`-v` command-line option). A special value of - ``"auto"`` can be used to explicitly use the global verbosity level. + A special value of ``"auto"`` can be used to explicitly use the global verbosity level. See also: :ref:`subtests`. .. confval:: verbosity_test_cases + :type: ``str`` + :default: ``"auto"`` Set a verbosity level specifically for test case execution related output, overriding the application wide level. @@ -2668,8 +2713,7 @@ passed multiple times. The expected format is ``name=value``. For example:: [pytest] verbosity_test_cases = 2 - If not set, defaults to application wide verbosity level (via the :option:`-v` command-line option). A special value of - ``"auto"`` can be used to explicitly use the global verbosity level. + A special value of ``"auto"`` can be used to explicitly use the global verbosity level. .. _`command-line-flags`: From 6d03e6f74c0ba1ea4d1b3d194d045b3939dd0c94 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 9 Apr 2026 14:26:01 +0300 Subject: [PATCH 244/307] python: add a DirectParamFixtureDef subclass to mark direct-parametrization helper fixtures No functional changes. This is intended for next commit (wants to skip showing these fixtures in `--fixtures-per-test`). These fixtures were previously called "pseudo fixtures". I took the opportunity to rename them "direct param fixture def", which, while less catchy, is more self-descriptive and less judgmental. --- src/_pytest/python.py | 62 +++++++++++++++++++++++++------------- testing/python/metafunc.py | 2 +- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 13932e548c5..806e4a22fdf 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -55,6 +55,7 @@ from _pytest.fixtures import _resolve_args_directness from _pytest.fixtures import FixtureDef from _pytest.fixtures import FixtureRequest +from _pytest.fixtures import FixtureValue from _pytest.fixtures import FuncFixtureInfo from _pytest.fixtures import get_scope_node from _pytest.main import Session @@ -1095,8 +1096,7 @@ class CallSpec2: and stored in item.callspec. """ - # arg name -> arg value which will be passed to a fixture or pseudo-fixture - # of the same name. (indirect or direct parametrization respectively) + # arg name -> arg value which will be passed to a fixture of the same name. params: dict[str, object] = dataclasses.field(default_factory=dict) # arg name -> arg index. indices: dict[str, int] = dataclasses.field(default_factory=dict) @@ -1153,8 +1153,30 @@ def get_direct_param_fixture_func(request: FixtureRequest) -> Any: return request.param -# Used for storing pseudo fixturedefs for direct parametrization. -name2pseudofixturedef_key = StashKey[dict[str, FixtureDef[Any]]]() +class DirectParamFixtureDef(FixtureDef[FixtureValue]): + """A custom FixtureDef for direct parametrization fixtures. + + Each parameter in direct parametrization is desugared to a parametrized + fixture which returns the direct parameterization value as its param. + We use this custom type as a "marker" for this type of FixtureDef, but + usually behaves like any other FixtureDef. + """ + + def __init__(self, *, config: Config, argname: str, scope: Scope) -> None: + super().__init__( + config=config, + baseid="", + argname=argname, + func=get_direct_param_fixture_func, + scope=scope, + params=None, + ids=None, + _ispytest=True, + ) + + +# Used for storing fixturedefs for direct parametrization. +name2directparamfixturedef_key = StashKey[dict[str, DirectParamFixtureDef[object]]]() @final @@ -1333,14 +1355,14 @@ def parametrize( self._params_directness.update(arg_directness) # Add direct parametrizations as fixturedefs to arg2fixturedefs by - # registering artificial "pseudo" FixtureDef's such that later at test + # registering artificial DirectParamFixtureDef's such that later at test # setup time we can rely on FixtureDefs to exist for all argnames. node = None - # For scopes higher than function, a "pseudo" FixtureDef might have + # For scopes higher than function, a DirectParamFixtureDef might have # already been created for the scope. We thus store and cache the - # FixtureDef on the node related to the scope. + # DirectParamFixtureDef on the node related to the scope. if scope_ is Scope.Function: - name2pseudofixturedef = None + name2directparamfixturedef = None else: collector = self.definition.parent assert collector is not None @@ -1357,28 +1379,26 @@ def parametrize( node = collector.session else: assert False, f"Unhandled missing scope: {scope}" - default: dict[str, FixtureDef[Any]] = {} - name2pseudofixturedef = node.stash.setdefault( - name2pseudofixturedef_key, default + default: dict[str, DirectParamFixtureDef[object]] = {} + name2directparamfixturedef = node.stash.setdefault( + name2directparamfixturedef_key, default ) for argname in argnames: if arg_directness[argname] == "indirect": continue - if name2pseudofixturedef is not None and argname in name2pseudofixturedef: - fixturedef = name2pseudofixturedef[argname] + if ( + name2directparamfixturedef is not None + and argname in name2directparamfixturedef + ): + fixturedef = name2directparamfixturedef[argname] else: - fixturedef = FixtureDef( + fixturedef = DirectParamFixtureDef( config=self.config, - baseid="", argname=argname, - func=get_direct_param_fixture_func, scope=scope_, - params=None, - ids=None, - _ispytest=True, ) - if name2pseudofixturedef is not None: - name2pseudofixturedef[argname] = fixturedef + if name2directparamfixturedef is not None: + name2directparamfixturedef[argname] = fixturedef self._arg2fixturedefs[argname] = [fixturedef] # Create the new calls: if we are parametrize() multiple times (by applying the decorator diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index b48de293ede..026589d65f5 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -801,7 +801,7 @@ def func(x, y): metafunc = self.Metafunc(func) metafunc.parametrize("x, y", [("a", "b")], indirect=["x"]) assert metafunc._calls[0].params == dict(x="a", y="b") - # Since `y` is a direct parameter, its pseudo-fixture would + # Since `y` is a direct parameter, its DirectParamFixtureDef would # be registered. assert list(metafunc._arg2fixturedefs.keys()) == ["y"] From eff72f75e6f5b2ed95ba5ff29400f0e237053dc1 Mon Sep 17 00:00:00 2001 From: Warren Date: Sun, 17 Mar 2024 16:24:20 +1100 Subject: [PATCH 245/307] fixtures: exclude direct-param fixtures from --fixtures-per-test output Fix #11295 by excluding from the --fixtures-per-test output any 'pseudo fixture' that results from directy parametrizing a test e.g. with ``@pytest.mark.parametrize``. The justification for removing these fixtures from the report is that a) They are unintuitive. Their appearance in the fixtures-per-test report confuses new users because the fixtures created via ``@pytest.mark.parametrize`` do not confrom to the expectations established in the documentation; namely, that fixtures are - richly reusable - provide setup/teardown features - created via the ``@pytest.fixture` decorator b) They are an internal implementation detail. It is not the explicit goal of the direct parametrization mark to create a fixture; instead, pytest's internals leverages the fixture system to achieve the explicit goal: a succinct batch execution syntax. Consequently, exposing the fixtures that implement the batch execution behaviour reveal more about pytest's internals than they do about the user's own design choices and test dependencies. --- AUTHORS | 1 + changelog/11295.improvement.rst | 1 + src/_pytest/fixtures.py | 46 +++++++++++---- testing/python/show_fixtures_per_test.py | 74 +++++++++++++++++++++++- 4 files changed, 111 insertions(+), 11 deletions(-) create mode 100644 changelog/11295.improvement.rst diff --git a/AUTHORS b/AUTHORS index 2f8e26b2cb1..f3c8d016c28 100644 --- a/AUTHORS +++ b/AUTHORS @@ -495,6 +495,7 @@ Vlad Radziuk Vladyslav Rachek Volodymyr Kochetkov Volodymyr Piskun +Warren Markham Wei Lin Wil Cooley Will Riley diff --git a/changelog/11295.improvement.rst b/changelog/11295.improvement.rst new file mode 100644 index 00000000000..fc29956f04c --- /dev/null +++ b/changelog/11295.improvement.rst @@ -0,0 +1 @@ +Improved output of ``--fixtures-per-test`` by excluding internal-implementation fixtures generated by ``@pytest.mark.parametrize`` and similar. diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index f667c40ea78..22d2ecb57bf 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1977,6 +1977,36 @@ def _pretty_fixture_path(invocation_dir: Path, func) -> str: return bestrelpath(invocation_dir, loc) +def _get_fixtures_per_test(test: nodes.Item) -> Iterator[FixtureDef[object]]: + """Returns all fixtures used by the test item except for those created by + direct parametrization and those requested dynamically with + ``request.getfixturevalue``. + + The justification for excluding fixtures created by direct parametrization + is that for users, they are internal implementation detail. + + Dynamically requested fixtures are excluded because they are not known + statically. + """ + from _pytest.python import DirectParamFixtureDef + + # Custom Items may not have _fixtureinfo attribute. + fixture_info: FuncFixtureInfo | None = getattr(test, "_fixtureinfo", None) + if fixture_info is None: + return # pragma: no cover + + # dict key not used in loop but needed for sorting. + for argname, fixturedefs in sorted(fixture_info.name2fixturedefs.items()): + if not fixturedefs: + # Not supposed to be empty, but for safety. + continue # pragma: no cover + # Last item is expected to be the one directly used by the test item. + fixturedef = fixturedefs[-1] + if isinstance(fixturedef, DirectParamFixtureDef): + continue + yield fixturedef + + def _show_fixtures_per_test(config: Config, session: Session) -> None: import _pytest.config @@ -2009,22 +2039,18 @@ def write_fixture(fixture_def: FixtureDef[object]) -> None: tw.line(" no docstring available", red=True) def write_item(item: nodes.Item) -> None: - # Not all items have _fixtureinfo attribute. - info: FuncFixtureInfo | None = getattr(item, "_fixtureinfo", None) - if info is None or not info.name2fixturedefs: + fixturedefs = list(_get_fixtures_per_test(item)) + if not fixturedefs: # This test item does not use any fixtures. return + tw.line() tw.sep("-", f"fixtures used by {item.name}") # TODO: Fix this type ignore. tw.sep("-", f"({get_best_relpath(item.function)})") # type: ignore[attr-defined] - # dict key not used in loop but needed for sorting. - for _, fixturedefs in sorted(info.name2fixturedefs.items()): - assert fixturedefs is not None - if not fixturedefs: - continue - # Last item is expected to be the one used by the test item. - write_fixture(fixturedefs[-1]) + + for fixturedef in fixturedefs: + write_fixture(fixturedef) for session_item in session.items: write_item(session_item) diff --git a/testing/python/show_fixtures_per_test.py b/testing/python/show_fixtures_per_test.py index c860b61e21b..76fc3728267 100644 --- a/testing/python/show_fixtures_per_test.py +++ b/testing/python/show_fixtures_per_test.py @@ -3,7 +3,7 @@ from _pytest.pytester import Pytester -def test_no_items_should_not_show_output(pytester: Pytester) -> None: +def test_should_show_no_output_when_zero_items(pytester: Pytester) -> None: result = pytester.runpytest("--fixtures-per-test") result.stdout.no_fnmatch_line("*fixtures used by*") assert result.ret == 0 @@ -254,3 +254,75 @@ def test_arg1(arg1): " Docstring content that extends into a third paragraph.", ] ) + + +def test_should_not_show_direct_param_fixtures(pytester: Pytester) -> None: + """A direct-param fixture is a helper fixture created as an implementation + detail of direct parametrization. + + These fixtures should not be included in the output because they don't + satisfy user expectations for how fixtures are created and used (#11295). + """ + pytester.makepyfile( + """ + import pytest + + @pytest.mark.parametrize("x", [1]) + def test_pseudo_fixture(x): + pass + """ + ) + result = pytester.runpytest("--fixtures-per-test") + result.stdout.no_fnmatch_line("*fixtures used by*") + assert result.ret == 0 + + +def test_should_show_parametrized_fixtures_used_by_test(pytester: Pytester) -> None: + """A fixture with parameters should be included if it was created using + the @pytest.fixture decorator, including those that are indirectly + parametrized.""" + pytester.makepyfile( + ''' + import pytest + + @pytest.fixture(params=['a', 'b']) + def directly(request): + """parametrized fixture""" + return request.param + + @pytest.fixture + def indirectly(request): + """indirectly parametrized fixture""" + return request.param + + def test_directly_parametrized_fixture(directly): + pass + + @pytest.mark.parametrize("indirectly", ["a", "b"], indirect=True) + def test_indirectly_parametrized_fixture(indirectly): + pass + ''' + ) + result = pytester.runpytest("--fixtures-per-test") + assert result.ret == 0 + + result.stdout.fnmatch_lines( + [ + "*fixtures used by test_directly_parametrized_fixture*", + "*(test_should_show_parametrized_fixtures_used_by_test.py:14)*", + "directly -- test_should_show_parametrized_fixtures_used_by_test.py:4", + " parametrized fixture", + "*fixtures used by test_directly_parametrized_fixture*", + "*(test_should_show_parametrized_fixtures_used_by_test.py:14)*", + "directly -- test_should_show_parametrized_fixtures_used_by_test.py:4", + " parametrized fixture", + "*fixtures used by test_indirectly_parametrized_fixture*", + "*(test_should_show_parametrized_fixtures_used_by_test.py:17)*", + "indirectly -- test_should_show_parametrized_fixtures_used_by_test.py:9", + " indirectly parametrized fixture", + "*fixtures used by test_indirectly_parametrized_fixture*", + "*(test_should_show_parametrized_fixtures_used_by_test.py:17)*", + "indirectly -- test_should_show_parametrized_fixtures_used_by_test.py:9", + " indirectly parametrized fixture", + ] + ) From 2b5952ca5aaff42ec8d546e525ceb9c70e09dabd Mon Sep 17 00:00:00 2001 From: jakkdl Date: Wed, 4 Jun 2025 15:26:12 +0200 Subject: [PATCH 246/307] testing: avoid legacy forms of `warns`, `raises`, `deprecated_call` Use the nicer `with` forms instead. --- testing/_py/test_local.py | 15 ++-- testing/code/test_code.py | 6 +- testing/code/test_excinfo.py | 126 +++++++++++++++++++++++----------- testing/code/test_source.py | 9 ++- testing/python/collect.py | 12 ++-- testing/python/fixtures.py | 8 +-- testing/python/raises.py | 21 +++--- testing/test_cacheprovider.py | 6 +- testing/test_capture.py | 59 ++++++++++------ testing/test_config.py | 15 ++-- testing/test_debugging.py | 5 +- testing/test_legacypath.py | 3 +- testing/test_mark.py | 4 +- testing/test_monkeypatch.py | 12 ++-- testing/test_parseopt.py | 3 +- testing/test_pluginmanager.py | 23 ++++--- testing/test_pytester.py | 6 +- testing/test_recwarn.py | 51 +++++++------- testing/test_runner.py | 6 +- testing/test_session.py | 3 +- testing/test_skipping.py | 3 +- 21 files changed, 252 insertions(+), 144 deletions(-) diff --git a/testing/_py/test_local.py b/testing/_py/test_local.py index c32e71f6542..be6f4197b26 100644 --- a/testing/_py/test_local.py +++ b/testing/_py/test_local.py @@ -620,7 +620,8 @@ def test_chdir_gone(self, path1): p = path1.ensure("dir_to_be_removed", dir=1) p.chdir() p.remove() - pytest.raises(error.ENOENT, local) + with pytest.raises(error.ENOENT): + local() assert path1.chdir() is None assert os.getcwd() == str(path1) @@ -989,8 +990,10 @@ def test_locked_make_numbered_dir(self, tmpdir): assert numdir.new(ext=str(j)).check() def test_error_preservation(self, path1): - pytest.raises(EnvironmentError, path1.join("qwoeqiwe").mtime) - pytest.raises(EnvironmentError, path1.join("qwoeqiwe").read) + with pytest.raises(EnvironmentError): + path1.join("qwoeqiwe").mtime() + with pytest.raises(EnvironmentError): + path1.join("qwoeqiwe").read() # def test_parentdirmatch(self): # local.parentdirmatch('std', startmodule=__name__) @@ -1090,7 +1093,8 @@ def test_pyimport_check_filepath_consistency(self, monkeypatch, tmpdir): pseudopath = tmpdir.ensure(name + "123.py") mod.__file__ = str(pseudopath) monkeypatch.setitem(sys.modules, name, mod) - excinfo = pytest.raises(pseudopath.ImportMismatchError, p.pyimport) + with pytest.raises(pseudopath.ImportMismatchError) as excinfo: + p.pyimport() modname, modfile, orig = excinfo.value.args assert modname == name assert modfile == pseudopath @@ -1388,7 +1392,8 @@ def test_stat_helpers(self, tmpdir, monkeypatch): def test_stat_non_raising(self, tmpdir): path1 = tmpdir.join("file") - pytest.raises(error.ENOENT, path1.stat) + with pytest.raises(error.ENOENT): + path1.stat() res = path1.stat(raising=False) assert res is None diff --git a/testing/code/test_code.py b/testing/code/test_code.py index 63f6031e396..e10139dee50 100644 --- a/testing/code/test_code.py +++ b/testing/code/test_code.py @@ -85,10 +85,8 @@ def test_code_from_func() -> None: def test_unicode_handling() -> None: value = "ąć".encode() - def f() -> None: - raise ValueError(value) - - excinfo = pytest.raises(ValueError, f) + with pytest.raises(Exception) as excinfo: + raise Exception(value) str(excinfo) diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index 9998ad1b141..d578148b554 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -222,17 +222,18 @@ def h(): g() # - excinfo = pytest.raises(ValueError, h) + with pytest.raises(ValueError) as excinfo: + h() traceback = excinfo.traceback ntraceback = traceback.filter(excinfo) print(f"old: {traceback!r}") print(f"new: {ntraceback!r}") if matching: - assert len(ntraceback) == len(traceback) - 2 - else: # -1 because of the __tracebackhide__ in pytest.raises assert len(ntraceback) == len(traceback) - 1 + else: + assert len(ntraceback) == len(traceback) def test_traceback_recursion_index(self): def f(n): @@ -240,7 +241,8 @@ def f(n): n += 1 f(n) - excinfo = pytest.raises(RecursionError, f, 8) + with pytest.raises(RecursionError) as excinfo: + f(8) traceback = excinfo.traceback recindex = traceback.recursionindex() assert recindex == 3 @@ -251,7 +253,8 @@ def f(n): raise RuntimeError("hello") f(n - 1) - excinfo = pytest.raises(RuntimeError, f, 25) + with pytest.raises(RuntimeError) as excinfo: + f(25) monkeypatch.delattr(excinfo.traceback.__class__, "recursionindex") repr = excinfo.getrepr() assert "RuntimeError: hello" in str(repr.reprcrash) @@ -273,8 +276,8 @@ def f(n: int) -> None: except BaseException: reraise_me() - excinfo = pytest.raises(RuntimeError, f, 8) - assert excinfo is not None + with pytest.raises(RuntimeError) as excinfo: + f(8) traceback = excinfo.traceback recindex = traceback.recursionindex() assert recindex is None @@ -294,7 +297,8 @@ def fail(): fail = log(log(fail)) - excinfo = pytest.raises(ValueError, fail) + with pytest.raises(ValueError) as excinfo: + fail() assert excinfo.traceback.recursionindex() is None def test_getreprcrash(self): @@ -312,7 +316,8 @@ def g(): def f(): g() - excinfo = pytest.raises(ValueError, f) + with pytest.raises(ValueError) as excinfo: + f() reprcrash = excinfo._getreprcrash() assert reprcrash is not None co = _pytest._code.Code.from_function(h) @@ -320,6 +325,8 @@ def f(): assert reprcrash.lineno == co.firstlineno + 1 + 1 def test_getreprcrash_empty(self): + __tracebackhide__ = True + def g(): __tracebackhide__ = True raise ValueError @@ -328,12 +335,14 @@ def f(): __tracebackhide__ = True g() - excinfo = pytest.raises(ValueError, f) + with pytest.raises(ValueError) as excinfo: + f() assert excinfo._getreprcrash() is None def test_excinfo_exconly(): - excinfo = pytest.raises(ValueError, h) + with pytest.raises(ValueError) as excinfo: + h() assert excinfo.exconly().startswith("ValueError") with pytest.raises(ValueError) as excinfo: raise ValueError("hello\nworld") @@ -343,7 +352,8 @@ def test_excinfo_exconly(): def test_excinfo_repr_str() -> None: - excinfo1 = pytest.raises(ValueError, h) + with pytest.raises(ValueError) as excinfo1: + h() assert repr(excinfo1) == "" assert str(excinfo1) == "" @@ -354,7 +364,8 @@ def __repr__(self): def raises() -> None: raise CustomException() - excinfo2 = pytest.raises(CustomException, raises) + with pytest.raises(CustomException) as excinfo2: + raises() assert repr(excinfo2) == "" assert str(excinfo2) == "" @@ -366,7 +377,8 @@ def test_excinfo_for_later() -> None: def test_excinfo_errisinstance(): - excinfo = pytest.raises(ValueError, h) + with pytest.raises(ValueError) as excinfo: + h() assert excinfo.errisinstance(ValueError) @@ -390,7 +402,8 @@ def test_excinfo_no_python_sourcecode(tmp_path: Path) -> None: loader = jinja2.FileSystemLoader(str(tmp_path)) env = jinja2.Environment(loader=loader) template = env.get_template("test.txt") - excinfo = pytest.raises(ValueError, template.render, h=h) + with pytest.raises(ValueError) as excinfo: + template.render(h=h) for item in excinfo.traceback: print(item) # XXX: for some reason jinja.Template.render is printed in full _ = item.source # shouldn't fail @@ -754,7 +767,8 @@ def func1(m): raise ValueError("hello\\nworld") """ ) - excinfo = pytest.raises(ValueError, mod.func1, "m" * 500) + with pytest.raises(ValueError) as excinfo: + mod.func1("m" * 500) excinfo.traceback = excinfo.traceback.filter(excinfo) entry = excinfo.traceback[-1] p = FormattedExcinfo(funcargs=True, truncate_args=True) @@ -777,7 +791,8 @@ def func1(): raise ValueError("hello\\nworld") """ ) - excinfo = pytest.raises(ValueError, mod.func1) + with pytest.raises(ValueError) as excinfo: + mod.func1() excinfo.traceback = excinfo.traceback.filter(excinfo) p = FormattedExcinfo() reprtb = p.repr_traceback_entry(excinfo.traceback[-1]) @@ -810,7 +825,8 @@ def func1(m, x, y, z): raise ValueError("hello\\nworld") """ ) - excinfo = pytest.raises(ValueError, mod.func1, "m" * 90, 5, 13, "z" * 120) + with pytest.raises(ValueError) as excinfo: + mod.func1("m" * 90, 5, 13, "z" * 120) excinfo.traceback = excinfo.traceback.filter(excinfo) entry = excinfo.traceback[-1] p = FormattedExcinfo(funcargs=True) @@ -837,7 +853,8 @@ def func1(x, *y, **z): raise ValueError("hello\\nworld") """ ) - excinfo = pytest.raises(ValueError, mod.func1, "a", "b", c="d") + with pytest.raises(ValueError) as excinfo: + mod.func1("a", "b", c="d") excinfo.traceback = excinfo.traceback.filter(excinfo) entry = excinfo.traceback[-1] p = FormattedExcinfo(funcargs=True) @@ -863,7 +880,8 @@ def entry(): func1() """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() p = FormattedExcinfo(style="short") reprtb = p.repr_traceback_entry(excinfo.traceback[-2]) lines = reprtb.lines @@ -898,7 +916,8 @@ def entry(): func1() """ ) - excinfo = pytest.raises(ZeroDivisionError, mod.entry) + with pytest.raises(ZeroDivisionError) as excinfo: + mod.entry() p = FormattedExcinfo(style="short") reprtb = p.repr_traceback_entry(excinfo.traceback[-3]) assert len(reprtb.lines) == 1 @@ -923,7 +942,8 @@ def entry(): func1() """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() p = FormattedExcinfo(style="no") p.repr_traceback_entry(excinfo.traceback[-2]) @@ -934,6 +954,7 @@ def entry(): assert not lines[1:] def test_repr_traceback_tbfilter(self, importasmod): + __tracebackhide__ = True mod = importasmod( """ def f(x): @@ -942,7 +963,8 @@ def entry(): f(0) """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() p = FormattedExcinfo(tbfilter=True) reprtb = p.repr_traceback(excinfo) assert len(reprtb.reprentries) == 2 @@ -963,7 +985,8 @@ def entry(): func1() """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() from _pytest._code.code import Code with monkeypatch.context() as mp: @@ -980,6 +1003,7 @@ def entry(): assert last_lines[1] == "E ValueError: hello" def test_repr_traceback_and_excinfo(self, importasmod) -> None: + __tracebackhide__ = True mod = importasmod( """ def f(x): @@ -988,7 +1012,8 @@ def entry(): f(0) """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() styles: tuple[TracebackStyle, ...] = ("long", "short") for style in styles: @@ -1008,6 +1033,7 @@ def entry(): assert repr.reprcrash.message == "ValueError: 0" def test_repr_traceback_with_invalid_cwd(self, importasmod, monkeypatch) -> None: + __tracebackhide__ = True mod = importasmod( """ def f(x): @@ -1016,7 +1042,8 @@ def entry(): f(0) """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() p = FormattedExcinfo(abspath=False) @@ -1065,7 +1092,8 @@ def entry(): raise ValueError() """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() repr = excinfo.getrepr() repr.addsection("title", "content") repr.toterminal(tw_mock) @@ -1079,7 +1107,8 @@ def entry(): raise ValueError() """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() repr = excinfo.getrepr() assert repr.reprcrash is not None assert repr.reprcrash.path.endswith("mod.py") @@ -1098,7 +1127,8 @@ def entry(): rec1(42) """ ) - excinfo = pytest.raises(RuntimeError, mod.entry) + with pytest.raises(RuntimeError) as excinfo: + mod.entry() for style in ("short", "long", "no"): p = FormattedExcinfo(style="short") @@ -1115,7 +1145,8 @@ def entry(): f(0) """ ) - excinfo = pytest.raises(ValueError, mod.entry) + with pytest.raises(ValueError) as excinfo: + mod.entry() styles: tuple[TracebackStyle, ...] = ("short", "long", "no") for style in styles: @@ -1138,6 +1169,7 @@ def toterminal(self, tw: TerminalWriter) -> None: assert x == "я" def test_toterminal_long(self, importasmod, tw_mock): + __tracebackhide__ = True mod = importasmod( """ def g(x): @@ -1146,7 +1178,8 @@ def f(): g(3) """ ) - excinfo = pytest.raises(ValueError, mod.f) + with pytest.raises(ValueError) as excinfo: + mod.f() excinfo.traceback = excinfo.traceback.filter(excinfo) repr = excinfo.getrepr() repr.toterminal(tw_mock) @@ -1171,6 +1204,7 @@ def f(): def test_toterminal_long_missing_source( self, importasmod, tmp_path: Path, tw_mock ) -> None: + __tracebackhide__ = True mod = importasmod( """ def g(x): @@ -1179,7 +1213,8 @@ def f(): g(3) """ ) - excinfo = pytest.raises(ValueError, mod.f) + with pytest.raises(ValueError) as excinfo: + mod.f() tmp_path.joinpath("mod.py").unlink() excinfo.traceback = excinfo.traceback.filter(excinfo) repr = excinfo.getrepr() @@ -1203,6 +1238,7 @@ def f(): def test_toterminal_long_incomplete_source( self, importasmod, tmp_path: Path, tw_mock ) -> None: + __tracebackhide__ = True mod = importasmod( """ def g(x): @@ -1211,7 +1247,8 @@ def f(): g(3) """ ) - excinfo = pytest.raises(ValueError, mod.f) + with pytest.raises(ValueError) as excinfo: + mod.f() tmp_path.joinpath("mod.py").write_text("asdf", encoding="utf-8") excinfo.traceback = excinfo.traceback.filter(excinfo) repr = excinfo.getrepr() @@ -1235,13 +1272,15 @@ def f(): def test_toterminal_long_filenames( self, importasmod, tw_mock, monkeypatch: MonkeyPatch ) -> None: + __tracebackhide__ = True mod = importasmod( """ def f(): raise ValueError() """ ) - excinfo = pytest.raises(ValueError, mod.f) + with pytest.raises(ValueError) as excinfo: + mod.f() path = Path(mod.__file__) monkeypatch.chdir(path.parent) repr = excinfo.getrepr(abspath=False) @@ -1268,7 +1307,8 @@ def f(): g('some_value') """ ) - excinfo = pytest.raises(ValueError, mod.f) + with pytest.raises(ValueError) as excinfo: + mod.f() excinfo.traceback = excinfo.traceback.filter(excinfo) repr = excinfo.getrepr(style="value") repr.toterminal(tw_mock) @@ -1312,6 +1352,7 @@ def foo(): assert file.getvalue() def test_traceback_repr_style(self, importasmod, tw_mock): + __tracebackhide__ = True mod = importasmod( """ def f(): @@ -1324,7 +1365,8 @@ def i(): raise ValueError() """ ) - excinfo = pytest.raises(ValueError, mod.f) + with pytest.raises(ValueError) as excinfo: + mod.f() excinfo.traceback = excinfo.traceback.filter(excinfo) excinfo.traceback = _pytest._code.Traceback( entry if i not in (1, 2) else entry.with_repr_style("short") @@ -1359,6 +1401,7 @@ def i(): assert tw_mock.lines[20] == ":9: ValueError" def test_exc_chain_repr(self, importasmod, tw_mock): + __tracebackhide__ = True mod = importasmod( """ class Err(Exception): @@ -1377,7 +1420,8 @@ def h(): if True: raise AttributeError() """ ) - excinfo = pytest.raises(AttributeError, mod.f) + with pytest.raises(AttributeError) as excinfo: + mod.f() r = excinfo.getrepr(style="long") r.toterminal(tw_mock) for line in tw_mock.lines: @@ -1458,6 +1502,7 @@ def test_exc_repr_chain_suppression(self, importasmod, mode, tw_mock): - When the exception is raised with "from None" - Explicitly suppressed with "chain=False" to ExceptionInfo.getrepr(). """ + __tracebackhide__ = True raise_suffix = " from None" if mode == "from_none" else "" mod = importasmod( f""" @@ -1470,7 +1515,8 @@ def g(): raise ValueError() """ ) - excinfo = pytest.raises(AttributeError, mod.f) + with pytest.raises(AttributeError) as excinfo: + mod.f() r = excinfo.getrepr(style="long", chain=mode != "explicit_suppress") r.toterminal(tw_mock) for line in tw_mock.lines: @@ -1547,6 +1593,7 @@ def g(): ) def test_exc_chain_repr_cycle(self, importasmod, tw_mock): + __tracebackhide__ = True mod = importasmod( """ class Err(Exception): @@ -1565,7 +1612,8 @@ def unreraise(): raise e.__cause__ """ ) - excinfo = pytest.raises(ZeroDivisionError, mod.unreraise) + with pytest.raises(ZeroDivisionError) as excinfo: + mod.unreraise() r = excinfo.getrepr(style="short") r.toterminal(tw_mock) out = "\n".join(line for line in tw_mock.lines if isinstance(line, str)) diff --git a/testing/code/test_source.py b/testing/code/test_source.py index 3512a86f9a8..58005b340b6 100644 --- a/testing/code/test_source.py +++ b/testing/code/test_source.py @@ -211,7 +211,8 @@ def test_getstatementrange_out_of_bounds_py3(self) -> None: def test_getstatementrange_with_syntaxerror_issue7(self) -> None: source = Source(":") - pytest.raises(SyntaxError, lambda: source.getstatementrange(0)) + with pytest.raises(SyntaxError): + source.getstatementrange(0) def test_getstartingblock_singleline() -> None: @@ -380,7 +381,8 @@ def test_code_of_object_instance_with_call() -> None: class A: pass - pytest.raises(TypeError, lambda: Source(A())) + with pytest.raises(TypeError): + Source(A()) class WithCall: def __call__(self) -> None: @@ -393,7 +395,8 @@ class Hello: def __call__(self) -> None: pass - pytest.raises(TypeError, lambda: Code.from_function(Hello)) + with pytest.raises(TypeError): + Code.from_function(Hello) def getstatement(lineno: int, source) -> Source: diff --git a/testing/python/collect.py b/testing/python/collect.py index d1901684527..2aa3aae7b1a 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -20,7 +20,8 @@ class TestModule: def test_failing_import(self, pytester: Pytester) -> None: modcol = pytester.getmodulecol("import alksdjalskdjalkjals") - pytest.raises(Collector.CollectError, modcol.collect) + with pytest.raises(Collector.CollectError): + modcol.collect() def test_import_duplicate(self, pytester: Pytester) -> None: a = pytester.mkdir("a") @@ -72,12 +73,15 @@ def test(): def test_syntax_error_in_module(self, pytester: Pytester) -> None: modcol = pytester.getmodulecol("this is a syntax error") - pytest.raises(modcol.CollectError, modcol.collect) - pytest.raises(modcol.CollectError, modcol.collect) + with pytest.raises(modcol.CollectError): + modcol.collect() + with pytest.raises(modcol.CollectError): + modcol.collect() def test_module_considers_pluginmanager_at_import(self, pytester: Pytester) -> None: modcol = pytester.getmodulecol("pytest_plugins='xasdlkj',") - pytest.raises(ImportError, lambda: modcol.obj) + with pytest.raises(ImportError): + modcol.obj() def test_invalid_test_module_name(self, pytester: Pytester) -> None: a = pytester.mkdir("a") diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 38d219a547b..a0f2981e1ba 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -3591,8 +3591,8 @@ def myscoped(request): for x in {ok.split()}: assert hasattr(request, x) for x in {error.split()}: - pytest.raises(AttributeError, lambda: - getattr(request, x)) + with pytest.raises(AttributeError): + getattr(request, x) assert request.session assert request.config def test_func(): @@ -3611,8 +3611,8 @@ def arg(request): for x in {ok.split()!r}: assert hasattr(request, x) for x in {error.split()!r}: - pytest.raises(AttributeError, lambda: - getattr(request, x)) + with pytest.raises(AttributeError): + getattr(request, x) assert request.session assert request.config def test_func(arg): diff --git a/testing/python/raises.py b/testing/python/raises.py index 43a10d8a4f6..5ba0c0e1c89 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -21,11 +21,13 @@ def test_check_callable(self) -> None: pytest.raises(RuntimeError, "int('qwe')") # type: ignore[call-overload] def test_raises(self): - excinfo = pytest.raises(ValueError, int, "qwe") + with pytest.raises(ValueError) as excinfo: + int("qwe") assert "invalid literal" in str(excinfo.value) def test_raises_function(self): - excinfo = pytest.raises(ValueError, int, "hello") + with pytest.raises(ValueError) as excinfo: + int("hello") assert "invalid literal" in str(excinfo.value) def test_raises_does_not_allow_none(self): @@ -179,7 +181,8 @@ def test_invalid_regex(): def test_noclass(self) -> None: with pytest.raises(TypeError): - pytest.raises("wrong", lambda: None) # type: ignore[call-overload] + with pytest.raises("wrong"): # type: ignore[call-overload] + ... # pragma: no cover def test_invalid_arguments_to_raises(self) -> None: with pytest.raises(TypeError, match="unknown"): @@ -192,7 +195,8 @@ def test_tuple(self): def test_no_raise_message(self) -> None: try: - pytest.raises(ValueError, int, "0") + with pytest.raises(ValueError): + int("0") except pytest.fail.Exception as e: assert e.msg == f"DID NOT RAISE {ValueError!r}" else: @@ -266,7 +270,7 @@ def test_raises_match(self) -> None: pytest.raises(ValueError, int, "asdf").match(msg) assert str(excinfo.value) == expr - pytest.raises(TypeError, int, match="invalid") + pytest.raises(TypeError, int, match="invalid") # type: ignore[call-overload] def tfunc(match): raise ValueError(f"match={match}") @@ -323,10 +327,10 @@ def test_raises_match_wrong_type(self): def test_raises_exception_looks_iterable(self): class Meta(type): def __getitem__(self, item): - return 1 / 0 + return 1 / 0 # pragma: no cover def __len__(self): - return 1 + return 1 # pragma: no cover class ClassLooksIterableException(Exception, metaclass=Meta): pass @@ -335,7 +339,8 @@ class ClassLooksIterableException(Exception, metaclass=Meta): Failed, match=r"DID NOT RAISE ", ): - pytest.raises(ClassLooksIterableException, lambda: None) + with pytest.raises(ClassLooksIterableException): + ... # pragma: no cover def test_raises_with_raising_dunder_class(self) -> None: """Test current behavior with regard to exceptions via __class__ (#4284).""" diff --git a/testing/test_cacheprovider.py b/testing/test_cacheprovider.py index 35ea85f10f5..7ac3f38ab64 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -51,7 +51,8 @@ def test_config_cache_dataerror(self, pytester: Pytester) -> None: config = pytester.parseconfigure() assert config.cache is not None cache = config.cache - pytest.raises(TypeError, lambda: cache.set("key/name", cache)) + with pytest.raises(TypeError): + cache.set("key/name", cache) config.cache.set("key/name", 0) config.cache._getvaluepath("key/name").write_bytes(b"123invalid") val = config.cache.get("key/name", -2) @@ -143,7 +144,8 @@ def test_cachefuncarg(cache): val = cache.get("some/thing", None) assert val is None cache.set("some/thing", [1]) - pytest.raises(TypeError, lambda: cache.get("some/thing")) + with pytest.raises(TypeError): + cache.get("some/thing") val = cache.get("some/thing", []) assert val == [1] """ diff --git a/testing/test_capture.py b/testing/test_capture.py index 88368fadaae..7aaba99fe43 100644 --- a/testing/test_capture.py +++ b/testing/test_capture.py @@ -96,7 +96,8 @@ def test_init_capturing(self): try: capman = CaptureManager("fd") capman.start_global_capturing() - pytest.raises(AssertionError, capman.start_global_capturing) + with pytest.raises(AssertionError): + capman.start_global_capturing() capman.stop_global_capturing() finally: capouter.stop_capturing() @@ -885,7 +886,8 @@ def test_text(self) -> None: def test_unicode_and_str_mixture(self) -> None: f = capture.CaptureIO() f.write("\u00f6") - pytest.raises(TypeError, f.write, b"hello") + with pytest.raises(TypeError): + f.write(b"hello") # type: ignore[arg-type] def test_write_bytes_to_buffer(self) -> None: """In python3, stdout / stderr are text io wrappers (exposing a buffer @@ -912,7 +914,8 @@ def test_unicode_and_str_mixture(self) -> None: sio = io.StringIO() f = capture.TeeCaptureIO(sio) f.write("\u00f6") - pytest.raises(TypeError, f.write, b"hello") + with pytest.raises(TypeError): + f.write(b"hello") # type: ignore[arg-type] def test_dontreadfrominput() -> None: @@ -921,19 +924,29 @@ def test_dontreadfrominput() -> None: f = DontReadFromInput() assert f.buffer is f # type: ignore[comparison-overlap] assert not f.isatty() # type: ignore[unreachable] - pytest.raises(OSError, f.read) - pytest.raises(OSError, f.readlines) + with pytest.raises(OSError): + f.read() + with pytest.raises(OSError): + f.readlines() iter_f = iter(f) - pytest.raises(OSError, next, iter_f) - pytest.raises(UnsupportedOperation, f.fileno) - pytest.raises(UnsupportedOperation, f.flush) + with pytest.raises(OSError): + next(iter_f) + with pytest.raises(UnsupportedOperation): + f.fileno() + with pytest.raises(UnsupportedOperation): + f.flush() assert not f.readable() - pytest.raises(UnsupportedOperation, f.seek, 0) + with pytest.raises(UnsupportedOperation): + f.seek(0) assert not f.seekable() - pytest.raises(UnsupportedOperation, f.tell) - pytest.raises(UnsupportedOperation, f.truncate, 0) - pytest.raises(UnsupportedOperation, f.write, b"") - pytest.raises(UnsupportedOperation, f.writelines, []) + with pytest.raises(UnsupportedOperation): + f.tell() + with pytest.raises(UnsupportedOperation): + f.truncate(0) + with pytest.raises(UnsupportedOperation): + f.write(b"") + with pytest.raises(UnsupportedOperation): + f.writelines([]) assert not f.writable() assert isinstance(f.encoding, str) f.close() # just for completeness @@ -1005,7 +1018,8 @@ def test_simple(self, tmpfile: BinaryIO) -> None: cap = capture.FDCapture(fd) data = b"hello" os.write(fd, data) - pytest.raises(AssertionError, cap.snap) + with pytest.raises(AssertionError): + cap.snap() cap.done() cap = capture.FDCapture(fd) cap.start() @@ -1027,7 +1041,8 @@ def test_simple_fail_second_start(self, tmpfile: BinaryIO) -> None: fd = tmpfile.fileno() cap = capture.FDCapture(fd) cap.done() - pytest.raises(AssertionError, cap.start) + with pytest.raises(AssertionError): + cap.start() def test_stderr(self) -> None: cap = capture.FDCapture(2) @@ -1078,7 +1093,8 @@ def test_simple_resume_suspend(self) -> None: assert s == "but now yes\n" cap.suspend() cap.done() - pytest.raises(AssertionError, cap.suspend) + with pytest.raises(AssertionError): + cap.suspend() assert repr(cap) == ( f"" @@ -1160,7 +1176,8 @@ def test_reset_twice_error(self) -> None: with self.getcapture() as cap: print("hello") out, err = cap.readouterr() - pytest.raises(ValueError, cap.stop_capturing) + with pytest.raises(ValueError): + cap.stop_capturing() assert out == "hello\n" assert not err @@ -1218,7 +1235,8 @@ def test_stdin_nulled_by_default(self) -> None: print("XXX which indicates an error in the underlying capturing") print("XXX mechanisms") with self.getcapture(): - pytest.raises(OSError, sys.stdin.read) + with pytest.raises(OSError): + sys.stdin.read() class TestTeeStdCapture(TestStdCapture): @@ -1672,9 +1690,8 @@ def test_encodedfile_writelines(tmpfile: BinaryIO) -> None: def test__get_multicapture() -> None: assert isinstance(_get_multicapture("no"), MultiCapture) - pytest.raises(ValueError, _get_multicapture, "unknown").match( - r"^unknown capturing method: 'unknown'" - ) + with pytest.raises(ValueError, match=r"^unknown capturing method: 'unknown'$"): + _get_multicapture("unknown") # type: ignore[arg-type] def test_logging_while_collecting(pytester: Pytester) -> None: diff --git a/testing/test_config.py b/testing/test_config.py index de11e3fa13a..296461c12fc 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -692,7 +692,8 @@ def test_args_source_testpaths(self, pytester: Pytester): class TestConfigCmdlineParsing: def test_parsing_again_fails(self, pytester: Pytester) -> None: config = pytester.parseconfig() - pytest.raises(AssertionError, lambda: config.parse([])) + with pytest.raises(AssertionError): + config.parse([]) def test_explicitly_specified_config_file_is_loaded( self, pytester: Pytester @@ -777,7 +778,8 @@ def pytest_addoption(parser): config = pytester.parseconfig("--hello=this") for x in ("hello", "--hello", "-X"): assert config.getoption(x) == "this" - pytest.raises(ValueError, config.getoption, "qweqwe") + with pytest.raises(ValueError): + config.getoption("qweqwe") config_novalue = pytester.parseconfig() assert config_novalue.getoption("hello") is None @@ -803,7 +805,8 @@ def pytest_addoption(parser): def test_config_getvalueorskip(self, pytester: Pytester) -> None: config = pytester.parseconfig() - pytest.raises(pytest.skip.Exception, config.getvalueorskip, "hello") + with pytest.raises(pytest.skip.Exception): + config.getvalueorskip("hello") verbose = config.getvalueorskip("verbose") assert verbose == config.option.verbose @@ -851,7 +854,8 @@ def pytest_addoption(parser): config = pytester.parseconfig() val = config.getini("myname") assert val == "hello" - pytest.raises(ValueError, config.getini, "other") + with pytest.raises(ValueError): + config.getini("other") @pytest.mark.parametrize("config_type", ["ini", "pyproject"]) def test_addini_paths(self, pytester: Pytester, config_type: str) -> None: @@ -881,7 +885,8 @@ def pytest_addoption(parser): assert len(values) == 2 assert values[0] == inipath.parent.joinpath("hello") assert values[1] == inipath.parent.joinpath("world/sub.py") - pytest.raises(ValueError, config.getini, "other") + with pytest.raises(ValueError): + config.getini("other") def make_conftest_for_args(self, pytester: Pytester) -> None: pytester.makeconftest( diff --git a/testing/test_debugging.py b/testing/test_debugging.py index 08ebf600253..950386a4923 100644 --- a/testing/test_debugging.py +++ b/testing/test_debugging.py @@ -324,12 +324,13 @@ def test_pdb_interaction_exception(self, pytester: Pytester) -> None: def globalfunc(): pass def test_1(): - pytest.raises(ValueError, globalfunc) + with pytest.raises(ValueError): + globalfunc() """ ) child = pytester.spawn_pytest(f"--pdb {p1}") child.expect(".*def test_1") - child.expect(".*pytest.raises.*globalfunc") + child.expect(r"with pytest.raises\(ValueError\)") child.expect("Pdb") child.sendline("globalfunc") child.expect(".*function") diff --git a/testing/test_legacypath.py b/testing/test_legacypath.py index d1f2255f30f..3e71e6b190c 100644 --- a/testing/test_legacypath.py +++ b/testing/test_legacypath.py @@ -141,7 +141,8 @@ def pytest_addoption(parser): assert len(values) == 2 assert values[0] == inipath.parent.joinpath("hello") assert values[1] == inipath.parent.joinpath("world/sub.py") - pytest.raises(ValueError, config.getini, "other") + with pytest.raises(ValueError): + config.getini("other") def test_override_ini_paths(pytester: pytest.Pytester) -> None: diff --git a/testing/test_mark.py b/testing/test_mark.py index 67219313183..7ae82fefd3c 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -735,8 +735,8 @@ def pytest_collection_modifyitems(session): session.add_marker("mark1") session.add_marker(pytest.mark.mark2) session.add_marker(pytest.mark.mark3) - pytest.raises(ValueError, lambda: - session.add_marker(10)) + with pytest.raises(ValueError): + session.add_marker(10) """ ) pytester.makepyfile( diff --git a/testing/test_monkeypatch.py b/testing/test_monkeypatch.py index c321439e398..988790268d2 100644 --- a/testing/test_monkeypatch.py +++ b/testing/test_monkeypatch.py @@ -28,7 +28,8 @@ class A: x = 1 monkeypatch = MonkeyPatch() - pytest.raises(AttributeError, monkeypatch.setattr, A, "notexists", 2) + with pytest.raises(AttributeError): + monkeypatch.setattr(A, "notexists", 2) monkeypatch.setattr(A, "y", 2, raising=False) assert A.y == 2 # type: ignore monkeypatch.undo() @@ -109,7 +110,8 @@ class A: monkeypatch = MonkeyPatch() monkeypatch.delattr(A, "x") - pytest.raises(AttributeError, monkeypatch.delattr, A, "y") + with pytest.raises(AttributeError): + monkeypatch.delattr(A, "y") monkeypatch.delattr(A, "y", raising=False) monkeypatch.setattr(A, "x", 5, raising=False) assert A.x == 5 @@ -166,7 +168,8 @@ def test_delitem() -> None: monkeypatch.delitem(d, "x") assert "x" not in d monkeypatch.delitem(d, "y", raising=False) - pytest.raises(KeyError, monkeypatch.delitem, d, "y") + with pytest.raises(KeyError): + monkeypatch.delitem(d, "y") assert not d monkeypatch.setitem(d, "y", 1700) assert d["y"] == 1700 @@ -192,7 +195,8 @@ def test_delenv() -> None: name = "xyz1234" assert name not in os.environ monkeypatch = MonkeyPatch() - pytest.raises(KeyError, monkeypatch.delenv, name, raising=True) + with pytest.raises(KeyError): + monkeypatch.delenv(name, raising=True) monkeypatch.delenv(name, raising=False) monkeypatch.undo() os.environ[name] = "1" diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py index 4b721cb96f6..f56deed8b5d 100644 --- a/testing/test_parseopt.py +++ b/testing/test_parseopt.py @@ -24,7 +24,8 @@ def parser() -> parseopt.Parser: class TestParser: def test_no_help_by_default(self) -> None: parser = parseopt.Parser(usage="xyz", _ispytest=True) - pytest.raises(UsageError, lambda: parser.parse(["-h"])) + with pytest.raises(UsageError): + parser.parse(["-h"]) def test_custom_prog(self, parser: parseopt.Parser) -> None: """Custom prog can be set for `argparse.ArgumentParser`.""" diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index 24700c07c80..385d907d481 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -268,8 +268,10 @@ def test_register_imported_modules(self) -> None: assert pm.is_registered(mod) values = pm.get_plugins() assert mod in values - pytest.raises(ValueError, pm.register, mod) - pytest.raises(ValueError, lambda: pm.register(mod)) + with pytest.raises(ValueError): + pm.register(mod) + with pytest.raises(ValueError): + pm.register(mod) # assert not pm.is_registered(mod2) assert pm.get_plugins() == values @@ -376,8 +378,10 @@ def test_hello(pytestconfig): def test_import_plugin_importname( self, pytester: Pytester, pytestpm: PytestPluginManager ) -> None: - pytest.raises(ImportError, pytestpm.import_plugin, "qweqwex.y") - pytest.raises(ImportError, pytestpm.import_plugin, "pytest_qweqwx.y") + with pytest.raises(ImportError): + pytestpm.import_plugin("qweqwex.y") + with pytest.raises(ImportError): + pytestpm.import_plugin("pytest_qweqwx.y") pytester.syspathinsert() pluginname = "pytest_hello" @@ -396,8 +400,10 @@ def test_import_plugin_importname( def test_import_plugin_dotted_name( self, pytester: Pytester, pytestpm: PytestPluginManager ) -> None: - pytest.raises(ImportError, pytestpm.import_plugin, "qweqwex.y") - pytest.raises(ImportError, pytestpm.import_plugin, "pytest_qweqwex.y") + with pytest.raises(ImportError): + pytestpm.import_plugin("qweqwex.y") + with pytest.raises(ImportError): + pytestpm.import_plugin("pytest_qweqwex.y") pytester.syspathinsert() pytester.mkpydir("pkg").joinpath("plug.py").write_text("x=3", encoding="utf-8") @@ -423,9 +429,8 @@ def test_consider_conftest_deps( class TestPytestPluginManagerBootstrapping: def test_preparse_args(self, pytestpm: PytestPluginManager) -> None: - pytest.raises( - ImportError, lambda: pytestpm.consider_preparse(["xyz", "-p", "hello123"]) - ) + with pytest.raises(ImportError): + pytestpm.consider_preparse(["xyz", "-p", "hello123"]) # Handles -p without space (#3532). with pytest.raises(ImportError) as excinfo: diff --git a/testing/test_pytester.py b/testing/test_pytester.py index 5e2e22f111b..f641e9ee8bb 100644 --- a/testing/test_pytester.py +++ b/testing/test_pytester.py @@ -71,7 +71,8 @@ class rep2: recorder.unregister() # type: ignore[attr-defined] recorder.clear() recorder.hook.pytest_runtest_logreport(report=rep3) # type: ignore[attr-defined] - pytest.raises(ValueError, recorder.getfailures) + with pytest.raises(ValueError): + recorder.getfailures() def test_parseconfig(pytester: Pytester) -> None: @@ -196,7 +197,8 @@ def test_hookrecorder_basic(holder) -> None: call = rec.popcall("pytest_xyz") assert call.arg == 123 assert call._name == "pytest_xyz" - pytest.raises(pytest.fail.Exception, rec.popcall, "abc") + with pytest.raises(pytest.fail.Exception): + rec.popcall("abc") pm.hook.pytest_xyz_noarg() call = rec.popcall("pytest_xyz_noarg") assert call._name == "pytest_xyz_noarg" diff --git a/testing/test_recwarn.py b/testing/test_recwarn.py index 3f89a8ed21c..f05fc6e4871 100644 --- a/testing/test_recwarn.py +++ b/testing/test_recwarn.py @@ -97,7 +97,8 @@ def test_recording(self) -> None: rec.clear() assert len(rec.list) == 0 assert values is rec.list - pytest.raises(AssertionError, rec.pop) + with pytest.raises(AssertionError): + rec.pop() def test_warn_stacklevel(self) -> None: """#4243""" @@ -145,10 +146,12 @@ def dep_explicit(self, i: int) -> None: def test_deprecated_call_raises(self) -> None: with pytest.raises(pytest.fail.Exception, match="No warnings of type"): - pytest.deprecated_call(self.dep, 3, 5) + with pytest.deprecated_call(): + self.dep(3, 5) def test_deprecated_call(self) -> None: - pytest.deprecated_call(self.dep, 0, 5) + with pytest.deprecated_call(): + self.dep(0, 5) def test_deprecated_call_ret(self) -> None: ret = pytest.deprecated_call(self.dep, 0) @@ -170,11 +173,14 @@ def test_deprecated_call_preserves(self) -> None: def test_deprecated_explicit_call_raises(self) -> None: with pytest.raises(pytest.fail.Exception): - pytest.deprecated_call(self.dep_explicit, 3) + with pytest.deprecated_call(): + self.dep_explicit(3) def test_deprecated_explicit_call(self) -> None: - pytest.deprecated_call(self.dep_explicit, 0) - pytest.deprecated_call(self.dep_explicit, 0) + with pytest.deprecated_call(): + self.dep_explicit(0) + with pytest.deprecated_call(): + self.dep_explicit(0) @pytest.mark.parametrize("mode", ["context_manager", "call"]) def test_deprecated_call_no_warning(self, mode) -> None: @@ -198,7 +204,7 @@ def f(): ) @pytest.mark.parametrize("mode", ["context_manager", "call"]) @pytest.mark.parametrize("call_f_first", [True, False]) - @pytest.mark.filterwarnings("ignore") + @pytest.mark.filterwarnings("ignore:hi") def test_deprecated_call_modes(self, warning_type, mode, call_f_first) -> None: """Ensure deprecated_call() captures a deprecation warning as expected inside its block/function. @@ -258,11 +264,14 @@ def test_check_callable(self) -> None: def test_several_messages(self) -> None: # different messages, b/c Python suppresses multiple identical warnings - pytest.warns(RuntimeWarning, lambda: warnings.warn("w1", RuntimeWarning)) + with pytest.warns(RuntimeWarning): + warnings.warn("w1", RuntimeWarning) with pytest.warns(RuntimeWarning): with pytest.raises(pytest.fail.Exception): - pytest.warns(UserWarning, lambda: warnings.warn("w2", RuntimeWarning)) - pytest.warns(RuntimeWarning, lambda: warnings.warn("w3", RuntimeWarning)) + with pytest.warns(UserWarning): + warnings.warn("w2", RuntimeWarning) + with pytest.warns(RuntimeWarning): + warnings.warn("w3", RuntimeWarning) def test_function(self) -> None: pytest.warns( @@ -270,20 +279,14 @@ def test_function(self) -> None: ) def test_warning_tuple(self) -> None: - pytest.warns( - (RuntimeWarning, SyntaxWarning), lambda: warnings.warn("w1", RuntimeWarning) - ) - pytest.warns( - (RuntimeWarning, SyntaxWarning), lambda: warnings.warn("w2", SyntaxWarning) - ) - with pytest.warns(): - pytest.raises( - pytest.fail.Exception, - lambda: pytest.warns( - (RuntimeWarning, SyntaxWarning), - lambda: warnings.warn("w3", UserWarning), - ), - ) + with pytest.warns((RuntimeWarning, SyntaxWarning)): + warnings.warn("w1", RuntimeWarning) + with pytest.warns((RuntimeWarning, SyntaxWarning)): + warnings.warn("w2", SyntaxWarning) + with pytest.warns(UserWarning, match="^w3$"): + with pytest.raises(pytest.fail.Exception): + with pytest.warns((RuntimeWarning, SyntaxWarning)): + warnings.warn("w3", UserWarning) def test_as_contextmanager(self) -> None: with pytest.warns(RuntimeWarning): diff --git a/testing/test_runner.py b/testing/test_runner.py index 6ecdfe7e62c..3cb3c3a3841 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -779,8 +779,10 @@ def f(): # check that importorskip reports the actual call # in this test the test_runner.py file assert path.stem == "test_runner" - pytest.raises(SyntaxError, pytest.importorskip, "x y z") - pytest.raises(SyntaxError, pytest.importorskip, "x=y") + with pytest.raises(SyntaxError): + pytest.importorskip("x y z") + with pytest.raises(SyntaxError): + pytest.importorskip("x=y") mod = types.ModuleType("hello123") mod.__version__ = "1.3" # type: ignore monkeypatch.setitem(sys.modules, "hello123", mod) diff --git a/testing/test_session.py b/testing/test_session.py index e3db9a1b690..be1e66112d7 100644 --- a/testing/test_session.py +++ b/testing/test_session.py @@ -63,7 +63,8 @@ def test_raises_output(self, pytester: Pytester) -> None: """ import pytest def test_raises_doesnt(): - pytest.raises(ValueError, int, "3") + with pytest.raises(ValueError): + int("3") """ ) _passed, _skipped, failed = reprec.listoutcomes() diff --git a/testing/test_skipping.py b/testing/test_skipping.py index e1e25e45468..5bb641aed3c 100644 --- a/testing/test_skipping.py +++ b/testing/test_skipping.py @@ -919,7 +919,8 @@ def test_func(): pass """ ) - pytest.raises(pytest.skip.Exception, lambda: pytest_runtest_setup(item)) + with pytest.raises(pytest.skip.Exception): + pytest_runtest_setup(item) @pytest.mark.parametrize( "marker, msg1, msg2", From d42cef1e234c7ffedfe4dd38796b8829c955d345 Mon Sep 17 00:00:00 2001 From: jakkdl Date: Wed, 4 Jun 2025 15:26:12 +0200 Subject: [PATCH 247/307] doc: undocument legacy forms of `raises`, `warns`, `deprecated_call` We don't intend to deprecate the legacy forms, but there is no reason to use them anymore, and they add complexity/confusion, so let's just mostly pretend they don't exist in the docs. --- doc/en/how-to/assert.rst | 4 ---- doc/en/how-to/capture-warnings.rst | 7 ------- src/_pytest/raises.py | 19 ------------------- src/_pytest/recwarn.py | 17 ++++++++--------- 4 files changed, 8 insertions(+), 39 deletions(-) diff --git a/doc/en/how-to/assert.rst b/doc/en/how-to/assert.rst index 006cf475b02..5ae676cf59b 100644 --- a/doc/en/how-to/assert.rst +++ b/doc/en/how-to/assert.rst @@ -322,13 +322,9 @@ will then execute the function with those arguments and assert that the given ex pytest.raises(ValueError, func, x=-1) -The reporter will provide you with helpful output in case of failures such as *no -exception* or *wrong exception*. - This form was the original :func:`pytest.raises` API, developed before the ``with`` statement was added to the Python language. Nowadays, this form is rarely used, with the context-manager form (using ``with``) being considered more readable. -Nonetheless, this form is fully supported and not deprecated in any way. xfail mark and pytest.raises ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index e5bc4d27874..daaf8937e1a 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -371,13 +371,6 @@ Some examples: ... warnings.warn("issue with foo() func") ... -You can also call :func:`pytest.warns` on a function or code string: - -.. code-block:: python - - pytest.warns(expected_warning, func, *args, **kwargs) - pytest.warns(expected_warning, "func(*args, **kwargs)") - The function also returns a list of all raised warnings (as ``warnings.WarningMessage`` objects), which you can query for additional information: diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 76199e3df02..948f6109cbe 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -237,25 +237,6 @@ def raises( :ref:`assertraises` for more examples and detailed discussion. - **Legacy form** - - It is possible to specify a callable by passing a to-be-called lambda:: - - >>> raises(ZeroDivisionError, lambda: 1/0) - - - or you can specify an arbitrary callable with arguments:: - - >>> def f(x): return 1/x - ... - >>> raises(ZeroDivisionError, f, 0) - - >>> raises(ZeroDivisionError, f, x=0) - - - The form above is fully supported but discouraged for new code because the - context manager form is regarded as more readable and less error-prone. - .. note:: Similar to caught exception objects in Python, explicitly clearing local references to returned ``ExceptionInfo`` objects can diff --git a/src/_pytest/recwarn.py b/src/_pytest/recwarn.py index 3351e9ed395..dd1164b0e91 100644 --- a/src/_pytest/recwarn.py +++ b/src/_pytest/recwarn.py @@ -67,16 +67,15 @@ def deprecated_call( >>> import pytest >>> with pytest.deprecated_call(): ... assert api_call_v2() == 200 + >>> with pytest.deprecated_call(match="^use v3 of this api$") as warning_messages: + ... assert api_call_v2() == 200 - It can also be used by passing a function and ``*args`` and ``**kwargs``, - in which case it will ensure calling ``func(*args, **kwargs)`` produces one of - the warnings types above. The return value is the return value of the function. - - In the context manager form you may use the keyword argument ``match`` to assert + You may use the keyword argument ``match`` to assert that the warning matches a text or regex. - The context manager produces a list of :class:`warnings.WarningMessage` objects, - one for each warning raised. + The return value is a list of :class:`warnings.WarningMessage` objects, + one for each warning emitted + (regardless of whether it is an ``expected_warning`` or not). """ __tracebackhide__ = True if func is not None: @@ -119,13 +118,13 @@ def warns( each warning emitted (regardless of whether it is an ``expected_warning`` or not). Since pytest 8.0, unmatched warnings are also re-emitted when the context closes. - This function can be used as a context manager:: + This function should be used as a context manager:: >>> import pytest >>> with pytest.warns(RuntimeWarning): ... warnings.warn("my warning", RuntimeWarning) - In the context manager form you may use the keyword argument ``match`` to assert + The ``match`` keyword argument can be used to assert that the warning matches a text or regex:: >>> with pytest.warns(UserWarning, match='must be 0 or None'): From f7f0889be2be5f63557a8c564ab7d94b3a8636c0 Mon Sep 17 00:00:00 2001 From: jakkdl Date: Wed, 4 Jun 2025 15:26:12 +0200 Subject: [PATCH 248/307] Add `ParamSpec` to legacy callable forms of `raises`/`warns`/`deprecated_call` `pytest.raises`, `warns` & `deprecated_call` previously typed `*args` and `**kwargs` as `Any` in the legacy callable form, so this did not raise errors: ```py def foo(x: int) -> None: raise ValueError raises(ValueError, foo, None) ``` but now it will give call-overload. It also makes it possible to pass `func` as a kwarg, which the type hints previously showed as possible, but it didn't work. It's possible that `func` (and the expected type?) should be pos-only, as this looks quite weird: ```py raises(1, 2, kwarg1=3, func=my_func, kwarg2=4, expected_exception=ValueError) ``` but if somebody is dynamically generating parameters to send to `raises` then we probably shouldn't ban it needlessly; and we can't make `func` pos-only without making `expected_exception` pos-only, and that could break backwards compatibility. --- changelog/13241.improvement.rst | 2 ++ doc/en/conf.py | 4 ++++ pyproject.toml | 1 + src/_pytest/raises.py | 12 ++++++------ src/_pytest/recwarn.py | 30 +++++++++++++++++------------- 5 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 changelog/13241.improvement.rst diff --git a/changelog/13241.improvement.rst b/changelog/13241.improvement.rst new file mode 100644 index 00000000000..41ba55e280a --- /dev/null +++ b/changelog/13241.improvement.rst @@ -0,0 +1,2 @@ +:func:`pytest.raises`, :func:`pytest.warns` and :func:`pytest.deprecated_call` now uses :class:`ParamSpec` for the type hint to the (old and not recommended) callable overload, instead of :class:`Any`. This allows type checkers to raise errors when passing incorrect function parameters. +``func`` can now also be passed as a kwarg, which the type hint previously showed as possible but didn't accept. diff --git a/doc/en/conf.py b/doc/en/conf.py index 25dc526c4da..84b1c99e181 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -102,6 +102,10 @@ # TypeVars ("py:class", "_pytest._code.code.E"), ("py:class", "E"), # due to delayed annotation + ("py:class", "T"), + ("py:class", "P"), + ("py:class", "P.args"), + ("py:class", "P.kwargs"), ("py:class", "_pytest.fixtures.FixtureFunction"), ("py:class", "_pytest.nodes._NodeType"), ("py:class", "_NodeType"), # due to delayed annotation diff --git a/pyproject.toml b/pyproject.toml index e51cafbd747..83d367d7024 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -453,6 +453,7 @@ exclude_lines = [ '^\s*case unreachable:', '^\s*assert_never\(', '^\s*if TYPE_CHECKING:', + '^\s*(el)?if TYPE_CHECKING:', '^\s*@overload( |$)', '^\s*def .+: \.\.\.$', '^\s*@pytest\.mark\.xfail', diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 948f6109cbe..23690a00470 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -95,14 +95,15 @@ def raises(*, check: Callable[[BaseException], bool]) -> RaisesExc[BaseException @overload def raises( expected_exception: type[E] | tuple[type[E], ...], - func: Callable[..., Any], - *args: Any, - **kwargs: Any, + func: Callable[P, object], + *args: P.args, + **kwargs: P.kwargs, ) -> ExceptionInfo[E]: ... def raises( expected_exception: type[E] | tuple[type[E], ...] | None = None, + func: Callable[P, object] | None = None, *args: Any, **kwargs: Any, ) -> RaisesExc[BaseException] | ExceptionInfo[E]: @@ -253,7 +254,7 @@ def raises( """ __tracebackhide__ = True - if not args: + if func is None and not args: if set(kwargs) - {"match", "check", "expected_exception"}: msg = "Unexpected keyword arguments passed to pytest.raises: " msg += ", ".join(sorted(kwargs)) @@ -270,11 +271,10 @@ def raises( f"Raising exceptions is already understood as failing the test, so you don't need " f"any special code to say 'this should never raise an exception'." ) - func = args[0] if not callable(func): raise TypeError(f"{func!r} object (type: {type(func)}) must be callable") with RaisesExc(expected_exception) as excinfo: - func(*args[1:], **kwargs) + func(*args, **kwargs) try: return excinfo finally: diff --git a/src/_pytest/recwarn.py b/src/_pytest/recwarn.py index dd1164b0e91..c3cb10b7f08 100644 --- a/src/_pytest/recwarn.py +++ b/src/_pytest/recwarn.py @@ -17,8 +17,11 @@ if TYPE_CHECKING: + from typing_extensions import ParamSpec from typing_extensions import Self + P = ParamSpec("P") + import warnings from _pytest.deprecated import check_ispytest @@ -49,7 +52,7 @@ def deprecated_call( @overload -def deprecated_call(func: Callable[..., T], *args: Any, **kwargs: Any) -> T: ... +def deprecated_call(func: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T: ... def deprecated_call( @@ -78,11 +81,12 @@ def deprecated_call( (regardless of whether it is an ``expected_warning`` or not). """ __tracebackhide__ = True - if func is not None: - args = (func, *args) - return warns( - (DeprecationWarning, PendingDeprecationWarning, FutureWarning), *args, **kwargs - ) + dep_warnings = (DeprecationWarning, PendingDeprecationWarning, FutureWarning) + if func is None: + return warns(dep_warnings, *args, **kwargs) + + with warns(dep_warnings): + return func(*args, **kwargs) @overload @@ -96,16 +100,16 @@ def warns( @overload def warns( expected_warning: type[Warning] | tuple[type[Warning], ...], - func: Callable[..., T], - *args: Any, - **kwargs: Any, + func: Callable[P, T], + *args: P.args, + **kwargs: P.kwargs, ) -> T: ... def warns( expected_warning: type[Warning] | tuple[type[Warning], ...] = Warning, + func: Callable[..., object] | None = None, *args: Any, - match: str | re.Pattern[str] | None = None, **kwargs: Any, ) -> WarningsChecker | Any: r"""Assert that code raises a particular class of warning. @@ -152,7 +156,8 @@ def warns( """ __tracebackhide__ = True - if not args: + if func is None and not args: + match: str | re.Pattern[str] | None = kwargs.pop("match", None) if kwargs: argnames = ", ".join(sorted(kwargs)) raise TypeError( @@ -161,11 +166,10 @@ def warns( ) return WarningsChecker(expected_warning, match_expr=match, _ispytest=True) else: - func = args[0] if not callable(func): raise TypeError(f"{func!r} object (type: {type(func)}) must be callable") with WarningsChecker(expected_warning, _ispytest=True): - return func(*args[1:], **kwargs) + return func(*args, **kwargs) class WarningsRecorder(warnings.catch_warnings): From 49332108d715d1829230cf72800e6ec1c13bd9ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 03:04:06 +0000 Subject: [PATCH 249/307] build(deps): Bump actions/cache from 5.0.3 to 5.0.4 Bumps [actions/cache](https://github.com/actions/cache) from 5.0.3 to 5.0.4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/cdf6c1fa76f9f475f3d7449005a359c84ca0f306...668228422ae6a00e4ad889ee87cd7109ec5666a7) --- updated-dependencies: - dependency-name: actions/cache dependency-version: 5.0.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 4dad74478d3..132f5081458 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -31,7 +31,7 @@ jobs: python-version: "3.13" - name: requests-cache - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: ~/.cache/pytest-plugin-list/ key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well From 694ffffa3babfd15588cadf83079559da89be28c Mon Sep 17 00:00:00 2001 From: Marco Edward Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Fri, 10 Apr 2026 08:06:41 +0100 Subject: [PATCH 250/307] Type `pytest.approx` (#14373) --- changelog/14373.improvement.rst | 1 + src/_pytest/python_api.py | 7 ++++++- testing/python/approx.py | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 changelog/14373.improvement.rst diff --git a/changelog/14373.improvement.rst b/changelog/14373.improvement.rst new file mode 100644 index 00000000000..ea145f8b4a8 --- /dev/null +++ b/changelog/14373.improvement.rst @@ -0,0 +1 @@ +Added type annotations for :func:`pytest.approx`. diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index bab70aa4a8c..9e2e1826a4f 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -558,7 +558,12 @@ def __repr__(self) -> str: return f"{self.expected} ± {tol_str}" -def approx(expected, rel=None, abs=None, nan_ok: bool = False) -> ApproxBase: +def approx( + expected: Any, + rel: float | Decimal | None = None, + abs: float | Decimal | None = None, + nan_ok: bool = False, +) -> ApproxBase: """Assert that two numbers (or two ordered sequences of numbers) are equal to each other within some tolerance. diff --git a/testing/python/approx.py b/testing/python/approx.py index 481df80565c..bfbb59fb61d 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -616,6 +616,8 @@ def test_decimal(self): assert a != approx(x, rel=Decimal("5e-7"), abs=0) assert approx(x, rel=Decimal("5e-6"), abs=0) == a assert approx(x, rel=Decimal("5e-7"), abs=0) != a + assert approx(x, rel=0, abs=Decimal("5e-3")) == a + assert approx(x, rel=0, abs=Decimal("5e-7")) != a def test_fraction(self): within_1e6 = [ From 10cb8b993b3b10ecd6d858ab4ab87f31cb059b88 Mon Sep 17 00:00:00 2001 From: Tobias Deiminger Date: Fri, 16 Sep 2022 17:41:09 +0200 Subject: [PATCH 251/307] testing/logging/test_reporting: add xfail test for report capturing of non-propagating loggers Demonstrate the bug/missing functionality of reporting logs emitted by non-propagating loggers (i.e. loggers which don't reach the root logger, where we currently attach our handler). Refs #3697 [ran: extracted from #10303 and changed to use HookRecorder] --- testing/logging/test_reporting.py | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/testing/logging/test_reporting.py b/testing/logging/test_reporting.py index 4974532e888..95a44d7cdf0 100644 --- a/testing/logging/test_reporting.py +++ b/testing/logging/test_reporting.py @@ -1255,6 +1255,40 @@ def test_foo(): ) +@pytest.mark.xfail(reason="#3697 - not capturing propagate=False loggers yet") +def test_log_propagation_false(pytester: Pytester) -> None: + pytester.makepyfile( + """ + import pytest + import logging + + logging.getLogger('foo').propagate = False + + def test_log_file(request): + logging.getLogger().warning("log goes to root logger") + logging.getLogger('foo').warning("log goes to initially non-propagating logger") + logging.getLogger('foo.bar').propagate = False + logging.getLogger('foo.bar').warning("log goes to propagation-disabled-in-test logger") + assert False, "intentionally fail to trigger report logging output" + """ + ) + + reprec = pytester.inline_run() + reports = reprec.getfailures() + assert len(reports) == 1 + report = reports[0] + sections = list(report.get_sections("Captured log call")) + assert len(sections) == 1 + assert sections[0][1] == "\n".join( + [ + "WARNING root:test_log_propagation_false.py:7 log goes to root logger", + "WARNING foo:test_log_propagation_false.py:8 log goes to initially non-propagating logger", + "WARNING foo.bar:test_log_propagation_false.py:10 log goes to propagation-disabled-in-test logger", + ] + ) + assert not list(report.get_sections("Captured stderr call")) + + def test_colored_ansi_esc_caplogtext(pytester: Pytester) -> None: """Make sure that caplog.text does not contain ANSI escape sequences.""" pytester.makepyfile( From 9cd87111557af9e23f5fbb38ca2e33db8cd0cb88 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 11 Apr 2026 00:08:52 +0300 Subject: [PATCH 252/307] pathlib: remove unneeded code from `_import_module_using_spec` There should not be a need to look at `module_path` in `find_spec`, only at the `module_location`, i.e. the parent path of the module. It's not needed for assertion rewrite (why would it? It's not supposed to be special in this regard). This was added in 28e1e25a6782513db8a2963bd5ed5a9d66682f86, seems that commit did the right thing by removing `module_path` in the general case, but for some reason kept it for the assertion rewrite meta path finder. --- src/_pytest/pathlib.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index 4fd94cefab2..027901b108f 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -693,15 +693,8 @@ def _import_module_using_spec( # Checking with sys.meta_path first in case one of its hooks can import this module, # such as our own assertion-rewrite hook. + find_spec_path = [str(module_location)] for meta_importer in sys.meta_path: - module_name_of_meta = getattr(meta_importer.__class__, "__module__", "") - if module_name_of_meta == "_pytest.assertion.rewrite" and module_path.is_file(): - # Import modules in subdirectories by module_path - # to ensure assertion rewrites are not missed (#12659). - find_spec_path = [str(module_location), str(module_path)] - else: - find_spec_path = [str(module_location)] - spec = meta_importer.find_spec(module_name, find_spec_path) if spec_matches_module_path(spec, module_path): From c5e09e0ecd2b2f2ca0dd7da5c1420f44f3c07209 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 11 Apr 2026 00:19:11 +0300 Subject: [PATCH 253/307] assertion/rewrite: remove unnecessary code in `AssertionRewritingHook.find_spec` This was added in 9a444d113658be6ccb8dc9f57ed118a1ef17c94c, but seems like the real issue was fixed in 7ef189757eb0cc9a99b9dc79727f66f1e3c1d5c7, so this is no longer needed. See also the previous commit. --- src/_pytest/assertion/rewrite.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/_pytest/assertion/rewrite.py b/src/_pytest/assertion/rewrite.py index 566549d66f2..99815b70cf1 100644 --- a/src/_pytest/assertion/rewrite.py +++ b/src/_pytest/assertion/rewrite.py @@ -115,15 +115,6 @@ def find_spec( # Type ignored because mypy is confused about the `self` binding here. spec = self._find_spec(name, path) # type: ignore - if spec is None and path is not None: - # With --import-mode=importlib, PathFinder cannot find spec without modifying `sys.path`, - # causing inability to assert rewriting (#12659). - # At this point, try using the file path to find the module spec. - for _path_str in path: - spec = importlib.util.spec_from_file_location(name, _path_str) - if spec is not None: - break - if ( # the import machinery could not find a file to import spec is None From 166a857f3a6375e72b9f4c65daf4d66f2e7d4ec7 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 11 Apr 2026 00:22:18 +0300 Subject: [PATCH 254/307] pathlib: remove `module_location` parameter of `_import_module_using_spec` It is always `module_path.parent`. --- src/_pytest/pathlib.py | 23 ++++------------------- testing/test_pathlib.py | 1 - 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index 027901b108f..614898cef78 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -546,9 +546,7 @@ def import_path( with contextlib.suppress(KeyError): return sys.modules[module_name] - mod = _import_module_using_spec( - module_name, path, path.parent, insert_modules=False - ) + mod = _import_module_using_spec(module_name, path, insert_modules=False) if mod is not None: return mod @@ -558,9 +556,7 @@ def import_path( with contextlib.suppress(KeyError): return sys.modules[module_name] - mod = _import_module_using_spec( - module_name, path, path.parent, insert_modules=True - ) + mod = _import_module_using_spec(module_name, path, insert_modules=True) if mod is None: raise ImportError(f"Can't find module {module_name} at location {path}") return mod @@ -613,7 +609,7 @@ def import_path( def _import_module_using_spec( - module_name: str, module_path: Path, module_location: Path, *, insert_modules: bool + module_name: str, module_path: Path, *, insert_modules: bool ) -> ModuleType | None: """ Tries to import a module by its canonical name, path, and its parent location. @@ -626,10 +622,6 @@ def _import_module_using_spec( If module is a package, pass the path to the `__init__.py` of the package. If module is a namespace package, pass directory path. - :param module_location: - The parent location of the module. - If module is a package, pass the directory containing the `__init__.py` file. - :param insert_modules: If True, will call `insert_missing_modules` to create empty intermediate modules with made-up module names (when importing test files not reachable from `sys.path`). @@ -638,29 +630,23 @@ def _import_module_using_spec( module_name: "a.b.c.demo" module_path: Path("a/b/c/demo.py") - module_location: Path("a/b/c/") if "a.b.c" is package ("a/b/c/__init__.py" exists), then parent_module_name: "a.b.c" parent_module_path: Path("a/b/c/__init__.py") - parent_module_location: Path("a/b/c/") else: parent_module_name: "a.b.c" parent_module_path: Path("a/b/c") - parent_module_location: Path("a/b/") Example 2 of parent_module_*: module_name: "a.b.c" module_path: Path("a/b/c/__init__.py") - module_location: Path("a/b/c/") if "a.b" is package ("a/b/__init__.py" exists), then parent_module_name: "a.b" parent_module_path: Path("a/b/__init__.py") - parent_module_location: Path("a/b/") else: parent_module_name: "a.b" parent_module_path: Path("a/b/") - parent_module_location: Path("a/") """ # Attempt to import the parent module, seems is our responsibility: # https://github.com/python/cpython/blob/73906d5c908c1e0b73c5436faeff7d93698fc074/Lib/importlib/_bootstrap.py#L1308-L1311 @@ -687,13 +673,12 @@ def _import_module_using_spec( parent_module = _import_module_using_spec( parent_module_name, parent_module_path, - parent_module_path.parent, insert_modules=insert_modules, ) # Checking with sys.meta_path first in case one of its hooks can import this module, # such as our own assertion-rewrite hook. - find_spec_path = [str(module_location)] + find_spec_path = [str(module_path.parent)] for meta_importer in sys.meta_path: spec = meta_importer.find_spec(module_name, find_spec_path) diff --git a/testing/test_pathlib.py b/testing/test_pathlib.py index be20f3fea48..bd85b7e8fb4 100644 --- a/testing/test_pathlib.py +++ b/testing/test_pathlib.py @@ -828,7 +828,6 @@ def test_import_module_using_spec( mod = _import_module_using_spec( "a.b.c.demo", file_path, - file_path.parent, insert_modules=insert_modules, ) From 2f0fc19d4cdf0c7d50a32c4c14a151b0a4730607 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 11 Apr 2026 14:37:32 +0300 Subject: [PATCH 255/307] doc/reference: add a note to `consider_namespace_packages` that the packages need to be importable Fix #12303. --- doc/en/reference/reference.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index c1df110e822..fd62c6972d6 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1414,6 +1414,12 @@ passed multiple times. The expected format is ``name=value``. For example:: Only `native namespace packages `__ are supported, with no plans to support `legacy namespace packages `__. + For best results when using `consider_namespace_packages`, + pytest needs to be able to import your namespace packages. + This is best achieved by installing the packages in your environment, + most commonly in `"editable" mode `_. + If you can't install the packages, consider adding the namespace root paths to :confval:`pythonpath`. + .. versionadded:: 8.1 .. confval:: console_output_style From b5c3275aa07df4c5a36b3942296c089f87bf5733 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 11 Apr 2026 19:20:16 +0300 Subject: [PATCH 256/307] assertion/util: improve typing Change `Any`s to `object`. It's better to use `object` for "unknown" -- `object` is type safe, `Any` is not. To aid in this, change the `is*` functions to TypeGuards, so their check is carried over to the typing. Since pytest already uses dataclasses extensively internally, I removed the lazy import of it, this way can more easily utilize the existing type guard from typeshed. --- src/_pytest/assertion/util.py | 89 +++++++++++++++++------------------ 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index f35d83a6fe4..cdc3aabd14e 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -9,10 +9,11 @@ from collections.abc import Mapping from collections.abc import Sequence from collections.abc import Set as AbstractSet +import dataclasses import pprint -from typing import Any from typing import Literal from typing import Protocol +from typing import TypeGuard from unicodedata import normalize from _pytest import outcomes @@ -118,45 +119,42 @@ def _format_lines(lines: Sequence[str]) -> list[str]: return result -def issequence(x: Any) -> bool: +def issequence(x: object) -> TypeGuard[collections.abc.Sequence[object]]: return isinstance(x, collections.abc.Sequence) and not isinstance(x, str) -def istext(x: Any) -> bool: +def istext(x: object) -> TypeGuard[str]: return isinstance(x, str) -def isdict(x: Any) -> bool: +def isdict(x: object) -> TypeGuard[dict[object, object]]: return isinstance(x, dict) -def isset(x: Any) -> bool: +def isset(x: object) -> TypeGuard[set[object] | frozenset[object]]: return isinstance(x, set | frozenset) -def isnamedtuple(obj: Any) -> bool: +def isnamedtuple(obj: object) -> bool: return isinstance(obj, tuple) and getattr(obj, "_fields", None) is not None -def isdatacls(obj: Any) -> bool: - return getattr(obj, "__dataclass_fields__", None) is not None +isdatacls = dataclasses.is_dataclass -def isattrs(obj: Any) -> bool: +def isattrs(obj: object) -> bool: return getattr(obj, "__attrs_attrs__", None) is not None -def isiterable(obj: Any) -> bool: +def isiterable(obj: object) -> TypeGuard[collections.abc.Iterable[object]]: try: - iter(obj) + iter(obj) # type: ignore[call-overload] return not istext(obj) except Exception: return False -def has_default_eq( - obj: object, -) -> bool: +def has_default_eq(obj: object) -> bool: """Check if an instance of an object contains the default eq First, we check if the object's __eq__ attribute has __code__, @@ -176,7 +174,7 @@ def has_default_eq( def assertrepr_compare( - config, op: str, left: Any, right: Any, use_ascii: bool = False + config: Config, op: str, left: object, right: object, use_ascii: bool = False ) -> list[str] | None: """Return specialised explanations for some operators/operands.""" verbose = config.get_verbosity(Config.VERBOSITY_ASSERTIONS) @@ -246,7 +244,7 @@ def assertrepr_compare( def _compare_eq_any( - left: Any, right: Any, highlighter: _HighlightFunc, verbose: int = 0 + left: object, right: object, highlighter: _HighlightFunc, verbose: int = 0 ) -> list[str]: explanation = [] if istext(left) and istext(right): @@ -254,12 +252,11 @@ def _compare_eq_any( else: from _pytest.python_api import ApproxBase - if isinstance(left, ApproxBase) or isinstance(right, ApproxBase): - # Although the common order should be obtained == expected, this ensures both ways - approx_side = left if isinstance(left, ApproxBase) else right - other_side = right if isinstance(left, ApproxBase) else left - - explanation = approx_side._repr_compare(other_side) + # Although the common order should be obtained == approx(...), allow both ways. + if isinstance(right, ApproxBase): + explanation = right._repr_compare(left) + elif isinstance(left, ApproxBase): + explanation = left._repr_compare(right) elif type(left) is type(right) and ( isdatacls(left) or isattrs(left) or isnamedtuple(left) ): @@ -338,8 +335,8 @@ def _diff_text( def _compare_eq_iterable( - left: Iterable[Any], - right: Iterable[Any], + left: Iterable[object], + right: Iterable[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -367,8 +364,8 @@ def _compare_eq_iterable( def _compare_eq_sequence( - left: Sequence[Any], - right: Sequence[Any], + left: Sequence[object], + right: Sequence[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -387,8 +384,8 @@ def _compare_eq_sequence( # 102 # >>> s[0:1] # b'f' - left_value = left[i : i + 1] - right_value = right[i : i + 1] + left_value: object = left[i : i + 1] + right_value: object = right[i : i + 1] else: left_value = left[i] right_value = right[i] @@ -427,8 +424,8 @@ def _compare_eq_sequence( def _compare_eq_set( - left: AbstractSet[Any], - right: AbstractSet[Any], + left: AbstractSet[object], + right: AbstractSet[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -439,8 +436,8 @@ def _compare_eq_set( def _compare_gt_set( - left: AbstractSet[Any], - right: AbstractSet[Any], + left: AbstractSet[object], + right: AbstractSet[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -451,8 +448,8 @@ def _compare_gt_set( def _compare_lt_set( - left: AbstractSet[Any], - right: AbstractSet[Any], + left: AbstractSet[object], + right: AbstractSet[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -463,8 +460,8 @@ def _compare_lt_set( def _compare_gte_set( - left: AbstractSet[Any], - right: AbstractSet[Any], + left: AbstractSet[object], + right: AbstractSet[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -472,8 +469,8 @@ def _compare_gte_set( def _compare_lte_set( - left: AbstractSet[Any], - right: AbstractSet[Any], + left: AbstractSet[object], + right: AbstractSet[object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -482,8 +479,8 @@ def _compare_lte_set( def _set_one_sided_diff( posn: str, - set1: AbstractSet[Any], - set2: AbstractSet[Any], + set1: AbstractSet[object], + set2: AbstractSet[object], highlighter: _HighlightFunc, ) -> list[str]: explanation = [] @@ -496,8 +493,8 @@ def _set_one_sided_diff( def _compare_eq_dict( - left: Mapping[Any, Any], - right: Mapping[Any, Any], + left: Mapping[object, object], + right: Mapping[object, object], highlighter: _HighlightFunc, verbose: int = 0, ) -> list[str]: @@ -542,20 +539,18 @@ def _compare_eq_dict( def _compare_eq_cls( - left: Any, right: Any, highlighter: _HighlightFunc, verbose: int + left: object, right: object, highlighter: _HighlightFunc, verbose: int ) -> list[str]: if not has_default_eq(left): return [] if isdatacls(left): - import dataclasses - all_fields = dataclasses.fields(left) fields_to_check = [info.name for info in all_fields if info.compare] elif isattrs(left): - all_fields = left.__attrs_attrs__ + all_fields = left.__attrs_attrs__ # type: ignore[attr-defined] fields_to_check = [field.name for field in all_fields if getattr(field, "eq")] elif isnamedtuple(left): - fields_to_check = left._fields + fields_to_check = left._fields # type: ignore[attr-defined] else: assert False From 95616864235e62701718993ed9b41d22103990e0 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sat, 11 Apr 2026 20:20:41 +0300 Subject: [PATCH 257/307] testing/python/approx: add coverage for assertion rewriting when `approx` is on the LHS --- testing/python/approx.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/testing/python/approx.py b/testing/python/approx.py index bfbb59fb61d..bf9fad6cb56 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -1104,6 +1104,19 @@ def test_approx_on_unordered_mapping_matching(): result = pytester.runpytest() result.assert_outcomes(passed=1) + def test_assertion_rewriting_works_with_approx_on_lhs( + self, pytestconfig: pytest.Config + ) -> None: + """Assertion rewriting works also when approx() is on the left-hand side.""" + with temporary_verbosity(pytestconfig, verbosity=0): + with pytest.raises(AssertionError) as e: + assert pytest.approx(1) == 2 + obtained_message = str(e.value).splitlines()[-2:] + assert obtained_message == [ + " Obtained: 2", + " Expected: 1 ± 1.0e-06", + ] + class MyVec3: # incomplete """sequence like""" From 5898e9c7a1b8aee15c4c834298ba7ed32ce92cb9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 12 Apr 2026 06:45:30 +0000 Subject: [PATCH 258/307] [automated] Update plugin list (#14384) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 184 +++++++++++++++++++++---------- 1 file changed, 128 insertions(+), 56 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 89875dc2566..f86f8766807 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =8.3.5 :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A :pypi:`pytest-asyncio` Pytest support for asyncio Mar 25, 2026 5 - Production/Stable pytest<10,>=8.2 - :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. May 17, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. Apr 09, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) :pypi:`pytest-async-mongodb` pytest plugin for async MongoDB Oct 18, 2017 5 - Production/Stable pytest (>=2.5.2) @@ -181,6 +181,7 @@ This list contains 1929 plugins. :pypi:`pytest-azure` Pytest utilities and mocks for Azure Jan 18, 2023 3 - Alpha pytest :pypi:`pytest-azure-devops` Simplifies using azure devops parallel strategy (https://docs.microsoft.com/en-us/azure/devops/pipelines/test/parallel-testing-any-test-runner) with pytest. Jul 16, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-azurepipelines` Formatting PyTest output for Azure Pipelines UI Oct 06, 2023 5 - Production/Stable pytest (>=5.0.0) + :pypi:`pytest-balance` Intelligent test distribution for pytest based on actual execution times, not file count Apr 09, 2026 3 - Alpha pytest>=8 :pypi:`pytest-bandit` A bandit plugin for pytest Feb 23, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-bandit-xayon` A bandit plugin for pytest Oct 17, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-base-url` pytest plugin for URL based testing Jan 31, 2024 5 - Production/Stable pytest>=7.0.0 @@ -197,9 +198,10 @@ This list contains 1929 plugins. :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A + :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics Apr 10, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 03, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 10, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -329,7 +331,7 @@ This list contains 1929 plugins. :pypi:`pytest-cocotb-cov` Pytest plugin for measuring HDL coverage. Nov 09, 2025 5 - Production/Stable pytest :pypi:`pytest-cocotb-fusesoc` Pytest plugin to integrate FuseSoC with Cocotb. Jan 07, 2026 5 - Production/Stable pytest :pypi:`pytest-cocotb-pyuvm` Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. Nov 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Mar 07, 2026 4 - Beta pytest + :pypi:`pytest-codeblock` Pytest plugin to collect and test code blocks in reStructuredText and Markdown files. Apr 07, 2026 4 - Beta pytest :pypi:`pytest_codeblocks` Test code blocks in your READMEs Sep 17, 2023 5 - Production/Stable pytest >= 7.0.0 :pypi:`pytest-codecarbon` Pytest plugin for measuring carbon emissions Jun 15, 2022 N/A pytest :pypi:`pytest-codecheckers` pytest plugin to add source code sanity checks (pep8 and friends) Feb 13, 2010 N/A N/A @@ -404,7 +406,7 @@ This list contains 1929 plugins. :pypi:`pytest-custom-timeout` Use custom logic when a test times out. Based on pytest-timeout. Jan 08, 2025 4 - Beta pytest>=8.0.0 :pypi:`pytest-cython` A plugin for testing Cython extension modules. Mar 11, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest - :pypi:`pytest-dag` A pytest plugin that enforces test execution order via a dependency DAG Apr 03, 2026 N/A pytest>=7.0 + :pypi:`pytest-dag` A pytest plugin that enforces test execution order via a dependency DAG Apr 06, 2026 N/A pytest>=7.0 :pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1 :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 @@ -542,6 +544,7 @@ This list contains 1929 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) + :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 11, 2026 N/A pytest>=7.0 :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 @@ -710,6 +713,7 @@ This list contains 1929 plugins. :pypi:`pytest-flake-detection` Continuously runs your tests to detect flaky tests Nov 29, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Mar 05, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) + :pypi:`pytest-flakehunter` Re-run tests N times, visualize failure heatmaps, and get AI root cause hypotheses Apr 07, 2026 N/A pytest>=7.0 :pypi:`pytest-flakemark` FLAKEMARK — Differential execution tracer that finds the exact file, line, and root cause of any flaky test. Mar 23, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Mar 24, 2026 N/A pytest>=9.0.2 @@ -760,7 +764,7 @@ This list contains 1929 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 02, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 08, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -777,6 +781,7 @@ This list contains 1929 plugins. :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 + :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. Apr 10, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 @@ -818,6 +823,7 @@ This list contains 1929 plugins. :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 04, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 04, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-Honda-report` Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends Apr 11, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A :pypi:`pytest-hot-reloading` Sep 23, 2024 N/A N/A @@ -855,7 +861,7 @@ This list contains 1929 plugins. :pypi:`pytest-httpretty` A thin wrapper of HTTPretty for pytest Feb 16, 2014 3 - Alpha N/A :pypi:`pytest_httpserver` pytest-httpserver is a httpserver for pytest Feb 14, 2026 3 - Alpha N/A :pypi:`pytest-httptesting` http_testing framework on top of pytest Dec 19, 2024 N/A pytest>=8.2.0 - :pypi:`pytest-httpx` Send responses to httpx. Dec 02, 2025 5 - Production/Stable pytest==9.* + :pypi:`pytest-httpx` Send responses to httpx. Apr 09, 2026 5 - Production/Stable pytest==9.* :pypi:`pytest-httpx-blockage` Disable httpx requests during a test run Feb 16, 2023 N/A pytest (>=7.2.1) :pypi:`pytest-httpx-recorder` Recorder feature based on pytest_httpx, like recorder feature in responses. Jan 04, 2024 5 - Production/Stable pytest :pypi:`pytest-hue` Visualise PyTest status via your Phillips Hue lights May 09, 2019 N/A N/A @@ -874,8 +880,8 @@ This list contains 1929 plugins. :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Mar 23, 2026 4 - Beta pytest>=8.0.0 - :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). Mar 23, 2026 4 - Beta N/A + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Apr 05, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). Apr 05, 2026 4 - Beta N/A :pypi:`pytest-imply` Pytest plugin for test implication — skip tests implied by stronger ones Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A @@ -931,6 +937,7 @@ This list contains 1929 plugins. :pypi:`pytest-iters` A contextmanager pytest fixture for handling multiple mock iters May 24, 2022 N/A N/A :pypi:`pytest_jar_yuan` A allure and pytest used package Dec 12, 2022 N/A N/A :pypi:`pytest-jasmine` Run jasmine tests from your pytest test suite Nov 04, 2017 1 - Planning N/A + :pypi:`pytest-jax-bench` Pytest plugin to profile jitted JAX functions (compile time, runtime, memory). Apr 06, 2026 N/A pytest>=7 :pypi:`pytest-jelastic` Pytest plugin defining the necessary command-line options to pass to pytests testing a Jelastic environment. Nov 16, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-jest` A custom jest-pytest oriented Pytest reporter May 22, 2018 4 - Beta pytest (>=3.3.2) :pypi:`pytest-jinja` A plugin to generate customizable jinja-based HTML reports in pytest Oct 04, 2022 3 - Alpha pytest (>=6.2.5,<7.0.0) @@ -951,7 +958,7 @@ This list contains 1929 plugins. :pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Nov 07, 2025 5 - Production/Stable pytest>=6.2.0 :pypi:`pytest-jsonschema-snapshot` Pytest plugin for automatic JSON Schema generation and validation from examples Mar 29, 2026 N/A pytest :pypi:`pytest-jtr` pytest plugin supporting json test report output Jul 21, 2024 N/A pytest<8.0.0,>=7.1.2 - :pypi:`pytest-jubilant` Add your description here Mar 29, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-jubilant` Add your description here Apr 07, 2026 N/A pytest>=8.3.5 :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 @@ -968,7 +975,7 @@ This list contains 1929 plugins. :pypi:`pytest-kedge` Agent-friendly structured test data collector for pytest Jan 10, 2026 N/A pytest>=7.0.0 :pypi:`pytest-keep-together` Pytest plugin to customize test ordering by running all 'related' tests together Dec 07, 2022 5 - Production/Stable pytest :pypi:`pytest-kexi` Apr 29, 2022 N/A pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-keyring` A Pytest plugin to access the system's keyring to provide credentials for tests Dec 08, 2024 N/A pytest>=8.0.2 + :pypi:`pytest-keyring` A Pytest plugin to access the system's keyring to provide credentials for tests Apr 10, 2026 N/A pytest>=8.0.2 :pypi:`pytest-kind` Kubernetes test support with KIND for pytest Nov 30, 2022 5 - Production/Stable N/A :pypi:`pytest-kivy` Kivy GUI tests fixtures using pytest Jul 06, 2021 4 - Beta pytest (>=3.6) :pypi:`pytest-knows` A pytest plugin that can automaticly skip test case based on dependence info calculated by trace Aug 22, 2014 N/A N/A @@ -983,7 +990,7 @@ This list contains 1929 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Mar 04, 2026 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Apr 05, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -994,7 +1001,7 @@ This list contains 1929 plugins. :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Apr 04, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Apr 09, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Feb 27, 2026 4 - Beta pytest>=8.3.5 @@ -1017,7 +1024,7 @@ This list contains 1929 plugins. :pypi:`pytest-llm-assert` Simple LLM-powered assertions for any pytest test Mar 31, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-llmeval` A pytest plugin to evaluate/benchmark LLM prompts Mar 19, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-llm-report` Human-friendly pytest test reports with optional LLM annotations Jan 21, 2026 3 - Alpha pytest>=7.0.0 - :pypi:`pytest-llm-rubric` A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and preflight Mar 28, 2026 3 - Alpha pytest>=8 + :pypi:`pytest-llm-rubric` A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and preflight Apr 07, 2026 3 - Alpha pytest>=7.2 :pypi:`pytest-llmtest` The pytest for LLMs — fast, Pydantic-based assertions for AI applications Mar 08, 2026 3 - Alpha pytest>=7.0; extra == "dev" :pypi:`pytest-lobster` Pytest to generate lobster tracing files Jul 26, 2025 N/A pytest>=7.0 :pypi:`pytest-local-badge` Generate local badges (shields) reporting your test suite status. Jan 15, 2023 N/A pytest (>=6.1.0) @@ -1086,7 +1093,7 @@ This list contains 1929 plugins. :pypi:`pytest-memray` A simple plugin to use with pytest Aug 18, 2025 N/A pytest>=7.2 :pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2) :pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A - :pypi:`pytest-mergify` Pytest plugin for Mergify Jan 26, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-mergify` Pytest plugin for Mergify Apr 07, 2026 N/A pytest>=6.0.0 :pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2) :pypi:`pytest-message` Pytest plugin for sending report message of marked tests execution Aug 04, 2022 N/A pytest (>=6.2.5) :pypi:`pytest-messenger` Pytest to Slack reporting plugin Nov 24, 2022 5 - Production/Stable N/A @@ -1213,7 +1220,7 @@ This list contains 1929 plugins. :pypi:`pytest-only-markers` A pytest plugin that isolates test execution to only tests decorated with ONLY\* markers, stripping all other markers from matching items. Mar 17, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Mar 27, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Apr 10, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1261,6 +1268,7 @@ This list contains 1929 plugins. :pypi:`pytest-pdb` pytest plugin which adds pdb helper commands related to pytest. Jul 31, 2018 N/A N/A :pypi:`pytest-peach` pytest plugin for fuzzing with Peach API Security Apr 12, 2019 4 - Beta pytest (>=2.8.7) :pypi:`pytest-pep257` py.test plugin for pep257 Jul 09, 2016 N/A N/A + :pypi:`pytest-pep723` Pytest plugin to verify PEP 723 inline script metadata covers all imports. Apr 06, 2026 4 - Beta pytest>=7 :pypi:`pytest-pep8` pytest plugin to check PEP8 requirements Apr 27, 2014 N/A N/A :pypi:`pytest-percent` Change the exit code of pytest test sessions when a required percent of tests pass. May 21, 2020 N/A pytest (>=5.2.0) :pypi:`pytest-percents` Mar 16, 2024 N/A N/A @@ -1303,7 +1311,7 @@ This list contains 1929 plugins. :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) - :pypi:`pytest-plugins` A Python package for managing pytest plugins. Apr 01, 2026 5 - Production/Stable pytest>=9.0.1 + :pypi:`pytest-plugins` A Python package for managing pytest plugins. Apr 05, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Mar 26, 2026 N/A N/A :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A @@ -1392,7 +1400,7 @@ This list contains 1929 plugins. :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) - :pypi:`pytest-qfield` A pytest plugin for testing QField qml plugins Mar 27, 2026 N/A N/A + :pypi:`pytest-qfield` A pytest plugin for testing QField qml plugins Apr 06, 2026 N/A N/A :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Apr 01, 2026 5 - Production/Stable pytest>=6.0 :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) :pypi:`pytest-qr` pytest plugin to generate test result QR codes Nov 25, 2021 4 - Beta N/A @@ -1440,7 +1448,7 @@ This list contains 1929 plugins. :pypi:`pytest_relay` A plugin to relay test information and control from and to pytest Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-relay-run` A pytest wrapper using for pytest-relay with pytest-relay-ws to control pytest executions. Jan 31, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest_relay_ws` An extension plugin to pytest-relay to relay pytest information via websockets Jan 31, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-remaster` Pytest plugin for golden master (characterisation) testing with automatic expected file regeneration. Mar 23, 2026 3 - Alpha pytest>=7 + :pypi:`pytest-remaster` Pytest plugin for golden master (characterisation) testing with automatic expected file regeneration. Apr 09, 2026 3 - Alpha pytest>=7 :pypi:`pytest-remfiles` Pytest plugin to create a temporary directory with remote files Jul 01, 2019 5 - Production/Stable N/A :pypi:`pytest-remotedata` Pytest plugin for controlling remote data access. Sep 26, 2023 5 - Production/Stable pytest >=4.6 :pypi:`pytest-remote-response` Pytest plugin for capturing and mocking connection requests. Apr 26, 2023 5 - Production/Stable pytest (>=4.6) @@ -1463,7 +1471,7 @@ This list contains 1929 plugins. :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Apr 03, 2026 N/A N/A + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Apr 10, 2026 N/A N/A :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A :pypi:`pytest-req` pytest requests plugin Mar 02, 2026 5 - Production/Stable pytest>=8.4.2 @@ -1486,7 +1494,7 @@ This list contains 1929 plugins. :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-resource-usage` Pytest plugin for reporting running time and peak memory usage Nov 06, 2022 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-respect` Pytest plugin to load resource files relative to test code and to expect values to match them. Oct 21, 2025 5 - Production/Stable pytest>=8.0.0 + :pypi:`pytest-respect` Pytest plugin to load resource files relative to test code and to expect values to match them. Apr 08, 2026 5 - Production/Stable pytest>=8.0.0 :pypi:`pytest-responsemock` Simplified requests calls mocking for pytest Mar 10, 2022 5 - Production/Stable N/A :pypi:`pytest-responses` py.test integration for responses Oct 11, 2022 N/A pytest (>=2.5) :pypi:`pytest-rest-api` Aug 08, 2022 N/A pytest (>=7.1.2,<8.0.0) @@ -1509,7 +1517,7 @@ This list contains 1929 plugins. :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Feb 03, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Mar 12, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Apr 11, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest :pypi:`pytest-rich-reporter` A pytest plugin using Rich for beautiful test result formatting. Feb 17, 2022 1 - Planning pytest (>=5.0.0) @@ -1550,7 +1558,7 @@ This list contains 1929 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 01, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 11, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1563,7 +1571,7 @@ This list contains 1929 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 01, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 11, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1604,7 +1612,7 @@ This list contains 1929 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Mar 31, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 11, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1818,7 +1826,7 @@ This list contains 1929 plugins. :pypi:`pytest-tornasync` py.test plugin for testing Python 3.5+ Tornado code Jul 15, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-trace` Save OpenTelemetry spans generated during testing Jun 19, 2022 N/A pytest (>=4.6) :pypi:`pytest-track` Feb 26, 2021 3 - Alpha pytest (>=3.0) - :pypi:`pytest-translate` pytest terminal output in your language — 134 languages supported Mar 21, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-translate` pytest terminal output in your language — 134 languages supported, zero configuration Apr 08, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-translations` Test your translation files. Sep 11, 2023 5 - Production/Stable pytest (>=7) :pypi:`pytest-travis-fold` Folds captured output sections in Travis CI build log Nov 29, 2017 4 - Beta pytest (>=2.6.0) :pypi:`pytest-trello` Plugin for py.test that integrates trello using markers Nov 20, 2015 5 - Production/Stable N/A @@ -1876,7 +1884,7 @@ This list contains 1929 plugins. :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A - :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Mar 13, 2026 5 - Production/Stable pytest>=9.0.0 + :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Apr 07, 2026 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-visual` Nov 28, 2024 4 - Beta pytest>=7.0.0 @@ -1891,6 +1899,7 @@ This list contains 1929 plugins. :pypi:`pytest-vyper` Plugin for the vyper smart contract language. May 28, 2020 2 - Pre-Alpha N/A :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest + :pypi:`pytest-warmup` Batch preparation and distribution of expensive test resources for pytest. Apr 11, 2026 3 - Alpha pytest>=8.4 :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Jan 10, 2026 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A @@ -2746,7 +2755,7 @@ This list contains 1929 plugins. Pytest support for asyncio :pypi:`pytest-asyncio-concurrent` - *last release*: May 17, 2025, + *last release*: Apr 09, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -2997,6 +3006,13 @@ This list contains 1929 plugins. Formatting PyTest output for Azure Pipelines UI + :pypi:`pytest-balance` + *last release*: Apr 09, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8 + + Intelligent test distribution for pytest based on actual execution times, not file count + :pypi:`pytest-bandit` *last release*: Feb 23, 2021, *status*: 4 - Beta, @@ -3109,6 +3125,13 @@ This list contains 1929 plugins. + :pypi:`pytest-beacon` + *last release*: Apr 10, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=9.0.0 + + Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics + :pypi:`pytest-beakerlib` *last release*: Mar 17, 2017, *status*: 5 - Production/Stable, @@ -3124,7 +3147,7 @@ This list contains 1929 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Apr 03, 2026, + *last release*: Apr 10, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -4034,7 +4057,7 @@ This list contains 1929 plugins. Pytest plugin that enables using pytest as the regression manager for running pyuvm tests. :pypi:`pytest-codeblock` - *last release*: Mar 07, 2026, + *last release*: Apr 07, 2026, *status*: 4 - Beta, *requires*: pytest @@ -4559,7 +4582,7 @@ This list contains 1929 plugins. :pypi:`pytest-dag` - *last release*: Apr 03, 2026, + *last release*: Apr 06, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -5524,6 +5547,13 @@ This list contains 1929 plugins. A Django REST framework plugin for pytest. + :pypi:`pytest-drift` + *last release*: Apr 11, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin for regression testing via branch comparison + :pypi:`pytest-drill-sergeant` *last release*: Feb 20, 2026, *status*: 4 - Beta, @@ -6700,6 +6730,13 @@ This list contains 1929 plugins. Runs tests multiple times to expose flakiness. + :pypi:`pytest-flakehunter` + *last release*: Apr 07, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Re-run tests N times, visualize failure heatmaps, and get AI root cause hypotheses + :pypi:`pytest-flakemark` *last release*: Mar 23, 2026, *status*: 4 - Beta, @@ -7051,7 +7088,7 @@ This list contains 1929 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Apr 02, 2026, + *last release*: Apr 08, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7169,6 +7206,13 @@ This list contains 1929 plugins. Extends allure-pytest functionality + :pypi:`pytest-glaze` + *last release*: Apr 10, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + A thin, transparent coat that makes your test output shine. + :pypi:`pytest-glow-report` *last release*: Dec 08, 2025, *status*: 4 - Beta, @@ -7456,6 +7500,13 @@ This list contains 1929 plugins. Experimental package to automatically extract test plugins for Home Assistant custom components + :pypi:`pytest-Honda-report` + *last release*: Apr 11, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends + :pypi:`pytest-honey` *last release*: Jan 07, 2022, *status*: 4 - Beta, @@ -7716,7 +7767,7 @@ This list contains 1929 plugins. http_testing framework on top of pytest :pypi:`pytest-httpx` - *last release*: Dec 02, 2025, + *last release*: Apr 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest==9.* @@ -7849,14 +7900,14 @@ This list contains 1929 plugins. A pytest plugin for image snapshot management and comparison. :pypi:`pytest-impacted` - *last release*: Mar 23, 2026, + *last release*: Apr 05, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0.0 A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. :pypi:`pytest-impacted-rs` - *last release*: Mar 23, 2026, + *last release*: Apr 05, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8247,6 +8298,13 @@ This list contains 1929 plugins. Run jasmine tests from your pytest test suite + :pypi:`pytest-jax-bench` + *last release*: Apr 06, 2026, + *status*: N/A, + *requires*: pytest>=7 + + Pytest plugin to profile jitted JAX functions (compile time, runtime, memory). + :pypi:`pytest-jelastic` *last release*: Nov 16, 2022, *status*: N/A, @@ -8388,7 +8446,7 @@ This list contains 1929 plugins. pytest plugin supporting json test report output :pypi:`pytest-jubilant` - *last release*: Mar 29, 2026, + *last release*: Apr 07, 2026, *status*: N/A, *requires*: pytest>=8.3.5 @@ -8507,7 +8565,7 @@ This list contains 1929 plugins. :pypi:`pytest-keyring` - *last release*: Dec 08, 2024, + *last release*: Apr 10, 2026, *status*: N/A, *requires*: pytest>=8.0.2 @@ -8612,7 +8670,7 @@ This list contains 1929 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Mar 04, 2026, + *last release*: Apr 05, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8689,7 +8747,7 @@ This list contains 1929 plugins. A simple plugin to use with pytest :pypi:`pytest-leela` - *last release*: Apr 04, 2026, + *last release*: Apr 09, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 @@ -8850,9 +8908,9 @@ This list contains 1929 plugins. Human-friendly pytest test reports with optional LLM annotations :pypi:`pytest-llm-rubric` - *last release*: Mar 28, 2026, + *last release*: Apr 07, 2026, *status*: 3 - Alpha, - *requires*: pytest>=8 + *requires*: pytest>=7.2 A pytest plugin for rubric-based LLM-as-judge testing with auto-discovery and preflight @@ -9333,7 +9391,7 @@ This list contains 1929 plugins. pytest plugin to write integration tests for projects using Mercurial Python internals :pypi:`pytest-mergify` - *last release*: Jan 26, 2026, + *last release*: Apr 07, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -10222,7 +10280,7 @@ This list contains 1929 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Mar 27, 2026, + *last release*: Apr 10, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10557,6 +10615,13 @@ This list contains 1929 plugins. py.test plugin for pep257 + :pypi:`pytest-pep723` + *last release*: Apr 06, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7 + + Pytest plugin to verify PEP 723 inline script metadata covers all imports. + :pypi:`pytest-pep8` *last release*: Apr 27, 2014, *status*: N/A, @@ -10852,7 +10917,7 @@ This list contains 1929 plugins. A plugin to help developing and testing other plugins :pypi:`pytest-plugins` - *last release*: Apr 01, 2026, + *last release*: Apr 05, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.1 @@ -11475,7 +11540,7 @@ This list contains 1929 plugins. Pytest plugin for uploading test results to your QA Touch Testrun. :pypi:`pytest-qfield` - *last release*: Mar 27, 2026, + *last release*: Apr 06, 2026, *status*: N/A, *requires*: N/A @@ -11811,7 +11876,7 @@ This list contains 1929 plugins. An extension plugin to pytest-relay to relay pytest information via websockets :pypi:`pytest-remaster` - *last release*: Mar 23, 2026, + *last release*: Apr 09, 2026, *status*: 3 - Alpha, *requires*: pytest>=7 @@ -11972,7 +12037,7 @@ This list contains 1929 plugins. pytest plugin for adding tests' parameters to junit report :pypi:`pytest-reportportal` - *last release*: Apr 03, 2026, + *last release*: Apr 10, 2026, *status*: N/A, *requires*: N/A @@ -12133,7 +12198,7 @@ This list contains 1929 plugins. Pytest plugin for reporting running time and peak memory usage :pypi:`pytest-respect` - *last release*: Oct 21, 2025, + *last release*: Apr 08, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.0.0 @@ -12294,7 +12359,7 @@ This list contains 1929 plugins. Pytest plugin to reverse test order. :pypi:`pytest-review` - *last release*: Mar 12, 2026, + *last release*: Apr 11, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -12581,7 +12646,7 @@ This list contains 1929 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Apr 01, 2026, + *last release*: Apr 11, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12672,7 +12737,7 @@ This list contains 1929 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Apr 01, 2026, + *last release*: Apr 11, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12959,7 +13024,7 @@ This list contains 1929 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Mar 31, 2026, + *last release*: Apr 11, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -14457,11 +14522,11 @@ This list contains 1929 plugins. :pypi:`pytest-translate` - *last release*: Mar 21, 2026, - *status*: 4 - Beta, + *last release*: Apr 08, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 - pytest terminal output in your language — 134 languages supported + pytest terminal output in your language — 134 languages supported, zero configuration :pypi:`pytest-translations` *last release*: Sep 11, 2023, @@ -14863,7 +14928,7 @@ This list contains 1929 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. :pypi:`pytest-vigil` - *last release*: Mar 13, 2026, + *last release*: Apr 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=9.0.0 @@ -14967,6 +15032,13 @@ This list contains 1929 plugins. + :pypi:`pytest-warmup` + *last release*: Apr 11, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.4 + + Batch preparation and distribution of expensive test resources for pytest. + :pypi:`pytest-watch` *last release*: May 20, 2018, *status*: N/A, From 338851a980a1255d7ff3799e13fa35200f7392e0 Mon Sep 17 00:00:00 2001 From: Will Toohey Date: Wed, 30 Jul 2025 10:51:23 +1000 Subject: [PATCH 259/307] runner: correctly cleanup item _request/funcargs if an exception was reraised during call (e.g. KeyboardInterrupt) In my test suite, I have some objects that rely on garbage collection to be cleaned up correctly. This is not amazing, but it's how the code is structured for now. If I interrupt tests with Ctrl+C, or by manually raising KeyboardInterrupt in a test, these objects are not cleaned up any more. call_and_report re-raises Exit and KeyboardInterrupt, which breaks the cleanup logic in runtestprotocol that unsets the item funcargs (which is where my objects end up living as references, as they're passed in as fixtures). By just wrapping the entire block with try: ... finally: ..., cleanup works again as expected. Co-authored-by: Ran Benita --- changelog/13626.bugfix.rst | 2 ++ src/_pytest/runner.py | 36 +++++++++++++++++++----------------- testing/test_runner.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 changelog/13626.bugfix.rst diff --git a/changelog/13626.bugfix.rst b/changelog/13626.bugfix.rst new file mode 100644 index 00000000000..e58c76749fa --- /dev/null +++ b/changelog/13626.bugfix.rst @@ -0,0 +1,2 @@ +Fixed function-scoped fixture values being kept alive after a test was interrupted by ``KeyboardInterrupt`` or early exit, +allowing them to potentially be released more promptly. diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py index 18d3591abfe..d9209befd48 100644 --- a/src/_pytest/runner.py +++ b/src/_pytest/runner.py @@ -128,23 +128,25 @@ def runtestprotocol( # This only happens if the item is re-run, as is done by # pytest-rerunfailures. item._initrequest() # type: ignore[attr-defined] - rep = call_and_report(item, "setup", log) - reports = [rep] - if rep.passed: - if item.config.getoption("setupshow", False): - show_test_item(item) - if not item.config.getoption("setuponly", False): - reports.append(call_and_report(item, "call", log)) - # If the session is about to fail or stop, teardown everything - this is - # necessary to correctly report fixture teardown errors (see #11706) - if item.session.shouldfail or item.session.shouldstop: - nextitem = None - reports.append(call_and_report(item, "teardown", log, nextitem=nextitem)) - # After all teardown hooks have been called - # want funcargs and request info to go away. - if hasrequest: - item._request = False # type: ignore[attr-defined] - item.funcargs = None # type: ignore[attr-defined] + try: + rep = call_and_report(item, "setup", log) + reports = [rep] + if rep.passed: + if item.config.getoption("setupshow", False): + show_test_item(item) + if not item.config.getoption("setuponly", False): + reports.append(call_and_report(item, "call", log)) + # If the session is about to fail or stop, teardown everything - this is + # necessary to correctly report fixture teardown errors (see #11706) + if item.session.shouldfail or item.session.shouldstop: + nextitem = None + reports.append(call_and_report(item, "teardown", log, nextitem=nextitem)) + finally: + # After all teardown hooks have been called (or an exception was reraised) + # want funcargs and request info to go away. + if hasrequest: + item._request = False # type: ignore[attr-defined] + item.funcargs = None # type: ignore[attr-defined] return reports diff --git a/testing/test_runner.py b/testing/test_runner.py index 3cb3c3a3841..3cf6be69de9 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -7,6 +7,7 @@ from pathlib import Path import sys import types +from typing import cast from _pytest import outcomes from _pytest import reports @@ -494,6 +495,37 @@ def test_func(): else: assert False, "did not raise" + def test_keyboardinterrupt_clears_request_and_funcargs( + self, pytester: Pytester + ) -> None: + """Ensure that an item's fixtures are cleared quickly even if exiting + early due to a keyboard interrupt (#13626).""" + item = pytester.getitem( + """ + import pytest + + @pytest.fixture + def resource(): + return object() + + def test_func(resource): + raise KeyboardInterrupt("fake") + """ + ) + assert isinstance(item, pytest.Function) + assert item._request + assert item.funcargs == {} + + try: + runner.runtestprotocol(item, log=False) + except KeyboardInterrupt: + pass + else: + assert False, "did not raise" + + assert not cast(object, item._request) + assert not item.funcargs + class TestSessionReports: def test_collect_result(self, pytester: Pytester) -> None: From 7bb1aa6df90bcb1bca9060e34ab984d4586edd8f Mon Sep 17 00:00:00 2001 From: dariomesic <93346078+dariomesic@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:17:22 +0200 Subject: [PATCH 260/307] Style: Use type.__name__ in raises error messages for consistency (#13862) * Style: Use type.__name__ in raises error messages for consistency * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update src/_pytest/raises.py Co-authored-by: Florian Bruhin * Apply suggestions from code review remove the fixed FIXME comments --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: John Litborn <11260241+jakkdl@users.noreply.github.com> Co-authored-by: Florian Bruhin --- changelog/13862.improvement.rst | 1 + src/_pytest/raises.py | 9 +++++---- testing/python/raises.py | 6 +++--- testing/python/raises_group.py | 9 ++------- 4 files changed, 11 insertions(+), 14 deletions(-) create mode 100644 changelog/13862.improvement.rst diff --git a/changelog/13862.improvement.rst b/changelog/13862.improvement.rst new file mode 100644 index 00000000000..6a89cbc323b --- /dev/null +++ b/changelog/13862.improvement.rst @@ -0,0 +1 @@ +Improved the readability of "DID NOT RAISE" error messages by using the exception type's name instead of its `repr`. diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 23690a00470..82fe2c41c96 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -685,10 +685,11 @@ def __exit__( if exc_type is None: if not self.expected_exceptions: fail("DID NOT RAISE any exception") - if len(self.expected_exceptions) > 1: - fail(f"DID NOT RAISE any of {self.expected_exceptions!r}") - - fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}") + if len(self.expected_exceptions) == 1: + fail(f"DID NOT RAISE {self.expected_exceptions[0].__name__}") + else: + names = ", ".join(x.__name__ for x in self.expected_exceptions) + fail(f"DID NOT RAISE any of ({names})") assert self.excinfo is not None, ( "Internal error - should have been constructed in __enter__" diff --git a/testing/python/raises.py b/testing/python/raises.py index 5ba0c0e1c89..f74d747c0df 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -198,7 +198,7 @@ def test_no_raise_message(self) -> None: with pytest.raises(ValueError): int("0") except pytest.fail.Exception as e: - assert e.msg == f"DID NOT RAISE {ValueError!r}" + assert e.msg == "DID NOT RAISE ValueError" else: assert False, "Expected pytest.raises.Exception" @@ -206,7 +206,7 @@ def test_no_raise_message(self) -> None: with pytest.raises(ValueError): pass except pytest.fail.Exception as e: - assert e.msg == f"DID NOT RAISE {ValueError!r}" + assert e.msg == "DID NOT RAISE ValueError" else: assert False, "Expected pytest.raises.Exception" @@ -337,7 +337,7 @@ class ClassLooksIterableException(Exception, metaclass=Meta): with pytest.raises( Failed, - match=r"DID NOT RAISE ", + match=r"DID NOT RAISE ClassLooksIterableException", ): with pytest.raises(ClassLooksIterableException): ... # pragma: no cover diff --git a/testing/python/raises_group.py b/testing/python/raises_group.py index e5e3b5cd2dc..8b311bd0eed 100644 --- a/testing/python/raises_group.py +++ b/testing/python/raises_group.py @@ -1094,9 +1094,7 @@ def test_raisesexc() -> None: with RaisesExc(ValueError): raise ValueError - # FIXME: leaving this one formatted differently for now to not change - # tests in python/raises.py - with pytest.raises(Failed, match=wrap_escape("DID NOT RAISE ")): + with pytest.raises(Failed, match=wrap_escape("DID NOT RAISE ValueError")): with RaisesExc(ValueError): ... @@ -1105,11 +1103,8 @@ def test_raisesexc() -> None: ... with pytest.raises( - # FIXME: do we want repr(type) or type.__name__ ? Failed, - match=wrap_escape( - "DID NOT RAISE any of (, )" - ), + match=wrap_escape("DID NOT RAISE any of (ValueError, TypeError)"), ): with RaisesExc((ValueError, TypeError)): ... From 537086ad65ad988772a6da30ace686c699473704 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 13 Apr 2026 23:14:42 +0300 Subject: [PATCH 261/307] assertion/util: remove unused parameter `use_ascii` to `assertrepr_compare` --- src/_pytest/assertion/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index cdc3aabd14e..5d5e6d4777d 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -174,7 +174,7 @@ def has_default_eq(obj: object) -> bool: def assertrepr_compare( - config: Config, op: str, left: object, right: object, use_ascii: bool = False + config: Config, op: str, left: object, right: object ) -> list[str] | None: """Return specialised explanations for some operators/operands.""" verbose = config.get_verbosity(Config.VERBOSITY_ASSERTIONS) From 2f156949b1e4bcaebd572ed545bedd47ae2f0ba9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 21:51:14 +0000 Subject: [PATCH 262/307] [pre-commit.ci] pre-commit autoupdate (#14385) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.9 → v0.15.10](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.9...v0.15.10) - [github.com/woodruffw/zizmor-pre-commit: v1.23.1 → v1.24.1](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.23.1...v1.24.1) - [github.com/pre-commit/mirrors-mypy: v1.20.0 → v1.20.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.20.0...v1.20.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3da6a52e66a..24911e07810 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.9" + rev: "v0.15.10" hooks: - id: ruff-check args: ["--fix"] @@ -13,7 +13,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.23.1 + rev: v1.24.1 hooks: - id: zizmor args: ["--fix", "--no-progress"] @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.20.0 + rev: v1.20.1 hooks: - id: mypy files: ^(src/|testing/|scripts/) From 90465694d3501267decade1ac0be988999940957 Mon Sep 17 00:00:00 2001 From: Mike Fiedler Date: Thu, 16 Apr 2026 07:59:31 -0400 Subject: [PATCH 263/307] Add `--max-warnings` option to fail test runs (#14372) Allow users to set a maximum number of allowed warnings via --max-warnings CLI option or max_warnings config option. When the warning count exceeds the threshold and all tests pass, pytest exits with a new WARNINGS_ERROR exit code (6). This supports gradually ratcheting down warnings in a codebase without converting them all to errors. Closes #14371 Signed-off-by: Mike Fiedler --- AUTHORS | 1 + changelog/14371.feature.rst | 1 + doc/en/how-to/capture-warnings.rst | 40 ++++++++ doc/en/reference/exit-codes.rst | 3 +- doc/en/reference/reference.rst | 39 ++++++++ src/_pytest/config/__init__.py | 2 + src/_pytest/main.py | 13 +++ src/_pytest/terminal.py | 22 +++++ testing/test_warnings.py | 153 +++++++++++++++++++++++++++++ 9 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 changelog/14371.feature.rst diff --git a/AUTHORS b/AUTHORS index f3c8d016c28..c33cf5fafbd 100644 --- a/AUTHORS +++ b/AUTHORS @@ -325,6 +325,7 @@ Michał Zięba Mickey Pashov Mihai Capotă Mihail Milushev +Mike Fiedler (miketheman) Mike Hoyle (hoylemd) Mike Lundy Milan Lesnek diff --git a/changelog/14371.feature.rst b/changelog/14371.feature.rst new file mode 100644 index 00000000000..2993b8c536f --- /dev/null +++ b/changelog/14371.feature.rst @@ -0,0 +1 @@ +Added :option:`--max-warnings` command-line option and :confval:`max_warnings` configuration option to fail the test run when the number of warnings exceeds a given threshold -- by :user:`miketheman`. diff --git a/doc/en/how-to/capture-warnings.rst b/doc/en/how-to/capture-warnings.rst index daaf8937e1a..462146a1c2b 100644 --- a/doc/en/how-to/capture-warnings.rst +++ b/doc/en/how-to/capture-warnings.rst @@ -204,6 +204,46 @@ decorator or to all tests in a module by setting the :globalvar:`pytestmark` var .. _`pytest-warnings`: https://github.com/fschulze/pytest-warnings +Setting a maximum number of warnings +------------------------------------- + +.. versionadded:: 9.1 + +You can use the :option:`--max-warnings` command-line option to fail the test run +if the total number of warnings exceeds a given threshold: + +.. code-block:: bash + + pytest --max-warnings=10 + +If all tests pass but the number of warnings exceeds the threshold, pytest will exit with code ``6`` +(:class:`~pytest.ExitCode` ``MAX_WARNINGS_ERROR``). This is useful for gradually +ratcheting down warnings in a codebase. + +Note that :confval:`filtered warnings ` do not count toward this maximum total. + +The threshold can also be set in the configuration file using :confval:`max_warnings`: + +.. tab:: toml + + .. code-block:: toml + + [pytest] + max_warnings = 10 + +.. tab:: ini + + .. code-block:: ini + + [pytest] + max_warnings = 10 + +.. note:: + + If tests fail, the exit code will be ``1`` (:class:`~pytest.ExitCode` ``TESTS_FAILED``) + regardless of the warning count. ``MAX_WARNINGS_ERROR`` is only reported when all tests pass + but the warning threshold is exceeded. + Disabling warnings summary -------------------------- diff --git a/doc/en/reference/exit-codes.rst b/doc/en/reference/exit-codes.rst index 49aaca19121..485bd4fe20a 100644 --- a/doc/en/reference/exit-codes.rst +++ b/doc/en/reference/exit-codes.rst @@ -3,7 +3,7 @@ Exit codes ======================================================== -Running ``pytest`` can result in six different exit codes: +Running ``pytest`` can result in seven different exit codes: :Exit code 0: All tests were collected and passed successfully :Exit code 1: Tests were collected and run but some of the tests failed @@ -11,6 +11,7 @@ Running ``pytest`` can result in six different exit codes: :Exit code 3: Internal error happened while executing tests :Exit code 4: pytest command line usage error :Exit code 5: No tests were collected +:Exit code 6: Maximum number of warnings exceeded (see :option:`--max-warnings`) They are represented by the :class:`pytest.ExitCode` enum. The exit codes being a part of the public API can be imported and accessed directly using: diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index fd62c6972d6..a69aa2c7887 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -1636,6 +1636,34 @@ passed multiple times. The expected format is ``name=value``. For example:: into errors. For more information please refer to :ref:`warnings`. +.. confval:: max_warnings + :type: ``int`` + + .. versionadded:: 9.1 + + Maximum number of warnings allowed before the test run is considered a failure. + When all tests pass, but the total number of warnings exceeds this value, pytest exits with + :class:`pytest.ExitCode` ``MAX_WARNINGS_ERROR`` (code ``6``). + + .. tab:: toml + + .. code-block:: toml + + [pytest] + max_warnings = 10 + + .. tab:: ini + + .. code-block:: ini + + [pytest] + max_warnings = 10 + + Note that :confval:`filtered warnings ` do not count toward this maximum total. + + Can also be set via the :option:`--max-warnings` command-line option. + + .. confval:: junit_duration_report :type: ``str`` :default: ``"total"`` @@ -3127,6 +3155,12 @@ Warnings Set which warnings to report, see ``-W`` option of Python itself. Can be specified multiple times. +.. option:: --max-warnings=NUM + + Exit with :class:`pytest.ExitCode` ``MAX_WARNINGS_ERROR`` (code ``6``) if all the tests pass, but the number + of warnings exceeds the given threshold. By default there is no limit. + Can also be set via the :confval:`max_warnings` configuration option. + Doctest ~~~~~~~ @@ -3415,6 +3449,8 @@ All the command-line flags can also be obtained by running ``pytest --help``:: -W, --pythonwarnings PYTHONWARNINGS Set which warnings to report, see -W option of Python itself + --max-warnings=num Exit with error if the number of warnings exceeds + this threshold collection: --collect-only, --co Only collect tests, don't execute them @@ -3537,6 +3573,9 @@ All the command-line flags can also be obtained by running ``pytest --help``:: Each line specifies a pattern for warnings.filterwarnings. Processed after -W/--pythonwarnings. + max_warnings (string): + Maximum number of warnings allowed before failing + the test run norecursedirs (args): Directory patterns to avoid for recursion testpaths (args): Directories to search for tests when no files or directories are given on the command line diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index f7c4de5d7e9..47e85df0951 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -117,6 +117,8 @@ class ExitCode(enum.IntEnum): USAGE_ERROR = 4 #: pytest couldn't find tests. NO_TESTS_COLLECTED = 5 + #: All tests pass, but maximum number of warnings exceeded. + MAX_WARNINGS_ERROR = 6 __module__ = "pytest" diff --git a/src/_pytest/main.py b/src/_pytest/main.py index 02c7fb373fd..c4df4e46983 100644 --- a/src/_pytest/main.py +++ b/src/_pytest/main.py @@ -125,6 +125,15 @@ def pytest_addoption(parser: Parser) -> None: action="append", help="Set which warnings to report, see -W option of Python itself", ) + group.addoption( + "--max-warnings", + action="store", + type=int, + default=None, + metavar="num", + dest="max_warnings", + help="Exit with error if all tests pass but the number of warnings exceeds this threshold", + ) parser.addini( "filterwarnings", type="linelist", @@ -132,6 +141,10 @@ def pytest_addoption(parser: Parser) -> None: "warnings.filterwarnings. " "Processed after -W/--pythonwarnings.", ) + parser.addini( + "max_warnings", + help="Exit with error if all tests pass but the number of warnings exceeds this threshold", + ) group = parser.getgroup("collect", "collection") group.addoption( diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index e9049bb82ec..b9a65ff191e 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -966,11 +966,23 @@ def pytest_sessionfinish( ExitCode.INTERRUPTED, ExitCode.USAGE_ERROR, ExitCode.NO_TESTS_COLLECTED, + ExitCode.MAX_WARNINGS_ERROR, ) if exitstatus in summary_exit_codes and not self.no_summary: self.config.hook.pytest_terminal_summary( terminalreporter=self, exitstatus=exitstatus, config=self.config ) + # Check --max-warnings threshold after all warnings have been collected. + max_warnings = self._get_max_warnings() + if max_warnings is not None and session.exitstatus == ExitCode.OK: + warning_count = len(self.stats.get("warnings", [])) + if warning_count > max_warnings: + session.exitstatus = ExitCode.MAX_WARNINGS_ERROR + self.write_line( + "Tests pass, but maximum allowed warnings exceeded: " + f"{warning_count} > {max_warnings}", + red=True, + ) if session.shouldfail: self.write_sep("!", str(session.shouldfail), red=True) if exitstatus == ExitCode.INTERRUPTED: @@ -1057,6 +1069,16 @@ def _getcrashline(self, rep): except AttributeError: return "" + def _get_max_warnings(self) -> int | None: + """Return the max_warnings threshold, from CLI or INI, or None if unset.""" + value = self.config.option.max_warnings + if value is not None: + return int(value) + ini_value = self.config.getini("max_warnings") + if ini_value: + return int(ini_value) + return None + # # Summaries for sessionfinish. # diff --git a/testing/test_warnings.py b/testing/test_warnings.py index 2625f0959e6..d4a5038d5d2 100644 --- a/testing/test_warnings.py +++ b/testing/test_warnings.py @@ -5,6 +5,7 @@ import sys import warnings +from _pytest.config import ExitCode from _pytest.fixtures import FixtureRequest from _pytest.pytester import Pytester import pytest @@ -885,3 +886,155 @@ def test_resource_warning(tmp_path): else [] ) result.stdout.fnmatch_lines([*expected_extra, "*1 passed*"]) + + +class TestMaxWarnings: + """Tests for the --max-warnings feature.""" + + PYFILE = """ + import warnings + def test_one(): + warnings.warn(UserWarning("warning one")) + def test_two(): + warnings.warn(UserWarning("warning two")) + """ + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_not_set(self, pytester: Pytester) -> None: + """Without --max-warnings, warnings don't affect exit code.""" + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest() + result.assert_outcomes(passed=2, warnings=2) + assert result.ret == ExitCode.OK + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_not_exceeded(self, pytester: Pytester) -> None: + """When warning count is below the threshold, exit code is OK.""" + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest("--max-warnings", "10") + result.assert_outcomes(passed=2, warnings=2) + assert result.ret == ExitCode.OK + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_exceeded(self, pytester: Pytester) -> None: + """When warning count exceeds threshold, exit code is MAX_WARNINGS_ERROR.""" + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest("--max-warnings", "1") + assert result.ret == ExitCode.MAX_WARNINGS_ERROR + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_equal_to_count(self, pytester: Pytester) -> None: + """When warning count equals threshold exactly, exit code is OK.""" + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest("--max-warnings", "2") + result.assert_outcomes(passed=2, warnings=2) + assert result.ret == ExitCode.OK + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_zero(self, pytester: Pytester) -> None: + """--max-warnings 0 means no warnings are allowed.""" + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest("--max-warnings", "0") + assert result.ret == ExitCode.MAX_WARNINGS_ERROR + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_exceeded_message(self, pytester: Pytester) -> None: + """Verify the output message when max warnings is exceeded.""" + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest("--max-warnings", "1") + result.stdout.fnmatch_lines( + ["*Tests pass, but maximum allowed warnings exceeded: 2 > 1*"] + ) + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_ini_option(self, pytester: Pytester) -> None: + """max_warnings can be set via INI configuration.""" + pytester.makeini( + """ + [pytest] + max_warnings = 1 + """ + ) + pytester.makepyfile(self.PYFILE) + result = pytester.runpytest() + assert result.ret == ExitCode.MAX_WARNINGS_ERROR + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_with_test_failure(self, pytester: Pytester) -> None: + """When tests fail AND warnings exceed max, TESTS_FAILED takes priority.""" + pytester.makepyfile( + """ + import warnings + def test_fail(): + warnings.warn(UserWarning("a warning")) + assert False + """ + ) + result = pytester.runpytest("--max-warnings", "0") + assert result.ret == ExitCode.TESTS_FAILED + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_with_filterwarnings_ignore(self, pytester: Pytester) -> None: + """Filtered (ignored) warnings don't count toward max_warnings.""" + pytester.makepyfile( + """ + import warnings + def test_one(): + warnings.warn(UserWarning("counted")) + warnings.warn(RuntimeWarning("ignored")) + """ + ) + result = pytester.runpytest( + "--max-warnings", + "1", + "-W", + "ignore::RuntimeWarning", + ) + result.assert_outcomes(passed=1, warnings=1) + assert result.ret == ExitCode.OK + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_with_filterwarnings_error(self, pytester: Pytester) -> None: + """Warnings turned into errors via filterwarnings don't count as warnings.""" + pytester.makepyfile( + """ + import warnings + def test_one(): + warnings.warn(UserWarning("still a warning")) + def test_two(): + warnings.warn(RuntimeWarning("becomes an error")) + """ + ) + result = pytester.runpytest( + "--max-warnings", + "0", + "-W", + "error::RuntimeWarning", + ) + # The RuntimeWarning becomes a test error, so TESTS_FAILED takes priority. + assert result.ret == ExitCode.TESTS_FAILED + + @pytest.mark.filterwarnings("default::UserWarning") + def test_max_warnings_with_filterwarnings_ini_ignore( + self, pytester: Pytester + ) -> None: + """Warnings ignored via ini filterwarnings don't count toward max_warnings.""" + pytester.makeini( + """ + [pytest] + filterwarnings = + ignore::RuntimeWarning + max_warnings = 1 + """ + ) + pytester.makepyfile( + """ + import warnings + def test_one(): + warnings.warn(UserWarning("counted")) + warnings.warn(RuntimeWarning("ignored by ini")) + """ + ) + result = pytester.runpytest() + result.assert_outcomes(passed=1, warnings=1) + assert result.ret == ExitCode.OK From b7c7172849009e021b43736e8c5dcbf3ee47f7f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:42:34 +0200 Subject: [PATCH 264/307] build(deps): Bump actions/upload-artifact from 7.0.0 to 7.0.1 (#14402) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/bbbca2ddaa5d8feaa63e36b76fdaad77386f024f...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7169014f518..83da52a2be0 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -64,7 +64,7 @@ jobs: tox -e generate-gh-release-notes -- "$VERSION" gh-release-notes.md - name: Upload release notes - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: release-notes path: gh-release-notes.md From 9979555d6d63f9d829c3b5ad13377139b0ddab90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:43:03 +0200 Subject: [PATCH 265/307] build(deps): Bump actions/cache from 5.0.4 to 5.0.5 (#14400) Bumps [actions/cache](https://github.com/actions/cache) from 5.0.4 to 5.0.5. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/668228422ae6a00e4ad889ee87cd7109ec5666a7...27d5ce7f107fe9357f9df03efb73ab90386fccae) --- updated-dependencies: - dependency-name: actions/cache dependency-version: 5.0.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 132f5081458..89471794b4c 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -31,7 +31,7 @@ jobs: python-version: "3.13" - name: requests-cache - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.cache/pytest-plugin-list/ key: plugins-http-cache-${{ github.run_id }} # Can use time based key as well From 0b21993dec0c999de95b802a18b299f278f590fe Mon Sep 17 00:00:00 2001 From: Lai Jia Yang Date: Tue, 21 Apr 2026 03:19:15 +0800 Subject: [PATCH 266/307] fix: use f-string instead of .format() in show_test_item (#14398) Co-authored-by: jiayang lai Co-authored-by: Pierre Sassoulas --- src/_pytest/runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py index d9209befd48..4f3b63e3656 100644 --- a/src/_pytest/runner.py +++ b/src/_pytest/runner.py @@ -158,7 +158,7 @@ def show_test_item(item: Item) -> None: tw.write(item.nodeid) used_fixtures = sorted(getattr(item, "fixturenames", [])) if used_fixtures: - tw.write(" (fixtures used: {})".format(", ".join(used_fixtures))) + tw.write(f" (fixtures used: {', '.join(used_fixtures)})") tw.flush() From 91e5af13db33d9c1d2363290c6067ddfd1e38162 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 21:19:49 +0200 Subject: [PATCH 267/307] build(deps): Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (#14399) Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.13.0 to 1.14.0. - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e...cef221092ed1bacb1cc03d23a2d87d1d172e277b) --- updated-dependencies: - dependency-name: pypa/gh-action-pypi-publish dependency-version: 1.14.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 83da52a2be0..2d742dceb45 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -88,7 +88,7 @@ jobs: path: dist - name: Publish package to PyPI - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b with: attestations: true From 916a7598e51d321abddb851bc9ed356bf11b0534 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 21:31:45 +0000 Subject: [PATCH 268/307] [pre-commit.ci] pre-commit autoupdate (#14405) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.10 → v0.15.11](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.10...v0.15.11) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 24911e07810..b29645b1a00 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.10" + rev: "v0.15.11" hooks: - id: ruff-check args: ["--fix"] From eaf605cd09ba00e35c62870e2a9ca80cfd4246af Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:53:23 +0000 Subject: [PATCH 269/307] [automated] Update plugin list (#14395) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 258 ++++++++++++++++++++----------- 1 file changed, 165 insertions(+), 93 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index f86f8766807..0b9f8b59afc 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.1.1,<8.0.0) :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest - :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Feb 05, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Apr 14, 2026 N/A pytest>=6.0.0 :pypi:`pytest-api-coverage` Pytest plugin for API test coverage analysis Mar 24, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 - :pypi:`pytest-api-framework-alpha` Mar 26, 2026 N/A pytest==7.2.2 + :pypi:`pytest-api-framework-alpha` Apr 14, 2026 N/A pytest==7.2.2 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A + :pypi:`pytest-appium-scheduler` Pytest plugin for Appium device scheduling and driver lifecycle management. Apr 13, 2026 N/A pytest>=7.0 :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Mar 24, 2026 N/A pytest>=8.3.5 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest @@ -120,9 +121,10 @@ This list contains 1938 plugins. :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Mar 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 05, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Mar 19, 2026 3 - Alpha pytest + :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Apr 15, 2026 3 - Alpha pytest :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-artifact` Pytest plugin for managing test artifacts Feb 09, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-artifacts` Pytest plugin for managing test artifacts Apr 17, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A @@ -144,7 +146,7 @@ This list contains 1938 plugins. :pypi:`pytest_async` pytest-async - Run your coroutine in event loop without decorator Feb 26, 2020 N/A N/A :pypi:`pytest-async-benchmark` pytest-async-benchmark: Modern pytest benchmarking for async code. 🚀 May 28, 2025 N/A pytest>=8.3.5 :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A - :pypi:`pytest-asyncio` Pytest support for asyncio Mar 25, 2026 5 - Production/Stable pytest<10,>=8.2 + :pypi:`pytest-asyncio` Pytest support for asyncio Apr 15, 2026 5 - Production/Stable pytest<10,>=8.2 :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. Apr 09, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) @@ -198,10 +200,10 @@ This list contains 1938 plugins. :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics Apr 10, 2026 3 - Alpha pytest>=9.0.0 + :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics Apr 17, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 10, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 16, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A @@ -216,7 +218,7 @@ This list contains 1938 plugins. :pypi:`pytest-black-multipy` Allow '--black' on older Pythons Jan 14, 2021 5 - Production/Stable pytest (!=3.7.3,>=3.5) ; extra == 'testing' :pypi:`pytest-black-ng` A pytest plugin to enable format checking with black Oct 20, 2022 4 - Beta pytest (>=7.0.0) :pypi:`pytest-blame` A pytest plugin helps developers to debug by providing useful commits history. May 04, 2019 N/A pytest (>=4.4.0) - :pypi:`pytest-blender` Blender Pytest plugin. Jun 25, 2025 N/A pytest + :pypi:`pytest-blender` Blender Pytest plugin. Apr 18, 2026 N/A pytest :pypi:`pytest-blink1` Pytest plugin to emit notifications via the Blink(1) RGB LED Jan 07, 2018 4 - Beta N/A :pypi:`pytest-blockage` Disable network requests during a test run. Dec 21, 2021 N/A pytest :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A @@ -323,6 +325,7 @@ This list contains 1938 plugins. :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) + :pypi:`pytest-cloudreport` pytest plugin that uploads test results to pytest-cloudreport for analytics and flaky test detection Apr 18, 2026 N/A pytest>=7.0 :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A @@ -339,7 +342,7 @@ This list contains 1938 plugins. :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Feb 09, 2026 5 - Production/Stable pytest>=3.8 + :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Apr 14, 2026 5 - Production/Stable pytest>=3.8 :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A @@ -374,6 +377,7 @@ This list contains 1938 plugins. :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A + :pypi:`pytest-coverage-gate` A pre-commit hook that enforces a coverage quality gate using coverage.xml and a baseline file Apr 14, 2026 5 - Production/Stable N/A :pypi:`pytest-coverage-impact` Sensoria: High-fidelity coverage impact analysis for Python. Jan 16, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-coveragemarkers` Using pytest markers to track functional coverage and filtering of tests May 15, 2025 N/A pytest<8.0.0,>=7.1.2 :pypi:`pytest-cov-exclude` Pytest plugin for excluding tests based on coverage data Apr 29, 2016 4 - Beta pytest (>=2.8.0,<2.9.0); extra == 'dev' @@ -423,7 +427,7 @@ This list contains 1938 plugins. :pypi:`pytest-datafixtures` Data fixtures for pytest made simple. May 15, 2025 5 - Production/Stable N/A :pypi:`pytest-data-from-files` pytest plugin to provide data from files loaded automatically Oct 13, 2021 4 - Beta pytest :pypi:`pytest-dataguard` Data validation and integrity testing for your datasets using pytest. Oct 08, 2025 N/A pytest>=8.4.2 - :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Feb 21, 2026 4 - Beta pytest<10,>=7.0.0 + :pypi:`pytest-data-loader` Pytest plugin for loading test data for data-driven testing (DDT) Apr 14, 2026 4 - Beta pytest<10,>=7.0.0 :pypi:`pytest-dataplugin` A pytest plugin for managing an archive of test data. Sep 16, 2017 1 - Planning N/A :pypi:`pytest-datarecorder` A py.test plugin recording and comparing test output. Jul 31, 2024 5 - Production/Stable pytest :pypi:`pytest-dataset` Plugin for loading different datasets for pytest by prefix from json or yaml files Sep 01, 2023 5 - Production/Stable N/A @@ -544,7 +548,7 @@ This list contains 1938 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 11, 2026 N/A pytest>=7.0 + :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 18, 2026 N/A pytest>=7.0 :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 @@ -552,13 +556,12 @@ This list contains 1938 plugins. :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 01, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 - :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Aug 21, 2025 N/A pytest>=7.0.0; extra == "dev" + :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Apr 13, 2026 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A :pypi:`pytest-durations` Pytest plugin reporting fixtures and test functions execution time. Mar 13, 2026 5 - Production/Stable pytest>=4.6 :pypi:`pytest-dynamic-parameterize` A pytest plugin to dynamically parameterize tests based on external data sources. Feb 07, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-dynamic-params` Dynamic parameters plugin for pytest Mar 12, 2026 N/A pytest :pypi:`pytest-dynamicrerun` A pytest plugin to rerun tests dynamically based off of test outcome and output. Aug 15, 2020 4 - Beta N/A :pypi:`pytest-dynamodb` DynamoDB fixtures for pytest Mar 13, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-easy-addoption` pytest-easy-addoption: Easy way to work with pytest addoption Jan 22, 2020 N/A N/A @@ -569,11 +572,12 @@ This list contains 1938 plugins. :pypi:`pytest-ec2` Pytest execution on EC2 instance Oct 22, 2019 3 - Alpha N/A :pypi:`pytest-echo` pytest plugin that allows to dump environment variables, package version and generic attributes Apr 27, 2025 5 - Production/Stable pytest>=8.3.3 :pypi:`pytest-edit` Edit the source code of a failed test with \`pytest --edit\`. Nov 17, 2024 N/A pytest + :pypi:`pytest-egg` A pytest plugin that prints egg ascii art at the end of a test run. Apr 17, 2026 N/A pytest>=7.0 :pypi:`pytest-ekstazi` Pytest plugin to select test using Ekstazi algorithm Sep 10, 2022 N/A pytest :pypi:`pytest-elastic-reporter` Mar 13, 2026 N/A pytest>=7.0 :pypi:`pytest-elasticsearch` Elasticsearch fixtures and fixture factories for Pytest. Feb 16, 2026 5 - Production/Stable pytest>=8.4.0 :pypi:`pytest-elasticsearch-test` Elasticsearch fixtures and fixture factories for Pytest. Apr 20, 2025 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Mar 25, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-elegant` A pytest plugin that provides elegant, beautiful test output Apr 13, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-elements` Tool to help automate user interfaces Jan 13, 2021 N/A pytest (>=5.4,<6.0) :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 @@ -605,7 +609,7 @@ This list contains 1938 plugins. :pypi:`pytest-envvars` Pytest plugin to validate use of envvars on your tests Jun 13, 2020 5 - Production/Stable pytest (>=3.0.0) :pypi:`pytest-envx` Pytest plugin for managing environment variables with interpolation and .env file support. Jun 28, 2025 4 - Beta pytest>=8.4.1 :pypi:`pytest-env-yaml` Apr 02, 2019 N/A N/A - :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Dec 05, 2025 N/A pytest + :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Apr 14, 2026 N/A pytest :pypi:`pytest-eradicate` pytest plugin to check for commented out code Sep 08, 2020 N/A pytest (>=2.4.2) :pypi:`pytest_erp` py.test plugin to send test info to report portal dynamically Jan 13, 2015 N/A N/A :pypi:`pytest-error` A decorator for testing exceptions with pytest Dec 06, 2025 4 - Beta pytest>=8.4 @@ -657,6 +661,7 @@ This list contains 1938 plugins. :pypi:`pytest-factoryboy` Factory Boy support for pytest. Jul 01, 2025 6 - Mature pytest>=7.0 :pypi:`pytest-factoryboy-fixtures` Generates pytest fixtures that allow the use of type hinting Jun 25, 2020 N/A N/A :pypi:`pytest-factoryboy-state` Simple factoryboy random state management Mar 22, 2022 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-fahhh` A pytest plugin that plays the fahhh meme sound when a test fails. Apr 16, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-failed-screen-record` Create a video of the screen when pytest fails Jan 05, 2023 4 - Beta pytest (>=7.1.2d,<8.0.0) :pypi:`pytest-failed-screenshot` Test case fails,take a screenshot,save it,attach it to the allure Apr 21, 2021 N/A N/A :pypi:`pytest-failed-to-verify` A pytest plugin that helps better distinguishing real test failures from setup flakiness. Aug 08, 2019 5 - Production/Stable pytest (>=4.1.0) @@ -706,7 +711,7 @@ This list contains 1938 plugins. :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest - :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Feb 19, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Apr 16, 2026 N/A pytest>=6.0.0 :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) @@ -725,7 +730,7 @@ This list contains 1938 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Feb 23, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer Apr 18, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -821,8 +826,8 @@ This list contains 1938 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 04, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 04, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 18, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 18, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-Honda-report` Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends Apr 11, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A @@ -840,9 +845,10 @@ This list contains 1938 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Mar 30, 2026 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Apr 04, 2026 4 - Beta N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Apr 12, 2026 5 - Production/Stable N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 + :pypi:`pytest-html-report-builder` A pytest plugin that generates self-contained HTML automation reports with visual charts. Apr 15, 2026 N/A pytest>=7.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A :pypi:`pytest-html-report-merger` May 22, 2024 N/A N/A :pypi:`pytest-html-thread` pytest plugin for generating HTML reports Dec 29, 2020 5 - Production/Stable N/A @@ -880,8 +886,8 @@ This list contains 1938 plugins. :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Apr 05, 2026 4 - Beta pytest>=8.0.0 - :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). Apr 05, 2026 4 - Beta N/A + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Apr 16, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). Apr 16, 2026 4 - Beta N/A :pypi:`pytest-imply` Pytest plugin for test implication — skip tests implied by stronger ones Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A @@ -962,7 +968,7 @@ This list contains 1938 plugins. :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 - :pypi:`pytest-jupyter-deploy` Pytest plugin for E2E testing of jupyter-deploy templates Mar 16, 2026 3 - Alpha pytest>=8.3.5 + :pypi:`pytest-jupyter-deploy` Pytest plugin for E2E testing of jupyter-deploy templates Apr 13, 2026 3 - Alpha pytest>=8.3.5 :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest :pypi:`pytest-just` A pytest plugin for testing justfile recipes Mar 22, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 @@ -983,7 +989,7 @@ This list contains 1938 plugins. :pypi:`pytest-kookit` Your simple but kooky integration testing with pytest Sep 10, 2024 N/A N/A :pypi:`pytest-koopmans` A plugin for testing the koopmans package Nov 21, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-krtech-common` pytest krtech common library Nov 28, 2016 4 - Beta N/A - :pypi:`pytest-kubernetes` Oct 23, 2025 N/A pytest<9.0.0,>=8.3.0 + :pypi:`pytest-kubernetes` A lightweight pytest plugin for managing local Kubernetes clusters (minikube, k3d, kind) Apr 14, 2026 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest_kustomize` Parse and validate kustomize output Dec 08, 2025 N/A N/A :pypi:`pytest-kuunda` pytest plugin to help with test data setup for PySpark tests Feb 25, 2024 4 - Beta pytest >=6.2.0 :pypi:`pytest-kwparametrize` Alternate syntax for @pytest.mark.parametrize with test cases as dictionaries and default value fallbacks Jan 22, 2021 N/A pytest (>=6) @@ -1162,11 +1168,11 @@ This list contains 1938 plugins. :pypi:`pytest-my-plugin` A pytest plugin that does awesome things Jan 27, 2025 N/A pytest>=6.0 :pypi:`pytest-mypy` A Pytest Plugin for Mypy Apr 02, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-mypyd` Mypy static type checker plugin for Pytest Aug 20, 2019 4 - Beta pytest (<4.7,>=2.8) ; python_version < "3.5" - :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Mar 12, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Apr 17, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 - :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Dec 10, 2024 5 - Production/Stable pytest>=6.2 + :pypi:`pytest-mysql` MySQL process and client fixtures for pytest Apr 12, 2026 5 - Production/Stable pytest>=8.4 :pypi:`pytest-nb` Seedable Jupyter Notebook testing tool Jul 26, 2025 N/A pytest==8.4.1 :pypi:`pytest-nb-as-test` Use notebooks as pytests. Keep your notebooks working. Feb 25, 2026 4 - Beta pytest<9.1.0,>=7.0.0; python_version < "3.14" :pypi:`pytest-nbgrader` Pytest plugin for using with nbgrader and generating test cases. Mar 31, 2026 3 - Alpha pytest>=8 @@ -1220,7 +1226,7 @@ This list contains 1938 plugins. :pypi:`pytest-only-markers` A pytest plugin that isolates test execution to only tests decorated with ONLY\* markers, stripping all other markers from matching items. Mar 17, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Apr 10, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Apr 12, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1235,7 +1241,7 @@ This list contains 1938 plugins. :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Mar 12, 2026 N/A pytest==9.0.2 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Apr 14, 2026 N/A pytest==9.0.3 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1300,7 +1306,7 @@ This list contains 1938 plugins. :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Mar 23, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Apr 03, 2026 5 - Production/Stable N/A + :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Apr 17, 2026 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A @@ -1308,7 +1314,7 @@ This list contains 1938 plugins. :pypi:`pytest-playwright-visual` A pytest fixture for visual testing with Playwright Apr 28, 2022 N/A N/A :pypi:`pytest-playwright-visual-snapshot` Easy pytest visual regression testing using playwright Feb 05, 2026 N/A N/A :pypi:`pytest-pl-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Nov 12, 2025 3 - Alpha pytest - :pypi:`pytest-plone` Pytest plugin to test Plone addons Jun 11, 2025 3 - Alpha pytest<8.0.0 + :pypi:`pytest-plone` Pytest plugin to test Plone addons Apr 18, 2026 3 - Alpha pytest<8.0.0 :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-plugins` A Python package for managing pytest plugins. Apr 05, 2026 5 - Production/Stable pytest>=9.0.1 @@ -1370,12 +1376,12 @@ This list contains 1938 plugins. :pypi:`pytest-pydantic-schema-sync` Pytest plugin to synchronise Pydantic model schemas with JSONSchema files Aug 29, 2024 N/A pytest>=6 :pypi:`pytest-pydev` py.test plugin to connect to a remote debug server with PyDev or PyCharm. Nov 15, 2017 3 - Alpha N/A :pypi:`pytest-pydocstyle` pytest plugin to run pydocstyle Oct 09, 2024 3 - Alpha pytest>=7.0 - :pypi:`pytest-pyeval` pytest plugin integrating pydantic-evals Mar 15, 2026 N/A pytest>=8.0 + :pypi:`pytest-pyeval` pytest plugin integrating pydantic-evals Apr 13, 2026 N/A pytest>=8.0 :pypi:`pytest-pylembic` This package provides pytest plugin for validating Alembic migrations using the pylembic package. Jul 22, 2025 3 - Alpha N/A :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A :pypi:`pytest-pymysql-autorecord` Record PyMySQL queries and mock with the stored data. Sep 02, 2022 N/A N/A - :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Feb 27, 2026 N/A pytest + :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Apr 17, 2026 N/A pytest :pypi:`pytest-pypi` Easily test your HTTP library against a local copy of pypi Mar 04, 2018 3 - Alpha N/A :pypi:`pytest-pypom-navigation` Core engine for cookiecutter-qa and pytest-play packages Feb 18, 2019 4 - Beta pytest (>=3.0.7) :pypi:`pytest-pyppeteer` A plugin to run pyppeteer in pytest Apr 28, 2022 N/A pytest (>=6.2.5,<7.0.0) @@ -1395,7 +1401,7 @@ This list contains 1938 plugins. :pypi:`pytest-python-test-engineer-sort` Sort plugin for Pytest May 13, 2024 N/A pytest>=6.2.0 :pypi:`pytest-pytorch` pytest plugin for a better developer experience when working with the PyTorch test suite May 25, 2021 4 - Beta pytest :pypi:`pytest-pyvenv` A package for create venv in tests Feb 27, 2024 N/A pytest ; extra == 'test' - :pypi:`pytest-pyvista` Pytest-pyvista package. Dec 02, 2025 4 - Beta pytest>=6.2.0 + :pypi:`pytest-pyvista` Pytest-pyvista package. Apr 13, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-qanova` A pytest plugin to collect test information Sep 05, 2024 3 - Alpha pytest :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) @@ -1429,7 +1435,7 @@ This list contains 1938 plugins. :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest :pypi:`pytest-reana` Pytest fixtures for REANA. Mar 03, 2026 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 - :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Mar 12, 2026 N/A pytest>=8.4.1 + :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Apr 13, 2026 N/A pytest>=8.4.1 :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A @@ -1441,7 +1447,7 @@ This list contains 1938 plugins. :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Feb 25, 2026 N/A pytest>7.2 + :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Apr 18, 2026 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 @@ -1471,7 +1477,7 @@ This list contains 1938 plugins. :pypi:`pytest-reportlog` Replacement for the --resultlog option, focused in simplicity and extensibility Nov 11, 2025 5 - Production/Stable pytest :pypi:`pytest-report-me` A pytest plugin to generate report. Dec 31, 2020 N/A pytest :pypi:`pytest-report-parameters` pytest plugin for adding tests' parameters to junit report Jun 18, 2020 3 - Alpha pytest (>=2.4.2) - :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Apr 10, 2026 N/A N/A + :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Apr 15, 2026 N/A N/A :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A :pypi:`pytest-req` pytest requests plugin Mar 02, 2026 5 - Production/Stable pytest>=8.4.2 @@ -1517,7 +1523,7 @@ This list contains 1938 plugins. :pypi:`pytest-reusable-testcases` Apr 28, 2023 N/A N/A :pypi:`pytest-revealtype-injector` Pytest plugin for replacing reveal_type() calls inside test functions with static and runtime type checking result comparison, for confirming type annotation validity. Feb 03, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-reverse` Pytest plugin to reverse test order. Sep 09, 2025 5 - Production/Stable pytest - :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Apr 11, 2026 3 - Alpha pytest>=7.0.0 + :pypi:`pytest-review` A pytest plugin that reviews the quality of your tests Apr 12, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rich` Leverage rich for richer test session output Dec 12, 2024 4 - Beta pytest>=7.0 :pypi:`pytest-richer` Pytest plugin providing a Rich based reporter. Oct 27, 2023 3 - Alpha pytest :pypi:`pytest-rich-reporter` A pytest plugin using Rich for beautiful test result formatting. Feb 17, 2022 1 - Planning pytest (>=5.0.0) @@ -1558,7 +1564,7 @@ This list contains 1938 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 11, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 18, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1571,7 +1577,7 @@ This list contains 1938 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 11, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 18, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1579,6 +1585,7 @@ This list contains 1938 plugins. :pypi:`pytest-semantic` A pytest plugin for testing LLM outputs using semantic similarity matching Nov 11, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-semantic-assert` Pytest plugin for semantic LLM output assertions using embeddings. Test meaning, not strings. Jan 09, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-semantic-llm` Semantic assertions for pytest using LLMs Mar 10, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-semantix` pytest plugin for semantic LLM output testing — validate meaning, not just shape. Apr 13, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-send-email` Send pytest execution result email Sep 02, 2024 N/A pytest :pypi:`pytest-sentry` A pytest plugin to send testrun information to Sentry.io Jul 01, 2025 N/A pytest :pypi:`pytest-sequence-markers` Pytest plugin for sequencing markers for execution of tests May 23, 2023 5 - Production/Stable N/A @@ -1612,7 +1619,7 @@ This list contains 1938 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 11, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 18, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1720,6 +1727,7 @@ This list contains 1938 plugins. :pypi:`pytest-suite-timeout` A pytest plugin for ensuring max suite time Jan 26, 2024 N/A pytest>=7.0.0 :pypi:`pytest-supercov` Pytest plugin for measuring explicit test-file to source-file coverage Jul 02, 2023 N/A N/A :pypi:`pytest-svn` SVN repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest + :pypi:`pytest-swag` Generate OpenAPI documentation from pytest tests Apr 14, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-symbols` pytest-symbols is a pytest plugin that adds support for passing test environment symbols into pytest tests. Nov 20, 2017 3 - Alpha N/A :pypi:`pytest-system-statistics` Pytest plugin to track and report system usage statistics Feb 16, 2022 5 - Production/Stable pytest (>=6.0.0) :pypi:`pytest-system-test-plugin` Pyst - Pytest System-Test Plugin Feb 03, 2022 N/A N/A @@ -1884,6 +1892,7 @@ This list contains 1938 plugins. :pypi:`pytest-venv` py.test fixture for creating a virtual environment Nov 23, 2023 4 - Beta pytest :pypi:`pytest-verbose-parametrize` More descriptive output for parametrized py.test tests Nov 29, 2024 5 - Production/Stable pytest :pypi:`pytest-verify` A pytest plugin for snapshot verification with optional visual diff viewer. Oct 25, 2025 5 - Production/Stable N/A + :pypi:`pytest-ves` pytest fixtures and builders for ONAP VES 7.x events (fault, heartbeat, measurement, and more). Apr 18, 2026 3 - Alpha N/A :pypi:`pytest-vigil` A pytest plugin for enhanced test reliability and monitoring Apr 07, 2026 5 - Production/Stable pytest>=9.0.0 :pypi:`pytest-vimqf` A simple pytest plugin that will shrink pytest output when specified, to fit vim quickfix window. Feb 08, 2021 4 - Beta pytest (>=6.2.2,<7.0.0) :pypi:`pytest-virtualenv` Virtualenv fixture for py.test Nov 29, 2024 5 - Production/Stable pytest @@ -1899,7 +1908,7 @@ This list contains 1938 plugins. :pypi:`pytest-vyper` Plugin for the vyper smart contract language. May 28, 2020 2 - Pre-Alpha N/A :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest - :pypi:`pytest-warmup` Batch preparation and distribution of expensive test resources for pytest. Apr 11, 2026 3 - Alpha pytest>=8.4 + :pypi:`pytest-warmup` Batch preparation and distribution of expensive test resources for pytest. Apr 13, 2026 3 - Alpha pytest<10,>=8.4 :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Jan 10, 2026 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A @@ -2468,7 +2477,7 @@ This list contains 1938 plugins. Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. :pypi:`pytest-api-cov` - *last release*: Feb 05, 2026, + *last release*: Apr 14, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -2489,7 +2498,7 @@ This list contains 1938 plugins. pytest framework :pypi:`pytest-api-framework-alpha` - *last release*: Mar 26, 2026, + *last release*: Apr 14, 2026, *status*: N/A, *requires*: pytest==7.2.2 @@ -2530,6 +2539,13 @@ This list contains 1938 plugins. Pytest plugin for appium + :pypi:`pytest-appium-scheduler` + *last release*: Apr 13, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin for Appium device scheduling and driver lifecycle management. + :pypi:`pytest-approval` *last release*: Mar 24, 2026, *status*: N/A, @@ -2580,7 +2596,7 @@ This list contains 1938 plugins. A plugin that provides a running Argus API server for tests :pypi:`pytest-arrakis` - *last release*: Mar 19, 2026, + *last release*: Apr 15, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -2600,6 +2616,13 @@ This list contains 1938 plugins. Pytest plugin for managing test artifacts + :pypi:`pytest-artifacts` + *last release*: Apr 17, 2026, + *status*: 4 - Beta, + *requires*: pytest>=6.2.0 + + Pytest plugin for managing test artifacts + :pypi:`pytest-asdf-plugin` *last release*: Aug 18, 2025, *status*: 5 - Production/Stable, @@ -2748,7 +2771,7 @@ This list contains 1938 plugins. Pytest fixtures for async generators :pypi:`pytest-asyncio` - *last release*: Mar 25, 2026, + *last release*: Apr 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest<10,>=8.2 @@ -3126,7 +3149,7 @@ This list contains 1938 plugins. :pypi:`pytest-beacon` - *last release*: Apr 10, 2026, + *last release*: Apr 17, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0.0 @@ -3147,7 +3170,7 @@ This list contains 1938 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-bec-e2e` - *last release*: Apr 10, 2026, + *last release*: Apr 16, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3252,7 +3275,7 @@ This list contains 1938 plugins. A pytest plugin helps developers to debug by providing useful commits history. :pypi:`pytest-blender` - *last release*: Jun 25, 2025, + *last release*: Apr 18, 2026, *status*: N/A, *requires*: pytest @@ -4000,6 +4023,13 @@ This list contains 1938 plugins. Distribute tests to cloud machines without fuss + :pypi:`pytest-cloudreport` + *last release*: Apr 18, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + pytest plugin that uploads test results to pytest-cloudreport for analytics and flaky test detection + :pypi:`pytest-cmake` *last release*: Jan 03, 2026, *status*: N/A, @@ -4113,7 +4143,7 @@ This list contains 1938 plugins. pytest plugin to run pycodestyle :pypi:`pytest-codspeed` - *last release*: Feb 09, 2026, + *last release*: Apr 14, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=3.8 @@ -4357,6 +4387,13 @@ This list contains 1938 plugins. Coverage dynamic context support for PyTest, including sub-processes + :pypi:`pytest-coverage-gate` + *last release*: Apr 14, 2026, + *status*: 5 - Production/Stable, + *requires*: N/A + + A pre-commit hook that enforces a coverage quality gate using coverage.xml and a baseline file + :pypi:`pytest-coverage-impact` *last release*: Jan 16, 2026, *status*: 3 - Alpha, @@ -4701,7 +4738,7 @@ This list contains 1938 plugins. Data validation and integrity testing for your datasets using pytest. :pypi:`pytest-data-loader` - *last release*: Feb 21, 2026, + *last release*: Apr 14, 2026, *status*: 4 - Beta, *requires*: pytest<10,>=7.0.0 @@ -5548,7 +5585,7 @@ This list contains 1938 plugins. A Django REST framework plugin for pytest. :pypi:`pytest-drift` - *last release*: Apr 11, 2026, + *last release*: Apr 18, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -5604,7 +5641,7 @@ This list contains 1938 plugins. SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 :pypi:`pytest-dsl-ui` - *last release*: Aug 21, 2025, + *last release*: Apr 13, 2026, *status*: N/A, *requires*: pytest>=7.0.0; extra == "dev" @@ -5645,13 +5682,6 @@ This list contains 1938 plugins. A pytest plugin to dynamically parameterize tests based on external data sources. - :pypi:`pytest-dynamic-params` - *last release*: Mar 12, 2026, - *status*: N/A, - *requires*: pytest - - Dynamic parameters plugin for pytest - :pypi:`pytest-dynamicrerun` *last release*: Aug 15, 2020, *status*: 4 - Beta, @@ -5722,6 +5752,13 @@ This list contains 1938 plugins. Edit the source code of a failed test with \`pytest --edit\`. + :pypi:`pytest-egg` + *last release*: Apr 17, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin that prints egg ascii art at the end of a test run. + :pypi:`pytest-ekstazi` *last release*: Sep 10, 2022, *status*: N/A, @@ -5751,7 +5788,7 @@ This list contains 1938 plugins. Elasticsearch fixtures and fixture factories for Pytest. :pypi:`pytest-elegant` - *last release*: Mar 25, 2026, + *last release*: Apr 13, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -5975,7 +6012,7 @@ This list contains 1938 plugins. :pypi:`pytest-ephemeral-container` - *last release*: Dec 05, 2025, + *last release*: Apr 14, 2026, *status*: N/A, *requires*: pytest @@ -6338,6 +6375,13 @@ This list contains 1938 plugins. Simple factoryboy random state management + :pypi:`pytest-fahhh` + *last release*: Apr 16, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + A pytest plugin that plays the fahhh meme sound when a test fails. + :pypi:`pytest-failed-screen-record` *last release*: Jan 05, 2023, *status*: 4 - Beta, @@ -6682,7 +6726,7 @@ This list contains 1938 plugins. A pytest plugin to assert type annotations at runtime. :pypi:`pytest-fkit` - *last release*: Feb 19, 2026, + *last release*: Apr 16, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -6815,7 +6859,7 @@ This list contains 1938 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Feb 23, 2026, + *last release*: Apr 18, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -7487,14 +7531,14 @@ This list contains 1938 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Apr 04, 2026, + *last release*: Apr 18, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Apr 04, 2026, + *last release*: Apr 18, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7620,8 +7664,8 @@ This list contains 1938 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Apr 04, 2026, - *status*: 4 - Beta, + *last release*: Apr 12, 2026, + *status*: 5 - Production/Stable, *requires*: N/A Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. @@ -7640,6 +7684,13 @@ This list contains 1938 plugins. Enhanced HTML reporting for pytest with categories, specifications, and detailed logging + :pypi:`pytest-html-report-builder` + *last release*: Apr 15, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + A pytest plugin that generates self-contained HTML automation reports with visual charts. + :pypi:`pytest-html-reporter` *last release*: Feb 13, 2022, *status*: N/A, @@ -7900,14 +7951,14 @@ This list contains 1938 plugins. A pytest plugin for image snapshot management and comparison. :pypi:`pytest-impacted` - *last release*: Apr 05, 2026, + *last release*: Apr 16, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0.0 A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. :pypi:`pytest-impacted-rs` - *last release*: Apr 05, 2026, + *last release*: Apr 16, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8474,7 +8525,7 @@ This list contains 1938 plugins. A pytest plugin for testing Jupyter libraries and extensions. :pypi:`pytest-jupyter-deploy` - *last release*: Mar 16, 2026, + *last release*: Apr 13, 2026, *status*: 3 - Alpha, *requires*: pytest>=8.3.5 @@ -8621,11 +8672,11 @@ This list contains 1938 plugins. pytest krtech common library :pypi:`pytest-kubernetes` - *last release*: Oct 23, 2025, + *last release*: Apr 14, 2026, *status*: N/A, - *requires*: pytest<9.0.0,>=8.3.0 - + *requires*: pytest<10.0.0,>=9.0.0 + A lightweight pytest plugin for managing local Kubernetes clusters (minikube, k3d, kind) :pypi:`pytest_kustomize` *last release*: Dec 08, 2025, @@ -9874,7 +9925,7 @@ This list contains 1938 plugins. Mypy static type checker plugin for Pytest :pypi:`pytest-mypy-plugins` - *last release*: Mar 12, 2026, + *last release*: Apr 17, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -9902,9 +9953,9 @@ This list contains 1938 plugins. Pytest plugin to check mypy output :pypi:`pytest-mysql` - *last release*: Dec 10, 2024, + *last release*: Apr 12, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=6.2 + *requires*: pytest>=8.4 MySQL process and client fixtures for pytest @@ -10280,7 +10331,7 @@ This list contains 1938 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Apr 10, 2026, + *last release*: Apr 12, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -10385,9 +10436,9 @@ This list contains 1938 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Mar 12, 2026, + *last release*: Apr 14, 2026, *status*: N/A, - *requires*: pytest==9.0.2 + *requires*: pytest==9.0.3 OpenTelemetry plugin for Pytest @@ -10840,7 +10891,7 @@ This list contains 1938 plugins. A pytest wrapper with async fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-axe` - *last release*: Apr 03, 2026, + *last release*: Apr 17, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -10896,7 +10947,7 @@ This list contains 1938 plugins. A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. :pypi:`pytest-plone` - *last release*: Jun 11, 2025, + *last release*: Apr 18, 2026, *status*: 3 - Alpha, *requires*: pytest<8.0.0 @@ -11330,7 +11381,7 @@ This list contains 1938 plugins. pytest plugin to run pydocstyle :pypi:`pytest-pyeval` - *last release*: Mar 15, 2026, + *last release*: Apr 13, 2026, *status*: N/A, *requires*: pytest>=8.0 @@ -11365,7 +11416,7 @@ This list contains 1938 plugins. Record PyMySQL queries and mock with the stored data. :pypi:`pytest-pyodide` - *last release*: Feb 27, 2026, + *last release*: Apr 17, 2026, *status*: N/A, *requires*: pytest @@ -11505,7 +11556,7 @@ This list contains 1938 plugins. A package for create venv in tests :pypi:`pytest-pyvista` - *last release*: Dec 02, 2025, + *last release*: Apr 13, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -11743,7 +11794,7 @@ This list contains 1938 plugins. Capture your test sessions. Recap the results. :pypi:`pytest-recorder` - *last release*: Mar 12, 2026, + *last release*: Apr 13, 2026, *status*: N/A, *requires*: pytest>=8.4.1 @@ -11827,7 +11878,7 @@ This list contains 1938 plugins. Easy to use fixtures to write regression tests. :pypi:`pytest-regtest` - *last release*: Feb 25, 2026, + *last release*: Apr 18, 2026, *status*: N/A, *requires*: pytest>7.2 @@ -12037,7 +12088,7 @@ This list contains 1938 plugins. pytest plugin for adding tests' parameters to junit report :pypi:`pytest-reportportal` - *last release*: Apr 10, 2026, + *last release*: Apr 15, 2026, *status*: N/A, *requires*: N/A @@ -12359,7 +12410,7 @@ This list contains 1938 plugins. Pytest plugin to reverse test order. :pypi:`pytest-review` - *last release*: Apr 11, 2026, + *last release*: Apr 12, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0.0 @@ -12646,7 +12697,7 @@ This list contains 1938 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Apr 11, 2026, + *last release*: Apr 18, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12737,7 +12788,7 @@ This list contains 1938 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Apr 11, 2026, + *last release*: Apr 18, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12792,6 +12843,13 @@ This list contains 1938 plugins. Semantic assertions for pytest using LLMs + :pypi:`pytest-semantix` + *last release*: Apr 13, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + pytest plugin for semantic LLM output testing — validate meaning, not just shape. + :pypi:`pytest-send-email` *last release*: Sep 02, 2024, *status*: N/A, @@ -13024,7 +13082,7 @@ This list contains 1938 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Apr 11, 2026, + *last release*: Apr 18, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13779,6 +13837,13 @@ This list contains 1938 plugins. SVN repository fixture for py.test + :pypi:`pytest-swag` + *last release*: Apr 14, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Generate OpenAPI documentation from pytest tests + :pypi:`pytest-symbols` *last release*: Nov 20, 2017, *status*: 3 - Alpha, @@ -14927,6 +14992,13 @@ This list contains 1938 plugins. A pytest plugin for snapshot verification with optional visual diff viewer. + :pypi:`pytest-ves` + *last release*: Apr 18, 2026, + *status*: 3 - Alpha, + *requires*: N/A + + pytest fixtures and builders for ONAP VES 7.x events (fault, heartbeat, measurement, and more). + :pypi:`pytest-vigil` *last release*: Apr 07, 2026, *status*: 5 - Production/Stable, @@ -15033,9 +15105,9 @@ This list contains 1938 plugins. :pypi:`pytest-warmup` - *last release*: Apr 11, 2026, + *last release*: Apr 13, 2026, *status*: 3 - Alpha, - *requires*: pytest>=8.4 + *requires*: pytest<10,>=8.4 Batch preparation and distribution of expensive test resources for pytest. From d72943a57266ef368fb3498a3fd136cbf1c7aee6 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Tue, 21 Apr 2026 08:54:17 -0300 Subject: [PATCH 270/307] Fix `-V` to show version information (#14382) This regressed in #13575. Fixes #14381. --- changelog/14381.bugfix.rst | 1 + src/_pytest/config/__init__.py | 7 +++++-- testing/test_helpconfig.py | 7 ++++--- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 changelog/14381.bugfix.rst diff --git a/changelog/14381.bugfix.rst b/changelog/14381.bugfix.rst new file mode 100644 index 00000000000..d3552a6304d --- /dev/null +++ b/changelog/14381.bugfix.rst @@ -0,0 +1 @@ +Fixed ``-V`` (short form of ``--version``) to properly display the current version. diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 47e85df0951..86786c2b04a 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -184,9 +184,12 @@ def main( :returns: An exit code. """ - # Handle a single `--version` argument early to avoid starting up the entire pytest infrastructure. + # Handle a single `--version`/`-V` argument early to avoid starting up the entire pytest infrastructure. new_args = sys.argv[1:] if args is None else args - if isinstance(new_args, Sequence) and new_args.count("--version") == 1: + if ( + isinstance(new_args, Sequence) + and (new_args.count("--version") + new_args.count("-V")) == 1 + ): sys.stdout.write(f"pytest {__version__}\n") return ExitCode.OK diff --git a/testing/test_helpconfig.py b/testing/test_helpconfig.py index b01a6fa1559..7c2cb49d87e 100644 --- a/testing/test_helpconfig.py +++ b/testing/test_helpconfig.py @@ -16,10 +16,11 @@ def test_version_verbose(pytester: Pytester, pytestconfig, monkeypatch) -> None: result.stdout.fnmatch_lines(["*registered third-party plugins:", "*at*"]) -def test_version_less_verbose(pytester: Pytester) -> None: - """Single ``--version`` parameter should display only the pytest version, without loading plugins (#13574).""" +@pytest.mark.parametrize("flag", ["--version", "-V"]) +def test_version_less_verbose(pytester: Pytester, flag: str) -> None: + """Single ``--version`` or ``-V`` should display only the pytest version, without loading plugins (#13574).""" pytester.makeconftest("print('This should not be printed')") - result = pytester.runpytest_subprocess("--version") + result = pytester.runpytest_subprocess(flag) assert result.ret == ExitCode.OK assert result.stdout.str().strip() == f"pytest {pytest.__version__}" From d4fde45a5846dfed2581d38a4e90e9d4be917e2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 08:57:22 -0300 Subject: [PATCH 271/307] build(deps): Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (#14401) Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.1.0 to 8.1.1. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/c0f553fe549906ede9cf27b5156039d195d2ece0...5f6978faf089d4d20b00c7766989d076bb2fc7f1) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 8.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-plugin-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-plugin-list.yml b/.github/workflows/update-plugin-list.yml index 89471794b4c..b5fe6ad7a15 100644 --- a/.github/workflows/update-plugin-list.yml +++ b/.github/workflows/update-plugin-list.yml @@ -47,7 +47,7 @@ jobs: - name: Create Pull Request id: pr - uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 + uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 with: commit-message: '[automated] Update plugin list' author: 'pytest bot ' From a38b20d79039d50c504320b5d4d790c61893a90e Mon Sep 17 00:00:00 2001 From: EternalRights <162705204+EternalRights@users.noreply.github.com> Date: Sun, 26 Apr 2026 02:54:10 +0800 Subject: [PATCH 272/307] raises: is_fully_escaped does not handle consecutive backslashes correctly (#14393) --- changelog/14392.bugfix.rst | 1 + src/_pytest/raises.py | 7 ++++--- testing/python/raises.py | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 changelog/14392.bugfix.rst diff --git a/changelog/14392.bugfix.rst b/changelog/14392.bugfix.rst new file mode 100644 index 00000000000..b67ff0ffec9 --- /dev/null +++ b/changelog/14392.bugfix.rst @@ -0,0 +1 @@ +Fixed a bug in :func:`pytest.raises(match=...) ` "fully escaped" detection, causing the regex diff display to be shown in some instances when the raw string diff display should be shown instead. diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 82fe2c41c96..77a32dcac84 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -345,9 +345,10 @@ def _check_raw_type( def is_fully_escaped(s: str) -> bool: # we know we won't compile with re.VERBOSE, so whitespace doesn't need to be escaped metacharacters = "{}()+.*?^$[]|" - return not any( - c in metacharacters and (i == 0 or s[i - 1] != "\\") for (i, c) in enumerate(s) - ) + # Strip all escape sequences (backslash + any char), then check if any + # metacharacter remains unescaped in the resulting string. + stripped = re.sub(r"\\.", "", s) + return not any(c in metacharacters for c in stripped) def unescape(s: str) -> str: diff --git a/testing/python/raises.py b/testing/python/raises.py index f74d747c0df..52336b122a1 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -444,3 +444,19 @@ def test_pipe_is_treated_as_regex_metacharacter(self) -> None: assert not is_fully_escaped("foo|bar") assert is_fully_escaped(r"foo\|bar") assert unescape(r"foo\|bar") == "foo|bar" + + def test_consecutive_backslashes_in_escape_check(self) -> None: + """Consecutive backslashes escape each other, leaving the metachar unescaped.""" + from _pytest.raises import is_fully_escaped + + # r"\." -> one backslash escapes the dot -> fully escaped + assert is_fully_escaped(r"\.") + # r"\\." -> two backslashes: the first escapes the second, dot is unescaped + assert not is_fully_escaped(r"\\.") + # r"\\\." -> three backslashes: pair escapes pair, last escapes dot -> fully escaped + assert is_fully_escaped(r"\\\.") + # Same idea with pipe metachar + # "\\\\|" is the string \\| (2 backslashes + pipe): even count, pipe is unescaped + assert not is_fully_escaped("\\\\|") + # r"\\\\|" is the string \\\\| (4 backslashes + pipe): even count, pipe is unescaped + assert not is_fully_escaped(r"\\\\|") From cd7592c41c40ebc9663c2984447d72e95c731bda Mon Sep 17 00:00:00 2001 From: Garion Milazzo <168796509+lavaFreak@users.noreply.github.com> Date: Sun, 26 Apr 2026 00:21:16 -0700 Subject: [PATCH 273/307] raises: suppress exception cause in raises match failures (#14391) --- AUTHORS | 1 + changelog/14389.bugfix.rst | 1 + src/_pytest/raises.py | 2 +- testing/python/raises.py | 27 +++++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 changelog/14389.bugfix.rst diff --git a/AUTHORS b/AUTHORS index c33cf5fafbd..d6d2737a4bf 100644 --- a/AUTHORS +++ b/AUTHORS @@ -180,6 +180,7 @@ Fraser Stark Freya Bruhin Gabriel Landau Gabriel Reis +Garion Milazzo Garvit Shubham Gene Wood George Kussumoto diff --git a/changelog/14389.bugfix.rst b/changelog/14389.bugfix.rst new file mode 100644 index 00000000000..15bccc5bbce --- /dev/null +++ b/changelog/14389.bugfix.rst @@ -0,0 +1 @@ +Improved ``pytest.raises(..., match=...)`` failures to report the mismatched exception as the direct cause of the resulting ``AssertionError``. diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index 77a32dcac84..a6c9e74e3ba 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -699,7 +699,7 @@ def __exit__( if not self.matches(exc_val): if self._just_propagate: return False - raise AssertionError(self._fail_reason) + raise AssertionError(self._fail_reason) from None # Cast to narrow the exception type now that it's verified.... # even though the TypeGuard in self.matches should be narrowing diff --git a/testing/python/raises.py b/testing/python/raises.py index 52336b122a1..371cfc1bd1f 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -179,6 +179,33 @@ def test_invalid_regex(): result.stdout.no_fnmatch_line("*File*") result.stdout.no_fnmatch_line("*line*") + def test_raises_match_failure_suppresses_exception_context( + self, pytester: Pytester + ) -> None: + pytester.makepyfile( + """ + import pytest + + def test_raises_match_failure(): + with pytest.raises(ValueError, match="expected"): + raise ValueError("actual") + """ + ) + result = pytester.runpytest("--tb=short") + assert result.ret == 1 + result.stdout.fnmatch_lines( + [ + "*E*AssertionError: Regex pattern did not match.*", + ] + ) + result.stdout.no_fnmatch_line("*ValueError: actual") + result.stdout.no_fnmatch_line( + "*The above exception was the direct cause of the following exception:*" + ) + result.stdout.no_fnmatch_line( + "*During handling of the above exception, another exception occurred:*" + ) + def test_noclass(self) -> None: with pytest.raises(TypeError): with pytest.raises("wrong"): # type: ignore[call-overload] From 560b67893a11f37502024c6741614652ab27b2db Mon Sep 17 00:00:00 2001 From: V1SHAL421 Date: Sun, 1 Mar 2026 18:46:53 +0000 Subject: [PATCH 274/307] Allow pytest.HIDDEN_PARAM in ids argument of pytest.mark.parametrize typing Fix #14234 --- changelog/14234.bugfix.rst | 1 + src/_pytest/mark/structures.py | 2 +- testing/typing_checks.py | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 changelog/14234.bugfix.rst diff --git a/changelog/14234.bugfix.rst b/changelog/14234.bugfix.rst new file mode 100644 index 00000000000..5a5b8a8b3f9 --- /dev/null +++ b/changelog/14234.bugfix.rst @@ -0,0 +1 @@ +Allow :ref:`pytest.HIDDEN_PARAM ` in :ref:`@pytest.mark.parametrize(ids=...) ` typing. diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 5c9e6601e8a..21a5a34cb90 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -532,7 +532,7 @@ def __call__( argvalues: Collection[ParameterSet | Sequence[object] | object], *, indirect: bool | Sequence[str] = ..., - ids: Iterable[None | str | float | int | bool] + ids: Iterable[None | str | float | int | bool | _HiddenParam] | Callable[[Any], object | None] | None = ..., scope: ScopeName | None = ..., diff --git a/testing/typing_checks.py b/testing/typing_checks.py index 2eb8322d83a..455313d61aa 100644 --- a/testing/typing_checks.py +++ b/testing/typing_checks.py @@ -61,6 +61,12 @@ def check_testreport_attributes(report: TestReport) -> None: assert_type(report.location, tuple[str, int | None, str]) +# Issue #14234. +@pytest.mark.parametrize("x", [1, 2], ids=[pytest.HIDDEN_PARAM, "visible"]) +def test_hidden_param(x: int) -> None: + pass + + # Test @pytest.mark.parametrize iterator argvalues deprecation. # Will be complain about unused type ignore if doesn't work. @pytest.mark.parametrize("x", iter(range(10))) # type: ignore[deprecated] From 4c5f572f8f76c2babceda98abe830e854797fc7e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 26 Apr 2026 10:51:00 +0300 Subject: [PATCH 275/307] changelog: fix up a 14389 entry The PR changed but forgot to update the changelog. --- changelog/14389.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/14389.bugfix.rst b/changelog/14389.bugfix.rst index 15bccc5bbce..f0d85169d0b 100644 --- a/changelog/14389.bugfix.rst +++ b/changelog/14389.bugfix.rst @@ -1 +1 @@ -Improved ``pytest.raises(..., match=...)`` failures to report the mismatched exception as the direct cause of the resulting ``AssertionError``. +Improved :func:`pytest.raises(..., match=...) ` failures to suppress the mismatched exception as a cause of the resulting ``AssertionError``. From 5dfd4eab7d328266fb3788dcbb031c9d67903daf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 26 Apr 2026 14:20:45 +0200 Subject: [PATCH 276/307] [automated] Update plugin list (#14419) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 218 ++++++++++++++++++++----------- 1 file changed, 145 insertions(+), 73 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 0b9f8b59afc..5b61a6b1936 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =6.2.4,<7.0.0) :pypi:`pytest-adf` Pytest plugin for writing Azure Data Factory integration tests May 10, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-adf-azure-identity` Pytest plugin for writing Azure Data Factory integration tests Mar 06, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-adk` Helpers for testing agents with Google's adk-python Apr 20, 2026 1 - Planning pytest>=8; extra == "dev" :pypi:`pytest-ads-testplan` Azure DevOps Test Case reporting for pytest tests Sep 15, 2022 N/A N/A :pypi:`pytest-adversarial` Generate adversarial pytest tests using LLM Jan 22, 2026 N/A pytest>=7.0.0 :pypi:`pytest-affected` Nov 06, 2023 N/A N/A @@ -55,7 +56,9 @@ This list contains 1947 plugins. :pypi:`pytest-agentcontract` Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts Feb 18, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-digest` A Pytest plugin to generate a Markdown report for AI Agents Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 13, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agentharness` Open-source test harness for AI agents that take real-world actions. Apr 20, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-health` Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. Apr 03, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-agent-observability` Reserved package name for Plivo. Apr 24, 2026 N/A N/A :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A @@ -67,7 +70,7 @@ This list contains 1947 plugins. :pypi:`pytest-aiohttp` Pytest plugin for aiohttp support Jan 23, 2025 4 - Beta pytest>=6.1.0 :pypi:`pytest-aiohttp-client` Pytest \`client\` fixture for the Aiohttp Jan 10, 2023 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-aiohttp-mock` Send responses to aiohttp. Sep 13, 2025 3 - Alpha pytest>=8 - :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Feb 10, 2026 N/A pytest + :pypi:`pytest-aiohutils` Pytest plugin providing fixtures and configuration for aiohutils projects (offline, record, cleanup modes). Apr 23, 2026 N/A pytest :pypi:`pytest-aiomoto` pytest-aiomoto Jun 24, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-aioresponses` py.test integration for aioresponses Jan 02, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-aioworkers` A plugin to test aioworkers project with pytest Dec 26, 2024 5 - Production/Stable pytest>=8.3.4 @@ -108,13 +111,14 @@ This list contains 1947 plugins. :pypi:`pytest-api-coverage` Pytest plugin for API test coverage analysis Mar 24, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-framework-alpha` Apr 14, 2026 N/A pytest==7.2.2 + :pypi:`pytest-api-kit` Pragmatic scaffolding for API smoke / regression tests — zero-dep schema, snapshot drift, HTML reports, AWS ECS deploy. Apr 23, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-api-soup` Validate multiple endpoints with unit testing using a single source of truth. Aug 27, 2022 N/A N/A :pypi:`pytest-apistellar` apistellar plugin for pytest. Jun 18, 2019 N/A N/A :pypi:`pytest-apiver` Jun 21, 2024 N/A pytest :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A :pypi:`pytest-appium-scheduler` Pytest plugin for Appium device scheduling and driver lifecycle management. Apr 13, 2026 N/A pytest>=7.0 - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Mar 24, 2026 N/A pytest>=8.3.5 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Apr 24, 2026 N/A pytest>=9.0.3 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 @@ -123,7 +127,6 @@ This list contains 1947 plugins. :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 05, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Apr 15, 2026 3 - Alpha pytest :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 - :pypi:`pytest-artifact` Pytest plugin for managing test artifacts Feb 09, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-artifacts` Pytest plugin for managing test artifacts Apr 17, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) @@ -203,8 +206,10 @@ This list contains 1947 plugins. :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics Apr 17, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 16, 2026 3 - Alpha pytest + :pypi:`pytest-beartype-tests` Pytest plugin that applies @beartype to every collected test function. Apr 20, 2026 4 - Beta pytest>=8 + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 21, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A + :pypi:`pytest-beehave` A pytest plugin that runs acceptance criteria stub generation as part of the pytest lifecycle, with auto-ID assignment and generic step docstrings Apr 21, 2026 4 - Beta pytest>=9.0.3; extra == "dev" :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 09, 2025 5 - Production/Stable pytest>=8.1 @@ -226,6 +231,7 @@ This list contains 1947 plugins. :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest + :pypi:`pytest-bods-v04-fixtures` Pytest plugin providing a parametrized fixture over the canonical BODS v0.4 fixtures pack Apr 20, 2026 N/A pytest>=7.0 :pypi:`pytest-boilerplate` The pytest plugin for your Django Boilerplate. Sep 12, 2024 5 - Production/Stable pytest>=4.0.0 :pypi:`pytest-bonsai` Apr 08, 2025 N/A pytest>=6 :pypi:`pytest-boost-xml` Plugin for pytest to generate boost xml reports Nov 30, 2022 4 - Beta N/A @@ -325,7 +331,7 @@ This list contains 1947 plugins. :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cloudreport` pytest plugin that uploads test results to pytest-cloudreport for analytics and flaky test detection Apr 18, 2026 N/A pytest>=7.0 + :pypi:`pytest-cloudreport` pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. Apr 22, 2026 N/A pytest>=7.0 :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A @@ -485,7 +491,7 @@ This list contains 1947 plugins. :pypi:`pytest-ditto-pyarrow` pytest-ditto plugin for pyarrow table snapshots. Mar 22, 2026 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-django` A Django plugin for pytest. Feb 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-django-ahead` A Django plugin for pytest. Oct 27, 2016 5 - Production/Stable pytest (>=2.9) - :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Dec 13, 2025 5 - Production/Stable pytest + :pypi:`pytest-djangoapp` Nice pytest plugin to help you with Django pluggable application testing. Apr 25, 2026 5 - Production/Stable pytest :pypi:`pytest-django-asyncio` Temporary pytest plugin backport for async Django DB fixture handling. Mar 26, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-django-cache-xdist` A djangocachexdist plugin for pytest May 12, 2020 4 - Beta N/A :pypi:`pytest-django-casperjs` Integrate CasperJS with your django tests as a pytest fixture. Mar 15, 2015 2 - Pre-Alpha N/A @@ -516,7 +522,7 @@ This list contains 1947 plugins. :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 17, 2025 4 - Beta pytest<10,>=7.2.2 :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) - :pypi:`pytest-docker-fixtures` pytest docker fixtures Dec 01, 2025 3 - Alpha pytest + :pypi:`pytest-docker-fixtures` pytest docker fixtures Apr 20, 2026 3 - Alpha pytest :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-haproxy-fixtures` Pytest fixtures for testing with haproxy. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-pexpect` pytest plugin for writing functional tests with pexpect and docker Jan 14, 2019 N/A pytest @@ -548,13 +554,13 @@ This list contains 1947 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 18, 2026 N/A pytest>=7.0 + :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 22, 2026 N/A pytest>=7.0 :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 01, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 25, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Apr 13, 2026 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest @@ -584,6 +590,7 @@ This list contains 1947 plugins. :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Mar 02, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli Apr 22, 2026 N/A pytest>=8 :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Mar 02, 2026 5 - Production/Stable N/A :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Mar 02, 2026 5 - Production/Stable N/A :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Mar 02, 2026 5 - Production/Stable N/A @@ -692,7 +699,7 @@ This list contains 1947 plugins. :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 10, 2026 N/A pytest>=7.0 :pypi:`pytest-fixedpoint` Pytest plugin for recording and replaying deterministic function calls Mar 12, 2026 N/A pytest>=7.0 - :pypi:`pytest-fixkit` A very micro http framework. Apr 02, 2026 5 - Production/Stable pytest + :pypi:`pytest-fixkit` A very micro http framework. Apr 20, 2026 5 - Production/Stable pytest :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A @@ -711,7 +718,7 @@ This list contains 1947 plugins. :pypi:`pytest-fixture-timing` Tiny plugin to report total duration per fixture Dec 11, 2025 N/A pytest>=7.0 :pypi:`pytest-fixture-tools` Plugin for pytest which provides tools for fixtures Apr 30, 2025 6 - Mature pytest :pypi:`pytest-fixture-typecheck` A pytest plugin to assert type annotations at runtime. Aug 24, 2021 N/A pytest - :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Apr 16, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-fkit` A pytest plugin that prevents crashes from killing your test suite Apr 21, 2026 N/A pytest>=6.0.0 :pypi:`pytest-flake8` pytest plugin to check FLAKE8 requirements Nov 09, 2024 5 - Production/Stable pytest>=7.0 :pypi:`pytest-flake8-path` A pytest fixture for testing flake8 plugins. Sep 09, 2025 5 - Production/Stable pytest :pypi:`pytest-flake8-v2` pytest plugin to check FLAKE8 requirements Mar 01, 2022 5 - Production/Stable pytest (>=7.0) @@ -721,7 +728,7 @@ This list contains 1947 plugins. :pypi:`pytest-flakehunter` Re-run tests N times, visualize failure heatmaps, and get AI root cause hypotheses Apr 07, 2026 N/A pytest>=7.0 :pypi:`pytest-flakemark` FLAKEMARK — Differential execution tracer that finds the exact file, line, and root cause of any flaky test. Mar 23, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Mar 24, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Apr 23, 2026 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) @@ -730,7 +737,7 @@ This list contains 1947 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Apr 18, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer Apr 25, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -769,7 +776,7 @@ This list contains 1947 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 08, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 23, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -786,7 +793,7 @@ This list contains 1947 plugins. :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 - :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. Apr 10, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. Apr 25, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 @@ -826,8 +833,8 @@ This list contains 1947 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 18, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 18, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 25, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 25, 2026 3 - Alpha pytest==9.0.0 :pypi:`pytest-Honda-report` Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends Apr 11, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A @@ -848,7 +855,7 @@ This list contains 1947 plugins. :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Apr 12, 2026 5 - Production/Stable N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 - :pypi:`pytest-html-report-builder` A pytest plugin that generates self-contained HTML automation reports with visual charts. Apr 15, 2026 N/A pytest>=7.0 + :pypi:`pytest-html-report-builder` A pytest plugin that generates self-contained HTML automation reports with visual charts. Apr 22, 2026 N/A pytest>=7.0 :pypi:`pytest-html-reporter` Generates a static html report based on pytest framework Feb 13, 2022 N/A N/A :pypi:`pytest-html-report-merger` May 22, 2024 N/A N/A :pypi:`pytest-html-thread` pytest plugin for generating HTML reports Dec 29, 2020 5 - Production/Stable N/A @@ -950,7 +957,7 @@ This list contains 1947 plugins. :pypi:`pytest-jinja-check` Pytest plugin to lint Jinja2 templates in FastAPI applications Mar 14, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-jira` py.test JIRA integration plugin, using markers Mar 19, 2026 4 - Beta pytest>=2.2.4 :pypi:`pytest-jira-xfail` Plugin skips (xfail) tests if unresolved Jira issue(s) linked Jul 09, 2024 N/A pytest>=7.2.0 - :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Oct 11, 2025 4 - Beta pytest>=6.2.4 + :pypi:`pytest-jira-xray` pytest plugin to integrate tests with JIRA XRAY Apr 24, 2026 4 - Beta pytest>=6.2.4 :pypi:`pytest-job-selection` A pytest plugin for load balancing test suites Jan 30, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-jobserver` Limit parallel tests with posix jobserver. Feb 02, 2026 5 - Production/Stable pytest :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) @@ -968,7 +975,7 @@ This list contains 1947 plugins. :pypi:`pytest-junit-logging` A pytest plugin for embedding log output into JUnit XML reports Nov 27, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-junit-xray-xml` Export test results in an augmented JUnit format for usage with Xray () Jan 01, 2025 4 - Beta pytest :pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Oct 16, 2025 4 - Beta pytest>=7.0 - :pypi:`pytest-jupyter-deploy` Pytest plugin for E2E testing of jupyter-deploy templates Apr 13, 2026 3 - Alpha pytest>=8.3.5 + :pypi:`pytest-jupyter-deploy` Pytest plugin for E2E testing of jupyter-deploy templates Apr 24, 2026 3 - Alpha pytest>=8.3.5 :pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest :pypi:`pytest-just` A pytest plugin for testing justfile recipes Mar 22, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-jux` A pytest plugin for signing and publishing JUnit XML test reports to the Jux REST API Jan 08, 2026 3 - Alpha pytest>=7.4 @@ -996,7 +1003,7 @@ This list contains 1947 plugins. :pypi:`pytest-lambda` Define pytest fixtures with lambda functions. May 27, 2024 5 - Production/Stable pytest<9,>=3.6 :pypi:`pytest-lamp` Jan 06, 2017 3 - Alpha N/A :pypi:`pytest-langchain` Pytest-style test runner for langchain agents Feb 26, 2023 N/A pytest - :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Apr 05, 2026 4 - Beta N/A + :pypi:`pytest-language-server` A blazingly fast Language Server Protocol implementation for pytest Apr 25, 2026 4 - Beta N/A :pypi:`pytest-lark` Create fancy and clear HTML test reports. Nov 05, 2023 N/A N/A :pypi:`pytest-latin-hypercube` Implementation of Latin Hypercube Sampling for pytest. Jun 26, 2025 N/A pytest :pypi:`pytest-launchable` Launchable Pytest Plugin Apr 05, 2023 N/A pytest (>=4.2.0) @@ -1090,7 +1097,7 @@ This list contains 1947 plugins. :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 - :pypi:`pytest-mcp-tools` Mar 12, 2026 N/A pytest>=7.0.0; extra == "test" + :pypi:`pytest-mcp-tools` \`pytest --mcp-tools\` an opinionated black box tester to call a live MCP server and test it live against its own contracts Apr 25, 2026 N/A pytest>=7.0.0; extra == "test" :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 :pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Oct 08, 2024 N/A pytest>=7.4.3 @@ -1190,7 +1197,7 @@ This list contains 1947 plugins. :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) - :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Feb 13, 2026 N/A pytest<9.0.0,>=8.2.0 + :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Apr 20, 2026 N/A pytest<10.0.0,>=9.0.0 :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A @@ -1226,7 +1233,7 @@ This list contains 1947 plugins. :pypi:`pytest-only-markers` A pytest plugin that isolates test execution to only tests decorated with ONLY\* markers, stripping all other markers from matching items. Mar 17, 2026 5 - Production/Stable pytest>=9.0.1 :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A - :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Apr 12, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Apr 21, 2026 N/A pytest>=7.0.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1327,6 +1334,7 @@ This list contains 1947 plugins. :pypi:`pytest-pokie` Pokie plugin for pytest Oct 19, 2023 5 - Production/Stable N/A :pypi:`pytest-polarion-cfme` pytest plugin for collecting test cases and recording test results Nov 13, 2017 3 - Alpha N/A :pypi:`pytest-polarion-collect` pytest plugin for collecting polarion test cases data Jun 18, 2020 3 - Alpha pytest + :pypi:`pytest-polaroid` A pytest plugin for snapshot testing. Apr 23, 2026 N/A N/A :pypi:`pytest-polecat` Provides Polecat pytest fixtures Aug 12, 2019 4 - Beta N/A :pypi:`pytest-polymeric-report` A polymeric test report plugin for pytest Feb 24, 2026 N/A N/A :pypi:`pytest-ponyorm` PonyORM in Pytest Oct 31, 2018 N/A pytest (>=3.1.1) @@ -1354,6 +1362,7 @@ This list contains 1947 plugins. :pypi:`pytest-prometheus` Report test pass / failures to a Prometheus PushGateway Oct 03, 2017 N/A N/A :pypi:`pytest-prometheus-pushgateway` Pytest report plugin for Zulip Sep 27, 2022 5 - Production/Stable pytest :pypi:`pytest-prometheus-pushgw` Pytest plugin to export test metrics to Prometheus Pushgateway May 19, 2025 N/A pytest>=6.0.0 + :pypi:`pytest-prompts` pytest for LLM prompts — tests, regressions, CI. Apr 23, 2026 3 - Alpha pytest>=8.0 :pypi:`pytest-proofy` Pytest plugin for Proofy test reporting Nov 13, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-prosper` Test helpers for Prosper projects Sep 24, 2018 N/A N/A :pypi:`pytest-prysk` Pytest plugin for prysk Dec 10, 2024 4 - Beta pytest>=7.3.2 @@ -1425,7 +1434,7 @@ This list contains 1947 plugins. :pypi:`pytest-raisesregexp` Simple pytest plugin to look for regex in Exceptions Dec 18, 2015 N/A N/A :pypi:`pytest-raisin` Plugin enabling the use of exception instances with pytest.raises Feb 06, 2022 N/A pytest :pypi:`pytest-random` py.test plugin to randomize tests Apr 28, 2013 3 - Alpha N/A - :pypi:`pytest-randomly` Pytest plugin to randomly order tests and control random.seed. Sep 12, 2025 5 - Production/Stable pytest + :pypi:`pytest-randomly` Pytest plugin to randomly order tests and control random.seed. Apr 20, 2026 5 - Production/Stable pytest :pypi:`pytest-randomness` Pytest plugin about random seed management May 30, 2019 3 - Alpha N/A :pypi:`pytest-random-num` Randomise the order in which pytest tests are run with some control over the randomness Oct 19, 2020 5 - Production/Stable N/A :pypi:`pytest-random-order` Randomise the order in which pytest tests are run with some control over the randomness Jun 22, 2025 5 - Production/Stable pytest @@ -1440,14 +1449,14 @@ This list contains 1947 plugins. :pypi:`pytest-recordings` Provides pytest plugins for reporting request/response traffic, screenshots, and more to ReportPortal Aug 13, 2020 N/A N/A :pypi:`pytest-record-video` 用例执行过程中录制视频 Oct 31, 2024 N/A N/A :pypi:`pytest-redis` Redis fixtures and fixture factories for Pytest. Feb 28, 2026 5 - Production/Stable pytest>=8.4.0 - :pypi:`pytest-redislite` Pytest plugin for testing code using Redis Apr 05, 2022 4 - Beta pytest + :pypi:`pytest-redislite` Pytest plugin for testing code using Redis Apr 22, 2026 4 - Beta pytest :pypi:`pytest-redmine` Pytest plugin for redmine Mar 19, 2018 1 - Planning N/A :pypi:`pytest-ref` A plugin to store reference files to ease regression testing Nov 23, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-reference-formatter` Conveniently run pytest with a dot-formatted test reference. Oct 01, 2019 4 - Beta N/A :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Apr 18, 2026 N/A pytest>7.2 + :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Apr 20, 2026 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 @@ -1619,7 +1628,7 @@ This list contains 1947 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 18, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 20, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1679,7 +1688,7 @@ This list contains 1947 plugins. :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Apr 01, 2026 N/A pytest<8,>5.4.0 - :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Mar 25, 2026 N/A N/A + :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Apr 23, 2026 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A :pypi:`pytest-sqlalchemy` pytest plugin with sqlalchemy related fixtures Apr 19, 2025 3 - Alpha pytest>=8.0 @@ -1851,7 +1860,7 @@ This list contains 1947 plugins. :pypi:`pytest-tutorials` Mar 11, 2023 N/A N/A :pypi:`pytest-twilio-conversations-client-mock` Aug 02, 2022 N/A N/A :pypi:`pytest-twisted` A twisted plugin for pytest. Sep 10, 2024 5 - Production/Stable pytest>=2.3 - :pypi:`pytest-ty` A pytest plugin to run the ty type checker Mar 08, 2026 4 - Beta pytest>=7.0.0 + :pypi:`pytest-ty` A pytest plugin to run the ty type checker Apr 24, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-typechecker` Run type checkers on specified test files Feb 04, 2022 N/A pytest (>=6.2.5,<7.0.0) :pypi:`pytest-typed-schema-shot` Pytest plugin for automatic JSON Schema generation and validation from examples Jun 14, 2025 N/A pytest :pypi:`pytest-typhoon-config` A Typhoon HIL plugin that facilitates test parameter configuration at runtime Apr 07, 2022 5 - Production/Stable N/A @@ -1908,7 +1917,7 @@ This list contains 1947 plugins. :pypi:`pytest-vyper` Plugin for the vyper smart contract language. May 28, 2020 2 - Pre-Alpha N/A :pypi:`pytest-wa-e2e-plugin` Pytest plugin for testing whatsapp bots with end to end tests Feb 18, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-wake` Nov 19, 2024 N/A pytest - :pypi:`pytest-warmup` Batch preparation and distribution of expensive test resources for pytest. Apr 13, 2026 3 - Alpha pytest<10,>=8.4 + :pypi:`pytest-warmup` Batch preparation and distribution of expensive test resources for pytest. Apr 21, 2026 3 - Alpha pytest<10,>=8.4 :pypi:`pytest-watch` Local continuous test runner with pytest and watchdog. May 20, 2018 N/A N/A :pypi:`pytest-watcher` Automatically rerun your tests on file modifications Jan 10, 2026 4 - Beta N/A :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A @@ -2084,6 +2093,13 @@ This list contains 1947 plugins. Pytest plugin for writing Azure Data Factory integration tests + :pypi:`pytest-adk` + *last release*: Apr 20, 2026, + *status*: 1 - Planning, + *requires*: pytest>=8; extra == "dev" + + Helpers for testing agents with Google's adk-python + :pypi:`pytest-ads-testplan` *last release*: Sep 15, 2022, *status*: N/A, @@ -2133,6 +2149,13 @@ This list contains 1947 plugins. Pytest plugin for evaluating AI Agents + :pypi:`pytest-agentharness` + *last release*: Apr 20, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Open-source test harness for AI agents that take real-world actions. + :pypi:`pytest-agent-health` *last release*: Apr 03, 2026, *status*: 3 - Alpha, @@ -2140,6 +2163,13 @@ This list contains 1947 plugins. Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. + :pypi:`pytest-agent-observability` + *last release*: Apr 24, 2026, + *status*: N/A, + *requires*: N/A + + Reserved package name for Plivo. + :pypi:`pytest-agents` *last release*: Feb 20, 2026, *status*: 3 - Alpha, @@ -2218,7 +2248,7 @@ This list contains 1947 plugins. Send responses to aiohttp. :pypi:`pytest-aiohutils` - *last release*: Feb 10, 2026, + *last release*: Apr 23, 2026, *status*: N/A, *requires*: pytest @@ -2504,6 +2534,13 @@ This list contains 1947 plugins. + :pypi:`pytest-api-kit` + *last release*: Apr 23, 2026, + *status*: 4 - Beta, + *requires*: pytest>=8.0 + + Pragmatic scaffolding for API smoke / regression tests — zero-dep schema, snapshot drift, HTML reports, AWS ECS deploy. + :pypi:`pytest-api-soup` *last release*: Aug 27, 2022, *status*: N/A, @@ -2547,9 +2584,9 @@ This list contains 1947 plugins. Pytest plugin for Appium device scheduling and driver lifecycle management. :pypi:`pytest-approval` - *last release*: Mar 24, 2026, + *last release*: Apr 24, 2026, *status*: N/A, - *requires*: pytest>=8.3.5 + *requires*: pytest>=9.0.3 A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. @@ -2609,13 +2646,6 @@ This list contains 1947 plugins. pytest plugin to help with comparing array output from tests - :pypi:`pytest-artifact` - *last release*: Feb 09, 2026, - *status*: 4 - Beta, - *requires*: pytest>=6.2.0 - - Pytest plugin for managing test artifacts - :pypi:`pytest-artifacts` *last release*: Apr 17, 2026, *status*: 4 - Beta, @@ -3169,8 +3199,15 @@ This list contains 1947 plugins. Pytest plugin to run your tests with beartype checking enabled. + :pypi:`pytest-beartype-tests` + *last release*: Apr 20, 2026, + *status*: 4 - Beta, + *requires*: pytest>=8 + + Pytest plugin that applies @beartype to every collected test function. + :pypi:`pytest-bec-e2e` - *last release*: Apr 16, 2026, + *last release*: Apr 21, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3183,6 +3220,13 @@ This list contains 1947 plugins. Fixtures for testing Google Appengine (GAE) apps + :pypi:`pytest-beehave` + *last release*: Apr 21, 2026, + *status*: 4 - Beta, + *requires*: pytest>=9.0.3; extra == "dev" + + A pytest plugin that runs acceptance criteria stub generation as part of the pytest lifecycle, with auto-ID assignment and generic step docstrings + :pypi:`pytest-beeprint` *last release*: Jul 04, 2023, *status*: 4 - Beta, @@ -3330,6 +3374,13 @@ This list contains 1947 plugins. Integrate boardfarm as a pytest plugin. + :pypi:`pytest-bods-v04-fixtures` + *last release*: Apr 20, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + Pytest plugin providing a parametrized fixture over the canonical BODS v0.4 fixtures pack + :pypi:`pytest-boilerplate` *last release*: Sep 12, 2024, *status*: 5 - Production/Stable, @@ -4024,11 +4075,11 @@ This list contains 1947 plugins. Distribute tests to cloud machines without fuss :pypi:`pytest-cloudreport` - *last release*: Apr 18, 2026, + *last release*: Apr 22, 2026, *status*: N/A, *requires*: pytest>=7.0 - pytest plugin that uploads test results to pytest-cloudreport for analytics and flaky test detection + pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. :pypi:`pytest-cmake` *last release*: Jan 03, 2026, @@ -5144,7 +5195,7 @@ This list contains 1947 plugins. A Django plugin for pytest. :pypi:`pytest-djangoapp` - *last release*: Dec 13, 2025, + *last release*: Apr 25, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -5361,7 +5412,7 @@ This list contains 1947 plugins. A plugin to use docker databases for pytests :pypi:`pytest-docker-fixtures` - *last release*: Dec 01, 2025, + *last release*: Apr 20, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -5585,7 +5636,7 @@ This list contains 1947 plugins. A Django REST framework plugin for pytest. :pypi:`pytest-drift` - *last release*: Apr 18, 2026, + *last release*: Apr 22, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -5627,7 +5678,7 @@ This list contains 1947 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Apr 01, 2026, + *last release*: Apr 25, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5836,6 +5887,13 @@ This list contains 1947 plugins. Make pytest-embedded plugin work with Arduino. + :pypi:`pytest-embedded-arduino-cli` + *last release*: Apr 22, 2026, + *status*: N/A, + *requires*: pytest>=8 + + A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli + :pypi:`pytest-embedded-idf` *last release*: Mar 02, 2026, *status*: 5 - Production/Stable, @@ -6593,7 +6651,7 @@ This list contains 1947 plugins. Pytest plugin for recording and replaying deterministic function calls :pypi:`pytest-fixkit` - *last release*: Apr 02, 2026, + *last release*: Apr 20, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -6726,7 +6784,7 @@ This list contains 1947 plugins. A pytest plugin to assert type annotations at runtime. :pypi:`pytest-fkit` - *last release*: Apr 16, 2026, + *last release*: Apr 21, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -6796,7 +6854,7 @@ This list contains 1947 plugins. pytest plugin to check source code with pyflakes :pypi:`pytest-flakiness` - *last release*: Mar 24, 2026, + *last release*: Apr 23, 2026, *status*: N/A, *requires*: pytest>=9.0.2 @@ -6859,7 +6917,7 @@ This list contains 1947 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Apr 18, 2026, + *last release*: Apr 25, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -7132,7 +7190,7 @@ This list contains 1947 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Apr 08, 2026, + *last release*: Apr 23, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7251,7 +7309,7 @@ This list contains 1947 plugins. Extends allure-pytest functionality :pypi:`pytest-glaze` - *last release*: Apr 10, 2026, + *last release*: Apr 25, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -7531,14 +7589,14 @@ This list contains 1947 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Apr 18, 2026, + *last release*: Apr 25, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Apr 18, 2026, + *last release*: Apr 25, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.0 @@ -7685,7 +7743,7 @@ This list contains 1947 plugins. Enhanced HTML reporting for pytest with categories, specifications, and detailed logging :pypi:`pytest-html-report-builder` - *last release*: Apr 15, 2026, + *last release*: Apr 22, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -8399,7 +8457,7 @@ This list contains 1947 plugins. Plugin skips (xfail) tests if unresolved Jira issue(s) linked :pypi:`pytest-jira-xray` - *last release*: Oct 11, 2025, + *last release*: Apr 24, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.4 @@ -8525,7 +8583,7 @@ This list contains 1947 plugins. A pytest plugin for testing Jupyter libraries and extensions. :pypi:`pytest-jupyter-deploy` - *last release*: Apr 13, 2026, + *last release*: Apr 24, 2026, *status*: 3 - Alpha, *requires*: pytest>=8.3.5 @@ -8721,7 +8779,7 @@ This list contains 1947 plugins. Pytest-style test runner for langchain agents :pypi:`pytest-language-server` - *last release*: Apr 05, 2026, + *last release*: Apr 25, 2026, *status*: 4 - Beta, *requires*: N/A @@ -9379,11 +9437,11 @@ This list contains 1947 plugins. Pytest-style framework for evaluating Model Context Protocol (MCP) servers. :pypi:`pytest-mcp-tools` - *last release*: Mar 12, 2026, + *last release*: Apr 25, 2026, *status*: N/A, *requires*: pytest>=7.0.0; extra == "test" - + \`pytest --mcp-tools\` an opinionated black box tester to call a live MCP server and test it live against its own contracts :pypi:`pytest-md` *last release*: Jul 11, 2019, @@ -10079,9 +10137,9 @@ This list contains 1947 plugins. pytest ngs fixtures :pypi:`pytest-nhsd-apim` - *last release*: Feb 13, 2026, + *last release*: Apr 20, 2026, *status*: N/A, - *requires*: pytest<9.0.0,>=8.2.0 + *requires*: pytest<10.0.0,>=9.0.0 Pytest plugin accessing NHSDigital's APIM proxies @@ -10331,7 +10389,7 @@ This list contains 1947 plugins. Run object-oriented tests in a simple format :pypi:`pytest-openapi` - *last release*: Apr 12, 2026, + *last release*: Apr 21, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -11037,6 +11095,13 @@ This list contains 1947 plugins. pytest plugin for collecting polarion test cases data + :pypi:`pytest-polaroid` + *last release*: Apr 23, 2026, + *status*: N/A, + *requires*: N/A + + A pytest plugin for snapshot testing. + :pypi:`pytest-polecat` *last release*: Aug 12, 2019, *status*: 4 - Beta, @@ -11226,6 +11291,13 @@ This list contains 1947 plugins. Pytest plugin to export test metrics to Prometheus Pushgateway + :pypi:`pytest-prompts` + *last release*: Apr 23, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0 + + pytest for LLM prompts — tests, regressions, CI. + :pypi:`pytest-proofy` *last release*: Nov 13, 2025, *status*: 4 - Beta, @@ -11724,7 +11796,7 @@ This list contains 1947 plugins. py.test plugin to randomize tests :pypi:`pytest-randomly` - *last release*: Sep 12, 2025, + *last release*: Apr 20, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -11829,7 +11901,7 @@ This list contains 1947 plugins. Redis fixtures and fixture factories for Pytest. :pypi:`pytest-redislite` - *last release*: Apr 05, 2022, + *last release*: Apr 22, 2026, *status*: 4 - Beta, *requires*: pytest @@ -11878,7 +11950,7 @@ This list contains 1947 plugins. Easy to use fixtures to write regression tests. :pypi:`pytest-regtest` - *last release*: Apr 18, 2026, + *last release*: Apr 20, 2026, *status*: N/A, *requires*: pytest>7.2 @@ -13082,7 +13154,7 @@ This list contains 1947 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Apr 18, 2026, + *last release*: Apr 20, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13502,7 +13574,7 @@ This list contains 1947 plugins. A Dynamic test tool for Splunk Apps and Add-ons :pypi:`pytest-splunk-addon-ui-smartx` - *last release*: Mar 25, 2026, + *last release*: Apr 23, 2026, *status*: N/A, *requires*: N/A @@ -14706,7 +14778,7 @@ This list contains 1947 plugins. A twisted plugin for pytest. :pypi:`pytest-ty` - *last release*: Mar 08, 2026, + *last release*: Apr 24, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0.0 @@ -15105,7 +15177,7 @@ This list contains 1947 plugins. :pypi:`pytest-warmup` - *last release*: Apr 13, 2026, + *last release*: Apr 21, 2026, *status*: 3 - Alpha, *requires*: pytest<10,>=8.4 From 200e8c66fe2daa90eda7f4ff899b4eab6c768070 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 07:13:24 +0200 Subject: [PATCH 277/307] [pre-commit.ci] pre-commit autoupdate (#14426) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.11 → v0.15.12](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.11...v0.15.12) - [github.com/pre-commit/mirrors-mypy: v1.20.1 → v1.20.2](https://github.com/pre-commit/mirrors-mypy/compare/v1.20.1...v1.20.2) - [github.com/RobertCraigie/pyright-python: v1.1.408 → v1.1.409](https://github.com/RobertCraigie/pyright-python/compare/v1.1.408...v1.1.409) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b29645b1a00..e9cab1dceec 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.11" + rev: "v0.15.12" hooks: - id: ruff-check args: ["--fix"] @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.20.1 + rev: v1.20.2 hooks: - id: mypy files: ^(src/|testing/|scripts/) @@ -50,7 +50,7 @@ repos: # on <3.11 - exceptiongroup>=1.0.0rc8 - repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.408 + rev: v1.1.409 hooks: - id: pyright files: ^(src/|scripts/) From e178744105e1493a54377f93172aa5933ac70d3f Mon Sep 17 00:00:00 2001 From: EternalRights Date: Sun, 26 Apr 2026 17:00:16 +0800 Subject: [PATCH 278/307] config: fix duplicate values in Config.known_args_namespace for append actions --- changelog/13484.bugfix.rst | 1 + src/_pytest/config/__init__.py | 9 ++++++++- testing/test_warnings.py | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 changelog/13484.bugfix.rst diff --git a/changelog/13484.bugfix.rst b/changelog/13484.bugfix.rst new file mode 100644 index 00000000000..4407003e8e9 --- /dev/null +++ b/changelog/13484.bugfix.rst @@ -0,0 +1 @@ +Fixed ``-W`` option values being duplicated in ``Config.known_args_namespace``. diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 86786c2b04a..2dab4e279b5 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -1483,6 +1483,8 @@ def parse(self, args: list[str], addopts: bool = True) -> None: + args ) + # At this point, self.option contains only defaults from the _processopt + # callback. ns = self._parser.parse_known_args(args, namespace=copy.copy(self.option)) rootpath, inipath, inicfg, ignored_config_files = determine_setup( inifile=ns.inifilename, @@ -1533,7 +1535,12 @@ def parse(self, args: list[str], addopts: bool = True) -> None: # are going to be loaded. self.pluginmanager.consider_env() - self._parser.parse_known_args(args, namespace=self.known_args_namespace) + # Parse again, now including options added in pytest_addoption + # by third-party plugins loaded above. This way they're available + # on early_config in the pytest_load_initial_conftests hook call below. + self.known_args_namespace = self._parser.parse_known_args( + args, namespace=copy.copy(self.option) + ) self._validate_plugins() self._warn_about_skipped_plugins() diff --git a/testing/test_warnings.py b/testing/test_warnings.py index d4a5038d5d2..e2363bd884a 100644 --- a/testing/test_warnings.py +++ b/testing/test_warnings.py @@ -1038,3 +1038,12 @@ def test_one(): result = pytester.runpytest() result.assert_outcomes(passed=1, warnings=1) assert result.ret == ExitCode.OK + + +def test_pythonwarnings_not_duplicated(pytester: Pytester) -> None: + """Regression test for #13484: -W values should not be duplicated in + known_args_namespace due to the arg parser being called multiple times.""" + config = pytester.parseconfig("-W", "error") + warnings_list = config.known_args_namespace.pythonwarnings + assert warnings_list is not None + assert warnings_list == ["error"] From 05c837dc3178814b581fd378cdda9363c2392ecd Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 14 Apr 2026 00:06:23 +0300 Subject: [PATCH 279/307] assertion: push `config` access up from `assertrepr_compare` to the hook Seems better to make the lower-level function more agnostic. --- src/_pytest/assertion/__init__.py | 9 ++++++++- src/_pytest/assertion/util.py | 10 ++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/_pytest/assertion/__init__.py b/src/_pytest/assertion/__init__.py index 22f3ca8e258..f274b9d579c 100644 --- a/src/_pytest/assertion/__init__.py +++ b/src/_pytest/assertion/__init__.py @@ -205,4 +205,11 @@ def pytest_sessionfinish(session: Session) -> None: def pytest_assertrepr_compare( config: Config, op: str, left: Any, right: Any ) -> list[str] | None: - return util.assertrepr_compare(config=config, op=op, left=left, right=right) + highlighter = config.get_terminal_writer()._highlight + return util.assertrepr_compare( + op=op, + left=left, + right=right, + verbose=config.get_verbosity(Config.VERBOSITY_ASSERTIONS), + highlighter=highlighter, + ) diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index 5d5e6d4777d..07918a66284 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -174,11 +174,14 @@ def has_default_eq(obj: object) -> bool: def assertrepr_compare( - config: Config, op: str, left: object, right: object + op: str, + left: object, + right: object, + *, + verbose: int, + highlighter: _HighlightFunc, ) -> list[str] | None: """Return specialised explanations for some operators/operands.""" - verbose = config.get_verbosity(Config.VERBOSITY_ASSERTIONS) - # Strings which normalize equal are often hard to distinguish when printed; use ascii() to make this easier. # See issue #3246. use_ascii = ( @@ -201,7 +204,6 @@ def assertrepr_compare( right_repr = saferepr(right, maxsize=maxsize, use_ascii=use_ascii) summary = f"{left_repr} {op} {right_repr}" - highlighter = config.get_terminal_writer()._highlight explanation = None try: From 4ee157d2da975f4c59f24ab99b2f885c3ba96d16 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Mon, 13 Apr 2026 22:43:54 +0300 Subject: [PATCH 280/307] assertion/rewrite: fix test crash on assert failure with `terminalreporter` disabled The `config.get_terminal_writer()` in `assertrepr_compare` (=> the function injected by assertion rewriting for every `assert`) requires the `terminalreporter` plugin, so it crashed when the plugin is disabled. Fix #14377. --- changelog/14377.bugfix.rst | 1 + src/_pytest/assertion/__init__.py | 6 +++++- testing/test_assertion.py | 6 ++++++ testing/test_assertrewrite.py | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 changelog/14377.bugfix.rst diff --git a/changelog/14377.bugfix.rst b/changelog/14377.bugfix.rst new file mode 100644 index 00000000000..5d94fed0f54 --- /dev/null +++ b/changelog/14377.bugfix.rst @@ -0,0 +1 @@ +Fixed crash in `Config.get_terminal_writer` when an assertion fails with the ``terminalreporter`` plugin disabled. diff --git a/src/_pytest/assertion/__init__.py b/src/_pytest/assertion/__init__.py index f274b9d579c..4b946bc7074 100644 --- a/src/_pytest/assertion/__init__.py +++ b/src/_pytest/assertion/__init__.py @@ -205,7 +205,11 @@ def pytest_sessionfinish(session: Session) -> None: def pytest_assertrepr_compare( config: Config, op: str, left: Any, right: Any ) -> list[str] | None: - highlighter = config.get_terminal_writer()._highlight + if config.pluginmanager.has_plugin("terminalreporter"): + highlighter = config.get_terminal_writer()._highlight + else: + # Keep it plaintext when not using terminalrepoterer (#14377). + highlighter = util.dummy_highlighter return util.assertrepr_compare( op=op, left=left, diff --git a/testing/test_assertion.py b/testing/test_assertion.py index d68fd0b1fba..9a7305a2905 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -24,7 +24,13 @@ class TerminalWriter: def _highlight(self, source, lexer="python"): return source + class PluginManager: + def has_plugin(self, name: str) -> bool: + return True + class Config: + pluginmanager = PluginManager() + def get_terminal_writer(self): return TerminalWriter() diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index 92664354470..2668001af65 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -2404,3 +2404,22 @@ def test_saferepr_unbounded(self): _saferepr(self.Help) == f"" ) + + +def test_assertion_failure_when_terminalreporter_is_disabled( + pytester: Pytester, +) -> None: + """Assertion rewriting doesn't crash when the terminalreporter plugin is + disabled (#14378).""" + pytester.makepyfile( + """ + import pytest + + def test(): + with pytest.raises(AssertionError) as excinfo: + assert 0 == 1 + assert excinfo.value.args[0] == 'assert 0 == 1' + """ + ) + reprec = pytester.inline_run("-p", "no:terminalreporter") + reprec.assertoutcome(passed=1) From 2aa07343b6ebcb426f4cc595e3bf1912b0a442de Mon Sep 17 00:00:00 2001 From: Dr Alex Mitre Date: Fri, 1 May 2026 05:25:07 -0600 Subject: [PATCH 281/307] docs: guard pytestconfig.cache example when cacheprovider is disabled (#14254) Update the `config.cache` example in `doc/en/how-to/cache.rst` to safely handle cases where the `cacheprovider` plugin is disabled. Closes #14148 --- changelog/14148.doc.rst | 2 ++ doc/en/how-to/cache.rst | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 changelog/14148.doc.rst diff --git a/changelog/14148.doc.rst b/changelog/14148.doc.rst new file mode 100644 index 00000000000..b54ae2cd8e3 --- /dev/null +++ b/changelog/14148.doc.rst @@ -0,0 +1,2 @@ +Documented a safe ``pytestconfig.cache`` access pattern when the +``cacheprovider`` plugin is disabled. diff --git a/doc/en/how-to/cache.rst b/doc/en/how-to/cache.rst index ca345916fc5..c030e487563 100644 --- a/doc/en/how-to/cache.rst +++ b/doc/en/how-to/cache.rst @@ -214,11 +214,18 @@ across pytest invocations: @pytest.fixture def mydata(pytestconfig): - val = pytestconfig.cache.get("example/value", None) + cache = getattr(pytestconfig, "cache", None) + if cache is None: + # pytestconfig not having the cache attribute means the + # cache plugin is disabled. + expensive_computation() + return 42 + + val = cache.get("example/value", None) if val is None: expensive_computation() val = 42 - pytestconfig.cache.set("example/value", val) + cache.set("example/value", val) return val From deb9f5f79b0537a5e80cc26dd11bfb217e263a72 Mon Sep 17 00:00:00 2001 From: Freya Bruhin Date: Fri, 1 May 2026 14:09:06 +0200 Subject: [PATCH 282/307] Add a space after the test name with --setup-show (#14430) Before, a test's result was printed immediately after --setup-show output: SETUP F fixt test_show.py::test_a (fixtures used: fixt)PASSED TEARDOWN F fixt In the extreme case, with monochrome output or yellow and white colors being close to each other, an "x" for an xfailing test can be misinterpreted as part of a test name: test_show.py::test_xfailx This adds a space to clearly distinguish the output: test_show.py::test_a (fixtures used: fixt) PASSED and test_show.py::test_xfail x --- changelog/14430.improvement.rst | 1 + src/_pytest/runner.py | 9 ++++++--- testing/python/fixtures.py | 4 ++-- testing/test_setuponly.py | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 changelog/14430.improvement.rst diff --git a/changelog/14430.improvement.rst b/changelog/14430.improvement.rst new file mode 100644 index 00000000000..84206b37033 --- /dev/null +++ b/changelog/14430.improvement.rst @@ -0,0 +1 @@ +When using ``--setup-show``, a space is now printed after the test name (and possibly used fixtures), to separate it from the test result. diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py index 4f3b63e3656..3f03cfaff77 100644 --- a/src/_pytest/runner.py +++ b/src/_pytest/runner.py @@ -132,9 +132,10 @@ def runtestprotocol( rep = call_and_report(item, "setup", log) reports = [rep] if rep.passed: + setup_only = item.config.getoption("setuponly", False) if item.config.getoption("setupshow", False): - show_test_item(item) - if not item.config.getoption("setuponly", False): + show_test_item(item, add_space=not setup_only) + if not setup_only: reports.append(call_and_report(item, "call", log)) # If the session is about to fail or stop, teardown everything - this is # necessary to correctly report fixture teardown errors (see #11706) @@ -150,7 +151,7 @@ def runtestprotocol( return reports -def show_test_item(item: Item) -> None: +def show_test_item(item: Item, *, add_space: bool) -> None: """Show test function, parameters and the fixtures of the test item.""" tw = item.config.get_terminal_writer() tw.line() @@ -159,6 +160,8 @@ def show_test_item(item: Item) -> None: used_fixtures = sorted(getattr(item, "fixturenames", [])) if used_fixtures: tw.write(f" (fixtures used: {', '.join(used_fixtures)})") + if add_space: + tw.write(" ") tw.flush() diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index a0f2981e1ba..71d9d9280a0 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -4433,11 +4433,11 @@ def test_second(my_fixture): [ "test_fixtures.py::test_first ", " SETUP F my_fixture", - " test_fixtures.py::test_first (fixtures used: my_fixture, request)PASSED", + " test_fixtures.py::test_first (fixtures used: my_fixture, request) PASSED", "test_fixtures.py::test_first ERROR", "test_fixtures.py::test_second ", " SETUP F my_fixture", - " test_fixtures.py::test_second (fixtures used: my_fixture, request)PASSED", + " test_fixtures.py::test_second (fixtures used: my_fixture, request) PASSED", " TEARDOWN F my_fixture", ], consecutive=True, diff --git a/testing/test_setuponly.py b/testing/test_setuponly.py index 87123bd9a16..1d2261f75a8 100644 --- a/testing/test_setuponly.py +++ b/testing/test_setuponly.py @@ -276,7 +276,7 @@ def test_arg(arg): assert result.ret == 1 result.stdout.fnmatch_lines( - ["*SETUP F arg*", "*test_arg (fixtures used: arg)F*", "*TEARDOWN F arg*"] + ["*SETUP F arg*", "*test_arg (fixtures used: arg) F*", "*TEARDOWN F arg*"] ) From 46368429d39cf944461b946619b753897e0f556e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 05:02:51 +0000 Subject: [PATCH 283/307] [automated] Update plugin list (#14437) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 246 ++++++++++++++++++++----------- 1 file changed, 159 insertions(+), 87 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 5b61a6b1936..12c151e76b3 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7.0 - :pypi:`pytest-agent-digest` A Pytest plugin to generate a Markdown report for AI Agents Mar 21, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agent-digest` A Pytest plugin to generate a Markdown report for AI Agents May 02, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-agent-eval` A pytest plugin for LLM evaluation tests with threshold-based pass/fail Apr 30, 2026 3 - Alpha pytest>=7.4 :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agentharness` Open-source test harness for AI agents that take real-world actions. Apr 20, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-health` Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. Apr 03, 2026 3 - Alpha pytest>=7.0 - :pypi:`pytest-agent-observability` Reserved package name for Plivo. Apr 24, 2026 N/A N/A + :pypi:`pytest-agent-observability` pytest plugin that uploads LiveKit-agents eval results to agent-observability Apr 27, 2026 N/A pytest>=7.0 :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) :pypi:`pytest-ai` A Python package to generate regular, edge-case, and security HTTP tests. Jan 22, 2025 N/A N/A @@ -120,7 +121,7 @@ This list contains 1956 plugins. :pypi:`pytest-appium-scheduler` Pytest plugin for Appium device scheduling and driver lifecycle management. Apr 13, 2026 N/A pytest>=7.0 :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Apr 24, 2026 N/A pytest>=9.0.3 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) - :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Jul 14, 2025 5 - Production/Stable pytest + :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Apr 29, 2026 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Mar 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" @@ -149,7 +150,7 @@ This list contains 1956 plugins. :pypi:`pytest_async` pytest-async - Run your coroutine in event loop without decorator Feb 26, 2020 N/A N/A :pypi:`pytest-async-benchmark` pytest-async-benchmark: Modern pytest benchmarking for async code. 🚀 May 28, 2025 N/A pytest>=8.3.5 :pypi:`pytest-async-generators` Pytest fixtures for async generators Jul 05, 2023 N/A N/A - :pypi:`pytest-asyncio` Pytest support for asyncio Apr 15, 2026 5 - Production/Stable pytest<10,>=8.2 + :pypi:`pytest-asyncio` Pytest support for asyncio May 02, 2026 5 - Production/Stable pytest<10,>=8.2 :pypi:`pytest-asyncio-concurrent` Pytest plugin to execute python async tests concurrently. Apr 09, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asyncio-cooperative` Run all your asynchronous tests cooperatively. Jun 24, 2025 N/A N/A :pypi:`pytest-asyncio-network-simulator` pytest-asyncio-network-simulator: Plugin for pytest for simulator the network in tests Jul 31, 2018 3 - Alpha pytest (<3.7.0,>=3.3.2) @@ -206,8 +207,8 @@ This list contains 1956 plugins. :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics Apr 17, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest - :pypi:`pytest-beartype-tests` Pytest plugin that applies @beartype to every collected test function. Apr 20, 2026 4 - Beta pytest>=8 - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 21, 2026 3 - Alpha pytest + :pypi:`pytest-beartype-tests` Pytest plugin that applies @beartype to every collected test function. Apr 26, 2026 4 - Beta pytest>=8 + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests May 01, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beehave` A pytest plugin that runs acceptance criteria stub generation as part of the pytest lifecycle, with auto-ID assignment and generic step docstrings Apr 21, 2026 4 - Beta pytest>=9.0.3; extra == "dev" :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A @@ -331,7 +332,7 @@ This list contains 1956 plugins. :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cloudreport` pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. Apr 22, 2026 N/A pytest>=7.0 + :pypi:`pytest-cloudreport` pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. Apr 29, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A @@ -348,7 +349,7 @@ This list contains 1956 plugins. :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Apr 14, 2026 5 - Production/Stable pytest>=3.8 + :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Apr 28, 2026 5 - Production/Stable pytest>=3.8 :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A @@ -446,7 +447,7 @@ This list contains 1956 plugins. :pypi:`pytest-dbt-adapter` A pytest plugin for testing dbt adapter plugins Nov 24, 2021 N/A pytest (<7,>=6) :pypi:`pytest-dbt-conventions` A pytest plugin for linting a dbt project's conventions Mar 02, 2022 N/A pytest (>=6.2.5,<7.0.0) :pypi:`pytest-dbt-core` Pytest extension for dbt. Jun 04, 2024 N/A pytest>=6.2.5; extra == "test" - :pypi:`pytest-dbt-duckdb` Fearless testing for dbt models, powered by DuckDB. Mar 06, 2026 4 - Beta pytest>=8.3.4 + :pypi:`pytest-dbt-duckdb` Fearless testing for dbt models, powered by DuckDB. Apr 28, 2026 4 - Beta pytest>=8.3.4 :pypi:`pytest-dbt-postgres` Pytest tooling to unittest DBT & Postgres models Sep 03, 2024 N/A pytest<9.0.0,>=8.3.2 :pypi:`pytest-dbus-notification` D-BUS notifications for pytest results. Mar 05, 2014 5 - Production/Stable N/A :pypi:`pytest-dbx` Pytest plugin to run unit tests for dbx (Databricks CLI extensions) related code Nov 29, 2022 N/A pytest (>=7.1.3,<8.0.0) @@ -554,13 +555,13 @@ This list contains 1956 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 22, 2026 N/A pytest>=7.0 + :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 26, 2026 N/A pytest>=7.0 :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 25, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 30, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Apr 13, 2026 N/A pytest>=7.0.0; extra == "dev" :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest @@ -590,7 +591,7 @@ This list contains 1956 plugins. :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Mar 02, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli Apr 22, 2026 N/A pytest>=8 + :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli May 01, 2026 N/A pytest>=8 :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Mar 02, 2026 5 - Production/Stable N/A :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Mar 02, 2026 5 - Production/Stable N/A :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Mar 02, 2026 5 - Production/Stable N/A @@ -726,7 +727,7 @@ This list contains 1956 plugins. :pypi:`pytest-flakefighters` Pytest plugin implementing flaky test failure detection and classification. Mar 05, 2026 N/A pytest>=6.2.0 :pypi:`pytest-flakefinder` Runs tests multiple times to expose flakiness. Oct 26, 2022 4 - Beta pytest (>=2.7.1) :pypi:`pytest-flakehunter` Re-run tests N times, visualize failure heatmaps, and get AI root cause hypotheses Apr 07, 2026 N/A pytest>=7.0 - :pypi:`pytest-flakemark` FLAKEMARK — Differential execution tracer that finds the exact file, line, and root cause of any flaky test. Mar 23, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-flakemark` Differential execution tracer that finds the exact file, line, and root cause of any flaky test. May 01, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Apr 23, 2026 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A @@ -737,7 +738,7 @@ This list contains 1956 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Apr 25, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer Apr 26, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -776,7 +777,7 @@ This list contains 1956 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 23, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 30, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -788,12 +789,12 @@ This list contains 1956 plugins. :pypi:`pytest-gitignore` py.test plugin to ignore the same files as git Jul 17, 2015 4 - Beta N/A :pypi:`pytest-gitlab` Pytest Plugin for Gitlab Oct 16, 2024 N/A N/A :pypi:`pytest-gitlabci-parallelized` Parallelize pytest across GitLab CI workers. Mar 08, 2023 N/A N/A - :pypi:`pytest-gitlab-code-quality` Collects warnings while testing and generates a GitLab Code Quality Report. Nov 23, 2025 N/A pytest>=8.1.1 + :pypi:`pytest-gitlab-code-quality` Collects warnings while testing and generates a GitLab Code Quality Report. Apr 27, 2026 N/A pytest>=5.0.0 :pypi:`pytest-gitlab-fold` Folds output sections in GitLab CI build log Dec 31, 2023 4 - Beta pytest >=2.6.0 :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 - :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. Apr 25, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. Apr 29, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 @@ -833,8 +834,8 @@ This list contains 1956 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 25, 2026 3 - Alpha pytest==9.0.0 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 25, 2026 3 - Alpha pytest==9.0.0 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 30, 2026 3 - Alpha pytest==9.0.3 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 29, 2026 3 - Alpha pytest==9.0.3 :pypi:`pytest-Honda-report` Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends Apr 11, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A @@ -893,8 +894,8 @@ This list contains 1956 plugins. :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. Apr 16, 2026 4 - Beta pytest>=8.0.0 - :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). Apr 16, 2026 4 - Beta N/A + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. May 01, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). May 01, 2026 4 - Beta N/A :pypi:`pytest-imply` Pytest plugin for test implication — skip tests implied by stronger ones Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A @@ -914,8 +915,8 @@ This list contains 1956 plugins. :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A :pypi:`pytest-inline-tdd` A pytest plugin for writing inline tests Mar 09, 2026 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest - :pypi:`pytest-inmanta-extensions` Inmanta tests package Mar 03, 2026 5 - Production/Stable N/A - :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Feb 12, 2026 5 - Production/Stable N/A + :pypi:`pytest-inmanta-extensions` Inmanta tests package Apr 28, 2026 5 - Production/Stable N/A + :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Apr 29, 2026 5 - Production/Stable N/A :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest :pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A @@ -943,6 +944,7 @@ This list contains 1956 plugins. :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Mar 04, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) + :pypi:`pytest-issues` Decorators for pytest tests that should issue exceptions or warnings Apr 29, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A :pypi:`pytest-item-dict` Get a hierarchical dict of session.items Nov 14, 2024 4 - Beta pytest>=8.3.0 :pypi:`pytest-iterassert` Nicer list and iterable assertion messages for pytest May 11, 2020 3 - Alpha N/A @@ -963,7 +965,7 @@ This list contains 1956 plugins. :pypi:`pytest-joke` Test failures are better served with humor. Oct 08, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-jscov` Pytest plugin for JavaScript coverage via Playwright CDP Apr 04, 2026 N/A pytest :pypi:`pytest-json` Generate JSON test reports Jan 18, 2016 4 - Beta N/A - :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Mar 31, 2026 N/A pytest>6.0.0 + :pypi:`pytest-json-ctrf` Pytest plugin to generate json report in CTRF (Common Test Report Format) Apr 30, 2026 N/A pytest>6.0.0 :pypi:`pytest-json-fixtures` JSON output for the --fixtures flag Mar 14, 2023 4 - Beta N/A :pypi:`pytest-jsonlint` UNKNOWN Aug 04, 2016 N/A N/A :pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0) @@ -982,6 +984,7 @@ This list contains 1956 plugins. :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Apr 03, 2026 N/A N/A + :pypi:`pytest-kafka-contract` A pytest plugin and CLI for validating Kafka JSON and Avro messages against contracts. Apr 29, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) @@ -1014,7 +1017,7 @@ This list contains 1956 plugins. :pypi:`pytest-leak-finder` Find the test that's leaking before the one that fails Dec 19, 2025 4 - Beta pytest>=3.5.0 :pypi:`pytest-leaks` A pytest plugin to trace resource leaks. Nov 27, 2019 1 - Planning N/A :pypi:`pytest-leaping` A simple plugin to use with pytest Mar 27, 2024 4 - Beta pytest>=6.2.0 - :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Apr 09, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-leela` Type-aware mutation testing for Python — fast, opinionated, pytest-native Apr 27, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-leo-interface` Pytest extension tool for leo projects. Mar 19, 2025 N/A N/A :pypi:`pytest-level` Select tests of a given level or lower Oct 21, 2019 N/A pytest :pypi:`pytest-lf-skip` A pytest plugin which makes \`--last-failed\` skip instead of deselect tests. Feb 27, 2026 4 - Beta pytest>=8.3.5 @@ -1061,7 +1064,7 @@ This list contains 1956 plugins. :pypi:`pytest-logging` Configures logging and allows tweaking the log level with a py.test flag Nov 04, 2015 4 - Beta N/A :pypi:`pytest-logging-end-to-end-test-tool` Sep 23, 2022 N/A pytest (>=7.1.2,<8.0.0) :pypi:`pytest-logging-strict` pytest fixture logging configured from packaged YAML May 20, 2025 3 - Alpha pytest - :pypi:`pytest-logikal` Common testing environment Mar 16, 2026 5 - Production/Stable pytest==9.0.2 + :pypi:`pytest-logikal` Common testing environment Apr 27, 2026 5 - Production/Stable pytest==9.0.2 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" @@ -1077,6 +1080,7 @@ This list contains 1956 plugins. :pypi:`pytest-markdown` Test your markdown docs with pytest Jan 15, 2021 4 - Beta pytest (>=6.0.1,<7.0.0) :pypi:`pytest-markdown-docs` Run markdown code fences through pytest Mar 23, 2026 N/A pytest>=7.0.0 :pypi:`pytest-markdown-report` Token-efficient markdown test reports for LLM-based TDD agents Jan 10, 2026 N/A pytest>=7.0 + :pypi:`pytest-markdown-summary` A Pytest plugin for generating reports in Markdown format. Apr 30, 2026 3 - Alpha pytest<10,>=7 :pypi:`pytest-marker-bugzilla` py.test bugzilla integration plugin, using markers Apr 02, 2025 5 - Production/Stable pytest>=2.2.4 :pypi:`pytest-markers-presence` A simple plugin to detect missed pytest tags and markers" Oct 30, 2024 4 - Beta pytest>=6.0 :pypi:`pytest-mark-filter` Filter pytest marks by name using match kw May 11, 2025 N/A pytest>=8.3.0 @@ -1097,6 +1101,7 @@ This list contains 1956 plugins. :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 + :pypi:`pytest-mcp-assert` pytest plugin for mcp-assert: run MCP server assertions as pytest test items May 02, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-mcp-tools` \`pytest --mcp-tools\` an opinionated black box tester to call a live MCP server and test it live against its own contracts Apr 25, 2026 N/A pytest>=7.0.0; extra == "test" :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 @@ -1234,6 +1239,7 @@ This list contains 1956 plugins. :pypi:`pytest-oof` A Pytest plugin providing structured, programmatic access to a test run's results Dec 11, 2023 4 - Beta N/A :pypi:`pytest-oot` Run object-oriented tests in a simple format Sep 18, 2016 4 - Beta N/A :pypi:`pytest-openapi` \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth Apr 21, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-openfeature` Drive pytest configuration from an OpenFeature provider. Apr 28, 2026 4 - Beta pytest>=8.0 :pypi:`pytest-openfiles` Pytest plugin for detecting inadvertent open file handles Jun 05, 2024 3 - Alpha pytest>=4.6 :pypi:`pytest-open-html` Auto-open HTML reports after pytest runs Mar 31, 2025 N/A pytest>=6.0 :pypi:`pytest-opentelemetry` A pytest plugin for instrumenting test runs via OpenTelemetry Apr 25, 2025 N/A pytest @@ -1242,13 +1248,13 @@ This list contains 1956 plugins. :pypi:`pytest-optional` include/exclude values of fixtures in pytest Oct 07, 2015 N/A N/A :pypi:`pytest-optional-tests` Easy declaration of optional tests (i.e., that are not run by default) Jul 21, 2025 4 - Beta pytest; extra == "dev" :pypi:`pytest-orchestration` A pytest plugin for orchestrating tests Jul 18, 2019 N/A N/A - :pypi:`pytest-order` pytest plugin to run your tests in a specific order Aug 22, 2024 5 - Production/Stable pytest>=5.0; python_version < "3.10" + :pypi:`pytest-order` pytest plugin to run tests in a specific order Apr 26, 2026 5 - Production/Stable pytest>=6.2.4; python_version < "3.14" :pypi:`pytest-ordered` Declare the order in which tests should run in your pytest.ini Nov 09, 2025 N/A pytest>=6.2.0 :pypi:`pytest-ordering` pytest plugin to run your tests in a specific order Nov 14, 2018 4 - Beta pytest :pypi:`pytest-order-modify` 新增run_marker 来自定义用例的执行顺序 Nov 04, 2022 N/A N/A :pypi:`pytest-osxnotify` OS X notifications for py.test results. May 15, 2015 N/A N/A :pypi:`pytest-ot` A pytest plugin for instrumenting test runs via OpenTelemetry Mar 21, 2024 N/A pytest; extra == "dev" - :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Apr 14, 2026 N/A pytest==9.0.3 + :pypi:`pytest-otel` OpenTelemetry plugin for Pytest Apr 29, 2026 N/A pytest==9.0.3 :pypi:`pytest-otelmark` Pytest plugin for otelmark. Sep 14, 2025 3 - Alpha pytest>=8.3.5 :pypi:`pytest-override-env-var` Pytest mark to override a value of an environment variable. Feb 25, 2023 N/A N/A :pypi:`pytest-owner` Add owner mark for tests Aug 19, 2024 N/A pytest @@ -1290,8 +1296,9 @@ This list contains 1956 plugins. :pypi:`pytest-performancetotal` A performance plugin for pytest Mar 24, 2026 5 - Production/Stable N/A :pypi:`pytest-persistence` Pytest tool for persistent objects Aug 21, 2024 N/A N/A :pypi:`pytest-pexpect` Pytest pexpect plugin. Sep 10, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 18, 2025 5 - Production/Stable pytest>=7.4 + :pypi:`pytest-pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 01, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-pgsql` Pytest plugins and helpers for tests using a Postgres database. May 13, 2020 5 - Production/Stable pytest (>=3.0.0) + :pypi:`pytest-pgtap` Pytest plugin for running pgTAP tests Apr 28, 2026 3 - Alpha N/A :pypi:`pytest-phmdoctest` pytest plugin to test Python examples in Markdown using phmdoctest. Apr 15, 2022 4 - Beta pytest (>=5.4.3) :pypi:`pytest-phoenix-interface` Pytest extension tool for phoenix projects. Mar 19, 2025 N/A N/A :pypi:`pytest-picked` Run the tests related to the changed files Nov 06, 2024 N/A pytest>=3.7.0 @@ -1390,7 +1397,7 @@ This list contains 1956 plugins. :pypi:`pytest-pylint` pytest plugin to check source code with pylint Oct 06, 2023 5 - Production/Stable pytest >=7.0 :pypi:`pytest-pylyzer` A pytest plugin for pylyzer Feb 15, 2025 4 - Beta N/A :pypi:`pytest-pymysql-autorecord` Record PyMySQL queries and mock with the stored data. Sep 02, 2022 N/A N/A - :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Apr 17, 2026 N/A pytest + :pypi:`pytest-pyodide` Pytest plugin for testing applications that use Pyodide Apr 27, 2026 N/A pytest :pypi:`pytest-pypi` Easily test your HTTP library against a local copy of pypi Mar 04, 2018 3 - Alpha N/A :pypi:`pytest-pypom-navigation` Core engine for cookiecutter-qa and pytest-play packages Feb 18, 2019 4 - Beta pytest (>=3.0.7) :pypi:`pytest-pyppeteer` A plugin to run pyppeteer in pytest Apr 28, 2022 N/A pytest (>=6.2.5,<7.0.0) @@ -1442,7 +1449,7 @@ This list contains 1956 plugins. :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A :pypi:`pytest-readable` Pytest plugin that renders readable test specifications and exports documentation Mar 23, 2026 3 - Alpha pytest<10.0,>=9.0 :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest - :pypi:`pytest-reana` Pytest fixtures for REANA. Mar 03, 2026 3 - Alpha N/A + :pypi:`pytest-reana` Pytest fixtures for REANA. Apr 28, 2026 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Apr 13, 2026 N/A pytest>=8.4.1 :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 @@ -1476,7 +1483,7 @@ This list contains 1956 plugins. :pypi:`pytest-repo-health` A pytest plugin to report on repository standards conformance Dec 09, 2025 3 - Alpha pytest :pypi:`pytest-report` Creates json report that is compatible with atom.io's linter message format May 11, 2016 4 - Beta N/A :pypi:`pytest-reporter` Generate Pytest reports with templates Feb 28, 2024 4 - Beta pytest - :pypi:`pytest-reporter-html` Pytest plugin that generates rich HTML test reports with step tracking, log capture, and interactive filtering Mar 15, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-reporter-html` Pytest plugin that generates rich HTML test reports with step tracking, log capture, and interactive filtering Apr 27, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-reporter-html1` A basic HTML report template for Pytest Oct 10, 2025 4 - Beta N/A :pypi:`pytest-reporter-html-dots` A basic HTML report for pytest using Jinja2 template engine. Apr 26, 2025 N/A N/A :pypi:`pytest-reporter-plus` Lightweight enhanced HTML reporter for Pytest Jul 16, 2025 N/A N/A @@ -1489,7 +1496,7 @@ This list contains 1956 plugins. :pypi:`pytest-reportportal` Agent for Reporting results of tests to the Report Portal Apr 15, 2026 N/A N/A :pypi:`pytest-report-stream` A pytest plugin which allows to stream test reports at runtime Oct 22, 2023 4 - Beta N/A :pypi:`pytest-repo-structure` Pytest Repo Structure Mar 18, 2024 1 - Planning N/A - :pypi:`pytest-req` pytest requests plugin Mar 02, 2026 5 - Production/Stable pytest>=8.4.2 + :pypi:`pytest-req` pytest requests plugin Apr 26, 2026 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-reqcov` A pytest plugin for requirement coverage tracking Jul 04, 2025 3 - Alpha pytest>=6.0 :pypi:`pytest-reqs` pytest plugin to check pinned requirements May 12, 2019 N/A pytest (>=2.4.2) :pypi:`pytest-requests` A simple plugin to use with pytest Jun 24, 2019 4 - Beta pytest (>=3.5.0) @@ -1505,7 +1512,7 @@ This list contains 1956 plugins. :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 30, 2025 4 - Beta pytest - :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Nov 13, 2025 N/A pytest~=7.0 + :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Apr 29, 2026 N/A pytest~=7.0 :pypi:`pytest-resource` Load resource fixture plugin to use with pytest Nov 14, 2018 4 - Beta N/A :pypi:`pytest-resource-path` Provides path for uniform access to test resources in isolated directory Sep 18, 2025 5 - Production/Stable pytest>=3.5.0 :pypi:`pytest-resource-usage` Pytest plugin for reporting running time and peak memory usage Nov 06, 2022 5 - Production/Stable pytest>=7.0.0 @@ -1573,7 +1580,7 @@ This list contains 1956 plugins. :pypi:`pytest-sanity` Dec 07, 2020 N/A N/A :pypi:`pytest-sa-pg` May 14, 2019 N/A N/A :pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A - :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 18, 2026 5 - Production/Stable N/A + :pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 30, 2026 5 - Production/Stable N/A :pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A :pypi:`pytest-scenario-files` A pytest plugin that generates unit test scenarios from data files. Feb 17, 2026 5 - Production/Stable pytest<10,>=7.4 :pypi:`pytest-scenarios` Add your description here Jan 03, 2026 N/A N/A @@ -1586,7 +1593,7 @@ This list contains 1956 plugins. :pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0) :pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0 :pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0 - :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 18, 2026 5 - Production/Stable N/A + :pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 30, 2026 5 - Production/Stable N/A :pypi:`pytest-selenium-driver` A zero-boilerplate Selenium WebDriver fixture for pytest Mar 07, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A :pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A @@ -1628,7 +1635,7 @@ This list contains 1956 plugins. :pypi:`pytest-simple-settings` simple-settings plugin for pytest Nov 17, 2020 4 - Beta pytest :pypi:`pytest-simplified` A PyTest plugin to simplify testing classes. Jan 19, 2026 4 - Beta pytest<9.0.0,>=8.3.5 :pypi:`pytest-single-file-logging` Allow for multiple processes to log to a single file May 05, 2016 4 - Beta pytest (>=2.8.1) - :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 20, 2026 3 - Alpha pytest>=9.0 + :pypi:`pytest-skill-engineering` The testing framework for skill engineering. Test tool descriptions, prompt templates, agent skills, and custom agents with real LLMs. AI analyzes results and tells you what to fix. Apr 30, 2026 3 - Alpha pytest>=9.0 :pypi:`pytest-skip` A pytest plugin which allows to (de-)select or skip tests from a file. Sep 12, 2025 3 - Alpha pytest :pypi:`pytest-skip-markers` Pytest Salt Plugin Aug 09, 2024 5 - Production/Stable pytest>=7.1.0 :pypi:`pytest-skipper` A plugin that selects only tests with changes in execution path Mar 26, 2017 3 - Alpha pytest (>=3.0.6) @@ -1687,7 +1694,7 @@ This list contains 1956 plugins. :pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A :pypi:`pytest-split-v2` Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. Jan 14, 2026 4 - Beta pytest<10,>=5 - :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Apr 01, 2026 N/A pytest<8,>5.4.0 + :pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Apr 29, 2026 N/A pytest<8,>5.4.0 :pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Apr 23, 2026 N/A N/A :pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0) :pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A @@ -1850,6 +1857,7 @@ This list contains 1956 plugins. :pypi:`pytest-trepan` Pytest plugin for trepan debugger. Sep 11, 2025 5 - Production/Stable pytest>=4.0.0 :pypi:`pytest-trialtemp` py.test plugin for using the same _trial_temp working directory as trial Jun 08, 2015 N/A N/A :pypi:`pytest-trio` Pytest plugin for trio Nov 01, 2022 N/A pytest (>=7.2.0) + :pypi:`pytest-tripwire` Full-certainty test mocking: every call recorded and verified May 01, 2026 3 - Alpha pytest>=7.4.0; extra == "dev" :pypi:`pytest-trytond` Pytest plugin for the Tryton server framework Nov 04, 2022 4 - Beta pytest (>=5) :pypi:`pytest-tspwplib` A simple plugin to use with tspwplib Jan 08, 2021 4 - Beta pytest (>=3.5.0) :pypi:`pytest-tst` Customize pytest options, output and exit code to make it compatible with tst Apr 27, 2022 N/A pytest (>=5.0.0) @@ -1923,6 +1931,7 @@ This list contains 1956 plugins. :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A + :pypi:`pytest-web` Local web UI for running and monitoring pytest suites May 02, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 @@ -2136,12 +2145,19 @@ This list contains 1956 plugins. Deterministic CI tests for LLM agent trajectories — record once, replay offline, assert contracts :pypi:`pytest-agent-digest` - *last release*: Mar 21, 2026, + *last release*: May 02, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 A Pytest plugin to generate a Markdown report for AI Agents + :pypi:`pytest-agent-eval` + *last release*: Apr 30, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.4 + + A pytest plugin for LLM evaluation tests with threshold-based pass/fail + :pypi:`pytest-agent-evals` *last release*: Mar 13, 2026, *status*: 4 - Beta, @@ -2164,11 +2180,11 @@ This list contains 1956 plugins. Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. :pypi:`pytest-agent-observability` - *last release*: Apr 24, 2026, + *last release*: Apr 27, 2026, *status*: N/A, - *requires*: N/A + *requires*: pytest>=7.0 - Reserved package name for Plivo. + pytest plugin that uploads LiveKit-agents eval results to agent-observability :pypi:`pytest-agents` *last release*: Feb 20, 2026, @@ -2598,7 +2614,7 @@ This list contains 1956 plugins. A plugin to use approvaltests with pytest :pypi:`pytest-approvaltests-geo` - *last release*: Jul 14, 2025, + *last release*: Apr 29, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -2801,7 +2817,7 @@ This list contains 1956 plugins. Pytest fixtures for async generators :pypi:`pytest-asyncio` - *last release*: Apr 15, 2026, + *last release*: May 02, 2026, *status*: 5 - Production/Stable, *requires*: pytest<10,>=8.2 @@ -3200,14 +3216,14 @@ This list contains 1956 plugins. Pytest plugin to run your tests with beartype checking enabled. :pypi:`pytest-beartype-tests` - *last release*: Apr 20, 2026, + *last release*: Apr 26, 2026, *status*: 4 - Beta, *requires*: pytest>=8 Pytest plugin that applies @beartype to every collected test function. :pypi:`pytest-bec-e2e` - *last release*: Apr 21, 2026, + *last release*: May 01, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -4075,8 +4091,8 @@ This list contains 1956 plugins. Distribute tests to cloud machines without fuss :pypi:`pytest-cloudreport` - *last release*: Apr 22, 2026, - *status*: N/A, + *last release*: Apr 29, 2026, + *status*: 4 - Beta, *requires*: pytest>=7.0 pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. @@ -4194,7 +4210,7 @@ This list contains 1956 plugins. pytest plugin to run pycodestyle :pypi:`pytest-codspeed` - *last release*: Apr 14, 2026, + *last release*: Apr 28, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=3.8 @@ -4880,7 +4896,7 @@ This list contains 1956 plugins. Pytest extension for dbt. :pypi:`pytest-dbt-duckdb` - *last release*: Mar 06, 2026, + *last release*: Apr 28, 2026, *status*: 4 - Beta, *requires*: pytest>=8.3.4 @@ -5636,7 +5652,7 @@ This list contains 1956 plugins. A Django REST framework plugin for pytest. :pypi:`pytest-drift` - *last release*: Apr 22, 2026, + *last release*: Apr 26, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -5678,7 +5694,7 @@ This list contains 1956 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Apr 25, 2026, + *last release*: Apr 30, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5888,7 +5904,7 @@ This list contains 1956 plugins. Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-arduino-cli` - *last release*: Apr 22, 2026, + *last release*: May 01, 2026, *status*: N/A, *requires*: pytest>=8 @@ -6840,11 +6856,11 @@ This list contains 1956 plugins. Re-run tests N times, visualize failure heatmaps, and get AI root cause hypotheses :pypi:`pytest-flakemark` - *last release*: Mar 23, 2026, + *last release*: May 01, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 - FLAKEMARK — Differential execution tracer that finds the exact file, line, and root cause of any flaky test. + Differential execution tracer that finds the exact file, line, and root cause of any flaky test. :pypi:`pytest-flakes` *last release*: Dec 02, 2021, @@ -6917,7 +6933,7 @@ This list contains 1956 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Apr 25, 2026, + *last release*: Apr 26, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -7190,7 +7206,7 @@ This list contains 1956 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Apr 23, 2026, + *last release*: Apr 30, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7274,9 +7290,9 @@ This list contains 1956 plugins. Parallelize pytest across GitLab CI workers. :pypi:`pytest-gitlab-code-quality` - *last release*: Nov 23, 2025, + *last release*: Apr 27, 2026, *status*: N/A, - *requires*: pytest>=8.1.1 + *requires*: pytest>=5.0.0 Collects warnings while testing and generates a GitLab Code Quality Report. @@ -7309,7 +7325,7 @@ This list contains 1956 plugins. Extends allure-pytest functionality :pypi:`pytest-glaze` - *last release*: Apr 25, 2026, + *last release*: Apr 29, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -7589,16 +7605,16 @@ This list contains 1956 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Apr 25, 2026, + *last release*: Apr 30, 2026, *status*: 3 - Alpha, - *requires*: pytest==9.0.0 + *requires*: pytest==9.0.3 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Apr 25, 2026, + *last release*: Apr 29, 2026, *status*: 3 - Alpha, - *requires*: pytest==9.0.0 + *requires*: pytest==9.0.3 Experimental package to automatically extract test plugins for Home Assistant custom components @@ -8009,14 +8025,14 @@ This list contains 1956 plugins. A pytest plugin for image snapshot management and comparison. :pypi:`pytest-impacted` - *last release*: Apr 16, 2026, + *last release*: May 01, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0.0 A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. :pypi:`pytest-impacted-rs` - *last release*: Apr 16, 2026, + *last release*: May 01, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8156,14 +8172,14 @@ This list contains 1956 plugins. A py.test plugin providing fixtures to simplify inmanta modules testing. :pypi:`pytest-inmanta-extensions` - *last release*: Mar 03, 2026, + *last release*: Apr 28, 2026, *status*: 5 - Production/Stable, *requires*: N/A Inmanta tests package :pypi:`pytest-inmanta-lsm` - *last release*: Feb 12, 2026, + *last release*: Apr 29, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -8358,6 +8374,13 @@ This list contains 1956 plugins. py.test plugin to check import ordering using isort + :pypi:`pytest-issues` + *last release*: Apr 29, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=8 + + Decorators for pytest tests that should issue exceptions or warnings + :pypi:`pytest-it` *last release*: Jan 29, 2024, *status*: 4 - Beta, @@ -8499,7 +8522,7 @@ This list contains 1956 plugins. Generate JSON test reports :pypi:`pytest-json-ctrf` - *last release*: Mar 31, 2026, + *last release*: Apr 30, 2026, *status*: N/A, *requires*: pytest>6.0.0 @@ -8631,6 +8654,13 @@ This list contains 1956 plugins. Pytest plugin to run a single-broker Kafka cluster + :pypi:`pytest-kafka-contract` + *last release*: Apr 29, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8.0.0 + + A pytest plugin and CLI for validating Kafka JSON and Avro messages against contracts. + :pypi:`pytest-kafkavents` *last release*: Sep 08, 2021, *status*: 4 - Beta, @@ -8856,7 +8886,7 @@ This list contains 1956 plugins. A simple plugin to use with pytest :pypi:`pytest-leela` - *last release*: Apr 09, 2026, + *last release*: Apr 27, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 @@ -9185,7 +9215,7 @@ This list contains 1956 plugins. pytest fixture logging configured from packaged YAML :pypi:`pytest-logikal` - *last release*: Mar 16, 2026, + *last release*: Apr 27, 2026, *status*: 5 - Production/Stable, *requires*: pytest==9.0.2 @@ -9296,6 +9326,13 @@ This list contains 1956 plugins. Token-efficient markdown test reports for LLM-based TDD agents + :pypi:`pytest-markdown-summary` + *last release*: Apr 30, 2026, + *status*: 3 - Alpha, + *requires*: pytest<10,>=7 + + A Pytest plugin for generating reports in Markdown format. + :pypi:`pytest-marker-bugzilla` *last release*: Apr 02, 2025, *status*: 5 - Production/Stable, @@ -9436,6 +9473,13 @@ This list contains 1956 plugins. Pytest-style framework for evaluating Model Context Protocol (MCP) servers. + :pypi:`pytest-mcp-assert` + *last release*: May 02, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + pytest plugin for mcp-assert: run MCP server assertions as pytest test items + :pypi:`pytest-mcp-tools` *last release*: Apr 25, 2026, *status*: N/A, @@ -10395,6 +10439,13 @@ This list contains 1956 plugins. \`pytest --openapi\` - an opinionated, lightweight black-box contract tester against a live API using its OpenAPI specification as the source of truth + :pypi:`pytest-openfeature` + *last release*: Apr 28, 2026, + *status*: 4 - Beta, + *requires*: pytest>=8.0 + + Drive pytest configuration from an OpenFeature provider. + :pypi:`pytest-openfiles` *last release*: Jun 05, 2024, *status*: 3 - Alpha, @@ -10452,11 +10503,11 @@ This list contains 1956 plugins. A pytest plugin for orchestrating tests :pypi:`pytest-order` - *last release*: Aug 22, 2024, + *last release*: Apr 26, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=5.0; python_version < "3.10" + *requires*: pytest>=6.2.4; python_version < "3.14" - pytest plugin to run your tests in a specific order + pytest plugin to run tests in a specific order :pypi:`pytest-ordered` *last release*: Nov 09, 2025, @@ -10494,7 +10545,7 @@ This list contains 1956 plugins. A pytest plugin for instrumenting test runs via OpenTelemetry :pypi:`pytest-otel` - *last release*: Apr 14, 2026, + *last release*: Apr 29, 2026, *status*: N/A, *requires*: pytest==9.0.3 @@ -10788,9 +10839,9 @@ This list contains 1956 plugins. Pytest pexpect plugin. :pypi:`pytest-pg` - *last release*: May 18, 2025, + *last release*: May 01, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=7.4 + *requires*: pytest>=8.0 A tiny plugin for pytest which runs PostgreSQL in Docker @@ -10801,6 +10852,13 @@ This list contains 1956 plugins. Pytest plugins and helpers for tests using a Postgres database. + :pypi:`pytest-pgtap` + *last release*: Apr 28, 2026, + *status*: 3 - Alpha, + *requires*: N/A + + Pytest plugin for running pgTAP tests + :pypi:`pytest-phmdoctest` *last release*: Apr 15, 2022, *status*: 4 - Beta, @@ -11488,7 +11546,7 @@ This list contains 1956 plugins. Record PyMySQL queries and mock with the stored data. :pypi:`pytest-pyodide` - *last release*: Apr 17, 2026, + *last release*: Apr 27, 2026, *status*: N/A, *requires*: pytest @@ -11852,7 +11910,7 @@ This list contains 1956 plugins. Test your README.md file :pypi:`pytest-reana` - *last release*: Mar 03, 2026, + *last release*: Apr 28, 2026, *status*: 3 - Alpha, *requires*: N/A @@ -12090,7 +12148,7 @@ This list contains 1956 plugins. Generate Pytest reports with templates :pypi:`pytest-reporter-html` - *last release*: Mar 15, 2026, + *last release*: Apr 27, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 @@ -12181,7 +12239,7 @@ This list contains 1956 plugins. Pytest Repo Structure :pypi:`pytest-req` - *last release*: Mar 02, 2026, + *last release*: Apr 26, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.4.2 @@ -12293,7 +12351,7 @@ This list contains 1956 plugins. Pytest fixture for recording and replaying serial port traffic. :pypi:`pytest-resilient-circuits` - *last release*: Nov 13, 2025, + *last release*: Apr 29, 2026, *status*: N/A, *requires*: pytest~=7.0 @@ -12769,7 +12827,7 @@ This list contains 1956 plugins. pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs :pypi:`pytest-sbase` - *last release*: Apr 18, 2026, + *last release*: Apr 30, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -12860,7 +12918,7 @@ This list contains 1956 plugins. pytest plugin to automatically capture screenshots upon selenium webdriver events :pypi:`pytest-seleniumbase` - *last release*: Apr 18, 2026, + *last release*: Apr 30, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -13154,7 +13212,7 @@ This list contains 1956 plugins. Allow for multiple processes to log to a single file :pypi:`pytest-skill-engineering` - *last release*: Apr 20, 2026, + *last release*: Apr 30, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0 @@ -13567,7 +13625,7 @@ This list contains 1956 plugins. Pytest plugin which splits the test suite to equally sized sub suites based on test execution time. :pypi:`pytest-splunk-addon` - *last release*: Apr 01, 2026, + *last release*: Apr 29, 2026, *status*: N/A, *requires*: pytest<8,>5.4.0 @@ -14707,6 +14765,13 @@ This list contains 1956 plugins. Pytest plugin for trio + :pypi:`pytest-tripwire` + *last release*: May 01, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.4.0; extra == "dev" + + Full-certainty test mocking: every call recorded and verified + :pypi:`pytest-trytond` *last release*: Nov 04, 2022, *status*: 4 - Beta, @@ -15218,6 +15283,13 @@ This list contains 1956 plugins. Pytest plugin for testing WDL workflows. + :pypi:`pytest-web` + *last release*: May 02, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Local web UI for running and monitoring pytest suites + :pypi:`pytest-web3-data` *last release*: Oct 04, 2023, *status*: 4 - Beta, From 551eafb2c8540cabda43d5e5ed91aeaf186cbf3b Mon Sep 17 00:00:00 2001 From: NIYONSHUTI Emmanuel Date: Sun, 3 May 2026 08:07:46 +0200 Subject: [PATCH 284/307] pytester: improve Pytester.LineMatcher._no_match_line docstring (#14438) --- src/_pytest/pytester.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/_pytest/pytester.py b/src/_pytest/pytester.py index 1cd5f05dd7e..2c5bb3931cf 100644 --- a/src/_pytest/pytester.py +++ b/src/_pytest/pytester.py @@ -1760,9 +1760,17 @@ def no_re_match_line(self, pat: str) -> None: def _no_match_line( self, pat: str, match_func: Callable[[str, str], bool], match_nickname: str ) -> None: - """Ensure captured lines does not have a the given pattern, using ``fnmatch.fnmatch``. + """Underlying implementation of ``no_fnmatch_line`` and ``no_re_match_line``. - :param str pat: The pattern to match lines. + :param str pat: + The pattern to match lines. + :param match_func: + A callable ``match_func(line, pattern)`` where line is the + captured line from stdout/stderr and pattern is the matching + pattern. + :param match_nickname: + The nickname for the match function that will be logged to stdout + when a match occurs. """ __tracebackhide__ = True nomatch_printed = False From 0263914bf9cec5677783cda7557717e4a9660452 Mon Sep 17 00:00:00 2001 From: Yusuke Kadowaki Date: Sun, 27 Nov 2022 01:39:21 +0900 Subject: [PATCH 285/307] tmpdir: stop relying on atexit and add integration tests for tmpdir fixture Fix #10545 Co-authored-by: Ran Benita --- src/_pytest/pathlib.py | 31 ++++++++++++------ src/_pytest/tmpdir.py | 14 ++++++++ testing/test_tmpdir.py | 73 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 105 insertions(+), 13 deletions(-) diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index 614898cef78..291bdf4ecbf 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -1,6 +1,5 @@ from __future__ import annotations -import atexit from collections.abc import Callable from collections.abc import Iterable from collections.abc import Iterator @@ -260,10 +259,8 @@ def create_cleanup_lock(p: Path) -> Path: return lock_path -def register_cleanup_lock_removal( - lock_path: Path, register: Any = atexit.register -) -> Any: - """Register a cleanup function for removing a lock, by default on atexit.""" +def register_cleanup_lock_removal(lock_path: Path, register: Any) -> Any: + """Register a cleanup function for removing a lock.""" pid = os.getpid() def cleanup_on_exit(lock_path: Path = lock_path, original_pid: int = pid) -> None: @@ -375,13 +372,29 @@ def cleanup_numbered_dir( def make_numbered_dir_with_cleanup( + *, root: Path, prefix: str, + mode: int, keep: int, lock_timeout: float, - mode: int, + register: Any, ) -> Path: - """Create a numbered dir with a cleanup lock and remove old ones.""" + """Create a numbered dir and register its cleanup. + + Similar to make_numbered_dir, but also maintains a lock file indicating that + the directory is currently in use, and registers the cleanup of the lock and + of stale numbered directories. + + :param keep: + The number of sessions to retain the directory. + :param lock_timeout: + In case of a crash, the lock remains "stuck". The timeout is a time + limit after which the lock is considered stale and can be removed. + :param register: + Called as register(cleanup_func, params...). Should schedule to call + passed cleanup functions on session finish. + """ e = None for i in range(10): try: @@ -389,13 +402,13 @@ def make_numbered_dir_with_cleanup( # Only lock the current dir when keep is not 0 if keep != 0: lock_path = create_cleanup_lock(p) - register_cleanup_lock_removal(lock_path) + register_cleanup_lock_removal(lock_path, register) except Exception as exc: e = exc else: consider_lock_dead_if_created_before = p.stat().st_mtime - lock_timeout # Register a cleanup for program exit - atexit.register( + register( cleanup_numbered_dir, root, prefix, diff --git a/src/_pytest/tmpdir.py b/src/_pytest/tmpdir.py index 66ca9f190e3..9196006e500 100644 --- a/src/_pytest/tmpdir.py +++ b/src/_pytest/tmpdir.py @@ -3,7 +3,9 @@ from __future__ import annotations +import atexit from collections.abc import Generator +from contextlib import ExitStack import dataclasses import os from pathlib import Path @@ -74,6 +76,9 @@ def __init__( self._retention_count = retention_count self._retention_policy = retention_policy self._basetemp = basetemp + # Register cleanups for session finish. Also called atexit as a last + # resort if sessionfinish for some reason doesn't happen. + self._exit_stack = ExitStack() @classmethod def from_config( @@ -211,7 +216,13 @@ def getbasetemp(self) -> Path: keep=keep, lock_timeout=LOCK_TIMEOUT, mode=0o700, + register=self._exit_stack.callback, ) + # Ensure that the cleanup is called on exit (#1120 possibly?). + # But if the exit stack is closed manually (as it normally should), + # unregister the atexit to avoid pile up. + atexit.register(self._exit_stack.close) + self._exit_stack.callback(atexit.unregister, self._exit_stack.close) assert basetemp is not None, basetemp self._basetemp = basetemp self._trace("new basetemp", basetemp) @@ -325,6 +336,9 @@ def pytest_sessionfinish(session, exitstatus: int | ExitCode): if basetemp.is_dir(): cleanup_dead_symlinks(basetemp) + # Run the numbered dirs and lock file cleanups registered on the ExitStack. + tmp_path_factory._exit_stack.close() + @hookimpl(wrapper=True, tryfirst=True) def pytest_runtest_makereport( diff --git a/testing/test_tmpdir.py b/testing/test_tmpdir.py index 096527e6273..e6909217d88 100644 --- a/testing/test_tmpdir.py +++ b/testing/test_tmpdir.py @@ -96,6 +96,73 @@ def test_1(tmp_path): assert mytemp.exists() assert not mytemp.joinpath("hello").exists() + def test_policy_none_delete_all(self, pytester: Pytester) -> None: + p = pytester.makepyfile( + """ + def test_1(tmp_path): + assert 0 == 0 + """ + ) + p_failed = pytester.makepyfile( + another_file_name=""" + def test_1(tmp_path): + assert 0 == 1 + """ + ) + pytester.makepyprojecttoml( + """ + [tool.pytest.ini_options] + tmp_path_retention_policy = "none" + """ + ) + + pytester.inline_run(p) + pytester.inline_run(p_failed) + + root = pytester._test_tmproot + for child in root.iterdir(): + base_dir = list(child.iterdir()) + # Check the base dir itself is gone without depending on test results + assert base_dir == [] + + @pytest.mark.parametrize("policy", ['"failed"', '"all"']) + @pytest.mark.parametrize("count", [0, 1, 3]) + def test_retention_count(self, pytester: Pytester, policy, count) -> None: + p = pytester.makepyfile( + """ + def test_1(tmp_path): + assert 0 == 0 + """ + ) + p_failed = pytester.makepyfile( + another_file_name=""" + def test_1(tmp_path): + assert 0 == 1 + """ + ) + + pytester.makepyprojecttoml( + f""" + [tool.pytest.ini_options] + tmp_path_retention_policy = {policy} + tmp_path_retention_count = {count} + """ + ) + + pytester.inline_run(p) + pytester.inline_run(p_failed) + pytester.inline_run(p) + pytester.inline_run(p_failed) + pytester.inline_run(p) + pytester.inline_run(p_failed) + pytester.inline_run(p) + pytester.inline_run(p_failed) + + root = pytester._test_tmproot + for child in root.iterdir(): + base_dir = filter(lambda x: not x.is_symlink(), child.iterdir()) + assert len(list(base_dir)) == count + def test_policy_failed_removes_only_passed_dir(self, pytester: Pytester) -> None: p = pytester.makepyfile( """ @@ -183,10 +250,8 @@ def test_fixt(fixt): # Check if the whole directory is removed root = pytester._test_tmproot for child in root.iterdir(): - base_dir = list( - filter(lambda x: x.is_dir() and not x.is_symlink(), child.iterdir()) - ) - assert len(base_dir) == 0 + base_dir = list(child.iterdir()) + assert base_dir == [] # issue #10502 def test_policy_all_keeps_dir_when_skipped_from_fixture( From 84ae27e4710af45cc307f8c0c25259e917090219 Mon Sep 17 00:00:00 2001 From: EternalRights <162705204+EternalRights@users.noreply.github.com> Date: Fri, 8 May 2026 01:50:25 +0800 Subject: [PATCH 286/307] Fix Argument.__repr__ crash when _action is not initialized (#14429) --- changelog/13817.bugfix.rst | 1 + src/_pytest/config/argparsing.py | 5 ++++- testing/test_parseopt.py | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 changelog/13817.bugfix.rst diff --git a/changelog/13817.bugfix.rst b/changelog/13817.bugfix.rst new file mode 100644 index 00000000000..08c9a6a53c3 --- /dev/null +++ b/changelog/13817.bugfix.rst @@ -0,0 +1 @@ +Fixed a secondary `AttributeError` masking the original error when an option argument fails to initialize. diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 4536709134b..f2ec53374af 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -306,10 +306,13 @@ def type(self) -> Any | None: return self._action.type def __repr__(self) -> str: + action = getattr(self, "_action", None) + if action is None: + return "Argument()" args: list[str] = [] args += ["opts: " + repr(self.names())] args += ["dest: " + repr(self.dest)] - if self._action.type: + if action.type: args += ["type: " + repr(self.type)] args += ["default: " + repr(self.default)] return "Argument({})".format(", ".join(args)) diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py index f56deed8b5d..6da04b7d7cf 100644 --- a/testing/test_parseopt.py +++ b/testing/test_parseopt.py @@ -341,3 +341,25 @@ def test_argcomplete(pytester: Pytester, monkeypatch: MonkeyPatch) -> None: monkeypatch.setenv("COMP_POINT", str(len("pytest " + arg))) result = pytester.run("bash", str(script), arg) result.stdout.fnmatch_lines(["test_argcomplete", "test_argcomplete.d/"]) + + +def test_argument_repr_uninitialized() -> None: + """Argument.__repr__ should not crash if _action is not set yet.""" + arg = parseopt.Argument.__new__(parseopt.Argument) + assert repr(arg) == "Argument()" + + +def test_argument_repr_initialized(parser: parseopt.Parser) -> None: + """Argument.__repr__ with properly initialized options.""" + # Without type + parser.addoption("--myflag", dest="myflag", help="test flag") + option = parser._anonymous.options[-1] + assert repr(option) == "Argument(opts: ['--myflag'], dest: 'myflag', default: None)" + + # With type + parser.addoption("--count", type=int, dest="count", help="count") + option = parser._anonymous.options[-1] + assert ( + repr(option) + == "Argument(opts: ['--count'], dest: 'count', type: , default: None)" + ) From 07dbfab72000c076352edc41d0cbec7a77c6e376 Mon Sep 17 00:00:00 2001 From: Hamza Mobeen Date: Fri, 8 May 2026 08:57:43 +0100 Subject: [PATCH 287/307] Add datetime/timedelta support to pytest.approx (#8395) (#14414) Closes #8395 --------- Co-authored-by: Antigravity Co-authored-by: Codex Co-authored-by: Pierre Sassoulas --- AUTHORS | 1 + changelog/8395.feature.rst | 1 + src/_pytest/python_api.py | 91 +++++++++++++++- testing/python/approx.py | 217 +++++++++++++++++++++++++++++++++++++ 4 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 changelog/8395.feature.rst diff --git a/AUTHORS b/AUTHORS index d6d2737a4bf..f4a2769ca3c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -195,6 +195,7 @@ Grig Gheorghiu Grigorii Eremeev (budulianin) Guido Wesdorp Guoqiang Zhang +Hamza Mobeen Harald Armin Massa Harshna Henk-Jaap Wagenaar diff --git a/changelog/8395.feature.rst b/changelog/8395.feature.rst new file mode 100644 index 00000000000..61c16216182 --- /dev/null +++ b/changelog/8395.feature.rst @@ -0,0 +1 @@ +Added support for :class:`~datetime.datetime` and :class:`~datetime.timedelta` comparisons with :func:`pytest.approx`. An explicit ``abs`` or ``rel`` tolerance as a :class:`~datetime.timedelta` is required and relative tolerance is not supported for datetime comparisons -- by :user:`hamza-mobeen`. diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index 9e2e1826a4f..f6d5e31a588 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -1,10 +1,13 @@ # mypy: allow-untyped-defs from __future__ import annotations +import builtins from collections.abc import Collection from collections.abc import Mapping from collections.abc import Sequence from collections.abc import Sized +from datetime import datetime +from datetime import timedelta from decimal import Decimal import math from numbers import Complex @@ -558,10 +561,75 @@ def __repr__(self) -> str: return f"{self.expected} ± {tol_str}" +class ApproxTimedelta(ApproxBase): + """Perform approximate comparisons where the expected value is a + datetime or timedelta. + + Requires an explicit tolerance as a timedelta. + Relative tolerance is not supported for datetime comparisons. + """ + + def __init__(self, expected, rel=None, abs=None, nan_ok: bool = False) -> None: + __tracebackhide__ = True + if isinstance(expected, datetime) and rel is not None: + raise TypeError( + "pytest.approx() does not support relative tolerance for " + "datetime comparisons. Use abs=timedelta(...) instead." + ) + if nan_ok: + raise TypeError( + "pytest.approx() does not support nan_ok for " + "datetime/timedelta comparisons." + ) + if abs is None and rel is None: + raise TypeError( + "pytest.approx() requires an explicit tolerance for " + "datetime/timedelta comparisons: " + "e.g. approx(expected, abs=timedelta(seconds=1))" + ) + if abs is not None and not isinstance(abs, timedelta): + raise TypeError( + f"absolute tolerance for datetime/timedelta must be a " + f"timedelta, got {type(abs).__name__}" + ) + if rel is not None and not isinstance(rel, timedelta): + raise TypeError( + f"relative tolerance for timedelta must be a " + f"timedelta, got {type(rel).__name__}" + ) + tolerance = max(t for t in (abs, rel) if t is not None) + super().__init__(expected, rel=None, abs=tolerance, nan_ok=False) + + def __repr__(self) -> str: + return f"{self.expected} ± {self.abs}" + + def __eq__(self, actual) -> bool: + try: + return bool(builtins.abs(self.expected - actual) <= self.abs) + except (TypeError, OverflowError): + return False + + def _yield_comparisons(self, actual): + yield actual, self.expected + + def _repr_compare(self, other_side: Any) -> list[str]: + try: + abs_diff = builtins.abs(self.expected - other_side) + except (TypeError, OverflowError): + abs_diff = "N/A" + return [ + "comparison failed", + f"Obtained: {other_side}", + f"Expected: {self.expected} ± {self.abs}", + f"Absolute difference: {abs_diff}", + f"Tolerance: {self.abs}", + ] + + def approx( expected: Any, - rel: float | Decimal | None = None, - abs: float | Decimal | None = None, + rel: float | Decimal | timedelta | None = None, + abs: float | Decimal | timedelta | None = None, nan_ok: bool = False, ) -> ApproxBase: """Assert that two numbers (or two ordered sequences of numbers) are equal to each other @@ -677,6 +745,23 @@ def approx( >>> ["foo", 1.0000005] == approx([None,1]) False + **datetime and timedelta** + + You can also use ``approx`` to compare :class:`~datetime.datetime` and + :class:`~datetime.timedelta` objects by specifying an absolute tolerance + as a :class:`~datetime.timedelta`:: + + >>> from datetime import datetime, timedelta + >>> dt1 = datetime(2024, 1, 1, 12, 0, 0) + >>> dt2 = datetime(2024, 1, 1, 12, 0, 0, 500000) + >>> dt1 == approx(dt2, abs=timedelta(seconds=1)) + True + + Note that ``rel`` is not supported for datetime comparisons, + and ``abs`` or ``rel`` must be explicitly provided as a ``timedelta`` object. + + .. versionadded:: 8.4 + If you're thinking about using ``approx``, then you might want to know how it compares to other good ways of comparing floating-point numbers. All of these algorithms are based on relative and absolute tolerances and should @@ -785,6 +870,8 @@ def approx( elif isinstance(expected, Collection) and not isinstance(expected, str | bytes): msg = f"pytest.approx() only supports ordered sequences, but got: {expected!r}" raise TypeError(msg) + elif isinstance(expected, (datetime, timedelta)): + cls = ApproxTimedelta else: cls = ApproxScalar diff --git a/testing/python/approx.py b/testing/python/approx.py index bf9fad6cb56..4369dc24ad4 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -1118,6 +1118,223 @@ def test_assertion_rewriting_works_with_approx_on_lhs( ] +class TestApproxDatetime: + """Tests for datetime/timedelta support in approx (issue #8395).""" + + def test_datetime_exactly_equal(self): + from datetime import datetime + from datetime import timedelta + + dt = datetime(2024, 1, 1, 12, 0, 0) + assert dt == approx(dt, abs=timedelta(seconds=1)) + + def test_datetime_within_tolerance(self): + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 0, 500000) # +0.5s + assert dt1 == approx(dt2, abs=timedelta(seconds=1)) + + def test_datetime_outside_tolerance(self): + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 2) # +2s + assert dt1 != approx(dt2, abs=timedelta(seconds=1)) + + def test_datetime_negative_difference(self): + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 1) + dt2 = datetime(2024, 1, 1, 12, 0, 0) # dt2 < dt1 + assert dt1 == approx(dt2, abs=timedelta(seconds=2)) + assert dt1 != approx(dt2, abs=timedelta(milliseconds=500)) + + def test_timedelta_within_tolerance(self): + from datetime import timedelta + + td1 = timedelta(seconds=100) + td2 = timedelta(seconds=100.5) + assert td1 == approx(td2, abs=timedelta(seconds=1)) + + def test_timedelta_outside_tolerance(self): + from datetime import timedelta + + td1 = timedelta(seconds=100) + td2 = timedelta(seconds=102) + assert td1 != approx(td2, abs=timedelta(seconds=1)) + + def test_timedelta_rel_within_tolerance(self): + from datetime import timedelta + + td1 = timedelta(seconds=100) + td2 = timedelta(seconds=100.5) + assert td1 == approx(td2, rel=timedelta(seconds=1)) + + def test_timedelta_rel_outside_tolerance(self): + from datetime import timedelta + + td1 = timedelta(seconds=100) + td2 = timedelta(seconds=102) + assert td1 != approx(td2, rel=timedelta(seconds=1)) + + def test_requires_tolerance(self): + from datetime import datetime + + with pytest.raises(TypeError, match="requires an explicit tolerance"): + approx(datetime(2024, 1, 1)) + + def test_datetime_rejects_rel(self): + from datetime import datetime + from datetime import timedelta + + with pytest.raises(TypeError, match="does not support relative tolerance"): + approx(datetime(2024, 1, 1), rel=0.1, abs=timedelta(seconds=1)) + + with pytest.raises(TypeError, match="does not support relative tolerance"): + approx(datetime(2024, 1, 1), rel=timedelta(seconds=1)) + + def test_abs_must_be_timedelta(self): + from datetime import datetime + + with pytest.raises(TypeError, match="must be a timedelta"): + approx(datetime(2024, 1, 1), abs=1.0) + + def test_timedelta_rel_must_be_timedelta(self): + from datetime import timedelta + + with pytest.raises(TypeError, match="must be a timedelta"): + approx(timedelta(seconds=1), rel=0.1) + + def test_rejects_nan_ok(self): + from datetime import datetime + from datetime import timedelta + + with pytest.raises(TypeError, match="does not support nan_ok"): + approx(datetime(2024, 1, 1), abs=timedelta(seconds=1), nan_ok=True) + + def test_datetime_repr(self): + from datetime import datetime + from datetime import timedelta + + dt = datetime(2024, 1, 1, 12, 0, 0) + result = repr(approx(dt, abs=timedelta(seconds=1))) + assert "2024-01-01 12:00:00" in result + assert "0:00:01" in result + + def test_timedelta_repr(self): + from datetime import timedelta + + td = timedelta(seconds=100) + result = repr(approx(td, abs=timedelta(seconds=1))) + assert "0:01:40" in result # 100 seconds + assert "0:00:01" in result # 1 second tolerance + + def test_datetime_symmetry(self): + """Approx comparison should work on both sides of ==.""" + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 0, 500000) + tol = timedelta(seconds=1) + assert dt1 == approx(dt2, abs=tol) + assert approx(dt2, abs=tol) == dt1 + + def test_datetime_ne_operator(self): + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 5) + tol = timedelta(seconds=1) + assert dt1 != approx(dt2, abs=tol) + assert not (dt1 == approx(dt2, abs=tol)) + + def test_datetime_with_timezone(self): + from datetime import datetime + from datetime import timedelta + from datetime import timezone + + tz = timezone.utc + dt1 = datetime(2024, 1, 1, 12, 0, 0, tzinfo=tz) + dt2 = datetime(2024, 1, 1, 12, 0, 0, 500000, tzinfo=tz) + assert dt1 == approx(dt2, abs=timedelta(seconds=1)) + + def test_datetime_error_message(self): + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 5) # 5 seconds off + with pytest.raises(AssertionError, match="comparison failed"): + assert dt1 == approx(dt2, abs=timedelta(seconds=1)) + + def test_timedelta_zero(self): + from datetime import timedelta + + td1 = timedelta(seconds=0) + td2 = timedelta(seconds=0) + assert td1 == approx(td2, abs=timedelta(seconds=1)) + + def test_datetime_boundary_exact(self): + """Test that values exactly at the tolerance boundary are equal.""" + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 1) # exactly 1 second + assert dt1 == approx(dt2, abs=timedelta(seconds=1)) + + def test_datetime_microsecond_tolerance(self): + from datetime import datetime + from datetime import timedelta + + dt1 = datetime(2024, 1, 1, 12, 0, 0, 0) + dt2 = datetime(2024, 1, 1, 12, 0, 0, 100) # +100 microseconds + assert dt1 == approx(dt2, abs=timedelta(microseconds=200)) + assert dt1 != approx(dt2, abs=timedelta(microseconds=50)) + + def test_bool_context_raises(self): + from datetime import datetime + from datetime import timedelta + + with pytest.raises(AssertionError, match="boolean context"): + bool(approx(datetime(2024, 1, 1), abs=timedelta(seconds=1))) + + def test_wrong_type_comparison(self): + """Comparing a datetime approx with a non-datetime should return False.""" + from datetime import datetime + from datetime import timedelta + + assert 42 != approx(datetime(2024, 1, 1), abs=timedelta(seconds=1)) + assert "string" != approx(datetime(2024, 1, 1), abs=timedelta(seconds=1)) + + def test_yield_comparisons(self): + """Test that _yield_comparisons yields (actual, expected) pairs.""" + from datetime import datetime + from datetime import timedelta + + dt = datetime(2024, 1, 1, 12, 0, 0) + a = approx(dt, abs=timedelta(seconds=1)) + actual = datetime(2024, 1, 1, 12, 0, 0, 500000) + pairs = list(a._yield_comparisons(actual)) + assert pairs == [(actual, dt)] + + def test_repr_compare_with_incompatible_type(self): + """_repr_compare handles TypeError when actual is not a datetime.""" + from datetime import datetime + from datetime import timedelta + + a = approx(datetime(2024, 1, 1), abs=timedelta(seconds=1)) + result = a._repr_compare("not a datetime") + assert "comparison failed" in result[0] + assert "N/A" in result[3] + + class MyVec3: # incomplete """sequence like""" From 7e6161c68579eb58ecceaf8c6b6f6b1b2f46c28a Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 10 Apr 2026 11:42:36 +0300 Subject: [PATCH 288/307] logging: also capture logs from non-propagating loggers Previously, we only attached our capturing handler to the root logger. This means that logs emitted by non-propagating loggers (including all children which propagate to *them*) were not captured. As far as I can see, for the pytest use case, we do always want to capture these logs, for both test reporting (i.e. the "Captured log calls" section) and `caplog` testing. Fix by attaching to all non-propagating loggers in addition to the root logger. This approach doesn't handle loggers which become non-propagating during the test, which seems OK to me. A downside is that the (somewhat performance-sensitive) per-test logging setup becomes a bit slower (depending on the logging setup). Fix #3697 --- changelog/3697.bugfix.rst | 3 +++ src/_pytest/logging.py | 22 ++++++++++++++++++++-- testing/logging/test_fixture.py | 27 +++++++++++++++++++++++++++ testing/logging/test_reporting.py | 8 +++----- 4 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 changelog/3697.bugfix.rst diff --git a/changelog/3697.bugfix.rst b/changelog/3697.bugfix.rst new file mode 100644 index 00000000000..59f1872786d --- /dev/null +++ b/changelog/3697.bugfix.rst @@ -0,0 +1,3 @@ +Logging capture now works for non-propagating loggers. +Previously only logs which reached the root logger were captured. +This includes :fixture:`caplog` and the "Captured log calls" test reporting. diff --git a/src/_pytest/logging.py b/src/_pytest/logging.py index 6f34c1b93fd..2a22c9eb4aa 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -342,18 +342,34 @@ def add_option_ini(option, dest, default=None, type=None, **kwargs): class catching_logs(Generic[_HandlerType]): """Context manager that prepares the whole logging machinery properly.""" - __slots__ = ("handler", "level", "orig_level") + __slots__ = ("attached_loggers", "handler", "level", "orig_level") def __init__(self, handler: _HandlerType, level: int | None = None) -> None: self.handler = handler self.level = level + self.attached_loggers: list[logging.Logger] = [] def __enter__(self) -> _HandlerType: root_logger = logging.getLogger() if self.level is not None: self.handler.setLevel(self.level) + # Attach to root logger. root_logger.addHandler(self.handler) + self.attached_loggers.append(root_logger) + # Attach to all non-propagating loggers (won't reach root). + # Note that will miss loggers that *become* non-propagating + # after the `__enter__`. Not worth the trouble for now. + for logger in root_logger.manager.loggerDict.values(): + if ( + isinstance(logger, logging.Logger) + and not logger.propagate + and logger is not root_logger + ): + logger.addHandler(self.handler) + self.attached_loggers.append(logger) if self.level is not None: + # Non-propagating loggers still inherit the level (unless a logger + # explicitly set level), so only do this on the root logger. self.orig_level = root_logger.level root_logger.setLevel(min(self.orig_level, self.level)) return self.handler @@ -367,7 +383,9 @@ def __exit__( root_logger = logging.getLogger() if self.level is not None: root_logger.setLevel(self.orig_level) - root_logger.removeHandler(self.handler) + for logger in self.attached_loggers: + logger.removeHandler(self.handler) + self.attached_loggers.clear() class LogCaptureHandler(logging_StreamHandler): diff --git a/testing/logging/test_fixture.py b/testing/logging/test_fixture.py index 5f94cb8508a..c98b7d84258 100644 --- a/testing/logging/test_fixture.py +++ b/testing/logging/test_fixture.py @@ -411,6 +411,33 @@ def test_log_level_override(request, caplog): assert result.ret == 0 +def test_can_capture_non_propagating_logger(pytester: Pytester) -> None: + """Logs emitted by non-propagating loggers are still captured (#3697).""" + pytester.makepyfile( + """ + import logging + + logger = logging.getLogger("catchlog") + logger.propagate = False + child_logger = logging.getLogger("catchlog.child") + + def test_non_propagating_logger(caplog): + caplog.set_level(logging.INFO) + + logger.info("parent logger message") + child_logger.info("child logger message") + + assert caplog.record_tuples == [ + ("catchlog", logging.INFO, "parent logger message"), + ("catchlog.child", logging.INFO, "child logger message"), + ] + """ + ) + + result = pytester.runpytest() + result.assert_outcomes(passed=1) + + def test_captures_despite_exception(pytester: Pytester) -> None: pytester.makepyfile( """ diff --git a/testing/logging/test_reporting.py b/testing/logging/test_reporting.py index 95a44d7cdf0..11013fdd749 100644 --- a/testing/logging/test_reporting.py +++ b/testing/logging/test_reporting.py @@ -1255,7 +1255,6 @@ def test_foo(): ) -@pytest.mark.xfail(reason="#3697 - not capturing propagate=False loggers yet") def test_log_propagation_false(pytester: Pytester) -> None: pytester.makepyfile( """ @@ -1264,11 +1263,10 @@ def test_log_propagation_false(pytester: Pytester) -> None: logging.getLogger('foo').propagate = False - def test_log_file(request): + def test_log_file(): logging.getLogger().warning("log goes to root logger") logging.getLogger('foo').warning("log goes to initially non-propagating logger") - logging.getLogger('foo.bar').propagate = False - logging.getLogger('foo.bar').warning("log goes to propagation-disabled-in-test logger") + logging.getLogger('foo.bar').warning("log goes to initially non-propagating nested logger") assert False, "intentionally fail to trigger report logging output" """ ) @@ -1283,7 +1281,7 @@ def test_log_file(request): [ "WARNING root:test_log_propagation_false.py:7 log goes to root logger", "WARNING foo:test_log_propagation_false.py:8 log goes to initially non-propagating logger", - "WARNING foo.bar:test_log_propagation_false.py:10 log goes to propagation-disabled-in-test logger", + "WARNING foo.bar:test_log_propagation_false.py:9 log goes to initially non-propagating nested logger", ] ) assert not list(report.get_sections("Captured stderr call")) From a481f264d70ac3d053d5f7408f4ac1ec439d0c2f Mon Sep 17 00:00:00 2001 From: Praneeth Kodumagulla <64239307+praneethhere@users.noreply.github.com> Date: Fri, 8 May 2026 15:40:31 -0500 Subject: [PATCH 289/307] Fix strict options from addopts Closes #14442 --- AUTHORS | 1 + changelog/14442.bugfix.rst | 3 +++ src/_pytest/config/__init__.py | 7 +++++++ testing/test_config.py | 15 ++++++++++----- testing/test_mark.py | 21 +++++++++++++-------- 5 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 changelog/14442.bugfix.rst diff --git a/AUTHORS b/AUTHORS index f4a2769ca3c..f3cf1b0facb 100644 --- a/AUTHORS +++ b/AUTHORS @@ -381,6 +381,7 @@ Piotr Banaszkiewicz Piotr Helm Poulami Sau Prakhar Gurunani +Praneeth Kodumagulla Prashant Anand Prashant Sharma Pulkit Goyal diff --git a/changelog/14442.bugfix.rst b/changelog/14442.bugfix.rst new file mode 100644 index 00000000000..90999cc9572 --- /dev/null +++ b/changelog/14442.bugfix.rst @@ -0,0 +1,3 @@ +Fixed a regression in pytest 9.0 where :option:`--strict-markers` and :option:`--strict-config` specified through :confval:`addopts` were silently ignored. + +Note that when targeting pytest >= 9.0, it's nicer to use :confval:`strict_markers` and :confval:`strict_config`, or :ref:`strict mode `. diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 2dab4e279b5..44d606b00a4 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -50,6 +50,7 @@ from .findpaths import ConfigDict from .findpaths import ConfigValue from .findpaths import determine_setup +from .findpaths import parse_override_ini from _pytest import __version__ import _pytest._code from _pytest._code import ExceptionInfo @@ -1520,6 +1521,12 @@ def parse(self, args: list[str], addopts: bool = True) -> None: self.known_args_namespace = self._parser.parse_known_args( args, namespace=copy.copy(self.option) ) + if addopts: + # addopts may have added overrides (especially via OverrideIniAction). + # The thing can be endlessly circular but we only do one level (#14442). + if overrides := parse_override_ini(self.known_args_namespace.override_ini): + self._inicfg.update(overrides) + self._inicache.clear() self._checkversion() self._consider_importhook() self._configure_python_path() diff --git a/testing/test_config.py b/testing/test_config.py index 296461c12fc..8026c108db0 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -475,16 +475,21 @@ def test_silence_unknown_key_warning(self, pytester: Pytester) -> None: result = pytester.runpytest() result.stdout.no_fnmatch_line("*PytestConfigWarning*") - @pytest.mark.parametrize("option_name", ["strict_config", "strict"]) - def test_strict_config_ini_option( - self, pytester: Pytester, option_name: str - ) -> None: + @pytest.mark.parametrize( + "option", + [ + "strict_config = true", + "strict = true", + "addopts = --strict-config", + ], + ) + def test_strict_config_ini_option(self, pytester: Pytester, option: str) -> None: """Test that strict_config and strict ini options enable strict config checking.""" pytester.makeini( f""" [pytest] unknown_option = 1 - {option_name} = True + {option} """ ) result = pytester.runpytest() diff --git a/testing/test_mark.py b/testing/test_mark.py index 7ae82fefd3c..fd1e92a88cd 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -184,11 +184,16 @@ def test_hello(): @pytest.mark.parametrize( - "option_name", ["--strict-markers", "--strict", "strict_markers", "strict"] + "option", + [ + "--strict-markers", + "--strict", + "strict_markers = true", + "strict = true", + "addopts = --strict-markers", + ], ) -def test_strict_prohibits_unregistered_markers( - pytester: Pytester, option_name: str -) -> None: +def test_strict_prohibits_unregistered_markers(pytester: Pytester, option: str) -> None: pytester.makepyfile( """ import pytest @@ -197,16 +202,16 @@ def test_hello(): pass """ ) - if option_name in ("strict_markers", "strict"): + if option.startswith("-"): + result = pytester.runpytest(option) + else: pytester.makeini( f""" [pytest] - {option_name} = true + {option} """ ) result = pytester.runpytest() - else: - result = pytester.runpytest(option_name) assert result.ret != 0 result.stdout.fnmatch_lines( ["'unregisteredmark' not found in `markers` configuration option"] From b10612810dc6f3614385f6456ddc5e7c8277e15b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 12:49:29 +0200 Subject: [PATCH 290/307] build(deps): Bump django in /testing/plugins_integration (#14450) Bumps [django](https://github.com/django/django) from 6.0.4 to 6.0.5. - [Commits](https://github.com/django/django/compare/6.0.4...6.0.5) --- updated-dependencies: - dependency-name: django dependency-version: 6.0.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- testing/plugins_integration/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/plugins_integration/requirements.txt b/testing/plugins_integration/requirements.txt index cb130820c74..a8e90b4af0a 100644 --- a/testing/plugins_integration/requirements.txt +++ b/testing/plugins_integration/requirements.txt @@ -1,5 +1,5 @@ anyio[trio]==4.13.0 -django==6.0.4 +django==6.0.5 pytest-asyncio==1.3.0 pytest-bdd==8.1.0 pytest-cov==7.1.0 From 09f969fefcd3ccc29461b6a1b41211ff62c879e4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 10 May 2026 06:39:14 +0000 Subject: [PATCH 291/307] [automated] Update plugin list (#14455) Co-authored-by: pytest bot --- doc/en/reference/plugin_list.rst | 220 +++++++++++++++++++------------ 1 file changed, 134 insertions(+), 86 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 12c151e76b3..92bd56668af 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7 :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A - :pypi:`pytest-abstracts` A contextmanager pytest fixture for handling multiple mock abstracts May 25, 2022 N/A N/A + :pypi:`pytest-abstracts` A pytest fixture for testing abstract interface implementations May 09, 2026 4 - Beta pytest>=3.5.0 :pypi:`pytest-accept` Mar 01, 2026 N/A pytest>=7 :pypi:`pytest-adaptavist` pytest plugin for generating test execution results within Jira Test Management (tm4j) Oct 13, 2022 N/A pytest (>=5.4.0) :pypi:`pytest-adaptavist-fixed` pytest plugin for generating test execution results within Jira Test Management (tm4j) Jan 17, 2025 N/A pytest>=5.4.0 @@ -59,6 +59,7 @@ This list contains 1965 plugins. :pypi:`pytest-agent-evals` Pytest plugin for evaluating AI Agents Mar 13, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-agentharness` Open-source test harness for AI agents that take real-world actions. Apr 20, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-health` Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. Apr 03, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-agentkit` Pytest plugin for testing AI agents — mock LLMs, assert tool calls, track tokens, regression-test prompts. May 03, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-agent-observability` pytest plugin that uploads LiveKit-agents eval results to agent-observability Apr 27, 2026 N/A pytest>=7.0 :pypi:`pytest-agents` Pytest plugin framework with AI agent capabilities for multi-agent testing Feb 20, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-aggreport` pytest plugin for pytest-repeat that generate aggregate report of the same test cases with additional statistics details. Mar 07, 2021 4 - Beta pytest (>=6.2.2) @@ -101,14 +102,14 @@ This list contains 1965 plugins. :pypi:`pytest-ansible-playbook` Pytest fixture which runs given ansible playbook file. Mar 08, 2019 4 - Beta N/A :pypi:`pytest-ansible-playbook-runner` Pytest fixture which runs given ansible playbook file. Dec 02, 2020 4 - Beta pytest (>=3.1.0) :pypi:`pytest-ansible-units` A pytest plugin for running unit tests within an ansible collection Apr 14, 2022 N/A N/A - :pypi:`pytest-antilru` Bust functools.lru_cache when running pytest to avoid test pollution Jul 28, 2024 5 - Production/Stable pytest>=7; python_version >= "3.10" + :pypi:`pytest-antilru` Bust functools.lru_cache when running pytest to avoid test pollution May 03, 2026 5 - Production/Stable pytest<9,>=3; python_version == "3.9" :pypi:`pytest-anyio` The pytest anyio plugin is built into anyio. You don't need this package. Jun 29, 2021 N/A pytest :pypi:`pytest-anything` Pytest fixtures to assert anything and something Jan 18, 2024 N/A pytest :pypi:`pytest-aoc` Downloads puzzle inputs for Advent of Code and synthesizes PyTest fixtures Dec 02, 2023 5 - Production/Stable pytest ; extra == 'test' :pypi:`pytest-aoreporter` pytest report Jun 27, 2022 N/A N/A :pypi:`pytest-api` An ASGI middleware to populate OpenAPI Specification examples from pytest functions May 12, 2022 N/A pytest (>=7.1.1,<8.0.0) :pypi:`pytest-apibean` Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. Dec 30, 2025 N/A pytest - :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks Apr 14, 2026 N/A pytest>=6.0.0 + :pypi:`pytest-api-cov` Pytest Plugin to provide API Coverage statistics for Python Web Frameworks May 04, 2026 N/A pytest>=6.0.0 :pypi:`pytest-api-coverage` Pytest plugin for API test coverage analysis Mar 24, 2026 3 - Alpha pytest>=7.0.0 :pypi:`pytest-api-framework` pytest framework Jun 22, 2025 N/A pytest==7.2.2 :pypi:`pytest-api-framework-alpha` Apr 14, 2026 N/A pytest==7.2.2 @@ -119,14 +120,14 @@ This list contains 1965 plugins. :pypi:`pytest-appengine` AppEngine integration that works well with pytest-django Feb 27, 2017 N/A N/A :pypi:`pytest-appium` Pytest plugin for appium Dec 05, 2019 N/A N/A :pypi:`pytest-appium-scheduler` Pytest plugin for Appium device scheduling and driver lifecycle management. Apr 13, 2026 N/A pytest>=7.0 - :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. Apr 24, 2026 N/A pytest>=9.0.3 + :pypi:`pytest-approval` A simple approval test library utilizing external diff programs such as PyCharm and Visual Studio Code to compare approved and received output. May 05, 2026 N/A pytest>=9.0.3 :pypi:`pytest-approvaltests` A plugin to use approvaltests with pytest May 08, 2022 4 - Beta pytest (>=7.0.1) :pypi:`pytest-approvaltests-geo` Extension for ApprovalTests.Python specific to geo data verification Apr 29, 2026 5 - Production/Stable pytest :pypi:`pytest-archon` Rule your architecture like a real developer Sep 19, 2025 5 - Production/Stable pytest>=7.2 :pypi:`pytest-argus` pyest results colection plugin Jun 24, 2021 5 - Production/Stable pytest (>=6.2.4) - :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus Mar 03, 2026 4 - Beta pytest~=9.0.0; extra == "dev" + :pypi:`pytest-argus-reporter` A simple plugin to report results of test into argus May 07, 2026 4 - Beta pytest~=9.0.0; extra == "dev" :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 05, 2026 4 - Beta pytest>=6.2.0 - :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing Apr 15, 2026 3 - Alpha pytest + :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing May 04, 2026 3 - Alpha pytest :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 :pypi:`pytest-artifacts` Pytest plugin for managing test artifacts Apr 17, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 @@ -204,11 +205,11 @@ This list contains 1965 plugins. :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics Apr 17, 2026 3 - Alpha pytest>=9.0.0 + :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics May 09, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest :pypi:`pytest-beartype-tests` Pytest plugin that applies @beartype to every collected test function. Apr 26, 2026 4 - Beta pytest>=8 - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests May 01, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests May 08, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A :pypi:`pytest-beehave` A pytest plugin that runs acceptance criteria stub generation as part of the pytest lifecycle, with auto-ID assignment and generic step docstrings Apr 21, 2026 4 - Beta pytest>=9.0.3; extra == "dev" :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A @@ -230,6 +231,7 @@ This list contains 1965 plugins. :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 16, 2025 N/A pytest :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A + :pypi:`pytest-bluezenv` pytest BlueZ environment plugin May 09, 2026 3 - Alpha pytest>=8 :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest :pypi:`pytest-bods-v04-fixtures` Pytest plugin providing a parametrized fixture over the canonical BODS v0.4 fixtures pack Apr 20, 2026 N/A pytest>=7.0 @@ -332,7 +334,7 @@ This list contains 1965 plugins. :pypi:`pytest-cloud` Distributed tests planner plugin for pytest testing framework. Oct 05, 2020 6 - Mature N/A :pypi:`pytest-cloudflare-worker` pytest plugin for testing cloudflare workers Mar 30, 2021 4 - Beta pytest (>=6.0.0) :pypi:`pytest-cloudist` Distribute tests to cloud machines without fuss Sep 02, 2022 4 - Beta pytest (>=7.1.2,<8.0.0) - :pypi:`pytest-cloudreport` pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. Apr 29, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-cloudreport` pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards. May 04, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-cmake` Provide CMake module for Pytest Jan 03, 2026 N/A pytest<10,>=4 :pypi:`pytest-cmake-presets` Execute CMake Presets via pytest Dec 26, 2022 N/A pytest (>=7.2.0,<8.0.0) :pypi:`pytest-cmdline-add-args` Pytest plugin for custom argument handling and Allure reporting. This plugin allows you to add arguments before running a test. Sep 01, 2024 N/A N/A @@ -380,6 +382,7 @@ This list contains 1965 plugins. :pypi:`pytest-couchdbkit` py.test extension for per-test couchdb databases using couchdbkit Apr 17, 2012 N/A N/A :pypi:`pytest-count` count erros and send email Jan 12, 2018 4 - Beta N/A :pypi:`pytest-cov` Pytest plugin for measuring coverage. Mar 21, 2026 5 - Production/Stable pytest>=7 + :pypi:`pytest-cov-affected` Run pytest and report coverage only for git-affected modules. May 03, 2026 N/A pytest>=8 :pypi:`pytest-cov-container` Pytest plugin to collect code coverage from applications running inside Docker containers Mar 23, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A @@ -470,7 +473,7 @@ This list contains 1965 plugins. :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest - :pypi:`pytest-devtools` Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. Feb 10, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-devtools` Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. May 07, 2026 N/A pytest>=7 :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Nov 23, 2025 N/A pytest :pypi:`pytest-dhos` Common fixtures for pytest in DHOS services and libraries Sep 07, 2022 N/A N/A :pypi:`pytest-diamond` pytest plugin for diamond Aug 31, 2015 4 - Beta N/A @@ -523,7 +526,7 @@ This list contains 1965 plugins. :pypi:`pytest-docker-compose` Manages Docker containers during your integration tests Jan 26, 2021 5 - Production/Stable pytest (>=3.3) :pypi:`pytest-docker-compose-v2` Manages Docker containers during your integration tests Dec 17, 2025 4 - Beta pytest<10,>=7.2.2 :pypi:`pytest-docker-db` A plugin to use docker databases for pytests Mar 20, 2021 5 - Production/Stable pytest (>=3.1.1) - :pypi:`pytest-docker-fixtures` pytest docker fixtures Apr 20, 2026 3 - Alpha pytest + :pypi:`pytest-docker-fixtures` pytest docker fixtures May 07, 2026 3 - Alpha pytest :pypi:`pytest-docker-git-fixtures` Pytest fixtures for testing with git scm. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-haproxy-fixtures` Pytest fixtures for testing with haproxy. Aug 12, 2024 4 - Beta pytest :pypi:`pytest-docker-pexpect` pytest plugin for writing functional tests with pexpect and docker Jan 14, 2019 N/A pytest @@ -555,7 +558,7 @@ This list contains 1965 plugins. :pypi:`pytest-dpg` pytest-dpg is a pytest plugin for testing Dear PyGui (DPG) applications Aug 13, 2024 N/A N/A :pypi:`pytest-draw` Pytest plugin for randomly selecting a specific number of tests Mar 21, 2023 3 - Alpha pytest :pypi:`pytest-drf` A Django REST framework plugin for pytest. Jul 12, 2022 5 - Production/Stable pytest (>=3.7) - :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison Apr 26, 2026 N/A pytest>=7.0 + :pypi:`pytest-drift` Pytest plugin for regression testing via branch comparison May 09, 2026 N/A pytest>=7.0 :pypi:`pytest-drill-sergeant` A pytest plugin that enforces test quality standards through automatic marker detection and AAA structure validation Feb 20, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-drivings` Tool to allow webdriver automation to be ran locally or remotely Jan 13, 2021 N/A N/A :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 @@ -591,7 +594,7 @@ This list contains 1965 plugins. :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Mar 02, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli May 01, 2026 N/A pytest>=8 + :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli May 08, 2026 N/A pytest>=8 :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Mar 02, 2026 5 - Production/Stable N/A :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Mar 02, 2026 5 - Production/Stable N/A :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Mar 02, 2026 5 - Production/Stable N/A @@ -634,11 +637,11 @@ This list contains 1965 plugins. :pypi:`pytest_evm` The testing package containing tools to test Web3-based projects Sep 23, 2024 4 - Beta pytest<9.0.0,>=8.1.1 :pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A :pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. May 06, 2025 N/A pytest>=7 - :pypi:`pytest-exasol-backend` Mar 03, 2026 N/A pytest<9,>=7 - :pypi:`pytest-exasol-extension` Feb 06, 2026 N/A pytest<9,>=7 + :pypi:`pytest-exasol-backend` May 05, 2026 N/A pytest<10,>=7 + :pypi:`pytest-exasol-extension` May 05, 2026 N/A pytest<10,>=7 :pypi:`pytest-exasol-itde` Nov 22, 2024 N/A pytest<9,>=7 :pypi:`pytest-exasol-saas` Nov 22, 2024 N/A pytest<9,>=7 - :pypi:`pytest-exasol-slc` Mar 17, 2026 N/A pytest<9,>=7 + :pypi:`pytest-exasol-slc` May 05, 2026 N/A pytest<10,>=7 :pypi:`pytest-excel` pytest plugin for generating excel reports Jul 22, 2025 5 - Production/Stable pytest :pypi:`pytest-exceptional` Better exceptions Mar 16, 2017 4 - Beta N/A :pypi:`pytest-exception-script` Walk your code through exception script to check it's resiliency to failures. Aug 04, 2020 3 - Alpha pytest @@ -700,7 +703,7 @@ This list contains 1965 plugins. :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 10, 2026 N/A pytest>=7.0 :pypi:`pytest-fixedpoint` Pytest plugin for recording and replaying deterministic function calls Mar 12, 2026 N/A pytest>=7.0 - :pypi:`pytest-fixkit` A very micro http framework. Apr 20, 2026 5 - Production/Stable pytest + :pypi:`pytest-fixkit` A very micro http framework. May 08, 2026 5 - Production/Stable pytest :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A @@ -738,7 +741,7 @@ This list contains 1965 plugins. :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer Apr 26, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer May 06, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -794,7 +797,7 @@ This list contains 1965 plugins. :pypi:`pytest-gitscope` A pragmatic pytest plugin that runs only the tests that matter, and ship faster Sep 24, 2025 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-git-selector` Utility to select tests that have had its dependencies modified (as identified by git diff) Nov 17, 2022 N/A N/A :pypi:`pytest-glamor-allure` Extends allure-pytest functionality Jan 30, 2026 5 - Production/Stable pytest<=9.0.2 - :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. Apr 29, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-glaze` A thin, transparent coat that makes your test output shine. May 08, 2026 5 - Production/Stable pytest>=7.0 :pypi:`pytest-glow-report` Beautiful, glowing HTML test reports for PyTest and unittest. Dec 08, 2025 4 - Beta pytest>=6.0; extra == "dev" :pypi:`pytest-gnupg-fixtures` Pytest fixtures for testing with gnupg. Mar 04, 2021 4 - Beta pytest :pypi:`pytest-golden` Plugin for pytest that offloads expected outputs to data files Jan 06, 2026 5 - Production/Stable pytest>=6.1.2 @@ -834,8 +837,8 @@ This list contains 1965 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 30, 2026 3 - Alpha pytest==9.0.3 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 29, 2026 3 - Alpha pytest==9.0.3 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components May 09, 2026 3 - Alpha pytest==9.0.3 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components May 09, 2026 3 - Alpha pytest==9.0.3 :pypi:`pytest-Honda-report` Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends Apr 11, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A @@ -853,7 +856,7 @@ This list contains 1965 plugins. :pypi:`pytest-html-merger` Pytest HTML reports merging utility Jul 12, 2024 N/A N/A :pypi:`pytest-html-nova-act` A Pytest Plugin for Amazon Nova Act Python SDK. Mar 30, 2026 N/A N/A :pypi:`pytest-html-object-storage` Pytest report plugin for send HTML report on object-storage Jan 17, 2024 5 - Production/Stable N/A - :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. Apr 12, 2026 5 - Production/Stable N/A + :pypi:`pytest-html-plus` Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready. May 07, 2026 5 - Production/Stable N/A :pypi:`pytest-html-profiling` Pytest plugin for generating HTML reports with per-test profiling and optionally call graph visualizations. Based on pytest-html by Dave Hunt. Feb 11, 2020 5 - Production/Stable pytest (>=3.0) :pypi:`pytest-html-report` Enhanced HTML reporting for pytest with categories, specifications, and detailed logging Jun 24, 2025 4 - Beta pytest>=6.0 :pypi:`pytest-html-report-builder` A pytest plugin that generates self-contained HTML automation reports with visual charts. Apr 22, 2026 N/A pytest>=7.0 @@ -949,7 +952,7 @@ This list contains 1965 plugins. :pypi:`pytest-item-dict` Get a hierarchical dict of session.items Nov 14, 2024 4 - Beta pytest>=8.3.0 :pypi:`pytest-iterassert` Nicer list and iterable assertion messages for pytest May 11, 2020 3 - Alpha N/A :pypi:`pytest-iteration` Add iteration mark for tests Aug 22, 2024 N/A pytest - :pypi:`pytest-iters` A contextmanager pytest fixture for handling multiple mock iters May 24, 2022 N/A N/A + :pypi:`pytest-iters` A contextmanager pytest fixture for handling multiple mock iters May 09, 2026 4 - Beta pytest>=3.5.0 :pypi:`pytest_jar_yuan` A allure and pytest used package Dec 12, 2022 N/A N/A :pypi:`pytest-jasmine` Run jasmine tests from your pytest test suite Nov 04, 2017 1 - Planning N/A :pypi:`pytest-jax-bench` Pytest plugin to profile jitted JAX functions (compile time, runtime, memory). Apr 06, 2026 N/A pytest>=7 @@ -1101,10 +1104,11 @@ This list contains 1965 plugins. :pypi:`pytest-maybe-raises` Pytest fixture for optional exception testing. May 27, 2022 N/A pytest ; extra == 'dev' :pypi:`pytest-mccabe` pytest plugin to run the mccabe code complexity checker. Jul 22, 2020 3 - Alpha pytest (>=5.4.0) :pypi:`pytest-mcp` Pytest-style framework for evaluating Model Context Protocol (MCP) servers. Jul 07, 2025 N/A pytest>=8.4.0 - :pypi:`pytest-mcp-assert` pytest plugin for mcp-assert: run MCP server assertions as pytest test items May 02, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-mcp-assert` pytest plugin for mcp-assert: run MCP server assertions as pytest test items May 10, 2026 4 - Beta pytest>=7.0 + :pypi:`pytest-mcp-plugin` pytest for MCP servers — the testing framework for the Model Context Protocol May 05, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-mcp-tools` \`pytest --mcp-tools\` an opinionated black box tester to call a live MCP server and test it live against its own contracts Apr 25, 2026 N/A pytest>=7.0.0; extra == "test" :pypi:`pytest-md` Plugin for generating Markdown reports for pytest results Jul 11, 2019 3 - Alpha pytest (>=4.2.1) - :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 02, 2025 4 - Beta pytest!=6.0.0,<9,>=3.3.2 + :pypi:`pytest-md-report` A pytest plugin to generate test outcomes reports with markdown table format. May 04, 2026 4 - Beta pytest!=6.0.0,<10,>=3.3.2 :pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Oct 08, 2024 N/A pytest>=7.4.3 :pypi:`pytest-memlog` Log memory usage during tests May 03, 2023 N/A pytest (>=7.3.0,<8.0.0) :pypi:`pytest-memprof` Estimates memory consumption of test functions Mar 29, 2019 4 - Beta N/A @@ -1120,6 +1124,7 @@ This list contains 1965 plugins. :pypi:`pytest-metrics` Custom metrics report for pytest Apr 04, 2020 N/A pytest :pypi:`pytest-mfd-config` Pytest Plugin that handles test and topology configs and all their belongings like helper fixtures. Jul 11, 2025 N/A pytest<9,>=7.2.1 :pypi:`pytest-mfd-logging` Module for handling PyTest logging. Nov 14, 2025 N/A pytest<9,>=7.2.1 + :pypi:`pytest-mg` A tiny plugin for pytest which runs MongoDB in Docker May 08, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-mh` Pytest multihost plugin Oct 16, 2025 N/A pytest :pypi:`pytest-mimesis` Mimesis integration with the pytest test runner Mar 21, 2020 5 - Production/Stable pytest (>=4.2) :pypi:`pytest-mimic` Easily record function calls while testing Apr 24, 2025 4 - Beta pytest>=6.2.0 @@ -1129,7 +1134,7 @@ This list contains 1965 plugins. :pypi:`pytest-mirror` A pluggy-based pytest plugin and CLI tool for ensuring your test suite mirrors your source code structure Jul 30, 2025 4 - Beta N/A :pypi:`pytest-missing-fixtures` Pytest plugin that creates missing fixtures Oct 14, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-missing-modules` Pytest plugin to easily fake missing modules Nov 17, 2025 N/A pytest>=8.3.2 - :pypi:`pytest-mitmproxy` pytest plugin for mitmproxy tests Nov 13, 2024 N/A pytest>=7.0 + :pypi:`pytest-mitmproxy` pytest plugin for mitmproxy tests May 09, 2026 N/A pytest>=7.0 :pypi:`pytest-mitmproxy-plugin` Use MITM Proxy in autotests with full control from code Apr 10, 2025 4 - Beta pytest>=7.2.0 :pypi:`pytest-ml` Test your machine learning! May 04, 2019 4 - Beta N/A :pypi:`pytest-mocha` pytest plugin to display test execution output like a mochajs Apr 02, 2020 4 - Beta pytest (>=5.4.0) @@ -1202,7 +1207,7 @@ This list contains 1965 plugins. :pypi:`pytest-nginx-iplweb` nginx fixture for pytest - iplweb temporary fork Mar 01, 2019 5 - Production/Stable N/A :pypi:`pytest-ngrok` Jan 20, 2022 3 - Alpha pytest :pypi:`pytest-ngsfixtures` pytest ngs fixtures Sep 06, 2019 2 - Pre-Alpha pytest (>=5.0.0) - :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies Apr 20, 2026 N/A pytest<10.0.0,>=9.0.0 + :pypi:`pytest-nhsd-apim` Pytest plugin accessing NHSDigital's APIM proxies May 07, 2026 N/A pytest<10.0.0,>=8.2.0 :pypi:`pytest-nice` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest :pypi:`pytest-nice-parametrize` A small snippet for nicer PyTest's Parametrize Apr 17, 2021 5 - Production/Stable N/A :pypi:`pytest_nlcov` Pytest plugin to get the coverage of the new lines (based on git diff) only Aug 05, 2024 N/A N/A @@ -1228,7 +1233,7 @@ This list contains 1965 plugins. :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-odoo` py.test plugin to run Odoo tests May 20, 2025 5 - Production/Stable pytest>=8 :pypi:`pytest-odoo-fixtures` Project description Jun 25, 2019 N/A N/A - :pypi:`pytest-oduit` py.test plugin to run Odoo tests Feb 11, 2026 5 - Production/Stable pytest>=8 + :pypi:`pytest-oduit` py.test plugin to run Odoo tests May 09, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-oerp` pytest plugin to test OpenERP modules Feb 28, 2012 3 - Alpha N/A :pypi:`pytest-offline` Mar 09, 2023 1 - Planning pytest (>=7.0.0,<8.0.0) :pypi:`pytest-ogsm-plugin` 针对特定项目定制化插件,优化了pytest报告展示方式,并添加了项目所需特定参数 May 16, 2023 N/A N/A @@ -1282,7 +1287,7 @@ This list contains 1965 plugins. :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A :pypi:`pytest-patch` An automagic \`patch\` fixture that can patch objects directly or by name. Apr 29, 2023 3 - Alpha pytest (>=7.0.0) - :pypi:`pytest-patches` A contextmanager pytest fixture for handling multiple mock patches Aug 30, 2021 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-patches` A contextmanager pytest fixture for handling multiple mock patches May 09, 2026 4 - Beta pytest>=3.5.0 :pypi:`pytest-patterns` pytest plugin to make testing complicated long string output easy to write and easy to debug Oct 22, 2024 4 - Beta pytest>=6 :pypi:`pytest-pdb` pytest plugin which adds pdb helper commands related to pytest. Jul 31, 2018 N/A N/A :pypi:`pytest-peach` pytest plugin for fuzzing with Peach API Security Apr 12, 2019 4 - Beta pytest (>=2.8.7) @@ -1296,7 +1301,7 @@ This list contains 1965 plugins. :pypi:`pytest-performancetotal` A performance plugin for pytest Mar 24, 2026 5 - Production/Stable N/A :pypi:`pytest-persistence` Pytest tool for persistent objects Aug 21, 2024 N/A N/A :pypi:`pytest-pexpect` Pytest pexpect plugin. Sep 10, 2025 4 - Beta pytest>=6.2.0 - :pypi:`pytest-pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 01, 2026 5 - Production/Stable pytest>=8.0 + :pypi:`pytest_pg` A tiny plugin for pytest which runs PostgreSQL in Docker May 07, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-pgsql` Pytest plugins and helpers for tests using a Postgres database. May 13, 2020 5 - Production/Stable pytest (>=3.0.0) :pypi:`pytest-pgtap` Pytest plugin for running pgTAP tests Apr 28, 2026 3 - Alpha N/A :pypi:`pytest-phmdoctest` pytest plugin to test Python examples in Markdown using phmdoctest. Apr 15, 2022 4 - Beta pytest (>=5.4.3) @@ -1320,7 +1325,7 @@ This list contains 1965 plugins. :pypi:`pytest-playwright-artifacts` Capture screenshots, HTML, and console logs on Playwright test failures Mar 23, 2026 N/A N/A :pypi:`pytest_playwright_async` ASYNC Pytest plugin for Playwright Sep 28, 2024 N/A N/A :pypi:`pytest-playwright-asyncio` A pytest wrapper with async fixtures for Playwright to automate web browsers Nov 24, 2025 N/A pytest<10.0.0,>=6.2.4 - :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. Apr 17, 2026 5 - Production/Stable N/A + :pypi:`pytest-playwright-axe` An axe-core integration for accessibility testing using Playwright Python. May 09, 2026 5 - Production/Stable N/A :pypi:`pytest-playwright-enhanced` A pytest plugin for playwright python Mar 24, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-playwright-json` Generate Playwright-compatible JSON reports from pytest-playwright test runs Jan 06, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-playwrights` A pytest wrapper with fixtures for Playwright to automate web browsers Dec 02, 2021 N/A N/A @@ -1332,7 +1337,7 @@ This list contains 1965 plugins. :pypi:`pytest-plt` Fixtures for quickly making Matplotlib plots in tests Jan 17, 2024 5 - Production/Stable pytest :pypi:`pytest-plugin-helpers` A plugin to help developing and testing other plugins Nov 23, 2019 4 - Beta pytest (>=3.5.0) :pypi:`pytest-plugins` A Python package for managing pytest plugins. Apr 05, 2026 5 - Production/Stable pytest>=9.0.1 - :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins Mar 26, 2026 N/A N/A + :pypi:`pytest-plugin-utils` Reusable configuration and artifact utilities for building pytest plugins May 04, 2026 N/A N/A :pypi:`pytest-plus` PyTest Plus Plugin :: extends pytest functionality Feb 02, 2025 5 - Production/Stable pytest>=7.4.2 :pypi:`pytest-pmisc` Mar 21, 2019 5 - Production/Stable N/A :pypi:`pytest-podman` Pytest plugin for Podman integration Feb 03, 2026 N/A N/A @@ -1463,7 +1468,7 @@ This list contains 1965 plugins. :pypi:`pytest-regex` Select pytest tests with regular expressions May 29, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-regex-dependency` Management of Pytest dependencies via regex patterns Jun 12, 2022 N/A pytest :pypi:`pytest-regressions` Easy to use fixtures to write regression tests. Feb 10, 2026 5 - Production/Stable pytest>=6.2.0 - :pypi:`pytest-regtest` pytest plugin for snapshot regression testing Apr 20, 2026 N/A pytest>7.2 + :pypi:`pytest-regtest` pytest plugin for snapshot regression testing May 05, 2026 N/A pytest>7.2 :pypi:`pytest-relative-order` a pytest plugin that sorts tests using "before" and "after" markers May 17, 2021 4 - Beta N/A :pypi:`pytest-relative-path` Handle relative path in pytest options or ini configs Nov 13, 2025 N/A pytest :pypi:`pytest-relaxed` Relaxed test discovery/organization for pytest Mar 29, 2024 5 - Production/Stable pytest>=7 @@ -1770,13 +1775,14 @@ This list contains 1965 plugins. :pypi:`pytest-testbook` A plugin to run tests written in Jupyter notebook Dec 11, 2016 3 - Alpha N/A :pypi:`pytest-test-categories` A pytest plugin to enforce test timing constraints and size distributions. Mar 04, 2026 5 - Production/Stable pytest>=8.4.2 :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) + :pypi:`pytest-testcontainers` Named pytest fixtures and a maker convention on top of testcontainers-python. May 08, 2026 4 - Beta pytest<9,>=7.4 :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 11, 2026 N/A N/A :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) :pypi:`pytest-test-grouping` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Feb 01, 2023 5 - Production/Stable pytest (>=2.5) :pypi:`pytest-test-groups` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. May 08, 2025 5 - Production/Stable pytest>=7.0.0 - :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. Mar 13, 2026 4 - Beta pytest>=7 + :pypi:`pytest-testinel` Testinel’s pytest plugin captures structured test execution data directly from pytest and sends it to Testinel, where your test results become searchable, comparable, and actually useful. May 08, 2026 4 - Beta pytest>=7 :pypi:`pytest-testinfra` Test infrastructures Mar 30, 2025 5 - Production/Stable pytest>=6 :pypi:`pytest-testinfra-jpic` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A :pypi:`pytest-testinfra-winrm-transport` Test infrastructures Sep 21, 2023 5 - Production/Stable N/A @@ -1931,7 +1937,7 @@ This list contains 1965 plugins. :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A - :pypi:`pytest-web` Local web UI for running and monitoring pytest suites May 02, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-web` Local web UI for running and monitoring pytest suites May 09, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 @@ -2047,11 +2053,11 @@ This list contains 1965 plugins. Pytest integration for the ABQ universal test runner. :pypi:`pytest-abstracts` - *last release*: May 25, 2022, - *status*: N/A, - *requires*: N/A + *last release*: May 09, 2026, + *status*: 4 - Beta, + *requires*: pytest>=3.5.0 - A contextmanager pytest fixture for handling multiple mock abstracts + A pytest fixture for testing abstract interface implementations :pypi:`pytest-accept` *last release*: Mar 01, 2026, @@ -2179,6 +2185,13 @@ This list contains 1965 plugins. Catch silent agent failures in CI. Behavior lint for LLM agents, powered by agent-failure-debugger. + :pypi:`pytest-agentkit` + *last release*: May 03, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + Pytest plugin for testing AI agents — mock LLMs, assert tool calls, track tokens, regression-test prompts. + :pypi:`pytest-agent-observability` *last release*: Apr 27, 2026, *status*: N/A, @@ -2474,9 +2487,9 @@ This list contains 1965 plugins. A pytest plugin for running unit tests within an ansible collection :pypi:`pytest-antilru` - *last release*: Jul 28, 2024, + *last release*: May 03, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=7; python_version >= "3.10" + *requires*: pytest<9,>=3; python_version == "3.9" Bust functools.lru_cache when running pytest to avoid test pollution @@ -2523,7 +2536,7 @@ This list contains 1965 plugins. Pytest plugin providing apibean-based API testing fixtures integrated with apibean-client, designed for testing apibean REST services and datacore backends. :pypi:`pytest-api-cov` - *last release*: Apr 14, 2026, + *last release*: May 04, 2026, *status*: N/A, *requires*: pytest>=6.0.0 @@ -2600,7 +2613,7 @@ This list contains 1965 plugins. Pytest plugin for Appium device scheduling and driver lifecycle management. :pypi:`pytest-approval` - *last release*: Apr 24, 2026, + *last release*: May 05, 2026, *status*: N/A, *requires*: pytest>=9.0.3 @@ -2635,7 +2648,7 @@ This list contains 1965 plugins. pyest results colection plugin :pypi:`pytest-argus-reporter` - *last release*: Mar 03, 2026, + *last release*: May 07, 2026, *status*: 4 - Beta, *requires*: pytest~=9.0.0; extra == "dev" @@ -2649,7 +2662,7 @@ This list contains 1965 plugins. A plugin that provides a running Argus API server for tests :pypi:`pytest-arrakis` - *last release*: Apr 15, 2026, + *last release*: May 04, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3195,7 +3208,7 @@ This list contains 1965 plugins. :pypi:`pytest-beacon` - *last release*: Apr 17, 2026, + *last release*: May 09, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0.0 @@ -3223,7 +3236,7 @@ This list contains 1965 plugins. Pytest plugin that applies @beartype to every collected test function. :pypi:`pytest-bec-e2e` - *last release*: May 01, 2026, + *last release*: May 08, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3376,6 +3389,13 @@ This list contains 1965 plugins. A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. + :pypi:`pytest-bluezenv` + *last release*: May 09, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=8 + + pytest BlueZ environment plugin + :pypi:`pytest-board` *last release*: Jan 20, 2019, *status*: N/A, @@ -4091,7 +4111,7 @@ This list contains 1965 plugins. Distribute tests to cloud machines without fuss :pypi:`pytest-cloudreport` - *last release*: Apr 29, 2026, + *last release*: May 04, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 @@ -4426,6 +4446,13 @@ This list contains 1965 plugins. Pytest plugin for measuring coverage. + :pypi:`pytest-cov-affected` + *last release*: May 03, 2026, + *status*: N/A, + *requires*: pytest>=8 + + Run pytest and report coverage only for git-affected modules. + :pypi:`pytest-cov-container` *last release*: Mar 23, 2026, *status*: 3 - Alpha, @@ -5057,9 +5084,9 @@ This list contains 1965 plugins. DevPI server fixture for py.test :pypi:`pytest-devtools` - *last release*: Feb 10, 2026, + *last release*: May 07, 2026, *status*: N/A, - *requires*: pytest>=9.0.2 + *requires*: pytest>=7 Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. @@ -5428,7 +5455,7 @@ This list contains 1965 plugins. A plugin to use docker databases for pytests :pypi:`pytest-docker-fixtures` - *last release*: Apr 20, 2026, + *last release*: May 07, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -5652,7 +5679,7 @@ This list contains 1965 plugins. A Django REST framework plugin for pytest. :pypi:`pytest-drift` - *last release*: Apr 26, 2026, + *last release*: May 09, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -5904,7 +5931,7 @@ This list contains 1965 plugins. Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-arduino-cli` - *last release*: May 01, 2026, + *last release*: May 08, 2026, *status*: N/A, *requires*: pytest>=8 @@ -6205,16 +6232,16 @@ This list contains 1965 plugins. Pytest plugin for testing examples in docstrings and markdown files. :pypi:`pytest-exasol-backend` - *last release*: Mar 03, 2026, + *last release*: May 05, 2026, *status*: N/A, - *requires*: pytest<9,>=7 + *requires*: pytest<10,>=7 :pypi:`pytest-exasol-extension` - *last release*: Feb 06, 2026, + *last release*: May 05, 2026, *status*: N/A, - *requires*: pytest<9,>=7 + *requires*: pytest<10,>=7 @@ -6233,9 +6260,9 @@ This list contains 1965 plugins. :pypi:`pytest-exasol-slc` - *last release*: Mar 17, 2026, + *last release*: May 05, 2026, *status*: N/A, - *requires*: pytest<9,>=7 + *requires*: pytest<10,>=7 @@ -6667,7 +6694,7 @@ This list contains 1965 plugins. Pytest plugin for recording and replaying deterministic function calls :pypi:`pytest-fixkit` - *last release*: Apr 20, 2026, + *last release*: May 08, 2026, *status*: 5 - Production/Stable, *requires*: pytest @@ -6933,7 +6960,7 @@ This list contains 1965 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: Apr 26, 2026, + *last release*: May 06, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -7325,8 +7352,8 @@ This list contains 1965 plugins. Extends allure-pytest functionality :pypi:`pytest-glaze` - *last release*: Apr 29, 2026, - *status*: 4 - Beta, + *last release*: May 08, 2026, + *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A thin, transparent coat that makes your test output shine. @@ -7605,14 +7632,14 @@ This list contains 1965 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: Apr 30, 2026, + *last release*: May 09, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.3 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: Apr 29, 2026, + *last release*: May 09, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.3 @@ -7738,7 +7765,7 @@ This list contains 1965 plugins. Pytest report plugin for send HTML report on object-storage :pypi:`pytest-html-plus` - *last release*: Apr 12, 2026, + *last release*: May 07, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -8410,9 +8437,9 @@ This list contains 1965 plugins. Add iteration mark for tests :pypi:`pytest-iters` - *last release*: May 24, 2022, - *status*: N/A, - *requires*: N/A + *last release*: May 09, 2026, + *status*: 4 - Beta, + *requires*: pytest>=3.5.0 A contextmanager pytest fixture for handling multiple mock iters @@ -9474,12 +9501,19 @@ This list contains 1965 plugins. Pytest-style framework for evaluating Model Context Protocol (MCP) servers. :pypi:`pytest-mcp-assert` - *last release*: May 02, 2026, + *last release*: May 10, 2026, *status*: 4 - Beta, *requires*: pytest>=7.0 pytest plugin for mcp-assert: run MCP server assertions as pytest test items + :pypi:`pytest-mcp-plugin` + *last release*: May 05, 2026, + *status*: 4 - Beta, + *requires*: pytest>=7.0 + + pytest for MCP servers — the testing framework for the Model Context Protocol + :pypi:`pytest-mcp-tools` *last release*: Apr 25, 2026, *status*: N/A, @@ -9495,9 +9529,9 @@ This list contains 1965 plugins. Plugin for generating Markdown reports for pytest results :pypi:`pytest-md-report` - *last release*: May 02, 2025, + *last release*: May 04, 2026, *status*: 4 - Beta, - *requires*: pytest!=6.0.0,<9,>=3.3.2 + *requires*: pytest!=6.0.0,<10,>=3.3.2 A pytest plugin to generate test outcomes reports with markdown table format. @@ -9606,6 +9640,13 @@ This list contains 1965 plugins. Module for handling PyTest logging. + :pypi:`pytest-mg` + *last release*: May 08, 2026, + *status*: 5 - Production/Stable, + *requires*: pytest>=8.0 + + A tiny plugin for pytest which runs MongoDB in Docker + :pypi:`pytest-mh` *last release*: Oct 16, 2025, *status*: N/A, @@ -9670,7 +9711,7 @@ This list contains 1965 plugins. Pytest plugin to easily fake missing modules :pypi:`pytest-mitmproxy` - *last release*: Nov 13, 2024, + *last release*: May 09, 2026, *status*: N/A, *requires*: pytest>=7.0 @@ -10181,9 +10222,9 @@ This list contains 1965 plugins. pytest ngs fixtures :pypi:`pytest-nhsd-apim` - *last release*: Apr 20, 2026, + *last release*: May 07, 2026, *status*: N/A, - *requires*: pytest<10.0.0,>=9.0.0 + *requires*: pytest<10.0.0,>=8.2.0 Pytest plugin accessing NHSDigital's APIM proxies @@ -10363,7 +10404,7 @@ This list contains 1965 plugins. Project description :pypi:`pytest-oduit` - *last release*: Feb 11, 2026, + *last release*: May 09, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8 @@ -10741,9 +10782,9 @@ This list contains 1965 plugins. An automagic \`patch\` fixture that can patch objects directly or by name. :pypi:`pytest-patches` - *last release*: Aug 30, 2021, + *last release*: May 09, 2026, *status*: 4 - Beta, - *requires*: pytest (>=3.5.0) + *requires*: pytest>=3.5.0 A contextmanager pytest fixture for handling multiple mock patches @@ -10838,8 +10879,8 @@ This list contains 1965 plugins. Pytest pexpect plugin. - :pypi:`pytest-pg` - *last release*: May 01, 2026, + :pypi:`pytest_pg` + *last release*: May 07, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.0 @@ -11007,7 +11048,7 @@ This list contains 1965 plugins. A pytest wrapper with async fixtures for Playwright to automate web browsers :pypi:`pytest-playwright-axe` - *last release*: Apr 17, 2026, + *last release*: May 09, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -11091,7 +11132,7 @@ This list contains 1965 plugins. A Python package for managing pytest plugins. :pypi:`pytest-plugin-utils` - *last release*: Mar 26, 2026, + *last release*: May 04, 2026, *status*: N/A, *requires*: N/A @@ -12008,7 +12049,7 @@ This list contains 1965 plugins. Easy to use fixtures to write regression tests. :pypi:`pytest-regtest` - *last release*: Apr 20, 2026, + *last release*: May 05, 2026, *status*: N/A, *requires*: pytest>7.2 @@ -14156,6 +14197,13 @@ This list contains 1965 plugins. Test configuration plugin for pytest. + :pypi:`pytest-testcontainers` + *last release*: May 08, 2026, + *status*: 4 - Beta, + *requires*: pytest<9,>=7.4 + + Named pytest fixtures and a maker convention on top of testcontainers-python. + :pypi:`pytest-testcontainers-compose` *last release*: Feb 11, 2026, *status*: N/A, @@ -14199,7 +14247,7 @@ This list contains 1965 plugins. A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. :pypi:`pytest-testinel` - *last release*: Mar 13, 2026, + *last release*: May 08, 2026, *status*: 4 - Beta, *requires*: pytest>=7 @@ -15284,7 +15332,7 @@ This list contains 1965 plugins. Pytest plugin for testing WDL workflows. :pypi:`pytest-web` - *last release*: May 02, 2026, + *last release*: May 09, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 From d81a115afc5f4e5f1df49f6a0ebb9a5ee58be70e Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 10 May 2026 22:59:54 +0300 Subject: [PATCH 292/307] pastebin: deprecate `--pastebin` Fix #14434 --- changelog/14434.deprecation.rst | 3 +++ doc/en/deprecations.rst | 13 +++++++++++++ src/_pytest/deprecated.py | 6 ++++++ src/_pytest/pastebin.py | 4 ++++ testing/test_pastebin.py | 21 +++++++++++++++++++-- 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 changelog/14434.deprecation.rst diff --git a/changelog/14434.deprecation.rst b/changelog/14434.deprecation.rst new file mode 100644 index 00000000000..8f4454e76f8 --- /dev/null +++ b/changelog/14434.deprecation.rst @@ -0,0 +1,3 @@ +The :option:`--pastebin` option is now deprecated. +The same functionality is now available in an external plugin, :pypi:`pytest-pastebin`. +See :ref:`pastebin-deprecated` for more details. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index aa05f7ff611..73b04f03711 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -15,6 +15,19 @@ Below is a complete list of all pytest features which are considered deprecated. :class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters `. +.. _pastebin-deprecated: + +The ``--pastebin`` option +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 9.1 + +The :option:`--pastebin` option has been deprecated due to being very niche, being the only feature in core pytest relying on an external service and having low usage. + +The plugin which implements ``--pastebin`` has been extracted to a separate package, :pypi:`pytest-pastebin`. +Please install ``pytest-pastebin`` if you want to keep using ``--pastebin``. + + .. _dynamic-fixture-request-during-teardown: ``request.getfixturevalue()`` during fixture teardown diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index ec3f9fcbfd8..f25db4df287 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -75,6 +75,12 @@ "See https://docs.pytest.org/en/stable/deprecations.html#dynamic-fixture-request-during-teardown", ) +PASTEBIN = PytestRemovedIn10Warning( + "The --pastebin option is deprecated. " + "The functionality is now available in an external plugin package, pytest-pastebin.\n" + "See https://docs.pytest.org/en/stable/deprecations.html#the-pastebin-option" +) + # You want to make some `__init__` or function "private". # # def my_private_function(some, args): diff --git a/src/_pytest/pastebin.py b/src/_pytest/pastebin.py index c7b39d96f02..e6a1430220a 100644 --- a/src/_pytest/pastebin.py +++ b/src/_pytest/pastebin.py @@ -10,6 +10,7 @@ from _pytest.config import Config from _pytest.config import create_terminal_writer from _pytest.config.argparsing import Parser +from _pytest.deprecated import PASTEBIN from _pytest.stash import StashKey from _pytest.terminal import TerminalReporter import pytest @@ -33,6 +34,9 @@ def pytest_addoption(parser: Parser) -> None: @pytest.hookimpl(trylast=True) def pytest_configure(config: Config) -> None: + if config.option.pastebin: + config.issue_config_time_warning(PASTEBIN, 2) + if config.option.pastebin == "all": tr = config.pluginmanager.getplugin("terminalreporter") # If no terminal reporter plugin is present, nothing we can do here; diff --git a/testing/test_pastebin.py b/testing/test_pastebin.py index 9b928e00c06..0cf05c475b5 100644 --- a/testing/test_pastebin.py +++ b/testing/test_pastebin.py @@ -5,6 +5,7 @@ import io from unittest import mock +from _pytest.config import ExitCode from _pytest.monkeypatch import MonkeyPatch from _pytest.pytester import Pytester import pytest @@ -50,7 +51,13 @@ def test_skip(): pytest.skip("") """ ) - reprec = pytester.inline_run(testpath, "--pastebin=all", "-v") + reprec = pytester.inline_run( + testpath, + "--pastebin=all", + "-v", + "-W", + "ignore:The --pastebin:DeprecationWarning", + ) assert reprec.countoutcomes() == [1, 1, 1] assert len(pastebinlist) == 1 contents = pastebinlist[0].decode("utf-8") @@ -74,7 +81,11 @@ def test(): assert '☺' == 1 """ ) - result = pytester.runpytest("--pastebin=all") + result = pytester.runpytest( + "--pastebin=all", + "-W", + "ignore:The --pastebin:DeprecationWarning", + ) expected_msg = "*assert '☺' == 1*" result.stdout.fnmatch_lines( [ @@ -85,6 +96,12 @@ def test(): ) assert len(pastebinlist) == 1 + def test_deprecated(self, pytester: Pytester, pastebinlist) -> None: + result = pytester.runpytest("--pastebin=failed") + assert result.ret == ExitCode.NO_TESTS_COLLECTED + result.assert_outcomes() + result.stdout.fnmatch_lines(["*The --pastebin option is deprecated*"]) + class TestPaste: @pytest.fixture From fbab7c5dfe63a22f545207e8dc163ed61ad51d98 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 21:44:41 +0000 Subject: [PATCH 293/307] [pre-commit.ci] pre-commit autoupdate (#14464) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v1.20.2 → v2.0.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.20.2...v2.0.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e9cab1dceec..f3bc70c157d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.20.2 + rev: v2.0.0 hooks: - id: mypy files: ^(src/|testing/|scripts/) From 2c555d62fa2c51ccb0c4c1cdd6243149ce4ffa97 Mon Sep 17 00:00:00 2001 From: EternalRights <162705204+EternalRights@users.noreply.github.com> Date: Tue, 12 May 2026 17:24:12 +0800 Subject: [PATCH 294/307] fix approx rel for timedelta: accept float, compute rel * expected (#14466) Add validation for negative and NaN tolerances in ApproxTimedelta The PR forgot to validate rel and abs for timedelta the same way ApproxScalar does. Without these checks, a negative rel produces a negative timedelta tolerance that makes every comparison silently return False, and NaN rel throws a confusing error message. - Raise ValueError for negative rel - Raise ValueError for NaN rel - Raise ValueError for negative abs (timedelta) --- src/_pytest/python_api.py | 43 +++++++++++----- testing/python/approx.py | 100 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 126 insertions(+), 17 deletions(-) diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index f6d5e31a588..cc2a2b7126a 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -93,9 +93,11 @@ def __bool__(self): def __ne__(self, actual) -> bool: return not (actual == self) - def _approx_scalar(self, x) -> ApproxScalar: + def _approx_scalar(self, x) -> ApproxBase: if isinstance(x, Decimal): return ApproxDecimal(x, rel=self.rel, abs=self.abs, nan_ok=self.nan_ok) + if isinstance(x, (datetime, timedelta)): + return ApproxTimedelta(x, rel=self.rel, abs=self.abs, nan_ok=self.nan_ok) return ApproxScalar(x, rel=self.rel, abs=self.abs, nan_ok=self.nan_ok) def _yield_comparisons(self, actual): @@ -565,7 +567,7 @@ class ApproxTimedelta(ApproxBase): """Perform approximate comparisons where the expected value is a datetime or timedelta. - Requires an explicit tolerance as a timedelta. + Requires an explicit tolerance as a timedelta for abs, or a float for rel. Relative tolerance is not supported for datetime comparisons. """ @@ -585,20 +587,35 @@ def __init__(self, expected, rel=None, abs=None, nan_ok: bool = False) -> None: raise TypeError( "pytest.approx() requires an explicit tolerance for " "datetime/timedelta comparisons: " - "e.g. approx(expected, abs=timedelta(seconds=1))" + "e.g. approx(expected, abs=timedelta(seconds=1)) " + "or approx(expected, rel=0.01)" ) if abs is not None and not isinstance(abs, timedelta): raise TypeError( f"absolute tolerance for datetime/timedelta must be a " f"timedelta, got {type(abs).__name__}" ) - if rel is not None and not isinstance(rel, timedelta): - raise TypeError( - f"relative tolerance for timedelta must be a " - f"timedelta, got {type(rel).__name__}" - ) - tolerance = max(t for t in (abs, rel) if t is not None) - super().__init__(expected, rel=None, abs=tolerance, nan_ok=False) + if abs is not None and abs < timedelta(0): + raise ValueError(f"absolute tolerance can't be negative: {abs}") + if rel is not None: + if not isinstance(rel, (int, float)): + raise TypeError( + f"relative tolerance for timedelta must be a " + f"number, got {type(rel).__name__}" + ) + if rel < 0: + raise ValueError(f"relative tolerance can't be negative: {rel}") + if math.isnan(rel): + raise ValueError("relative tolerance can't be NaN.") + # Compute the effective tolerance. abs_tolerance is a timedelta, rel * expected + # gives a timedelta (timedelta * float works in Python). + abs_tolerance = abs + rel_tolerance = rel * builtins.abs(expected) if rel is not None else None + if abs_tolerance is not None and rel_tolerance is not None: + tolerance = max(abs_tolerance, rel_tolerance) + else: + tolerance = abs_tolerance if abs_tolerance is not None else rel_tolerance + super().__init__(expected, rel=rel, abs=tolerance, nan_ok=False) def __repr__(self) -> str: return f"{self.expected} ± {self.abs}" @@ -757,8 +774,10 @@ def approx( >>> dt1 == approx(dt2, abs=timedelta(seconds=1)) True - Note that ``rel`` is not supported for datetime comparisons, - and ``abs`` or ``rel`` must be explicitly provided as a ``timedelta`` object. + Note that ``rel`` is not supported for datetime comparisons. + For timedelta comparisons, ``rel`` is a number (not a timedelta) that + represents a relative tolerance -- a fraction of the expected value. + ``abs`` must be a ``timedelta`` object in both cases. .. versionadded:: 8.4 diff --git a/testing/python/approx.py b/testing/python/approx.py index 4369dc24ad4..88d46cbb755 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -1172,14 +1172,14 @@ def test_timedelta_rel_within_tolerance(self): td1 = timedelta(seconds=100) td2 = timedelta(seconds=100.5) - assert td1 == approx(td2, rel=timedelta(seconds=1)) + assert td1 == approx(td2, rel=0.01) def test_timedelta_rel_outside_tolerance(self): from datetime import timedelta td1 = timedelta(seconds=100) td2 = timedelta(seconds=102) - assert td1 != approx(td2, rel=timedelta(seconds=1)) + assert td1 != approx(td2, rel=0.01) def test_requires_tolerance(self): from datetime import datetime @@ -1203,11 +1203,57 @@ def test_abs_must_be_timedelta(self): with pytest.raises(TypeError, match="must be a timedelta"): approx(datetime(2024, 1, 1), abs=1.0) - def test_timedelta_rel_must_be_timedelta(self): + def test_timedelta_rel_must_be_number(self): from datetime import timedelta - with pytest.raises(TypeError, match="must be a timedelta"): - approx(timedelta(seconds=1), rel=0.1) + with pytest.raises(TypeError, match="must be a number"): + approx(timedelta(seconds=1), rel=timedelta(seconds=1)) + + def test_timedelta_rel_must_be_non_negative(self): + from datetime import timedelta + + with pytest.raises(ValueError, match="relative tolerance can't be negative"): + approx(timedelta(seconds=1), rel=-0.1) + + def test_timedelta_rel_must_not_be_nan(self): + from datetime import timedelta + + with pytest.raises(ValueError, match="relative tolerance can't be NaN"): + approx(timedelta(seconds=1), rel=float("nan")) + + def test_timedelta_abs_must_be_non_negative(self): + from datetime import timedelta + + with pytest.raises(ValueError, match="absolute tolerance can't be negative"): + approx(timedelta(seconds=1), abs=timedelta(seconds=-1)) + + def test_timedelta_rel_with_abs(self): + from datetime import timedelta + + # rel=0.05 gives 5s tolerance, abs=timedelta(seconds=1) gives 1s. + # max(1s, 5s) = 5s tolerance. + td1 = timedelta(seconds=100) + td2 = timedelta(seconds=104) + assert td1 == approx(td2, rel=0.05, abs=timedelta(seconds=1)) + + def test_timedelta_rel_zero(self): + from datetime import timedelta + + # rel=0 means exact match required (0 * expected = 0) + td1 = timedelta(seconds=100) + assert td1 == approx(td1, rel=0.0, abs=timedelta(seconds=0)) + assert td1 != approx(timedelta(seconds=101), rel=0.0, abs=timedelta(seconds=0)) + + def test_timedelta_rel_scales_with_expected(self): + from datetime import timedelta + + # Same rel=0.1, but different expected values. + # 10% of 100s = 10s, 10% of 200s = 20s. + assert timedelta(seconds=109) == approx(timedelta(seconds=100), rel=0.1) + assert timedelta(seconds=218) == approx(timedelta(seconds=200), rel=0.1) + # 11s is > 10% of 100s, but < 10% of 200s + assert timedelta(seconds=111) != approx(timedelta(seconds=100), rel=0.1) + assert timedelta(seconds=211) == approx(timedelta(seconds=200), rel=0.1) def test_rejects_nan_ok(self): from datetime import datetime @@ -1334,6 +1380,50 @@ def test_repr_compare_with_incompatible_type(self): assert "comparison failed" in result[0] assert "N/A" in result[3] + def test_timedelta_in_sequence(self): + from datetime import timedelta + + assert [timedelta(seconds=105)] == approx([timedelta(seconds=100)], rel=0.05) + assert [timedelta(seconds=110)] != approx([timedelta(seconds=100)], rel=0.05) + assert [timedelta(seconds=105)] == approx( + [timedelta(seconds=100)], abs=timedelta(seconds=10) + ) + + def test_timedelta_in_mapping(self): + from datetime import timedelta + + assert {"x": timedelta(seconds=105)} == approx( + {"x": timedelta(seconds=100)}, rel=0.05 + ) + assert {"x": timedelta(seconds=110)} != approx( + {"x": timedelta(seconds=100)}, rel=0.05 + ) + assert {"x": timedelta(seconds=105)} == approx( + {"x": timedelta(seconds=100)}, abs=timedelta(seconds=10) + ) + + def test_datetime_in_sequence(self): + from datetime import datetime + from datetime import timedelta + + assert [datetime(2024, 1, 1, 12, 0, 0, 500_000)] == approx( + [datetime(2024, 1, 1, 12, 0, 0)], abs=timedelta(seconds=1) + ) + assert [datetime(2024, 1, 1, 12, 0, 5)] != approx( + [datetime(2024, 1, 1, 12, 0, 0)], abs=timedelta(seconds=1) + ) + + def test_datetime_in_mapping(self): + from datetime import datetime + from datetime import timedelta + + assert {"t": datetime(2024, 1, 1, 12, 0, 0, 500_000)} == approx( + {"t": datetime(2024, 1, 1, 12, 0, 0)}, abs=timedelta(seconds=1) + ) + assert {"t": datetime(2024, 1, 1, 12, 0, 5)} != approx( + {"t": datetime(2024, 1, 1, 12, 0, 0)}, abs=timedelta(seconds=1) + ) + class MyVec3: # incomplete """sequence like""" From 7df5d80ff3a98714a1d3cdbe82941229e511f4b3 Mon Sep 17 00:00:00 2001 From: 1Utkarsh1 <121078149+1Utkarsh1@users.noreply.github.com> Date: Wed, 13 May 2026 00:02:30 +1000 Subject: [PATCH 295/307] docs: clarify subtests progress output (#14467) Co-authored-by: OpenAI Codex --- changelog/13902.doc.rst | 1 + doc/en/how-to/subtests.rst | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 changelog/13902.doc.rst diff --git a/changelog/13902.doc.rst b/changelog/13902.doc.rst new file mode 100644 index 00000000000..f11a1936051 --- /dev/null +++ b/changelog/13902.doc.rst @@ -0,0 +1 @@ +Clarified how subtest progress markers are shown in the documentation. diff --git a/doc/en/how-to/subtests.rst b/doc/en/how-to/subtests.rst index 93b9d052afd..c71f1bbe1ad 100644 --- a/doc/en/how-to/subtests.rst +++ b/doc/en/how-to/subtests.rst @@ -26,7 +26,7 @@ Subtests are an alternative to parametrization, particularly useful when the exa Each assertion failure or error is caught by the context manager and reported individually: -.. code-block:: pytest +.. code-block:: text $ pytest -q test_subtest.py uuuuuF [100%] @@ -63,6 +63,8 @@ Each assertion failure or error is caught by the context manager and reported in In the output above: +* The compact progress output uses ``u`` for both passed and failed subtests; + see the short test summary for each failed subtest. * Subtest failures are reported as ``SUBFAILED``. * Subtests are reported first and the "top-level" test is reported at the end on its own. From 984cabfaccf8aa69fe49097ed3d07bd60d05f240 Mon Sep 17 00:00:00 2001 From: EternalRights <162705204+EternalRights@users.noreply.github.com> Date: Wed, 13 May 2026 23:42:37 +0800 Subject: [PATCH 296/307] mark/expression: fix scanner - search for backslash in string value, not entire input (#14475) The backslash check in the string literal lexer was searching the entire input expression (input.find("\")) instead of only the current string value (value.find("\")). This caused false rejections when an identifier containing a backslash appeared in the same expression as a string literal. For example, `pytest -k 'test\nfoo\n and mark(x="y")'` would fail with "escaping not supported" even though the backslash is in the identifier, not the string. Closes #14474 --- changelog/14474.bugfix.rst | 1 + src/_pytest/mark/expression.py | 4 ++-- testing/test_mark_expression.py | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 changelog/14474.bugfix.rst diff --git a/changelog/14474.bugfix.rst b/changelog/14474.bugfix.rst new file mode 100644 index 00000000000..333d4d34d9a --- /dev/null +++ b/changelog/14474.bugfix.rst @@ -0,0 +1 @@ +Fixed a regression where ``-k`` and ``-m`` expressions containing both backslash characters in identifiers and string literal arguments would incorrectly raise a ``SyntaxError`` about escaping. diff --git a/src/_pytest/mark/expression.py b/src/_pytest/mark/expression.py index 3bdbd03c2b5..4b4a68d8a74 100644 --- a/src/_pytest/mark/expression.py +++ b/src/_pytest/mark/expression.py @@ -102,10 +102,10 @@ def lex(self, input: str) -> Iterator[Token]: (FILE_NAME, 1, pos + 1, input), ) value = input[pos : end_quote_pos + 1] - if (backslash_pos := input.find("\\")) != -1: + if (backslash_pos := value.find("\\")) != -1: raise SyntaxError( r'escaping with "\" not supported in marker expression', - (FILE_NAME, 1, backslash_pos + 1, input), + (FILE_NAME, 1, pos + backslash_pos + 1, input), ) yield Token(TokenType.STRING, value, pos) pos += len(value) diff --git a/testing/test_mark_expression.py b/testing/test_mark_expression.py index 1e3c769347c..3a606bac17c 100644 --- a/testing/test_mark_expression.py +++ b/testing/test_mark_expression.py @@ -86,6 +86,20 @@ def matcher(name: str, /, **kwargs: str | int | bool | None) -> bool: evaluate("\nfoo\n", matcher) +def test_backslash_in_identifier_with_string_literal() -> None: + r"""Backslashes in identifiers should not cause false rejections when the + expression also contains string literals. Regression test for a bug where + the scanner searched the entire input for backslashes instead of only the + current string literal value.""" + + def matcher(name: str, /, **kwargs: str | int | bool | None) -> bool: + return {r"\nfoo\n", r"test\case", "mark"}.__contains__(name) + + assert evaluate(r'\nfoo\n and mark(x="y")', matcher) + assert evaluate(r'mark(x="y") and \nfoo\n', matcher) + assert evaluate(r'test\case and mark(x="y")', matcher) + + @pytest.mark.parametrize( ("expr", "column", "message"), ( From 2cf6f0b34cc35f611f09b48a47093b8ae3f08491 Mon Sep 17 00:00:00 2001 From: Noa Levi <275430404+lphuc2250gma@users.noreply.github.com> Date: Wed, 13 May 2026 15:50:19 +0000 Subject: [PATCH 297/307] docs: fix pytest-xdist plugin wording --- doc/en/how-to/plugins.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/en/how-to/plugins.rst b/doc/en/how-to/plugins.rst index c6641eb8484..f3d4b0040b9 100644 --- a/doc/en/how-to/plugins.rst +++ b/doc/en/how-to/plugins.rst @@ -32,7 +32,7 @@ Here is a little annotated list for some popular plugins: * :pypi:`pytest-xdist`: to distribute tests to CPUs and remote hosts, to run in boxed - mode which allows to survive segmentation faults, to run in + mode that allows pytest to survive segmentation faults, to run in looponfailing mode, automatically re-running failing tests on file changes. From 21be7a259424e509e3d667082a138bcc8fc45c00 Mon Sep 17 00:00:00 2001 From: arya rizky Date: Thu, 14 May 2026 16:40:33 +0700 Subject: [PATCH 298/307] approx: fix buggy `__array_interface__` check Fix #14456 --- AUTHORS | 1 + changelog/14456.bugfix.rst | 1 + src/_pytest/python_api.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 changelog/14456.bugfix.rst diff --git a/AUTHORS b/AUTHORS index f3cf1b0facb..b72d0136484 100644 --- a/AUTHORS +++ b/AUTHORS @@ -21,6 +21,7 @@ Alex Lambson Alexander Johnson Alexander King Alexei Kozlenok +algojogacor Alice Purcell Allan Feldman Aly Sivji diff --git a/changelog/14456.bugfix.rst b/changelog/14456.bugfix.rst new file mode 100644 index 00000000000..ccd9ca20a8f --- /dev/null +++ b/changelog/14456.bugfix.rst @@ -0,0 +1 @@ +Fixed :func:`pytest.approx` not recognizing types with ``__array_interface__`` as numpy-like arrays. diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index cc2a2b7126a..f22a0f5016d 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -925,6 +925,6 @@ def _as_numpy_array(obj: object) -> ndarray | None: return None elif isinstance(obj, np.ndarray): return obj - elif hasattr(obj, "__array__") or hasattr("obj", "__array_interface__"): + elif hasattr(obj, "__array__") or hasattr(obj, "__array_interface__"): return np.asarray(obj) return None From 8571cf8d44a390c4c61f82c9b5a825ae393b1203 Mon Sep 17 00:00:00 2001 From: Yast Date: Thu, 14 May 2026 16:47:53 +0300 Subject: [PATCH 299/307] Deprecate `self` in class-scoped fixtures on base classes (#14071) Closes #14011 Closes #10819 --- changelog/10819.deprecation.rst | 3 +++ doc/en/deprecations.rst | 47 +++++++++++++++++++++++++++++++++ src/_pytest/deprecated.py | 8 ++++++ src/_pytest/fixtures.py | 11 ++++++++ testing/deprecated_test.py | 21 +++++++++++++++ 5 files changed, 90 insertions(+) create mode 100644 changelog/10819.deprecation.rst diff --git a/changelog/10819.deprecation.rst b/changelog/10819.deprecation.rst new file mode 100644 index 00000000000..ebb306379b7 --- /dev/null +++ b/changelog/10819.deprecation.rst @@ -0,0 +1,3 @@ +Added a deprecation warning for class-scoped fixtures defined as instance methods (without ``@classmethod``). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use ``@classmethod`` decorator instead -- by :user:`yastcher`. + +See :issue:`10819` and :issue:`14011`. diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index 73b04f03711..d6fca825792 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -149,6 +149,53 @@ You can fix it by converting generators and iterators to lists or tuples: Note that :class:`range` objects are ``Collection`` and are not affected by this deprecation. +.. _class-scoped-fixture-as-instance-method: + +Class-scoped fixture as instance method +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 9.1 + +Defining a class-scoped fixture as an instance method (without ``@classmethod``) is deprecated +and will be removed in pytest 10.0. + +When a class-scoped fixture is defined as an instance method, any attributes set on ``self`` +will not be visible to test methods. This happens because pytest creates a new instance of the +test class for each test method, while the fixture runs only once per class on a different instance. + +**Before** (deprecated): + +.. code-block:: python + + class TestExample: + @pytest.fixture(scope="class") + def setup_data(self): + self.data = [1, 2, 3] # This won't be visible to tests! + + def test_something(self, setup_data): + assert self.data == [ + 1, + 2, + 3, + ] # AttributeError: 'TestExample' object has no attribute 'data' + +**After** (recommended): + +.. code-block:: python + + class TestExample: + @pytest.fixture(scope="class") + @classmethod + def setup_data(cls): + cls.data = [1, 2, 3] + + def test_something(self, setup_data): + assert self.data == [1, 2, 3] # Works correctly + +Using ``@classmethod`` ensures attributes are set on the class itself, making them accessible +to all test methods. + + .. _monkeypatch-fixup-namespace-packages: ``monkeypatch.syspath_prepend`` with legacy namespace packages diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index f25db4df287..d9da941a789 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -34,6 +34,14 @@ "Use @pytest.fixture instead; they are the same." ) +CLASS_FIXTURE_INSTANCE_METHOD = PytestRemovedIn10Warning( + "Class-scoped fixture defined as instance method is deprecated.\n" + "Instance attributes set in this fixture will NOT be visible to test methods,\n" + "as each test gets a new instance while the fixture runs only once per class.\n" + "Use @classmethod decorator and set attributes on cls instead.\n" + "See https://docs.pytest.org/en/stable/deprecations.html#class-scoped-fixture-as-instance-method" +) + # This deprecation is never really meant to be removed. PRIVATE = PytestDeprecationWarning("A private pytest class or function was used.") diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 367eb6419de..da29622ef23 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -55,6 +55,7 @@ from _pytest.config import ExitCode from _pytest.config.argparsing import Parser from _pytest.deprecated import check_ispytest +from _pytest.deprecated import CLASS_FIXTURE_INSTANCE_METHOD from _pytest.deprecated import FIXTURE_GETFIXTUREVALUE_DURING_TEARDOWN from _pytest.deprecated import YIELD_FIXTURE from _pytest.main import Session @@ -1220,6 +1221,16 @@ def resolve_fixture_function( # request.instance so that code working with "fixturedef" behaves # as expected. instance = request.instance + + if fixturedef._scope is Scope.Class: + # Check if fixture is an instance method (bound to instance, not class) + if hasattr(fixturefunc, "__self__"): + bound_to = fixturefunc.__self__ + # classmethod: bound_to is the class itself (a type) + # instance method: bound_to is an instance (not a type) + if not isinstance(bound_to, type): + warnings.warn(CLASS_FIXTURE_INSTANCE_METHOD, stacklevel=2) + if instance is not None: # Handle the case where fixture is defined not in a test class, but some other class # (for example a plugin class with a fixture), see #2270. diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index c49a6e084ce..dd5c6781869 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -85,3 +85,24 @@ def __init__(self, foo: int, *, _ispytest: bool = False) -> None: # Doesn't warn. PrivateInit(10, _ispytest=True) + + +def test_class_scope_instance_method_is_deprecated(pytester: Pytester) -> None: + pytester.makepyfile( + """ + import pytest + + class TestClass: + @pytest.fixture(scope="class") + def fix(self): + self.attr = True + + def test_foo(self, fix): + pass + """ + ) + result = pytester.runpytest("-Werror::pytest.PytestRemovedIn10Warning") + result.assert_outcomes(errors=1) + result.stdout.fnmatch_lines( + ["*PytestRemovedIn10Warning: Class-scoped fixture defined as instance method*"] + ) From d26daf20c0650738fce792152bc333b742add7c3 Mon Sep 17 00:00:00 2001 From: pytest bot Date: Sun, 17 May 2026 00:58:48 +0000 Subject: [PATCH 300/307] [automated] Update plugin list --- doc/en/reference/plugin_list.rst | 274 +++++++++++++++++++------------ 1 file changed, 165 insertions(+), 109 deletions(-) diff --git a/doc/en/reference/plugin_list.rst b/doc/en/reference/plugin_list.rst index 92bd56668af..882a3d47a2e 100644 --- a/doc/en/reference/plugin_list.rst +++ b/doc/en/reference/plugin_list.rst @@ -27,7 +27,7 @@ please refer to `the update script =7 :pypi:`pytest-abort` Pytest plugin + helpers for attributing hard crashes (SIGSEGV/SIGABRT) to the last running test and keeping pytest-html reports mergeable. Feb 11, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-abq` Pytest integration for the ABQ universal test runner. Apr 07, 2023 N/A N/A - :pypi:`pytest-abstracts` A pytest fixture for testing abstract interface implementations May 09, 2026 4 - Beta pytest>=3.5.0 + :pypi:`pytest-abstracts` A pytest fixture for testing abstract interface implementations May 15, 2026 4 - Beta pytest>=7.4.0 :pypi:`pytest-accept` Mar 01, 2026 N/A pytest>=7 :pypi:`pytest-adaptavist` pytest plugin for generating test execution results within Jira Test Management (tm4j) Oct 13, 2022 N/A pytest (>=5.4.0) :pypi:`pytest-adaptavist-fixed` pytest plugin for generating test execution results within Jira Test Management (tm4j) Jan 17, 2025 N/A pytest>=5.4.0 @@ -129,7 +129,7 @@ This list contains 1971 plugins. :pypi:`pytest-argus-server` A plugin that provides a running Argus API server for tests Mar 05, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-arrakis` Pytest plugin providing Arrakis fixtures for testing May 04, 2026 3 - Alpha pytest :pypi:`pytest-arraydiff` pytest plugin to help with comparing array output from tests Nov 27, 2023 4 - Beta pytest >=4.6 - :pypi:`pytest-artifacts` Pytest plugin for managing test artifacts Apr 17, 2026 4 - Beta pytest>=6.2.0 + :pypi:`pytest-artifacts` Pytest plugin for managing test artifacts May 14, 2026 4 - Beta pytest>=6.2.0 :pypi:`pytest-asdf-plugin` Pytest plugin for testing ASDF schemas Aug 18, 2025 5 - Production/Stable pytest>=7 :pypi:`pytest-asgi-server` Convenient ASGI client/server fixtures for Pytest Dec 12, 2020 N/A pytest (>=5.4.1) :pypi:`pytest-aspec` A rspec format reporter for pytest Dec 20, 2023 4 - Beta N/A @@ -205,13 +205,13 @@ This list contains 1971 plugins. :pypi:`pytest-bdd-splinter` Common steps for pytest bdd and splinter integration Aug 12, 2019 5 - Production/Stable pytest (>=4.0.0) :pypi:`pytest-bdd-web` A simple plugin to use with pytest Jan 02, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A - :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics May 09, 2026 3 - Alpha pytest>=9.0.0 + :pypi:`pytest-beacon` Highly customizable pytest reporting plugin combining AI-optimized CTRF reports and rich test metrics May 11, 2026 3 - Alpha pytest>=9.0.0 :pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest :pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Oct 31, 2024 N/A pytest :pypi:`pytest-beartype-tests` Pytest plugin that applies @beartype to every collected test function. Apr 26, 2026 4 - Beta pytest>=8 - :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests May 08, 2026 3 - Alpha pytest + :pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests May 15, 2026 3 - Alpha pytest :pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A - :pypi:`pytest-beehave` A pytest plugin that runs acceptance criteria stub generation as part of the pytest lifecycle, with auto-ID assignment and generic step docstrings Apr 21, 2026 4 - Beta pytest>=9.0.3; extra == "dev" + :pypi:`pytest-beehave` A pytest plugin that generates test stubs from Gherkin feature files, checks consistency, and displays BDD steps in pytest output May 13, 2026 4 - Beta pytest>=9.0.3; extra == "dev" :pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A :pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A :pypi:`pytest-benchmark` A \`\`pytest\`\` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer. Nov 09, 2025 5 - Production/Stable pytest>=8.1 @@ -231,9 +231,9 @@ This list contains 1971 plugins. :pypi:`pytest-blocker` pytest plugin to mark a test as blocker and skip all other tests Sep 07, 2015 4 - Beta N/A :pypi:`pytest-b-logger` BLogger is a Pytest plugin for enhanced test logging and generating convenient and lightweight reports. Dec 16, 2025 N/A pytest :pypi:`pytest-blue` A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. Sep 05, 2022 N/A N/A - :pypi:`pytest-bluezenv` pytest BlueZ environment plugin May 09, 2026 3 - Alpha pytest>=8 + :pypi:`pytest-bluezenv` pytest BlueZ environment plugin May 12, 2026 3 - Alpha pytest>=8 :pypi:`pytest-board` Local continuous test runner with pytest and watchdog. Jan 20, 2019 N/A N/A - :pypi:`pytest-boardfarm3` Integrate boardfarm as a pytest plugin. Sep 15, 2025 N/A pytest + :pypi:`pytest_boardfarm3` Integrate boardfarm as a pytest plugin. May 13, 2026 N/A pytest :pypi:`pytest-bods-v04-fixtures` Pytest plugin providing a parametrized fixture over the canonical BODS v0.4 fixtures pack Apr 20, 2026 N/A pytest>=7.0 :pypi:`pytest-boilerplate` The pytest plugin for your Django Boilerplate. Sep 12, 2024 5 - Production/Stable pytest>=4.0.0 :pypi:`pytest-bonsai` Apr 08, 2025 N/A pytest>=6 @@ -351,7 +351,7 @@ This list contains 1971 plugins. :pypi:`pytest-codegen` Automatically create pytest test signatures Aug 23, 2020 2 - Pre-Alpha N/A :pypi:`pytest-codeowners` Pytest plugin for selecting tests by GitHub CODEOWNERS. Mar 30, 2022 4 - Beta pytest (>=6.0.0) :pypi:`pytest-codestyle` pytest plugin to run pycodestyle Mar 23, 2020 3 - Alpha N/A - :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks Apr 28, 2026 5 - Production/Stable pytest>=3.8 + :pypi:`pytest-codspeed` Pytest plugin to create CodSpeed benchmarks May 14, 2026 5 - Production/Stable pytest>=3.8 :pypi:`pytest-collect-appoint-info` set your encoding Aug 03, 2023 N/A pytest :pypi:`pytest-collect-formatter` Formatter for pytest collect output Mar 29, 2021 5 - Production/Stable N/A :pypi:`pytest-collect-formatter2` Formatter for pytest collect output May 31, 2021 5 - Production/Stable N/A @@ -383,7 +383,7 @@ This list contains 1971 plugins. :pypi:`pytest-count` count erros and send email Jan 12, 2018 4 - Beta N/A :pypi:`pytest-cov` Pytest plugin for measuring coverage. Mar 21, 2026 5 - Production/Stable pytest>=7 :pypi:`pytest-cov-affected` Run pytest and report coverage only for git-affected modules. May 03, 2026 N/A pytest>=8 - :pypi:`pytest-cov-container` Pytest plugin to collect code coverage from applications running inside Docker containers Mar 23, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-cov-container` Pytest plugin to collect code coverage from applications running inside Docker containers May 16, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A :pypi:`pytest-coverage` Jun 17, 2015 N/A N/A :pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A @@ -425,7 +425,7 @@ This list contains 1971 plugins. :pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A :pypi:`pytest-dashboard` Jun 02, 2025 N/A pytest<8.0.0,>=7.4.3 :pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A - :pypi:`pytest-databases` Reusable database fixtures for any and all databases. Mar 10, 2026 4 - Beta pytest + :pypi:`pytest-databases` Reusable database fixtures for any and all databases. May 12, 2026 4 - Beta pytest :pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest :pypi:`pytest-datadir` pytest plugin for test data directories and files Jul 30, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1) @@ -472,6 +472,7 @@ This list contains 1971 plugins. :pypi:`pytest-describe-beautifully` Beautiful terminal and HTML output for pytest-describe. Jan 28, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-describe-it` plugin for rich text descriptions Jul 19, 2019 4 - Beta pytest :pypi:`pytest-deselect-if` A plugin to deselect pytests tests rather than using skipif Dec 26, 2024 4 - Beta pytest>=6.2.0 + :pypi:`pytest-devant-cloud` pytest plugin that streams runs, results, and step trees to Devant Cloud's /v1/runs API. May 11, 2026 N/A pytest>=7.0 :pypi:`pytest-devpi-server` DevPI server fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-devtools` Pytest plugin providing debug fixtures, ANSI-stripped capsys, whitespace-visible assertions, and terminal column management. May 07, 2026 N/A pytest>=7 :pypi:`pytest-dfm` pytest-dfm provides a pytest integration for DV Flow Manager, a build system for silicon design Nov 23, 2025 N/A pytest @@ -564,9 +565,10 @@ This list contains 1971 plugins. :pypi:`pytest-drop-dup-tests` A Pytest plugin to drop duplicated tests during collection Mar 04, 2024 5 - Production/Stable pytest >=7 :pypi:`pytest-dryci` Test caching plugin for pytest Sep 27, 2024 4 - Beta N/A :pypi:`pytest-dryrun` A Pytest plugin to ignore tests during collection without reporting them in the test summary. Jan 19, 2025 5 - Production/Stable pytest<9,>=7.40 - :pypi:`pytest-dsl` A DSL testing framework based on pytest Apr 30, 2026 N/A pytest>=7.0.0 + :pypi:`pytest-dsl` A DSL testing framework based on pytest May 16, 2026 N/A pytest>=7.0.0 :pypi:`pytest-dsl-ssh` SSH/SFTP关键字插件,为pytest-dsl提供SSH和SFTP操作能力 Jul 25, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-dsl-ui` Playwright-based UI automation keywords for pytest-dsl framework Apr 13, 2026 N/A pytest>=7.0.0; extra == "dev" + :pypi:`pytest-duckdb` pytest plugin for SQL pipeline testing with DuckDB — load fixtures, run queries, snapshot results May 10, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-dummynet` A py.test plugin providing access to a dummynet. Dec 15, 2021 5 - Production/Stable pytest :pypi:`pytest-dump2json` A pytest plugin for dumping test results to json. Jun 29, 2015 N/A N/A :pypi:`pytest-duration-insights` Jul 15, 2024 N/A N/A @@ -592,16 +594,16 @@ This list contains 1971 plugins. :pypi:`pytest-eliot` An eliot plugin for pytest. Aug 31, 2022 1 - Planning pytest (>=5.4.0) :pypi:`pytest-elk-reporter` A simple plugin to use with pytest Jul 25, 2024 4 - Beta pytest>=3.5.0 :pypi:`pytest-email` Send execution result email Jul 08, 2020 N/A pytest - :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. Mar 02, 2026 5 - Production/Stable pytest>=7.0 - :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli May 08, 2026 N/A pytest>=8 - :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. Mar 02, 2026 5 - Production/Stable N/A - :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. Mar 02, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded` A pytest plugin that designed for embedded testing. May 15, 2026 5 - Production/Stable pytest>=7.0 + :pypi:`pytest-embedded-arduino` Make pytest-embedded plugin work with Arduino. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-arduino-cli` A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli May 11, 2026 N/A pytest>=8 + :pypi:`pytest-embedded-idf` Make pytest-embedded plugin work with ESP-IDF. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-jtag` Make pytest-embedded plugin work with JTAG. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-nuttx` Make pytest-embedded plugin work with NuttX. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-qemu` Make pytest-embedded plugin work with QEMU. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial` Make pytest-embedded plugin work with Serial. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-serial-esp` Make pytest-embedded plugin work with Espressif target boards. May 15, 2026 5 - Production/Stable N/A + :pypi:`pytest-embedded-wokwi` Make pytest-embedded plugin work with the Wokwi CLI. May 15, 2026 5 - Production/Stable N/A :pypi:`pytest-embrace` 💝 Dataclasses-as-tests. Describe the runtime once and multiply coverage with no boilerplate. Mar 25, 2023 N/A pytest (>=7.0,<8.0) :pypi:`pytest-emoji` A pytest plugin that adds emojis to your test result report Feb 19, 2019 4 - Beta pytest (>=4.2.1) :pypi:`pytest-emoji-output` Pytest plugin to represent test output with emoji support Apr 09, 2023 4 - Beta pytest (==7.0.1) @@ -623,7 +625,6 @@ This list contains 1971 plugins. :pypi:`pytest-ephemeral-container` Spawn epehemeral containers in pytest Apr 14, 2026 N/A pytest :pypi:`pytest-eradicate` pytest plugin to check for commented out code Sep 08, 2020 N/A pytest (>=2.4.2) :pypi:`pytest_erp` py.test plugin to send test info to report portal dynamically Jan 13, 2015 N/A N/A - :pypi:`pytest-error` A decorator for testing exceptions with pytest Dec 06, 2025 4 - Beta pytest>=8.4 :pypi:`pytest-error-for-skips` Pytest plugin to treat skipped tests a test failure Dec 19, 2019 4 - Beta pytest (>=4.6) :pypi:`pytest-errxfail` pytest plugin to mark a test as xfailed if it fails with the specified error message in the captured output Jan 06, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-essentials` A Pytest plugin providing essential utilities like soft assertions. May 19, 2025 3 - Alpha pytest>=7.0 @@ -703,7 +704,7 @@ This list contains 1971 plugins. :pypi:`pytest-firefox` Feb 28, 2025 N/A N/A :pypi:`pytest-firestore` A Pytest fixture for managing Google Cloud Firestore emulator Mar 10, 2026 N/A pytest>=7.0 :pypi:`pytest-fixedpoint` Pytest plugin for recording and replaying deterministic function calls Mar 12, 2026 N/A pytest>=7.0 - :pypi:`pytest-fixkit` A very micro http framework. May 08, 2026 5 - Production/Stable pytest + :pypi:`pytest-fixkit` A set of useful pytest fixtures that I use everyday. May 12, 2026 5 - Production/Stable pytest :pypi:`pytest-fixture-cache` Smart fixture caching for pytest with SQLite storage Jan 25, 2026 4 - Beta pytest>=7.0.0 :pypi:`pytest-fixturecheck` A pytest plugin to check fixture validity before test execution Jun 02, 2025 3 - Alpha pytest>=6.0.0 :pypi:`pytest-fixture-classes` Fixtures as classes that work well with dependency injection, autocompletetion, type checkers, and language servers Oct 12, 2025 5 - Production/Stable N/A @@ -732,16 +733,16 @@ This list contains 1971 plugins. :pypi:`pytest-flakehunter` Re-run tests N times, visualize failure heatmaps, and get AI root cause hypotheses Apr 07, 2026 N/A pytest>=7.0 :pypi:`pytest-flakemark` Differential execution tracer that finds the exact file, line, and root cause of any flaky test. May 01, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-flakes` pytest plugin to check source code with pyflakes Dec 02, 2021 5 - Production/Stable pytest (>=5) - :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io Apr 23, 2026 N/A pytest>=9.0.2 + :pypi:`pytest-flakiness` Pytest reporter for Flakiness.io May 15, 2026 N/A pytest>=9.0.2 :pypi:`pytest-flaptastic` Flaptastic py.test plugin Mar 17, 2019 N/A N/A :pypi:`pytest-flask` A set of py.test fixtures to test Flask applications. Oct 23, 2023 5 - Production/Stable pytest >=5.2 - :pypi:`pytest-flask-ligand` Pytest fixtures and helper functions to use for testing flask-ligand microservices. Apr 25, 2023 4 - Beta pytest (~=7.3) + :pypi:`pytest-flask-ligand` May 14, 2026 4 - Beta pytest>=7.3 :pypi:`pytest-flask-sqlalchemy` A pytest plugin for preserving test isolation in Flask-SQlAlchemy using database transactions. Apr 30, 2022 4 - Beta pytest (>=3.2.1) :pypi:`pytest-flask-sqlalchemy-transactions` Run tests in transactions using pytest, Flask, and SQLalchemy. Aug 02, 2018 4 - Beta pytest (>=3.2.1) :pypi:`pytest-flexreport` Apr 15, 2023 4 - Beta pytest :pypi:`pytest-fluent` A pytest plugin in order to provide logs via fluentd Aug 14, 2024 4 - Beta pytest>=7.0.0 :pypi:`pytest-fluentbit` A pytest plugin in order to provide logs via fluentbit Jun 16, 2023 4 - Beta pytest (>=7.0.0) - :pypi:`pytest-fly` pytest runner and observer May 06, 2026 3 - Alpha pytest + :pypi:`pytest-fly` pytest runner and observer May 13, 2026 3 - Alpha pytest :pypi:`pytest-flyte` Pytest fixtures for simplifying Flyte integration testing May 03, 2021 N/A pytest :pypi:`pytest-fmu-filter` A pytest plugin to filter fmus Jun 23, 2025 4 - Beta pytest>=7.0.0 :pypi:`pytest-focus` A pytest plugin that alerts user of failed test cases with screen notifications May 04, 2019 4 - Beta pytest @@ -758,13 +759,14 @@ This list contains 1971 plugins. :pypi:`pytest-freezer` Pytest plugin providing a fixture interface for spulec/freezegun Dec 12, 2024 N/A pytest>=3.6 :pypi:`pytest-freeze-reqs` Check if requirement files are frozen Apr 29, 2021 N/A N/A :pypi:`pytest-frozen-uuids` Deterministically frozen UUID's for your tests Apr 17, 2022 N/A pytest (>=3.0) + :pypi:`pytest-fsd` Feature-Sliced Design (FSD) architecture validation plugin for pytest May 13, 2026 4 - Beta N/A :pypi:`pytest_ftpserver` A PyTest plugin which provides an FTP fixture for your tests Feb 10, 2026 5 - Production/Stable pytest :pypi:`pytest-func-cov` Pytest plugin for measuring function coverage Apr 15, 2021 3 - Alpha pytest (>=5) :pypi:`pytest-funcnodes` Testing plugin for funcnodes Dec 21, 2025 4 - Beta pytest>=6.2.0 :pypi:`pytest-funparam` An alternative way to parametrize test cases. Dec 02, 2021 4 - Beta pytest >=4.6.0 :pypi:`pytest-fv` pytest extensions to support running functional-verification jobs Jun 06, 2025 N/A pytest :pypi:`pytest-fxa` pytest plugin for Firefox Accounts Aug 28, 2018 5 - Production/Stable N/A - :pypi:`pytest-fxa-mte` pytest plugin for Firefox Accounts Mar 23, 2026 5 - Production/Stable N/A + :pypi:`pytest-fxa-mte` pytest plugin for Firefox Accounts May 15, 2026 4 - Beta N/A :pypi:`pytest-fxtest` Oct 27, 2020 N/A N/A :pypi:`pytest-fzf` fzf-based test selector for pytest Jan 06, 2025 4 - Beta pytest>=6.0.0 :pypi:`pytest_gae` pytest plugin for apps written with Google's AppEngine Aug 03, 2016 3 - Alpha N/A @@ -780,7 +782,7 @@ This list contains 1971 plugins. :pypi:`pytest-gherkin` A flexible framework for executing BDD gherkin tests Jul 27, 2019 3 - Alpha pytest (>=5.0.0) :pypi:`pytest-gh-log-group` pytest plugin for gh actions Jan 11, 2022 3 - Alpha pytest :pypi:`pytest-ghostinspector` For finding/executing Ghost Inspector tests May 17, 2016 3 - Alpha N/A - :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. Apr 30, 2026 N/A pytest>=3.6 + :pypi:`pytest-girder` A set of pytest fixtures for testing Girder applications. May 13, 2026 N/A pytest>=3.6 :pypi:`pytest-git` Git repository fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-gitconfig` Provide a Git config sandbox for testing Dec 28, 2025 4 - Beta pytest>=7.1.2 :pypi:`pytest-gitcov` Pytest plugin for reporting on coverage of the last git commit. Jan 11, 2020 2 - Pre-Alpha N/A @@ -837,8 +839,8 @@ This list contains 1971 plugins. :pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0) :pypi:`pytest-home` Home directory fixtures Jul 28, 2024 5 - Production/Stable pytest :pypi:`pytest-homeassistant` A pytest plugin for use with homeassistant custom components. Aug 12, 2020 4 - Beta N/A - :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components May 09, 2026 3 - Alpha pytest==9.0.3 - :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components May 09, 2026 3 - Alpha pytest==9.0.3 + :pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components May 16, 2026 3 - Alpha pytest==9.0.3 + :pypi:`pytest-homeassistant-custom-component-framework` Experimental package to automatically extract test plugins for Home Assistant custom components May 16, 2026 3 - Alpha pytest==9.0.3 :pypi:`pytest-Honda-report` Enterprise-grade pytest HTML report plugin with Chinese UI, API details, and historical trends Apr 11, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0) :pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A @@ -897,8 +899,8 @@ This list contains 1971 plugins. :pypi:`pytest-ignore-test-results` A pytest plugin to ignore test results. Feb 03, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-image-diff` Dec 31, 2024 3 - Alpha pytest :pypi:`pytest-image-snapshot` A pytest plugin for image snapshot management and comparison. Jul 16, 2025 4 - Beta pytest>=3.5.0 - :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. May 01, 2026 4 - Beta pytest>=8.0.0 - :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). May 01, 2026 4 - Beta N/A + :pypi:`pytest-impacted` A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. May 12, 2026 4 - Beta pytest>=8.0.0 + :pypi:`pytest-impacted-rs` Rust-accelerated import parsing for pytest-impacted (ruff parser + rayon parallelism). May 12, 2026 4 - Beta N/A :pypi:`pytest-imply` Pytest plugin for test implication — skip tests implied by stronger ones Mar 21, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-import-check` pytest plugin to check whether Python modules can be imported Jul 19, 2024 3 - Alpha pytest>=8.1 :pypi:`pytest-incremental` an incremental test runner (pytest plugin) Apr 24, 2021 5 - Production/Stable N/A @@ -918,7 +920,7 @@ This list contains 1971 plugins. :pypi:`pytest-inline-snapshot` inline-snapshot is the package you are looking for Nov 09, 2025 N/A N/A :pypi:`pytest-inline-tdd` A pytest plugin for writing inline tests Mar 09, 2026 4 - Beta pytest<9.0,>=7.0 :pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Nov 18, 2025 5 - Production/Stable pytest - :pypi:`pytest-inmanta-extensions` Inmanta tests package Apr 28, 2026 5 - Production/Stable N/A + :pypi:`pytest-inmanta-extensions` Inmanta tests package May 13, 2026 5 - Production/Stable N/A :pypi:`pytest-inmanta-lsm` Common fixtures used in inmanta LSM related modules Apr 29, 2026 5 - Production/Stable N/A :pypi:`pytest-inmanta-srlinux` Pytest library to facilitate end to end testing of inmanta projects Apr 22, 2025 3 - Alpha N/A :pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Oct 28, 2025 4 - Beta pytest @@ -942,12 +944,12 @@ This list contains 1971 plugins. :pypi:`pytest-ipso` pytest plugin for running ipso notebook cell tests Mar 24, 2026 N/A pytest :pypi:`pytest-ipynb` THIS PROJECT IS ABANDONED Jan 29, 2019 3 - Alpha N/A :pypi:`pytest-ipynb2` Pytest plugin to run tests in Jupyter Notebooks Mar 09, 2025 N/A pytest - :pypi:`pytest-ipywidgets` Feb 24, 2026 N/A pytest + :pypi:`pytest-ipywidgets` May 14, 2026 N/A pytest :pypi:`pytest-isolate` Run pytest tests in isolated subprocesses Sep 08, 2025 4 - Beta pytest :pypi:`pytest-isolated` Run marked pytest tests in grouped subprocesses (cross-platform). Mar 04, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-isolate-mpi` pytest-isolate-mpi allows for MPI-parallel tests being executed in a segfault and MPI_Abort safe manner Feb 24, 2025 4 - Beta pytest>=5 :pypi:`pytest-isort` py.test plugin to check import ordering using isort Mar 05, 2024 5 - Production/Stable pytest (>=5.0) - :pypi:`pytest-issues` Decorators for pytest tests that should issue exceptions or warnings Apr 29, 2026 5 - Production/Stable pytest>=8 + :pypi:`pytest-issues` Decorators for pytest tests that should issue exceptions or warnings May 12, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-it` Pytest plugin to display test reports as a plaintext spec, inspired by Rspec: https://github.com/mattduck/pytest-it. Jan 29, 2024 4 - Beta N/A :pypi:`pytest-item-dict` Get a hierarchical dict of session.items Nov 14, 2024 4 - Beta pytest>=8.3.0 :pypi:`pytest-iterassert` Nicer list and iterable assertion messages for pytest May 11, 2020 3 - Alpha N/A @@ -987,7 +989,7 @@ This list contains 1971 plugins. :pypi:`pytest-k8s` Kubernetes-based testing for pytest Jul 07, 2025 N/A pytest>=8.4.1 :pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Aug 14, 2024 N/A pytest :pypi:`pytest-kafka-broker` Pytest plugin to run a single-broker Kafka cluster Apr 03, 2026 N/A N/A - :pypi:`pytest-kafka-contract` A pytest plugin and CLI for validating Kafka JSON and Avro messages against contracts. Apr 29, 2026 3 - Alpha pytest>=8.0.0 + :pypi:`pytest-kafka-contract` A pytest plugin and CLI for validating Kafka JSON and Avro messages against contracts. May 10, 2026 3 - Alpha pytest>=8.0.0 :pypi:`pytest-kafkavents` A plugin to send pytest events to Kafka Sep 08, 2021 4 - Beta pytest :pypi:`pytest-kairos` Pytest plugin with random number generation, reproducibility, and test repetition Aug 08, 2024 5 - Production/Stable pytest>=5.0.0 :pypi:`pytest-kasima` Display horizontal lines above and below the captured standard output for easy viewing. Jan 26, 2023 5 - Production/Stable pytest (>=7.2.1,<8.0.0) @@ -1070,7 +1072,7 @@ This list contains 1971 plugins. :pypi:`pytest-logikal` Common testing environment Apr 27, 2026 5 - Production/Stable pytest==9.0.2 :pypi:`pytest-log-report` Package for creating a pytest test run reprot Dec 26, 2019 N/A N/A :pypi:`pytest-logscanner` Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) Sep 30, 2024 4 - Beta pytest>=8.2.2 - :pypi:`pytest-loguru` Pytest Loguru Mar 20, 2024 5 - Production/Stable pytest; extra == "test" + :pypi:`pytest-loguru` Pytest Loguru May 16, 2026 5 - Production/Stable N/A :pypi:`pytest-loop` pytest plugin for looping tests Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-lsp` A pytest plugin for end-to-end testing of language servers Oct 25, 2025 5 - Production/Stable pytest>=8.0 :pypi:`pytest-lw-realtime-result` Pytest plugin to generate realtime test results to a file Mar 13, 2025 N/A pytest>=3.5.0 @@ -1124,7 +1126,7 @@ This list contains 1971 plugins. :pypi:`pytest-metrics` Custom metrics report for pytest Apr 04, 2020 N/A pytest :pypi:`pytest-mfd-config` Pytest Plugin that handles test and topology configs and all their belongings like helper fixtures. Jul 11, 2025 N/A pytest<9,>=7.2.1 :pypi:`pytest-mfd-logging` Module for handling PyTest logging. Nov 14, 2025 N/A pytest<9,>=7.2.1 - :pypi:`pytest-mg` A tiny plugin for pytest which runs MongoDB in Docker May 08, 2026 5 - Production/Stable pytest>=8.0 + :pypi:`pytest-mg` A tiny plugin for pytest which runs MongoDB in Docker May 11, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-mh` Pytest multihost plugin Oct 16, 2025 N/A pytest :pypi:`pytest-mimesis` Mimesis integration with the pytest test runner Mar 21, 2020 5 - Production/Stable pytest (>=4.2) :pypi:`pytest-mimic` Easily record function calls while testing Apr 24, 2025 4 - Beta pytest>=6.2.0 @@ -1161,7 +1163,7 @@ This list contains 1971 plugins. :pypi:`pytest-mongodb` pytest plugin for MongoDB fixtures May 16, 2023 5 - Production/Stable N/A :pypi:`pytest-mongodb-nono` pytest plugin for MongoDB Jan 07, 2025 N/A N/A :pypi:`pytest-mongodb-ry` pytest plugin for MongoDB Sep 25, 2025 N/A N/A - :pypi:`pytest-mongo-docker` A tiny plugin for pytest which runs MongoDB in Docker Mar 05, 2026 5 - Production/Stable pytest>=7.4 + :pypi:`pytest-mongo-docker` A tiny plugin for pytest which runs MongoDB in Docker May 14, 2026 5 - Production/Stable pytest>=8.0 :pypi:`pytest-monitor` Pytest plugin for analyzing resource usage. Jun 25, 2023 5 - Production/Stable pytest :pypi:`pytest-monkeyplus` pytest's monkeypatch subclass with extra functionalities Sep 18, 2012 5 - Production/Stable N/A :pypi:`pytest-monkeytype` pytest-monkeytype: Generate Monkeytype annotations from your pytest tests. Jul 29, 2020 4 - Beta N/A @@ -1185,7 +1187,7 @@ This list contains 1971 plugins. :pypi:`pytest-my-plugin` A pytest plugin that does awesome things Jan 27, 2025 N/A pytest>=6.0 :pypi:`pytest-mypy` A Pytest Plugin for Mypy Apr 02, 2025 5 - Production/Stable pytest>=7.0 :pypi:`pytest-mypyd` Mypy static type checker plugin for Pytest Aug 20, 2019 4 - Beta pytest (<4.7,>=2.8) ; python_version < "3.5" - :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins Apr 17, 2026 5 - Production/Stable pytest>=7.0.0 + :pypi:`pytest-mypy-plugins` pytest plugin for writing tests for mypy plugins May 14, 2026 5 - Production/Stable pytest>=7.0.0 :pypi:`pytest-mypy-plugins-shim` Substitute for "pytest-mypy-plugins" for Python implementations which aren't supported by mypy. Feb 14, 2025 N/A pytest>=6.0.0 :pypi:`pytest-mypy-runner` Run the mypy static type checker as a pytest test case Apr 23, 2024 N/A pytest>=8.0 :pypi:`pytest-mypy-testing` Pytest plugin to check mypy output Jan 26, 2026 N/A pytest>=8 @@ -1233,7 +1235,7 @@ This list contains 1971 plugins. :pypi:`pytest-odc` A pytest plugin for simplifying ODC database tests Aug 04, 2023 4 - Beta pytest (>=3.5.0) :pypi:`pytest-odoo` py.test plugin to run Odoo tests May 20, 2025 5 - Production/Stable pytest>=8 :pypi:`pytest-odoo-fixtures` Project description Jun 25, 2019 N/A N/A - :pypi:`pytest-oduit` py.test plugin to run Odoo tests May 09, 2026 5 - Production/Stable pytest>=8 + :pypi:`pytest-oduit` py.test plugin to run Odoo tests May 12, 2026 5 - Production/Stable pytest>=8 :pypi:`pytest-oerp` pytest plugin to test OpenERP modules Feb 28, 2012 3 - Alpha N/A :pypi:`pytest-offline` Mar 09, 2023 1 - Planning pytest (>=7.0.0,<8.0.0) :pypi:`pytest-ogsm-plugin` 针对特定项目定制化插件,优化了pytest报告展示方式,并添加了项目所需特定参数 May 16, 2023 N/A N/A @@ -1285,6 +1287,7 @@ This list contains 1971 plugins. :pypi:`pytest-park` Organise and analyse your pytest benchmarks Mar 20, 2026 N/A N/A :pypi:`pytest-pass` Check out https://github.com/elilutsky/pytest-pass Dec 04, 2019 N/A N/A :pypi:`pytest-passrunner` Pytest plugin providing the 'run_on_pass' marker Feb 10, 2021 5 - Production/Stable pytest (>=4.6.0) + :pypi:`pytest-pastebin` Submit pytest failure or test session information to a pastebin service May 10, 2026 6 - Mature pytest>=7 :pypi:`pytest-paste-config` Allow setting the path to a paste config file Sep 18, 2013 3 - Alpha N/A :pypi:`pytest-patch` An automagic \`patch\` fixture that can patch objects directly or by name. Apr 29, 2023 3 - Alpha pytest (>=7.0.0) :pypi:`pytest-patches` A contextmanager pytest fixture for handling multiple mock patches May 09, 2026 4 - Beta pytest>=3.5.0 @@ -1357,7 +1360,7 @@ This list contains 1971 plugins. :pypi:`pytest-porcochu` Show surprise when tests are passing Nov 28, 2024 5 - Production/Stable N/A :pypi:`pytest-portion` Select a portion of the collected tests Mar 04, 2026 4 - Beta pytest>=3.5.0 :pypi:`pytest-postgres` Run PostgreSQL in Docker container in Pytest. Mar 22, 2020 N/A pytest - :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. Jan 23, 2026 5 - Production/Stable pytest>=8.2 + :pypi:`pytest-postgresql` Postgresql fixtures and fixture factories for Pytest. May 15, 2026 5 - Production/Stable pytest>=8.2 :pypi:`pytest-power` pytest plugin with powerful fixtures Dec 31, 2020 N/A pytest (>=5.4) :pypi:`pytest-powerpack` A plugin containing extra batteries for pytest Jan 04, 2025 N/A pytest<9.0.0,>=8.1.1 :pypi:`pytest-prairielearn-grader` A pytest plugin for autograding Python code. Designed for use with the PrairieLearn platform. Mar 26, 2026 3 - Alpha pytest @@ -1385,6 +1388,7 @@ This list contains 1971 plugins. :pypi:`pytest-publish` Jun 04, 2024 N/A pytest<9.0.0,>=8.0.0 :pypi:`pytest-pudb` Pytest PuDB debugger integration Oct 25, 2018 3 - Alpha pytest (>=2.0) :pypi:`pytest-pudb-resurrected` Pytest PuDB debugger integration Mar 12, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-pulse-report` A pytest reporter and dashboard for visualizing Playwright (pytest-playwright) test results — Python port of playwright-pulse May 14, 2026 N/A pytest>=7.0.0 :pypi:`pytest-pumpkin-spice` A pytest plugin that makes your test reporting pumpkin-spiced Sep 18, 2022 4 - Beta N/A :pypi:`pytest-purkinje` py.test plugin for purkinje test runner Oct 28, 2017 2 - Pre-Alpha N/A :pypi:`pytest-pusher` pytest plugin for push report to minio Jan 06, 2023 5 - Production/Stable pytest (>=3.6) @@ -1427,6 +1431,7 @@ This list contains 1971 plugins. :pypi:`pytest-qaseio` Pytest plugin for Qase.io integration Dec 10, 2025 5 - Production/Stable pytest>=7.2.2 :pypi:`pytest-qasync` Pytest support for qasync. Jul 12, 2021 4 - Beta pytest (>=5.4.0) :pypi:`pytest-qatouch` Pytest plugin for uploading test results to your QA Touch Testrun. Feb 14, 2023 4 - Beta pytest (>=6.2.0) + :pypi:`pytest-qemu-pic32mk` pytest plugin for QEMU-based functional tests targeting PIC32MK (MIPS32) firmware May 12, 2026 N/A pytest>=7.0 :pypi:`pytest-qfield` A pytest plugin for testing QField qml plugins Apr 06, 2026 N/A N/A :pypi:`pytest-qgis` A pytest plugin for testing QGIS python plugins Apr 01, 2026 5 - Production/Stable pytest>=6.0 :pypi:`pytest-qml` Run QML Tests with pytest Dec 02, 2020 4 - Beta pytest (>=6.0.0) @@ -1454,7 +1459,7 @@ This list contains 1971 plugins. :pypi:`pytest-rca-report` Interactive RCA report generator for pytest runs, with AI-based analysis and visual dashboard Aug 04, 2025 N/A N/A :pypi:`pytest-readable` Pytest plugin that renders readable test specifications and exports documentation Mar 23, 2026 3 - Alpha pytest<10.0,>=9.0 :pypi:`pytest-readme` Test your README.md file Aug 01, 2025 5 - Production/Stable pytest - :pypi:`pytest-reana` Pytest fixtures for REANA. Apr 28, 2026 3 - Alpha N/A + :pypi:`pytest-reana` Pytest fixtures for REANA. May 12, 2026 3 - Alpha N/A :pypi:`pytest-recap` Capture your test sessions. Recap the results. Jun 16, 2025 N/A pytest>=6.2.0 :pypi:`pytest-recorder` Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs. Apr 13, 2026 N/A pytest>=8.4.1 :pypi:`pytest-recording` A pytest plugin powered by VCR.py to record and replay HTTP traffic May 08, 2025 4 - Beta pytest>=3.5.0 @@ -1514,7 +1519,7 @@ This list contains 1971 plugins. :pypi:`pytest-rerun` Re-run only changed files in specified branch Jul 08, 2019 N/A pytest (>=3.6) :pypi:`pytest-rerun-all` Rerun testsuite for a certain time or iterations Jul 30, 2025 3 - Alpha pytest>=7.0.0 :pypi:`pytest-rerunclassfailures` pytest rerun class failures plugin Apr 24, 2024 5 - Production/Stable pytest>=7.2 - :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures Oct 10, 2025 5 - Production/Stable pytest!=8.2.2,>=7.4 + :pypi:`pytest-rerunfailures` pytest plugin to re-run tests to eliminate flaky failures May 13, 2026 5 - Production/Stable pytest!=8.2.2,>=8.1 :pypi:`pytest-rerunfailures-all-logs` pytest plugin to re-run tests to eliminate flaky failures Mar 07, 2022 5 - Production/Stable N/A :pypi:`pytest-reserial` Pytest fixture for recording and replaying serial port traffic. Dec 30, 2025 4 - Beta pytest :pypi:`pytest-resilient-circuits` Resilient Circuits fixtures for PyTest Apr 29, 2026 N/A pytest~=7.0 @@ -1727,6 +1732,7 @@ This list contains 1971 plugins. :pypi:`pytest-stf` pytest plugin for openSTF Sep 23, 2025 N/A pytest>=5.0 :pypi:`pytest-stochastic` A pytest plugin for principled stochastic unit testing using concentration inequalities Feb 24, 2026 4 - Beta pytest>=7.0 :pypi:`pytest-stochastics` pytest plugin that allows selectively running tests several times and accepting \*some\* failures. Dec 01, 2024 N/A pytest<9.0.0,>=8.0.0 + :pypi:`pytest-stogger` AST-based convention checking helpers for pytest. May 16, 2026 N/A N/A :pypi:`pytest-stoq` A plugin to pytest stoq Feb 09, 2021 4 - Beta N/A :pypi:`pytest-storage` Pytest plugin to store test artifacts Sep 12, 2025 3 - Alpha pytest>=8.4.2 :pypi:`pytest-store` Pytest plugin to store values from test runs Jul 30, 2025 3 - Alpha pytest>=7.0.0 @@ -1739,7 +1745,7 @@ This list contains 1971 plugins. :pypi:`pytest-study` A pytest plugin to organize long run tests (named studies) without interfering the regular tests Sep 26, 2017 3 - Alpha pytest (>=2.0) :pypi:`pytest-subinterpreter` Run pytest in a subinterpreter Nov 25, 2023 N/A pytest>=7.0.0 :pypi:`pytest-subket` Pytest Plugin to disable socket calls during tests Jul 31, 2025 4 - Beta N/A - :pypi:`pytest-subprocess` A plugin to fake subprocess for pytest Mar 21, 2026 5 - Production/Stable pytest>=4.0.0 + :pypi:`pytest-subprocess` A plugin to fake subprocess for pytest May 10, 2026 5 - Production/Stable pytest>=4.0.0 :pypi:`pytest-subtesthack` A hack to explicitly set up and tear down fixtures. Jul 16, 2022 N/A N/A :pypi:`pytest-subtests` unittest subTest() support and subtests fixture Oct 20, 2025 4 - Beta pytest>=7.4 :pypi:`pytest-subunit` pytest-subunit is a plugin for py.test which outputs testsresult in subunit format. Sep 17, 2023 N/A pytest (>=2.3) @@ -1777,6 +1783,7 @@ This list contains 1971 plugins. :pypi:`pytest-testconfig` Test configuration plugin for pytest. Jan 11, 2020 4 - Beta pytest (>=3.5.0) :pypi:`pytest-testcontainers` Named pytest fixtures and a maker convention on top of testcontainers-python. May 08, 2026 4 - Beta pytest<9,>=7.4 :pypi:`pytest-testcontainers-compose` Pytest plugin for Docker Compose Feb 11, 2026 N/A N/A + :pypi:`pytest-testcontainers-django` Bridge between pytest-testcontainers and pytest-django: starts the DB container before Django imports settings. May 14, 2026 4 - Beta pytest<9,>=7.4 :pypi:`pytest-testdata` Get and load testdata in pytest projects Aug 30, 2024 N/A pytest :pypi:`pytest-testdirectory` A py.test plugin providing temporary directories in unit tests. May 02, 2023 5 - Production/Stable pytest :pypi:`pytest-testdox` A testdox format reporter for pytest Jul 22, 2023 5 - Production/Stable pytest (>=4.6.0) @@ -1937,7 +1944,7 @@ This list contains 1971 plugins. :pypi:`pytest-watch-plugin` Placeholder for internal package Sep 12, 2024 N/A N/A :pypi:`pytest_wdb` Trace pytest tests with wdb to halt on error with --wdb. Jul 04, 2016 N/A N/A :pypi:`pytest-wdl` Pytest plugin for testing WDL workflows. Nov 17, 2020 5 - Production/Stable N/A - :pypi:`pytest-web` Local web UI for running and monitoring pytest suites May 09, 2026 3 - Alpha pytest>=7.0 + :pypi:`pytest-web` Local web UI for running and monitoring pytest suites May 10, 2026 3 - Alpha pytest>=7.0 :pypi:`pytest-web3-data` A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution. Oct 04, 2023 4 - Beta pytest :pypi:`pytest-webdriver` Selenium webdriver fixture for py.test Oct 17, 2024 5 - Production/Stable pytest :pypi:`pytest-webstage` Test web apps with pytest Sep 20, 2024 N/A pytest<9.0,>=7.0 @@ -2053,9 +2060,9 @@ This list contains 1971 plugins. Pytest integration for the ABQ universal test runner. :pypi:`pytest-abstracts` - *last release*: May 09, 2026, + *last release*: May 15, 2026, *status*: 4 - Beta, - *requires*: pytest>=3.5.0 + *requires*: pytest>=7.4.0 A pytest fixture for testing abstract interface implementations @@ -2676,7 +2683,7 @@ This list contains 1971 plugins. pytest plugin to help with comparing array output from tests :pypi:`pytest-artifacts` - *last release*: Apr 17, 2026, + *last release*: May 14, 2026, *status*: 4 - Beta, *requires*: pytest>=6.2.0 @@ -3208,7 +3215,7 @@ This list contains 1971 plugins. :pypi:`pytest-beacon` - *last release*: May 09, 2026, + *last release*: May 11, 2026, *status*: 3 - Alpha, *requires*: pytest>=9.0.0 @@ -3236,7 +3243,7 @@ This list contains 1971 plugins. Pytest plugin that applies @beartype to every collected test function. :pypi:`pytest-bec-e2e` - *last release*: May 08, 2026, + *last release*: May 15, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -3250,11 +3257,11 @@ This list contains 1971 plugins. Fixtures for testing Google Appengine (GAE) apps :pypi:`pytest-beehave` - *last release*: Apr 21, 2026, + *last release*: May 13, 2026, *status*: 4 - Beta, *requires*: pytest>=9.0.3; extra == "dev" - A pytest plugin that runs acceptance criteria stub generation as part of the pytest lifecycle, with auto-ID assignment and generic step docstrings + A pytest plugin that generates test stubs from Gherkin feature files, checks consistency, and displays BDD steps in pytest output :pypi:`pytest-beeprint` *last release*: Jul 04, 2023, @@ -3390,7 +3397,7 @@ This list contains 1971 plugins. A pytest plugin that adds a \`blue\` fixture for printing stuff in blue. :pypi:`pytest-bluezenv` - *last release*: May 09, 2026, + *last release*: May 12, 2026, *status*: 3 - Alpha, *requires*: pytest>=8 @@ -3403,8 +3410,8 @@ This list contains 1971 plugins. Local continuous test runner with pytest and watchdog. - :pypi:`pytest-boardfarm3` - *last release*: Sep 15, 2025, + :pypi:`pytest_boardfarm3` + *last release*: May 13, 2026, *status*: N/A, *requires*: pytest @@ -4230,7 +4237,7 @@ This list contains 1971 plugins. pytest plugin to run pycodestyle :pypi:`pytest-codspeed` - *last release*: Apr 28, 2026, + *last release*: May 14, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=3.8 @@ -4454,7 +4461,7 @@ This list contains 1971 plugins. Run pytest and report coverage only for git-affected modules. :pypi:`pytest-cov-container` - *last release*: Mar 23, 2026, + *last release*: May 16, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 @@ -4748,7 +4755,7 @@ This list contains 1971 plugins. Useful functions for managing data for pytest fixtures :pypi:`pytest-databases` - *last release*: Mar 10, 2026, + *last release*: May 12, 2026, *status*: 4 - Beta, *requires*: pytest @@ -5076,6 +5083,13 @@ This list contains 1971 plugins. A plugin to deselect pytests tests rather than using skipif + :pypi:`pytest-devant-cloud` + *last release*: May 11, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + pytest plugin that streams runs, results, and step trees to Devant Cloud's /v1/runs API. + :pypi:`pytest-devpi-server` *last release*: Oct 17, 2024, *status*: 5 - Production/Stable, @@ -5721,7 +5735,7 @@ This list contains 1971 plugins. A Pytest plugin to ignore tests during collection without reporting them in the test summary. :pypi:`pytest-dsl` - *last release*: Apr 30, 2026, + *last release*: May 16, 2026, *status*: N/A, *requires*: pytest>=7.0.0 @@ -5741,6 +5755,13 @@ This list contains 1971 plugins. Playwright-based UI automation keywords for pytest-dsl framework + :pypi:`pytest-duckdb` + *last release*: May 10, 2026, + *status*: 3 - Alpha, + *requires*: pytest>=7.0 + + pytest plugin for SQL pipeline testing with DuckDB — load fixtures, run queries, snapshot results + :pypi:`pytest-dummynet` *last release*: Dec 15, 2021, *status*: 5 - Production/Stable, @@ -5917,70 +5938,70 @@ This list contains 1971 plugins. Send execution result email :pypi:`pytest-embedded` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0 A pytest plugin that designed for embedded testing. :pypi:`pytest-embedded-arduino` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Arduino. :pypi:`pytest-embedded-arduino-cli` - *last release*: May 08, 2026, + *last release*: May 11, 2026, *status*: N/A, *requires*: pytest>=8 A pytest plugin to test Arduino projects using pytest-embedded and arduino-cli :pypi:`pytest-embedded-idf` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with ESP-IDF. :pypi:`pytest-embedded-jtag` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with JTAG. :pypi:`pytest-embedded-nuttx` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with NuttX. :pypi:`pytest-embedded-qemu` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with QEMU. :pypi:`pytest-embedded-serial` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Serial. :pypi:`pytest-embedded-serial-esp` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A Make pytest-embedded plugin work with Espressif target boards. :pypi:`pytest-embedded-wokwi` - *last release*: Mar 02, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -6133,13 +6154,6 @@ This list contains 1971 plugins. py.test plugin to send test info to report portal dynamically - :pypi:`pytest-error` - *last release*: Dec 06, 2025, - *status*: 4 - Beta, - *requires*: pytest>=8.4 - - A decorator for testing exceptions with pytest - :pypi:`pytest-error-for-skips` *last release*: Dec 19, 2019, *status*: 4 - Beta, @@ -6694,11 +6708,11 @@ This list contains 1971 plugins. Pytest plugin for recording and replaying deterministic function calls :pypi:`pytest-fixkit` - *last release*: May 08, 2026, + *last release*: May 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest - A very micro http framework. + A set of useful pytest fixtures that I use everyday. :pypi:`pytest-fixture-cache` *last release*: Jan 25, 2026, @@ -6897,7 +6911,7 @@ This list contains 1971 plugins. pytest plugin to check source code with pyflakes :pypi:`pytest-flakiness` - *last release*: Apr 23, 2026, + *last release*: May 15, 2026, *status*: N/A, *requires*: pytest>=9.0.2 @@ -6918,11 +6932,11 @@ This list contains 1971 plugins. A set of py.test fixtures to test Flask applications. :pypi:`pytest-flask-ligand` - *last release*: Apr 25, 2023, + *last release*: May 14, 2026, *status*: 4 - Beta, - *requires*: pytest (~=7.3) + *requires*: pytest>=7.3 + - Pytest fixtures and helper functions to use for testing flask-ligand microservices. :pypi:`pytest-flask-sqlalchemy` *last release*: Apr 30, 2022, @@ -6960,7 +6974,7 @@ This list contains 1971 plugins. A pytest plugin in order to provide logs via fluentbit :pypi:`pytest-fly` - *last release*: May 06, 2026, + *last release*: May 13, 2026, *status*: 3 - Alpha, *requires*: pytest @@ -7078,6 +7092,13 @@ This list contains 1971 plugins. Deterministically frozen UUID's for your tests + :pypi:`pytest-fsd` + *last release*: May 13, 2026, + *status*: 4 - Beta, + *requires*: N/A + + Feature-Sliced Design (FSD) architecture validation plugin for pytest + :pypi:`pytest_ftpserver` *last release*: Feb 10, 2026, *status*: 5 - Production/Stable, @@ -7121,8 +7142,8 @@ This list contains 1971 plugins. pytest plugin for Firefox Accounts :pypi:`pytest-fxa-mte` - *last release*: Mar 23, 2026, - *status*: 5 - Production/Stable, + *last release*: May 15, 2026, + *status*: 4 - Beta, *requires*: N/A pytest plugin for Firefox Accounts @@ -7233,7 +7254,7 @@ This list contains 1971 plugins. For finding/executing Ghost Inspector tests :pypi:`pytest-girder` - *last release*: Apr 30, 2026, + *last release*: May 13, 2026, *status*: N/A, *requires*: pytest>=3.6 @@ -7632,14 +7653,14 @@ This list contains 1971 plugins. A pytest plugin for use with homeassistant custom components. :pypi:`pytest-homeassistant-custom-component` - *last release*: May 09, 2026, + *last release*: May 16, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.3 Experimental package to automatically extract test plugins for Home Assistant custom components :pypi:`pytest-homeassistant-custom-component-framework` - *last release*: May 09, 2026, + *last release*: May 16, 2026, *status*: 3 - Alpha, *requires*: pytest==9.0.3 @@ -8052,14 +8073,14 @@ This list contains 1971 plugins. A pytest plugin for image snapshot management and comparison. :pypi:`pytest-impacted` - *last release*: May 01, 2026, + *last release*: May 12, 2026, *status*: 4 - Beta, *requires*: pytest>=8.0.0 A pytest plugin that selectively runs tests impacted by code changes via git introspection, AST parsing, and dependency graph analysis. :pypi:`pytest-impacted-rs` - *last release*: May 01, 2026, + *last release*: May 12, 2026, *status*: 4 - Beta, *requires*: N/A @@ -8199,7 +8220,7 @@ This list contains 1971 plugins. A py.test plugin providing fixtures to simplify inmanta modules testing. :pypi:`pytest-inmanta-extensions` - *last release*: Apr 28, 2026, + *last release*: May 13, 2026, *status*: 5 - Production/Stable, *requires*: N/A @@ -8367,7 +8388,7 @@ This list contains 1971 plugins. Pytest plugin to run tests in Jupyter Notebooks :pypi:`pytest-ipywidgets` - *last release*: Feb 24, 2026, + *last release*: May 14, 2026, *status*: N/A, *requires*: pytest @@ -8402,7 +8423,7 @@ This list contains 1971 plugins. py.test plugin to check import ordering using isort :pypi:`pytest-issues` - *last release*: Apr 29, 2026, + *last release*: May 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8 @@ -8682,7 +8703,7 @@ This list contains 1971 plugins. Pytest plugin to run a single-broker Kafka cluster :pypi:`pytest-kafka-contract` - *last release*: Apr 29, 2026, + *last release*: May 10, 2026, *status*: 3 - Alpha, *requires*: pytest>=8.0.0 @@ -9263,9 +9284,9 @@ This list contains 1971 plugins. Pytest plugin for logscanner (A logger for python logging outputting to easily viewable (and filterable) html files. Good for people not grep savey, and color higlighting and quickly changing filters might even bye useful for commandline wizards.) :pypi:`pytest-loguru` - *last release*: Mar 20, 2024, + *last release*: May 16, 2026, *status*: 5 - Production/Stable, - *requires*: pytest; extra == "test" + *requires*: N/A Pytest Loguru @@ -9641,7 +9662,7 @@ This list contains 1971 plugins. Module for handling PyTest logging. :pypi:`pytest-mg` - *last release*: May 08, 2026, + *last release*: May 11, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.0 @@ -9900,9 +9921,9 @@ This list contains 1971 plugins. pytest plugin for MongoDB :pypi:`pytest-mongo-docker` - *last release*: Mar 05, 2026, + *last release*: May 14, 2026, *status*: 5 - Production/Stable, - *requires*: pytest>=7.4 + *requires*: pytest>=8.0 A tiny plugin for pytest which runs MongoDB in Docker @@ -10068,7 +10089,7 @@ This list contains 1971 plugins. Mypy static type checker plugin for Pytest :pypi:`pytest-mypy-plugins` - *last release*: Apr 17, 2026, + *last release*: May 14, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=7.0.0 @@ -10404,7 +10425,7 @@ This list contains 1971 plugins. Project description :pypi:`pytest-oduit` - *last release*: May 09, 2026, + *last release*: May 12, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8 @@ -10767,6 +10788,13 @@ This list contains 1971 plugins. Pytest plugin providing the 'run_on_pass' marker + :pypi:`pytest-pastebin` + *last release*: May 10, 2026, + *status*: 6 - Mature, + *requires*: pytest>=7 + + Submit pytest failure or test session information to a pastebin service + :pypi:`pytest-paste-config` *last release*: Sep 18, 2013, *status*: 3 - Alpha, @@ -11272,7 +11300,7 @@ This list contains 1971 plugins. Run PostgreSQL in Docker container in Pytest. :pypi:`pytest-postgresql` - *last release*: Jan 23, 2026, + *last release*: May 15, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=8.2 @@ -11467,6 +11495,13 @@ This list contains 1971 plugins. Pytest PuDB debugger integration + :pypi:`pytest-pulse-report` + *last release*: May 14, 2026, + *status*: N/A, + *requires*: pytest>=7.0.0 + + A pytest reporter and dashboard for visualizing Playwright (pytest-playwright) test results — Python port of playwright-pulse + :pypi:`pytest-pumpkin-spice` *last release*: Sep 18, 2022, *status*: 4 - Beta, @@ -11761,6 +11796,13 @@ This list contains 1971 plugins. Pytest plugin for uploading test results to your QA Touch Testrun. + :pypi:`pytest-qemu-pic32mk` + *last release*: May 12, 2026, + *status*: N/A, + *requires*: pytest>=7.0 + + pytest plugin for QEMU-based functional tests targeting PIC32MK (MIPS32) firmware + :pypi:`pytest-qfield` *last release*: Apr 06, 2026, *status*: N/A, @@ -11951,7 +11993,7 @@ This list contains 1971 plugins. Test your README.md file :pypi:`pytest-reana` - *last release*: Apr 28, 2026, + *last release*: May 12, 2026, *status*: 3 - Alpha, *requires*: N/A @@ -12371,9 +12413,9 @@ This list contains 1971 plugins. pytest rerun class failures plugin :pypi:`pytest-rerunfailures` - *last release*: Oct 10, 2025, + *last release*: May 13, 2026, *status*: 5 - Production/Stable, - *requires*: pytest!=8.2.2,>=7.4 + *requires*: pytest!=8.2.2,>=8.1 pytest plugin to re-run tests to eliminate flaky failures @@ -13861,6 +13903,13 @@ This list contains 1971 plugins. pytest plugin that allows selectively running tests several times and accepting \*some\* failures. + :pypi:`pytest-stogger` + *last release*: May 16, 2026, + *status*: N/A, + *requires*: N/A + + AST-based convention checking helpers for pytest. + :pypi:`pytest-stoq` *last release*: Feb 09, 2021, *status*: 4 - Beta, @@ -13946,7 +13995,7 @@ This list contains 1971 plugins. Pytest Plugin to disable socket calls during tests :pypi:`pytest-subprocess` - *last release*: Mar 21, 2026, + *last release*: May 10, 2026, *status*: 5 - Production/Stable, *requires*: pytest>=4.0.0 @@ -14211,6 +14260,13 @@ This list contains 1971 plugins. Pytest plugin for Docker Compose + :pypi:`pytest-testcontainers-django` + *last release*: May 14, 2026, + *status*: 4 - Beta, + *requires*: pytest<9,>=7.4 + + Bridge between pytest-testcontainers and pytest-django: starts the DB container before Django imports settings. + :pypi:`pytest-testdata` *last release*: Aug 30, 2024, *status*: N/A, @@ -15332,7 +15388,7 @@ This list contains 1971 plugins. Pytest plugin for testing WDL workflows. :pypi:`pytest-web` - *last release*: May 09, 2026, + *last release*: May 10, 2026, *status*: 3 - Alpha, *requires*: pytest>=7.0 From d6dbe52bda18fe2cb63c3c9060d7ef8597465655 Mon Sep 17 00:00:00 2001 From: Hamza Mobeen Date: Mon, 18 May 2026 17:18:31 +0100 Subject: [PATCH 301/307] New assertion_text_diff_style option for text diff blocks (#14425) Closes #6757 --- changelog/6757.feature.rst | 3 + doc/en/how-to/output.rst | 7 ++ doc/en/reference/reference.rst | 26 ++++ src/_pytest/assertion/__init__.py | 14 +++ src/_pytest/assertion/util.py | 102 +++++++++++++++- testing/test_assertion.py | 197 +++++++++++++++++++++++++++++- 6 files changed, 338 insertions(+), 11 deletions(-) create mode 100644 changelog/6757.feature.rst diff --git a/changelog/6757.feature.rst b/changelog/6757.feature.rst new file mode 100644 index 00000000000..0c154d3d6ff --- /dev/null +++ b/changelog/6757.feature.rst @@ -0,0 +1,3 @@ +Added the :confval:`assertion_text_diff_style` configuration option, allowing +string equality failures to be rendered as separate ``Left:`` and ``Right:`` +blocks instead of ``ndiff`` output. diff --git a/doc/en/how-to/output.rst b/doc/en/how-to/output.rst index a594fcb3aab..db36a5a7206 100644 --- a/doc/en/how-to/output.rst +++ b/doc/en/how-to/output.rst @@ -363,6 +363,13 @@ This is done by setting a verbosity level in the configuration file for the spec ``pytest --no-header`` with a value of ``2`` would have the same output as the previous example, but each test inside the file is shown by a single character in the output. +:confval:`assertion_text_diff_style`: Controls how pytest renders ``str == str`` failures. + + * ``ndiff`` (the default) outputs the differences using inline diff markers. + * ``block`` prints string comparisons as separate ``Left:`` and ``Right:`` blocks, which can be easier to read when whitespace or indentation differences dominate. + + Note that it is possible to set this option (as any other configuration option) directly in the command line using ``-o assertion_text_diff_style=block``. + :confval:`verbosity_test_cases`: Controls how verbose the test execution output should be when pytest is executed. Running ``pytest --no-header`` with a value of ``2`` would have the same output as the first verbosity example, but each test inside the file gets its own line in the output. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index a69aa2c7887..ab77da0d226 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -2699,6 +2699,32 @@ passed multiple times. The expected format is ``name=value``. For example:: A special value of ``"auto"`` can be used to explicitly use the global verbosity level. +.. confval:: assertion_text_diff_style + :type: ``str`` + :default: ``"ndiff"`` + + Set how pytest renders diffs for string equality assertions. + + Supported values are: + + * ``ndiff``: use the inline diff rendering markers. + * ``block``: render each string in separate ``Left:`` and ``Right:`` blocks. + + .. tab:: toml + + .. code-block:: toml + + [pytest] + assertion_text_diff_style = "block" + + .. tab:: ini + + .. code-block:: ini + + [pytest] + assertion_text_diff_style = block + + .. confval:: verbosity_subtests :type: ``str`` :default: ``"auto"`` diff --git a/src/_pytest/assertion/__init__.py b/src/_pytest/assertion/__init__.py index 4b946bc7074..a4530192407 100644 --- a/src/_pytest/assertion/__init__.py +++ b/src/_pytest/assertion/__init__.py @@ -57,6 +57,15 @@ def pytest_addoption(parser: Parser) -> None: default=None, help=("Set threshold of CHARS after which truncation will take effect"), ) + parser.addini( + "assertion_text_diff_style", + default=util.ASSERTION_TEXT_DIFF_STYLE_NDIFF, + help=( + "Choose how pytest renders diffs for string equality assertions: " + f"{util.ASSERTION_TEXT_DIFF_STYLE_NDIFF} or " + f"{util.ASSERTION_TEXT_DIFF_STYLE_BLOCK}" + ), + ) Config._add_verbosity_ini( parser, @@ -68,6 +77,10 @@ def pytest_addoption(parser: Parser) -> None: ) +def pytest_configure(config: Config) -> None: + util.validate_assertion_text_diff_style(config) + + def register_assert_rewrite(*names: str) -> None: """Register one or more module names to be rewritten on import. @@ -216,4 +229,5 @@ def pytest_assertrepr_compare( right=right, verbose=config.get_verbosity(Config.VERBOSITY_ASSERTIONS), highlighter=highlighter, + assertion_text_diff_style=util.get_assertion_text_diff_style(config), ) diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index 07918a66284..06b5d7270db 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -21,8 +21,10 @@ from _pytest._io.pprint import PrettyPrinter from _pytest._io.saferepr import saferepr from _pytest._io.saferepr import saferepr_unlimited +from _pytest.compat import assert_never from _pytest.compat import running_on_ci from _pytest.config import Config +from _pytest.config import UsageError # The _reprcompare attribute on the util module is used by the new assertion @@ -38,6 +40,15 @@ # Config object which is assigned during pytest_runtest_protocol. _config: Config | None = None +ASSERTION_TEXT_DIFF_STYLE_INI = "assertion_text_diff_style" +_AssertionTextDiffStyle = Literal["ndiff", "block"] +ASSERTION_TEXT_DIFF_STYLE_NDIFF: Literal["ndiff"] = "ndiff" +ASSERTION_TEXT_DIFF_STYLE_BLOCK: Literal["block"] = "block" +ASSERTION_TEXT_DIFF_STYLE_CHOICES = ( + ASSERTION_TEXT_DIFF_STYLE_NDIFF, + ASSERTION_TEXT_DIFF_STYLE_BLOCK, +) + class _HighlightFunc(Protocol): def __call__(self, source: str, lexer: Literal["diff", "python"] = "python") -> str: @@ -52,6 +63,24 @@ def dummy_highlighter(source: str, lexer: Literal["diff", "python"] = "python") return source +def get_assertion_text_diff_style(config: Config) -> _AssertionTextDiffStyle: + style = str(config.getini(ASSERTION_TEXT_DIFF_STYLE_INI)) + match style: + case "ndiff" | "block": + return style + case _: + choices = ", ".join( + repr(choice) for choice in ASSERTION_TEXT_DIFF_STYLE_CHOICES + ) + raise UsageError( + f"{ASSERTION_TEXT_DIFF_STYLE_INI} must be one of {choices}; got {style!r}" + ) + + +def validate_assertion_text_diff_style(config: Config) -> None: + get_assertion_text_diff_style(config) + + def format_explanation(explanation: str) -> str: r"""Format an explanation. @@ -180,6 +209,7 @@ def assertrepr_compare( *, verbose: int, highlighter: _HighlightFunc, + assertion_text_diff_style: _AssertionTextDiffStyle, ) -> list[str] | None: """Return specialised explanations for some operators/operands.""" # Strings which normalize equal are often hard to distinguish when printed; use ascii() to make this easier. @@ -208,7 +238,13 @@ def assertrepr_compare( explanation = None try: if op == "==": - explanation = _compare_eq_any(left, right, highlighter, verbose) + explanation = _compare_eq_any( + left, + right, + highlighter, + verbose, + assertion_text_diff_style, + ) elif op == "not in": if istext(left) and istext(right): explanation = _notin_text(left, right, verbose) @@ -246,11 +282,21 @@ def assertrepr_compare( def _compare_eq_any( - left: object, right: object, highlighter: _HighlightFunc, verbose: int = 0 + left: object, + right: object, + highlighter: _HighlightFunc, + verbose: int, + assertion_text_diff_style: _AssertionTextDiffStyle, ) -> list[str]: explanation = [] if istext(left) and istext(right): - explanation = _diff_text(left, right, highlighter, verbose) + explanation = _compare_eq_text( + left, + right, + highlighter, + verbose, + assertion_text_diff_style, + ) else: from _pytest.python_api import ApproxBase @@ -266,7 +312,13 @@ def _compare_eq_any( # field values, not the type or field names. But this branch # intentionally only handles the same-type case, which was often # used in older code bases before dataclasses/attrs were available. - explanation = _compare_eq_cls(left, right, highlighter, verbose) + explanation = _compare_eq_cls( + left, + right, + highlighter, + verbose, + assertion_text_diff_style, + ) elif issequence(left) and issequence(right): explanation = _compare_eq_sequence(left, right, highlighter, verbose) elif isset(left) and isset(right): @@ -281,6 +333,36 @@ def _compare_eq_any( return explanation +def _compare_eq_text( + left: str, + right: str, + highlighter: _HighlightFunc, + verbose: int, + assertion_text_diff_style: _AssertionTextDiffStyle, +) -> list[str]: + match assertion_text_diff_style: + case "block": + return _diff_text_block(left, right) + case "ndiff": + return _diff_text(left, right, highlighter, verbose) + case unreachable: + assert_never(unreachable) + + +def _diff_text_block(left: str, right: str) -> list[str]: + return [ + "Left:", + *_format_text_block_lines(left), + "", + "Right:", + *_format_text_block_lines(right), + ] + + +def _format_text_block_lines(text: str) -> list[str]: + return [f" {line}" for line in text.split("\n")] + + def _diff_text( left: str, right: str, highlighter: _HighlightFunc, verbose: int = 0 ) -> list[str]: @@ -541,7 +623,11 @@ def _compare_eq_dict( def _compare_eq_cls( - left: object, right: object, highlighter: _HighlightFunc, verbose: int + left: object, + right: object, + highlighter: _HighlightFunc, + verbose: int, + assertion_text_diff_style: _AssertionTextDiffStyle, ) -> list[str]: if not has_default_eq(left): return [] @@ -587,7 +673,11 @@ def _compare_eq_cls( explanation += [ indent + line for line in _compare_eq_any( - field_left, field_right, highlighter, verbose + field_left, + field_right, + highlighter, + verbose, + assertion_text_diff_style, ) ] return explanation diff --git a/testing/test_assertion.py b/testing/test_assertion.py index 9a7305a2905..006a7dbd7f2 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -19,7 +19,11 @@ import pytest -def mock_config(verbose: int = 0, assertion_override: int | None = None): +def mock_config( + verbose: int = 0, + assertion_override: int | None = None, + assertion_text_diff_style: str = util.ASSERTION_TEXT_DIFF_STYLE_NDIFF, +): class TerminalWriter: def _highlight(self, source, lexer="python"): return source @@ -44,6 +48,11 @@ def get_verbosity(self, verbosity_type: str | None = None) -> int: raise KeyError(f"Not mocked out: {verbosity_type}") + def getini(self, name: str) -> str: + if name == util.ASSERTION_TEXT_DIFF_STYLE_INI: + return assertion_text_diff_style + raise KeyError(f"Not mocked out: {name}") + return Config() @@ -81,6 +90,12 @@ def test_get_unsupported_type_error(self): with pytest.raises(KeyError): config.get_verbosity("--- NOT A VERBOSITY LEVEL ---") + def test_getini_unsupported_error(self): + config = mock_config() + + with pytest.raises(KeyError, match="Not mocked out: --- NOT AN INI ---"): + config.getini("--- NOT AN INI ---") + class TestImportHookInstallation: @pytest.mark.parametrize("initial_conftest", [True, False]) @@ -410,13 +425,33 @@ def test_check(list): result.stdout.fnmatch_lines(["*test_hello*FAIL*", "*test_check*PASS*"]) -def callop(op: str, left: Any, right: Any, verbose: int = 0) -> list[str] | None: - config = mock_config(verbose=verbose) +def callop( + op: str, + left: Any, + right: Any, + verbose: int = 0, + assertion_text_diff_style: str = util.ASSERTION_TEXT_DIFF_STYLE_NDIFF, +) -> list[str] | None: + config = mock_config( + verbose=verbose, + assertion_text_diff_style=assertion_text_diff_style, + ) return plugin.pytest_assertrepr_compare(config, op, left, right) -def callequal(left: Any, right: Any, verbose: int = 0) -> list[str] | None: - return callop("==", left, right, verbose) +def callequal( + left: Any, + right: Any, + verbose: int = 0, + assertion_text_diff_style: str = util.ASSERTION_TEXT_DIFF_STYLE_NDIFF, +) -> list[str] | None: + return callop( + "==", + left, + right, + verbose, + assertion_text_diff_style=assertion_text_diff_style, + ) class TestAssert_reprcompare: @@ -437,6 +472,18 @@ def test_text_diff(self) -> None: "+ spam", ] + def test_text_diff_ndiff_style(self) -> None: + assert util._compare_eq_text( + "spam", + "eggs", + util.dummy_highlighter, + 0, + util.ASSERTION_TEXT_DIFF_STYLE_NDIFF, + ) == [ + "- eggs", + "+ spam", + ] + def test_text_skipping(self) -> None: lines = callequal("a" * 50 + "spam", "a" * 50 + "eggs") assert lines is not None @@ -458,6 +505,58 @@ def test_multiline_text_diff(self) -> None: assert "- eggs" in diff assert "+ spam" in diff + def test_multiline_text_diff_block(self) -> None: + assert callequal( + "foo\nspam\nbar", + "foo\neggs\nbar", + assertion_text_diff_style=util.ASSERTION_TEXT_DIFF_STYLE_BLOCK, + ) == [ + r"'foo\nspam\nbar' == 'foo\neggs\nbar'", + "", + "Left:", + " foo", + " spam", + " bar", + "", + "Right:", + " foo", + " eggs", + " bar", + ] + + def test_multiline_text_diff_block_preserves_blank_lines(self) -> None: + assert callequal( + "\nfoo\n", + "\nbar", + assertion_text_diff_style=util.ASSERTION_TEXT_DIFF_STYLE_BLOCK, + ) == [ + r"'\nfoo\n' == '\nbar'", + "", + "Left:", + " ", + " foo", + " ", + "", + "Right:", + " ", + " bar", + ] + + def test_single_line_text_diff_block(self) -> None: + assert callequal( + "spam", + "eggs", + assertion_text_diff_style=util.ASSERTION_TEXT_DIFF_STYLE_BLOCK, + ) == [ + "'spam' == 'eggs'", + "", + "Left:", + " spam", + "", + "Right:", + " eggs", + ] + def test_bytes_diff_normal(self) -> None: """Check special handling for bytes diff (#5260)""" diff = callequal(b"spam", b"eggs") @@ -2184,6 +2283,94 @@ def test_long_text_fail(): ) +def test_assertion_text_diff_style_block_for_multiline_strings( + pytester: Pytester, +) -> None: + pytester.makepyfile( + r""" + actual = "alpha\n beta\n" + expected = "alpha\n beta" + + def test_text_diff(): + assert actual == expected + """ + ) + pytester.makeini( + f""" + [pytest] + assertion_text_diff_style = {util.ASSERTION_TEXT_DIFF_STYLE_BLOCK} + """ + ) + + result = pytester.runpytest("-vv") + + result.stdout.fnmatch_lines( + [ + "E Left:", + "E alpha", + "E beta", + "E ", + "E Right:", + "E alpha", + "E beta", + ] + ) + result.stdout.no_fnmatch_line("*? -*") + + +def test_assertion_text_diff_style_block_for_single_line_strings( + pytester: Pytester, +) -> None: + pytester.makepyfile( + """ + def test_text_diff(): + assert "spam" == "eggs" + """ + ) + pytester.makeini( + f""" + [pytest] + assertion_text_diff_style = {util.ASSERTION_TEXT_DIFF_STYLE_BLOCK} + """ + ) + + result = pytester.runpytest("-vv") + + result.stdout.fnmatch_lines( + [ + "E Left:", + "E spam", + "E Right:", + "E eggs", + ] + ) + result.stdout.no_fnmatch_line("*- eggs*") + + +def test_assertion_text_diff_style_invalid(pytester: Pytester) -> None: + pytester.makepyfile( + """ + def test_ok(): + pass + """ + ) + pytester.makeini( + """ + [pytest] + assertion_text_diff_style = side-by-side + """ + ) + + result = pytester.runpytest() + + assert result.ret == pytest.ExitCode.USAGE_ERROR + result.stderr.fnmatch_lines( + [ + "*ERROR: assertion_text_diff_style must be one of 'ndiff', 'block'; got 'side-by-side'" + ] + ) + + def test_full_output_vvv(pytester: Pytester) -> None: pytester.makepyfile( r""" From 28d9c65a61e7bdfef7bf726625215f27a624b94b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 22:37:26 +0000 Subject: [PATCH 302/307] [pre-commit.ci] pre-commit autoupdate (#14496) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.12 → v0.15.13](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.12...v0.15.13) - [github.com/woodruffw/zizmor-pre-commit: v1.24.1 → v1.25.2](https://github.com/woodruffw/zizmor-pre-commit/compare/v1.24.1...v1.25.2) - [github.com/pre-commit/mirrors-mypy: v2.0.0 → v2.1.0](https://github.com/pre-commit/mirrors-mypy/compare/v2.0.0...v2.1.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f3bc70c157d..633f95313fb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ minimum_pre_commit_version: "4.4.0" repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.12" + rev: "v0.15.13" hooks: - id: ruff-check args: ["--fix"] @@ -13,7 +13,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.24.1 + rev: v1.25.2 hooks: - id: zizmor args: ["--fix", "--no-progress"] @@ -34,7 +34,7 @@ repos: hooks: - id: python-use-type-annotations - repo: https://github.com/pre-commit/mirrors-mypy - rev: v2.0.0 + rev: v2.1.0 hooks: - id: mypy files: ^(src/|testing/|scripts/) From 543b11f2534bb0edc85b86767ed239da9c5bd140 Mon Sep 17 00:00:00 2001 From: Fridayworks Date: Tue, 19 May 2026 15:45:10 -0400 Subject: [PATCH 303/307] Fix -v hint in raises match diff not working (#14226) * fix: propagate assertion verbosity to raises match diff The `-v` hint in `pytest.raises(match=...)` diff output was non-functional because `_check_match` called `_diff_text` without passing the verbosity level from the pytest config. Read `VERBOSITY_ASSERTIONS` from the module-level `_config` set during test protocol. Fixes #14214. Co-Authored-By: Claude Opus 4.6 * Add changelog entry for #14214 Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- changelog/14214.bugfix.rst | 1 + src/_pytest/raises.py | 13 ++++++++++--- testing/python/raises.py | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 changelog/14214.bugfix.rst diff --git a/changelog/14214.bugfix.rst b/changelog/14214.bugfix.rst new file mode 100644 index 00000000000..ed87a66fc57 --- /dev/null +++ b/changelog/14214.bugfix.rst @@ -0,0 +1 @@ +Fixed ``-v`` hint in :func:`pytest.raises` match diff not working because assertion verbosity was not propagated. diff --git a/src/_pytest/raises.py b/src/_pytest/raises.py index a6c9e74e3ba..95b0aa0f663 100644 --- a/src/_pytest/raises.py +++ b/src/_pytest/raises.py @@ -492,12 +492,19 @@ def _check_match(self, e: BaseException) -> bool: else "" ) if isinstance(self.rawmatch, str): - # TODO: it instructs to use `-v` to print leading text, but that doesn't work - # I also don't know if this is the proper entry point, or tool to use at all + from _pytest.assertion.util import _config from _pytest.assertion.util import _diff_text from _pytest.assertion.util import dummy_highlighter + from _pytest.config import Config - diff = _diff_text(self.rawmatch, stringified_exception, dummy_highlighter) + verbose = ( + _config.get_verbosity(Config.VERBOSITY_ASSERTIONS) + if _config is not None + else 0 + ) + diff = _diff_text( + self.rawmatch, stringified_exception, dummy_highlighter, verbose + ) self._fail_reason = ("\n" if diff[0][0] == "-" else "") + "\n".join(diff) return False diff --git a/testing/python/raises.py b/testing/python/raises.py index 371cfc1bd1f..e70db1e4c28 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -487,3 +487,29 @@ def test_consecutive_backslashes_in_escape_check(self) -> None: assert not is_fully_escaped("\\\\|") # r"\\\\|" is the string \\\\| (4 backslashes + pipe): even count, pipe is unescaped assert not is_fully_escaped(r"\\\\|") + + def test_raises_match_verbose_diff(self, pytester: Pytester) -> None: + """Test that -v flag shows full diff in raises match failure (#14214).""" + pytester.makepyfile( + """ + import re + import pytest + + def test_raises_v_hint(): + prefix = "A" * 60 + expected = prefix + " expected_ending" + actual = prefix + " actual_ending" + + with pytest.raises( + ValueError, match=f"^{re.escape(expected)}$" + ): + raise ValueError(actual) + """ + ) + # Without -v: should show "Skipping ... identical leading characters" + result = pytester.runpytest() + result.stdout.fnmatch_lines(["*Skipping*identical leading*"]) + + # With -v: should NOT show "Skipping" — full diff shown + result_v = pytester.runpytest("-v") + assert "Skipping" not in result_v.stdout.str() From 46478fad53774fad76d829f51679824d0131a0b3 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Fri, 22 May 2026 21:18:01 +0200 Subject: [PATCH 304/307] fix: assign conftest fixtures to Directory nodes during collection Previously, conftest.py fixtures were registered with string-based nodeid scoping during plugin registration (before collection). This caused fixtures from nested conftest files to leak to sibling directories when testpaths pointed outside the rootdir. Now, conftest fixture registration is deferred until Directory collection. Each conftest's fixtures are parsed with the Directory node as their scope anchor, using node-based matching instead of string prefix matching. Above-rootdir conftests are handled by attaching to the Session node. Also introduces node-based autouse tracking (_node_autousenames) to replace the string-based _nodeid_autousenames dictionary. Fixes #14004. Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4 --- changelog/14004.bugfix.rst | 6 ++ src/_pytest/fixtures.py | 198 +++++++++++++++++++++++++++++-------- testing/test_conftest.py | 125 +++++++++++++++++++++++ 3 files changed, 288 insertions(+), 41 deletions(-) create mode 100644 changelog/14004.bugfix.rst diff --git a/changelog/14004.bugfix.rst b/changelog/14004.bugfix.rst new file mode 100644 index 00000000000..357f85e6436 --- /dev/null +++ b/changelog/14004.bugfix.rst @@ -0,0 +1,6 @@ +Fixed conftest.py fixture scoping when :confval:`testpaths` points outside of the :ref:`rootdir `. + +Previously, fixtures from nested conftest.py files would incorrectly leak to sibling directories +when using a relative ``testpaths`` like ``../tests/sdk``. + +Conftest fixtures are now parsed during :class:`Directory ` collection, using the ``Directory`` node for proper scoping. diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index da29622ef23..85103247f21 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -53,6 +53,7 @@ from _pytest.config import _PluggyPlugin from _pytest.config import Config from _pytest.config import ExitCode +from _pytest.config import hookimpl from _pytest.config.argparsing import Parser from _pytest.deprecated import check_ispytest from _pytest.deprecated import CLASS_FIXTURE_INSTANCE_METHOD @@ -69,6 +70,7 @@ from _pytest.scope import HIGH_SCOPES from _pytest.scope import Scope from _pytest.scope import ScopeName +from _pytest.warning_types import PytestRemovedIn10Warning from _pytest.warning_types import PytestWarning @@ -80,6 +82,7 @@ from _pytest.python import CallSpec2 from _pytest.python import Function from _pytest.python import Metafunc + from _pytest.reports import CollectReport # The value of the fixture -- return/yield of the fixture function (type variable). @@ -1030,8 +1033,21 @@ def __init__( _ispytest: bool = False, # only used in a deprecationwarning msg, can be removed in pytest9 _autouse: bool = False, + node: nodes.Node | None = None, ) -> None: check_ispytest(_ispytest) + # Emit deprecation warning if baseid string is used when node could be provided. + # baseid=None (global plugins) and baseid="" (synthetic fixtures) are fine. + if baseid and node is None: + warnings.warn( + "Passing baseid to FixtureDef is deprecated. " + "Pass node instead for fixture scoping.", + PytestRemovedIn10Warning, + stacklevel=2, + ) + # The node where this fixture was defined, if available. + # Used for node-based matching which is more robust than string matching. + self.node: Final = node # The "base" node ID for the fixture. # # This is a node ID prefix. A fixture is only available to a node (e.g. @@ -1045,11 +1061,12 @@ def __init__( # directory path relative to the rootdir. # # For other plugins, the baseid is the empty string (always matches). - self.baseid: Final = baseid or "" + # When node is available, baseid is derived from node.nodeid. + self.baseid: Final = node.nodeid if node is not None else (baseid or "") # Whether the fixture was found from a node or a conftest in the # collection tree. Will be false for fixtures defined in non-conftest # plugins. - self.has_location: Final = baseid is not None + self.has_location: Final = node is not None or baseid is not None # The fixture factory function. self.func: Final = func # The name by which the fixture may be requested. @@ -1060,7 +1077,7 @@ def __init__( scope = _eval_scope_callable(scope, argname, config) if isinstance(scope, str): scope = Scope.from_user( - scope, descr=f"Fixture '{func.__name__}'", where=baseid + scope, descr=f"Fixture '{func.__name__}'", where=self.baseid ) self._scope: Final = scope # If the fixture is directly parametrized, the parameter values. @@ -1663,11 +1680,20 @@ def __init__(self, session: Session) -> None: # explain. self._arg2fixturedefs: Final[dict[str, list[FixtureDef[Any]]]] = {} self._holderobjseen: Final[set[object]] = set() - # A mapping from a nodeid to a list of autouse fixtures it defines. - self._nodeid_autousenames: Final[dict[str, list[str]]] = { - "": self.config.getini("usefixtures"), + # A mapping from a node to a list of autouse fixture names it defines. + # The Session entry holds global usefixtures from config. + self._node_autousenames: Final[dict[nodes.Node, list[str]]] = { + session: list(self.config.getini("usefixtures")), } + # Pending conftest modules waiting to be parsed when their Directory is collected. + # Maps directory path -> conftest plugin module. + self._pending_conftests: Final[dict[Path, object]] = {} session.config.pluginmanager.register(self, "funcmanage") + # Flush initial conftests from directories above rootpath immediately. + # These will never get a Directory collector, so they need Session scope. + # This must happen here (not in pytest_make_collect_report) because + # collection may fail before Session collection starts (e.g. bad args). + self._flush_pending_conftests_to_session(session) def getfixtureinfo( self, @@ -1708,31 +1734,62 @@ def getfixtureinfo( def pytest_plugin_registered(self, plugin: _PluggyPlugin, plugin_name: str) -> None: # Fixtures defined in conftest plugins are only visible to within the # conftest's directory. This is unlike fixtures in non-conftest plugins - # which have global visibility. So for conftests, construct the base - # nodeid from the plugin name (which is the conftest path). + # which have global visibility. Conftest fixtures are deferred until + # their Directory is collected, so we can use the Directory's nodeid. if plugin_name and plugin_name.endswith("conftest.py"): # Note: we explicitly do *not* use `plugin.__file__` here -- The # difference is that plugin_name has the correct capitalization on # case-insensitive systems (Windows) and other normalization issues # (issue #11816). conftestpath = absolutepath(plugin_name) - try: - nodeid = str(conftestpath.parent.relative_to(self.config.rootpath)) - except ValueError: - nodeid = "" - if nodeid == ".": - nodeid = "" - elif nodeid: - nodeid = nodes.norm_sep(nodeid) + conftest_dir = conftestpath.parent + # Store conftest for deferred parsing when its Directory is collected. + self._pending_conftests[conftest_dir] = plugin else: - nodeid = None + # Non-conftest plugins have global visibility (nodeid=None). + self.parsefactories(plugin, None) + + @hookimpl(wrapper=True) + def pytest_make_collect_report( + self, collector: nodes.Collector + ) -> Generator[None, CollectReport, CollectReport]: + result = yield + if isinstance(collector, nodes.Directory): + plugin = self._pending_conftests.pop(collector.path, None) + if plugin is not None: + self.parsefactories(holder=plugin, node=collector) + return result - self.parsefactories(plugin, nodeid) + def _flush_pending_conftests_to_session(self, session: Session) -> None: + """Assign Session scope to initial conftests whose directories won't + be collected as Directory nodes (e.g. ancestors above rootdir).""" + rootpath = session.config.rootpath + orphaned: list[tuple[Path, object]] = [] + for conftest_dir, plugin in list(self._pending_conftests.items()): + # If the conftest dir is not under rootpath, it will never get + # a Directory collector — assign it to Session now. + try: + conftest_dir.relative_to(rootpath) + except ValueError: + orphaned.append((conftest_dir, plugin)) + for conftest_dir, plugin in orphaned: + del self._pending_conftests[conftest_dir] + self.parsefactories(holder=plugin, node=session) + + def pytest_collection_finish(self) -> None: + """Clean up any conftests that were never collected by a Directory. + + After __init__ flushes above-rootdir conftests and collection pops + under-rootdir ones, remaining entries mean collection was interrupted + (e.g. UsageError for a bad path). These conftests' fixtures aren't + needed since their directories' tests weren't collected either. + """ + self._pending_conftests.clear() def _getautousenames(self, node: nodes.Node) -> Iterator[str]: """Return the names of autouse fixtures applicable to node.""" for parentnode in node.listchain(): - basenames = self._nodeid_autousenames.get(parentnode.nodeid) + basenames = self._node_autousenames.get(parentnode) if basenames: yield from basenames @@ -1835,11 +1892,12 @@ def _register_fixture( *, name: str, func: _FixtureFunc[object], - nodeid: str | None, + nodeid: str | None = None, scope: Scope | ScopeName | Callable[[str, Config], ScopeName] = "function", params: Sequence[object] | None = None, ids: tuple[object | None, ...] | Callable[[Any], object | None] | None = None, autouse: bool = False, + node: nodes.Node | None = None, ) -> None: """Register a fixture @@ -1848,10 +1906,12 @@ def _register_fixture( :param func: The fixture's implementation function. :param nodeid: - The visibility of the fixture. The fixture will be available to the - node with this nodeid and its children in the collection tree. - None means that the fixture is visible to the entire collection tree, - e.g. a fixture defined for general use in a plugin. + The visibility of the fixture (deprecated, use node instead). + The fixture will be available to the node with this nodeid and + its children in the collection tree. None means global visibility. + :param node: + The node where the fixture is defined (preferred over nodeid). + When provided, enables node-based matching which is more robust. :param scope: The fixture's scope. :param params: @@ -1861,9 +1921,18 @@ def _register_fixture( :param autouse: Whether this is an autouse fixture. """ + # Emit deprecation warning if nodeid string is used when node could be provided. + # nodeid=None (global plugins) is fine. + if nodeid and node is None: + warnings.warn( + "Passing nodeid to _register_fixture is deprecated. " + "Pass node instead for fixture scoping.", + PytestRemovedIn10Warning, + stacklevel=2, + ) fixture_def = FixtureDef( config=self.config, - baseid=nodeid, + baseid=nodeid if node is None else None, argname=name, func=func, scope=scope, @@ -1871,6 +1940,7 @@ def _register_fixture( ids=ids, _ispytest=True, _autouse=autouse, + node=node, ) faclist = self._arg2fixturedefs.setdefault(name, []) @@ -1884,7 +1954,11 @@ def _register_fixture( i = len([f for f in faclist if not f.has_location]) faclist.insert(i, fixture_def) if autouse: - self._nodeid_autousenames.setdefault(nodeid or "", []).append(name) + if node is not None: + self._node_autousenames.setdefault(node, []).append(name) + else: + # Global plugin autouse fixtures go under Session. + self._node_autousenames.setdefault(self.session, []).append(name) @overload def parsefactories( @@ -1901,32 +1975,65 @@ def parsefactories( ) -> None: raise NotImplementedError() + @overload def parsefactories( self, - node_or_obj: nodes.Node | object, + node_or_obj: None = ..., + nodeid: None = ..., + *, + holder: object, + node: nodes.Node, + ) -> None: + raise NotImplementedError() + + def parsefactories( + self, + node_or_obj: nodes.Node | object | None = None, nodeid: str | NotSetType | None = NOTSET, + *, + holder: object | None = None, + node: nodes.Node | None = None, ) -> None: """Collect fixtures from a collection node or object. Found fixtures are parsed into `FixtureDef`s and saved. - If `node_or_object` is a collection node (with an underlying Python - object), the node's object is traversed and the node's nodeid is used to - determine the fixtures' visibility. `nodeid` must not be specified in - this case. + The preferred API uses keyword-only arguments: + - ``holder``: The object to scan for fixtures. + - ``node``: The node determining fixture visibility scope. - If `node_or_object` is an object (e.g. a plugin), the object is - traversed and the given `nodeid` is used to determine the fixtures' - visibility. `nodeid` must be specified in this case; None and "" mean - total visibility. + Legacy positional API (translated internally): + - ``parsefactories(node)``: Uses node.obj as holder, node for scope. + - ``parsefactories(obj, nodeid)``: Uses obj as holder, nodeid string for scope. """ - if nodeid is not NOTSET: + # Translate legacy API to holder/node sources of truth + # Either effective_node or effective_nodeid will be set, not both + effective_node: nodes.Node | None = None + effective_nodeid: str | None = None + + if holder is not None: + # New API: holder and node explicitly provided + holderobj = holder + effective_node = node + elif node_or_obj is None: + raise TypeError("parsefactories() requires holder or node_or_obj") + elif nodeid is not NOTSET: + # Legacy: parsefactories(obj, nodeid) - string-based scoping only + # Only warn if a non-None nodeid string is passed (None means global plugin) + if nodeid is not None: + warnings.warn( + "Passing nodeid string to parsefactories is deprecated. " + "Use parsefactories(holder=obj, node=node) instead.", + PytestRemovedIn10Warning, + stacklevel=2, + ) holderobj = node_or_obj + effective_nodeid = nodeid else: + # Legacy: parsefactories(node) - node has .obj attribute assert isinstance(node_or_obj, nodes.Node) holderobj = cast(object, node_or_obj.obj) # type: ignore[attr-defined] - assert isinstance(node_or_obj.nodeid, str) - nodeid = node_or_obj.nodeid + effective_node = node_or_obj if holderobj in self._holderobjseen: return @@ -1959,12 +2066,13 @@ def parsefactories( self._register_fixture( name=fixture_name, - nodeid=nodeid, func=func, scope=marker.scope, params=marker.params, ids=marker.ids, autouse=marker.autouse, + node=effective_node, + nodeid=effective_nodeid, ) def getfixturedefs( @@ -1990,9 +2098,17 @@ def getfixturedefs( def _matchfactories( self, fixturedefs: Iterable[FixtureDef[Any]], node: nodes.Node ) -> Iterator[FixtureDef[Any]]: - parentnodeids = {n.nodeid for n in node.iter_parents()} + # Collect parent nodes and their IDs for matching + parent_nodes = set(node.iter_parents()) + parentnodeids = {n.nodeid for n in parent_nodes} + for fixturedef in fixturedefs: - if fixturedef.baseid in parentnodeids: + if fixturedef.node is not None: + # Node-based matching: check if fixture's node is a parent + if fixturedef.node in parent_nodes: + yield fixturedef + elif fixturedef.baseid in parentnodeids: + # Fallback to string-based matching for legacy/plugins yield fixturedef diff --git a/testing/test_conftest.py b/testing/test_conftest.py index 4de61bceb90..60bcbbf1d41 100644 --- a/testing/test_conftest.py +++ b/testing/test_conftest.py @@ -764,6 +764,131 @@ def pytest_ignore_collect(collection_path, config): ) +def test_conftest_fixture_scoping_with_testpaths_outside_rootdir( + pytester: Pytester, +) -> None: + """Regression test for #14004. + + When testpaths points to a directory outside rootdir, conftest fixtures + from nested directories should not leak to sibling test directories. + + Layout: + sdk/ + pyproject.toml (rootdir, testpaths = ["../tests/sdk"]) + tests/ + sdk/ + conftest.py (outer fixture) + test_outer.py + inner/ + conftest.py (inner fixture - should NOT be visible in test_outer) + test_inner.py + """ + root = pytester.path + sdk = root / "sdk" + sdk.mkdir() + sdk.joinpath("pyproject.toml").write_text( + textwrap.dedent("""\ + [tool.pytest.ini_options] + testpaths = ["../tests/sdk"] + """), + encoding="utf-8", + ) + + tests_sdk = root / "tests" / "sdk" + tests_sdk.mkdir(parents=True) + tests_sdk.joinpath("conftest.py").write_text( + textwrap.dedent("""\ + import pytest + + @pytest.fixture(autouse=True) + def outer_fixture(): + pass + """), + encoding="utf-8", + ) + tests_sdk.joinpath("test_outer.py").write_text( + textwrap.dedent("""\ + def test_outer(request): + fixturenames = request.fixturenames + assert "outer_fixture" in fixturenames + assert "inner_fixture" not in fixturenames + """), + encoding="utf-8", + ) + + inner = tests_sdk / "inner" + inner.mkdir() + inner.joinpath("conftest.py").write_text( + textwrap.dedent("""\ + import pytest + + @pytest.fixture(autouse=True) + def inner_fixture(): + pass + """), + encoding="utf-8", + ) + inner.joinpath("test_inner.py").write_text( + textwrap.dedent("""\ + def test_inner(request): + fixturenames = request.fixturenames + assert "outer_fixture" in fixturenames + assert "inner_fixture" in fixturenames + """), + encoding="utf-8", + ) + + result = pytester.runpytest("--rootdir", str(sdk), "-v") + result.stdout.fnmatch_lines( + [ + "*test_inner*PASSED*", + "*test_outer*PASSED*", + "*2 passed*", + ] + ) + + +def test_conftest_fixture_from_ancestor_above_rootdir( + pytester: Pytester, +) -> None: + """Conftests from ancestor directories above rootdir that are loaded as + initial conftests get Session (global) visibility. + + Layout: + project/ + conftest.py (defines ancestor_fixture) + sub/ + pyproject.toml (rootdir) + test_it.py (should see ancestor_fixture) + """ + root = pytester.path + root.joinpath("conftest.py").write_text( + textwrap.dedent("""\ + import pytest + + @pytest.fixture + def ancestor_fixture(): + return "from-ancestor" + """), + encoding="utf-8", + ) + sub = root / "sub" + sub.mkdir() + sub.joinpath("pyproject.toml").write_text( + "[tool.pytest.ini_options]\n", encoding="utf-8" + ) + sub.joinpath("test_it.py").write_text( + textwrap.dedent("""\ + def test_uses_ancestor(ancestor_fixture): + assert ancestor_fixture == "from-ancestor" + """), + encoding="utf-8", + ) + + result = pytester.runpytest("--rootdir", str(sub), "--confcutdir", str(root), "-v") + result.stdout.fnmatch_lines(["*test_uses_ancestor*PASSED*", "*1 passed*"]) + + def test_required_option_help(pytester: Pytester) -> None: pytester.makeconftest("assert 0") x = pytester.mkdir("x") From 121d7a42a539cbda3fc1d0d53ba53901343a2e23 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Fri, 22 May 2026 21:21:49 +0200 Subject: [PATCH 305/307] deprecate: string-based nodeid/baseid fixture APIs with legacy fallback Refactor all internal fixture registration call sites (python.py, unittest.py) to pass node= instead of nodeid= strings. Add PytestRemovedIn10Warning for external plugins still using: - FixtureDef(baseid=...) without node= - _register_fixture(nodeid=...) without node= - parsefactories(obj, nodeid_string) The deprecated string-based paths remain functional via a legacy fallback: _nodeid_autousenames dict for autouse fixtures and string-based matching in _matchfactories. These will be removed in pytest 10. Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4 --- changelog/14004.deprecation.rst | 6 ++++++ src/_pytest/deprecated.py | 15 ++++++++++++++ src/_pytest/fixtures.py | 35 +++++++++++++++------------------ src/_pytest/python.py | 12 ++++++----- src/_pytest/unittest.py | 8 +++++--- 5 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 changelog/14004.deprecation.rst diff --git a/changelog/14004.deprecation.rst b/changelog/14004.deprecation.rst new file mode 100644 index 00000000000..594d943671a --- /dev/null +++ b/changelog/14004.deprecation.rst @@ -0,0 +1,6 @@ +Passing ``baseid`` to :class:`~pytest.FixtureDef` or ``nodeid`` strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins. + +Use the ``node`` parameter instead for fixture scoping. This enables more robust node-based +matching instead of string prefix matching. + +This will be removed in pytest 10. diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index d9da941a789..8d57a74520b 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -108,6 +108,21 @@ # the warning (possibly error in the future). +FIXTURE_BASEID_DEPRECATED = PytestRemovedIn10Warning( + "Passing baseid to FixtureDef is deprecated. Pass node instead for fixture scoping." +) + +FIXTURE_NODEID_DEPRECATED = PytestRemovedIn10Warning( + "Passing nodeid to _register_fixture is deprecated. " + "Pass node instead for fixture scoping." +) + +PARSEFACTORIES_NODEID_DEPRECATED = PytestRemovedIn10Warning( + "Passing nodeid string to parsefactories is deprecated. " + "Use parsefactories(holder=obj, node=node) instead." +) + + def check_ispytest(ispytest: bool) -> None: if not ispytest: warn(PRIVATE, stacklevel=3) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 85103247f21..9e123be230a 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -57,7 +57,10 @@ from _pytest.config.argparsing import Parser from _pytest.deprecated import check_ispytest from _pytest.deprecated import CLASS_FIXTURE_INSTANCE_METHOD +from _pytest.deprecated import FIXTURE_BASEID_DEPRECATED from _pytest.deprecated import FIXTURE_GETFIXTUREVALUE_DURING_TEARDOWN +from _pytest.deprecated import FIXTURE_NODEID_DEPRECATED +from _pytest.deprecated import PARSEFACTORIES_NODEID_DEPRECATED from _pytest.deprecated import YIELD_FIXTURE from _pytest.main import Session from _pytest.mark import ParameterSet @@ -70,7 +73,6 @@ from _pytest.scope import HIGH_SCOPES from _pytest.scope import Scope from _pytest.scope import ScopeName -from _pytest.warning_types import PytestRemovedIn10Warning from _pytest.warning_types import PytestWarning @@ -1039,12 +1041,7 @@ def __init__( # Emit deprecation warning if baseid string is used when node could be provided. # baseid=None (global plugins) and baseid="" (synthetic fixtures) are fine. if baseid and node is None: - warnings.warn( - "Passing baseid to FixtureDef is deprecated. " - "Pass node instead for fixture scoping.", - PytestRemovedIn10Warning, - stacklevel=2, - ) + warnings.warn(FIXTURE_BASEID_DEPRECATED, stacklevel=2) # The node where this fixture was defined, if available. # Used for node-based matching which is more robust than string matching. self.node: Final = node @@ -1685,6 +1682,9 @@ def __init__(self, session: Session) -> None: self._node_autousenames: Final[dict[nodes.Node, list[str]]] = { session: list(self.config.getini("usefixtures")), } + # Legacy fallback: nodeid string -> autouse names, for plugins still + # using the deprecated nodeid-based API without a node reference. + self._nodeid_autousenames: Final[dict[str, list[str]]] = {} # Pending conftest modules waiting to be parsed when their Directory is collected. # Maps directory path -> conftest plugin module. self._pending_conftests: Final[dict[Path, object]] = {} @@ -1792,6 +1792,10 @@ def _getautousenames(self, node: nodes.Node) -> Iterator[str]: basenames = self._node_autousenames.get(parentnode) if basenames: yield from basenames + # Legacy fallback: check string-based nodeid autouse names. + nodeid_basenames = self._nodeid_autousenames.get(parentnode.nodeid) + if nodeid_basenames: + yield from nodeid_basenames def _getusefixturesnames(self, node: nodes.Item) -> Iterator[str]: """Return the names of usefixtures fixtures applicable to node.""" @@ -1924,12 +1928,7 @@ def _register_fixture( # Emit deprecation warning if nodeid string is used when node could be provided. # nodeid=None (global plugins) is fine. if nodeid and node is None: - warnings.warn( - "Passing nodeid to _register_fixture is deprecated. " - "Pass node instead for fixture scoping.", - PytestRemovedIn10Warning, - stacklevel=2, - ) + warnings.warn(FIXTURE_NODEID_DEPRECATED, stacklevel=2) fixture_def = FixtureDef( config=self.config, baseid=nodeid if node is None else None, @@ -1956,6 +1955,9 @@ def _register_fixture( if autouse: if node is not None: self._node_autousenames.setdefault(node, []).append(name) + elif nodeid: + # Legacy: plugin passed nodeid string without node reference. + self._nodeid_autousenames.setdefault(nodeid, []).append(name) else: # Global plugin autouse fixtures go under Session. self._node_autousenames.setdefault(self.session, []).append(name) @@ -2021,12 +2023,7 @@ def parsefactories( # Legacy: parsefactories(obj, nodeid) - string-based scoping only # Only warn if a non-None nodeid string is passed (None means global plugin) if nodeid is not None: - warnings.warn( - "Passing nodeid string to parsefactories is deprecated. " - "Use parsefactories(holder=obj, node=node) instead.", - PytestRemovedIn10Warning, - stacklevel=2, - ) + warnings.warn(PARSEFACTORIES_NODEID_DEPRECATED, stacklevel=2) holderobj = node_or_obj effective_nodeid = nodeid else: diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 806e4a22fdf..ad5a2c6a59b 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -595,7 +595,7 @@ def xunit_setup_module_fixture(request) -> Generator[None]: # Use a unique name to speed up lookup. name=f"_xunit_setup_module_fixture_{self.obj.__name__}", func=xunit_setup_module_fixture, - nodeid=self.nodeid, + node=self, scope="module", autouse=True, ) @@ -631,7 +631,7 @@ def xunit_setup_function_fixture(request) -> Generator[None]: # Use a unique name to speed up lookup. name=f"_xunit_setup_function_fixture_{self.obj.__name__}", func=xunit_setup_function_fixture, - nodeid=self.nodeid, + node=self, scope="function", autouse=True, ) @@ -779,7 +779,9 @@ def collect(self) -> Iterable[nodes.Item | nodes.Collector]: self._register_setup_class_fixture() self._register_setup_method_fixture() - self.session._fixturemanager.parsefactories(self.newinstance(), self.nodeid) + self.session._fixturemanager.parsefactories( + holder=self.newinstance(), node=self + ) return super().collect() @@ -809,7 +811,7 @@ def xunit_setup_class_fixture(request) -> Generator[None]: # Use a unique name to speed up lookup. name=f"_xunit_setup_class_fixture_{self.obj.__qualname__}", func=xunit_setup_class_fixture, - nodeid=self.nodeid, + node=self, scope="class", autouse=True, ) @@ -843,7 +845,7 @@ def xunit_setup_method_fixture(request) -> Generator[None]: # Use a unique name to speed up lookup. name=f"_xunit_setup_method_fixture_{self.obj.__qualname__}", func=xunit_setup_method_fixture, - nodeid=self.nodeid, + node=self, scope="function", autouse=True, ) diff --git a/src/_pytest/unittest.py b/src/_pytest/unittest.py index 31be8847821..5b66be9b58d 100644 --- a/src/_pytest/unittest.py +++ b/src/_pytest/unittest.py @@ -101,7 +101,9 @@ def collect(self) -> Iterable[Item | Collector]: self._register_unittest_setup_class_fixture(cls) self._register_setup_class_fixture() - self.session._fixturemanager.parsefactories(self.newinstance(), self.nodeid) + self.session._fixturemanager.parsefactories( + holder=self.newinstance(), node=self + ) loader = TestLoader() foundsomething = False @@ -170,7 +172,7 @@ def unittest_setup_class_fixture( # Use a unique name to speed up lookup. name=f"_unittest_setUpClass_fixture_{cls.__qualname__}", func=unittest_setup_class_fixture, - nodeid=self.nodeid, + node=self, scope="class", autouse=True, ) @@ -200,7 +202,7 @@ def unittest_setup_method_fixture( # Use a unique name to speed up lookup. name=f"_unittest_setup_method_fixture_{cls.__qualname__}", func=unittest_setup_method_fixture, - nodeid=self.nodeid, + node=self, scope="function", autouse=True, ) From e804b571486b6a910198d647ac5ef0e0b2516a4a Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Fri, 22 May 2026 21:23:20 +0200 Subject: [PATCH 306/307] docs: add deprecation entry for fixture baseid/nodeid string parameters Document the deprecation of string-based fixture scoping APIs in the deprecations reference. Explains the migration path from baseid/nodeid strings to the node= parameter. Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4 --- doc/en/deprecations.rst | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/doc/en/deprecations.rst b/doc/en/deprecations.rst index d6fca825792..21464a6939e 100644 --- a/doc/en/deprecations.rst +++ b/doc/en/deprecations.rst @@ -15,6 +15,33 @@ Below is a complete list of all pytest features which are considered deprecated. :class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters `. +.. _fixture-nodeid-deprecated: + +Passing ``baseid``/``nodeid`` strings to fixture registration APIs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 9.2 + +Passing ``baseid`` to :class:`~pytest.FixtureDef` or ``nodeid`` strings to +``FixtureManager._register_fixture`` and ``FixtureManager.parsefactories`` +is deprecated. These are internal pytest APIs that are used by some plugins. + +Use the ``node`` parameter instead for fixture scoping. This enables more robust +node-based matching instead of fragile string prefix matching. + +.. code-block:: python + + # Deprecated + fixture_manager.parsefactories(plugin_obj, nodeid="tests/sub") + fixture_manager._register_fixture(name="fix", func=func, nodeid="tests/sub") + + # Use instead + fixture_manager.parsefactories(holder=plugin_obj, node=directory_node) + fixture_manager._register_fixture(name="fix", func=func, node=directory_node) + +In pytest 10, the ``baseid`` and ``nodeid`` string parameters will be removed. + + .. _pastebin-deprecated: The ``--pastebin`` option From ad045be6d8bf05a1a0e48da589218d1a5dd5a84d Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Fri, 22 May 2026 21:26:37 +0200 Subject: [PATCH 307/307] test: cover deprecated fixture nodeid legacy paths AI-generated coverage tests for the legacy string-based fixture APIs deprecated in the previous commits. These tests exist to maintain patch coverage until the deprecated code is removed in pytest 10. Covers: - parsefactories(obj, "path") warns; (obj, None) does not - parsefactories() with no args raises TypeError - _register_fixture(nodeid=...) warns + autouse populates/yields from _nodeid_autousenames - _matchfactories string-based fallback (match + non-match branches) Co-authored-by: Cursor AI Co-authored-by: Anthropic Claude Opus 4 --- testing/deprecated_test.py | 181 +++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index dd5c6781869..5c4c535f979 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -106,3 +106,184 @@ def test_foo(self, fix): result.stdout.fnmatch_lines( ["*PytestRemovedIn10Warning: Class-scoped fixture defined as instance method*"] ) + + +def test_class_scope_classmethod_fixture_not_deprecated(pytester: Pytester) -> None: + """A class-scoped fixture defined as @classmethod does NOT warn.""" + pytester.makepyfile( + """ + import pytest + + class TestClass: + @pytest.fixture(scope="class") + @classmethod + def fix(cls): + cls.attr = True + + def test_foo(self, fix): + assert type(self).attr is True + """ + ) + result = pytester.runpytest("-Werror::pytest.PytestRemovedIn10Warning") + result.assert_outcomes(passed=1) + + +class TestFixtureNodeidDeprecations: + """Tests for deprecated baseid/nodeid string APIs in fixture registration. + + AI-generated coverage tests for legacy paths that will be removed in + pytest 10. These exist solely to maintain patch coverage until the + deprecated code is deleted. + + Legacy paths covered: + - parsefactories(obj, nodeid_string) deprecation warning + - parsefactories(obj, None) does NOT warn (standard plugin pattern) + - parsefactories() with no args raises TypeError + - _register_fixture(nodeid=string) deprecation warning + - _nodeid_autousenames population and _getautousenames yield + - _matchfactories string-based fallback (match + non-match branches) + """ + + def test_parsefactories_nodeid_deprecation(self, pytester: Pytester) -> None: + """parsefactories(obj, "path") warns; parsefactories(obj, None) does not.""" + pytester.makeconftest( + """ + import pytest + import types + import warnings + + def pytest_collection_modifyitems(session, items): + fm = session._fixturemanager + + @pytest.fixture + def fix_a(): + return "a" + + @pytest.fixture + def fix_b(): + return "b" + + mod_with_path = types.ModuleType("plugin_path") + mod_with_path.fix_a = fix_a + mod_none = types.ModuleType("plugin_none") + mod_none.fix_b = fix_b + + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + fm.parsefactories(mod_with_path, "some/nodeid") + fm.parsefactories(mod_none, None) + + nodeid_warns = [x for x in w if "parsefactories" in str(x.message)] + assert len(nodeid_warns) == 1, f"Expected 1 warning, got: {w}" + """ + ) + pytester.makepyfile( + """ + def test_global_fix(fix_b): + assert fix_b == "b" + """ + ) + result = pytester.runpytest("-W", "default::pytest.PytestRemovedIn10Warning") + result.assert_outcomes(passed=1) + + def test_parsefactories_no_args_raises_typeerror(self, pytester: Pytester) -> None: + """parsefactories() with no holder and no node_or_obj raises TypeError.""" + pytester.makeconftest( + """ + import pytest + + def pytest_collection_modifyitems(session, items): + fm = session._fixturemanager + with pytest.raises(TypeError, match="requires holder or node_or_obj"): + fm.parsefactories() + """ + ) + pytester.makepyfile("def test_pass(): pass") + result = pytester.runpytest() + result.assert_outcomes(passed=1) + + def test_register_fixture_nodeid_and_autouse_legacy( + self, pytester: Pytester + ) -> None: + """_register_fixture(nodeid=string) warns and autouse populates/yields. + + Covers end-to-end: + - Deprecation warning on _register_fixture(nodeid=...) + - _nodeid_autousenames populated for autouse + non-empty nodeid + - _getautousenames yields from nodeid_basenames at lookup time + """ + pytester.makeconftest( + """ + import pytest + import warnings + + _done = False + + def pytest_collectstart(collector): + global _done + if _done or not hasattr(collector.session, "_fixturemanager"): + return + if collector.nodeid == "": + return + _done = True + fm = collector.session._fixturemanager + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + fm._register_fixture( + name="legacy_autouse", + func=lambda: None, + nodeid=collector.nodeid, + autouse=True, + ) + assert any("_register_fixture" in str(x.message) for x in w) + assert "legacy_autouse" in fm._nodeid_autousenames[collector.nodeid] + """ + ) + pytester.makepyfile( + """ + def test_autouse_yielded(request): + assert "legacy_autouse" in request.fixturenames + """ + ) + result = pytester.runpytest("-W", "default::pytest.PytestRemovedIn10Warning") + result.assert_outcomes(passed=1) + + def test_matchfactories_string_fallback(self, pytester: Pytester) -> None: + """_matchfactories uses baseid string matching for legacy fixtures. + + Exercises both branches: + - baseid="" matches all nodes (global fixture) + - baseid="nonexistent/path" matches nothing (scoped fixture invisible) + """ + pytester.makeconftest( + """ + import pytest + import warnings + + def pytest_collection_modifyitems(session, items): + fm = session._fixturemanager + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + fm._register_fixture( + name="global_legacy", func=lambda: "ok", nodeid="" + ) + fm._register_fixture( + name="scoped_legacy", func=lambda: "nope", + nodeid="nonexistent/path", + ) + """ + ) + pytester.makepyfile( + """ + def test_global_visible(global_legacy): + assert global_legacy == "ok" + + def test_scoped_invisible(request): + defs = request.session._fixturemanager.getfixturedefs( + "scoped_legacy", request._pyfuncitem + ) + assert defs == () + """ + ) + result = pytester.runpytest("-W", "ignore::pytest.PytestRemovedIn10Warning") + result.assert_outcomes(passed=2)