Export CollectReport and TestReport

Refs #7469.
This commit is contained in:
Ran Benita 2021-11-02 20:32:54 +02:00
parent a53abe93d8
commit b0aa870b11
5 changed files with 30 additions and 12 deletions

View File

@ -16,6 +16,8 @@ The newly-exported types are:
- ``pytest.RecordedHookCall`` for the :class:`RecordedHookCall <pytest.HookRecorder>` type returned from :class:`~pytest.HookRecorder`. - ``pytest.RecordedHookCall`` for the :class:`RecordedHookCall <pytest.HookRecorder>` type returned from :class:`~pytest.HookRecorder`.
- ``pytest.RunResult`` for the :class:`RunResult <pytest.RunResult>` type returned from :class:`~pytest.Pytester`. - ``pytest.RunResult`` for the :class:`RunResult <pytest.RunResult>` type returned from :class:`~pytest.Pytester`.
- ``pytest.LineMatcher`` for the :class:`LineMatcher <pytest.RunResult>` type used in :class:`~pytest.RunResult` and others. - ``pytest.LineMatcher`` for the :class:`LineMatcher <pytest.RunResult>` type used in :class:`~pytest.RunResult` and others.
- ``pytest.TestReport`` for the :class:`TestReport <pytest.TestReport>` type used in various hooks.
- ``pytest.CollectReport`` for the :class:`CollectReport <pytest.CollectReport>` type used in various hooks.
Constructing most of them directly is not supported; they are only meant for use in type annotations. Constructing most of them directly is not supported; they are only meant for use in type annotations.
Doing so will emit a deprecation warning, and may become a hard-error in pytest 8.0. Doing so will emit a deprecation warning, and may become a hard-error in pytest 8.0.

View File

@ -813,7 +813,7 @@ Collector
CollectReport CollectReport
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
.. autoclass:: _pytest.reports.CollectReport() .. autoclass:: pytest.CollectReport()
:members: :members:
:show-inheritance: :show-inheritance:
:inherited-members: :inherited-members:
@ -951,7 +951,7 @@ Session
TestReport TestReport
~~~~~~~~~~ ~~~~~~~~~~
.. autoclass:: _pytest.reports.TestReport() .. autoclass:: pytest.TestReport()
:members: :members:
:show-inheritance: :show-inheritance:
:inherited-members: :inherited-members:

View File

@ -323,7 +323,8 @@ def pytest_deselected(items: Sequence["Item"]) -> None:
@hookspec(firstresult=True) @hookspec(firstresult=True)
def pytest_make_collect_report(collector: "Collector") -> "Optional[CollectReport]": def pytest_make_collect_report(collector: "Collector") -> "Optional[CollectReport]":
"""Perform ``collector.collect()`` and return a CollectReport. """Perform :func:`collector.collect() <pytest.Collector.collect>` and return
a :class:`~pytest.CollectReport`.
Stops at first non-None result, see :ref:`firstresult`. Stops at first non-None result, see :ref:`firstresult`.
""" """
@ -522,19 +523,19 @@ def pytest_runtest_teardown(item: "Item", nextitem: Optional["Item"]) -> None:
def pytest_runtest_makereport( def pytest_runtest_makereport(
item: "Item", call: "CallInfo[None]" item: "Item", call: "CallInfo[None]"
) -> Optional["TestReport"]: ) -> Optional["TestReport"]:
"""Called to create a :py:class:`_pytest.reports.TestReport` for each of """Called to create a :class:`~pytest.TestReport` for each of
the setup, call and teardown runtest phases of a test item. the setup, call and teardown runtest phases of a test item.
See :func:`pytest_runtest_protocol` for a description of the runtest protocol. See :func:`pytest_runtest_protocol` for a description of the runtest protocol.
:param CallInfo[None] call: The ``CallInfo`` for the phase. :param call: The :class:`~pytest.CallInfo` for the phase.
Stops at first non-None result, see :ref:`firstresult`. Stops at first non-None result, see :ref:`firstresult`.
""" """
def pytest_runtest_logreport(report: "TestReport") -> None: def pytest_runtest_logreport(report: "TestReport") -> None:
"""Process the :py:class:`_pytest.reports.TestReport` produced for each """Process the :class:`~pytest.TestReport` produced for each
of the setup, call and teardown runtest phases of an item. of the setup, call and teardown runtest phases of an item.
See :func:`pytest_runtest_protocol` for a description of the runtest protocol. See :func:`pytest_runtest_protocol` for a description of the runtest protocol.
@ -555,7 +556,8 @@ def pytest_report_from_serializable(
config: "Config", config: "Config",
data: Dict[str, Any], data: Dict[str, Any],
) -> Optional[Union["CollectReport", "TestReport"]]: ) -> Optional[Union["CollectReport", "TestReport"]]:
"""Restore a report object previously serialized with pytest_report_to_serializable().""" """Restore a report object previously serialized with
:func:`pytest_report_to_serializable`."""
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------
@ -753,7 +755,7 @@ def pytest_report_teststatus(
for example ``"rerun", "R", ("RERUN", {"yellow": True})``. for example ``"rerun", "R", ("RERUN", {"yellow": True})``.
:param report: The report object whose status is to be returned. :param report: The report object whose status is to be returned.
:param pytest.Config config: The pytest config object. :param config: The pytest config object.
Stops at first non-None result, see :ref:`firstresult`. Stops at first non-None result, see :ref:`firstresult`.
""" """
@ -894,10 +896,10 @@ def pytest_exception_interact(
interactively handled. interactively handled.
May be called during collection (see :py:func:`pytest_make_collect_report`), May be called during collection (see :py:func:`pytest_make_collect_report`),
in which case ``report`` is a :py:class:`_pytest.reports.CollectReport`. in which case ``report`` is a :class:`CollectReport`.
May be called during runtest of an item (see :py:func:`pytest_runtest_protocol`), May be called during runtest of an item (see :py:func:`pytest_runtest_protocol`),
in which case ``report`` is a :py:class:`_pytest.reports.TestReport`. in which case ``report`` is a :class:`TestReport`.
This hook is not called if the exception that was raised is an internal This hook is not called if the exception that was raised is an internal
exception like ``skip.Exception``. exception like ``skip.Exception``.

View File

@ -143,18 +143,22 @@ class BaseReport:
@property @property
def passed(self) -> bool: def passed(self) -> bool:
"""Whether the outcome is passed."""
return self.outcome == "passed" return self.outcome == "passed"
@property @property
def failed(self) -> bool: def failed(self) -> bool:
"""Whether the outcome is failed."""
return self.outcome == "failed" return self.outcome == "failed"
@property @property
def skipped(self) -> bool: def skipped(self) -> bool:
"""Whether the outcome is skipped."""
return self.outcome == "skipped" return self.outcome == "skipped"
@property @property
def fspath(self) -> str: def fspath(self) -> str:
"""The path portion of the reported node, as a string."""
return self.nodeid.split("::")[0] return self.nodeid.split("::")[0]
@property @property
@ -237,7 +241,10 @@ def _report_unserialization_failure(
@final @final
class TestReport(BaseReport): class TestReport(BaseReport):
"""Basic test report object (also used for setup and teardown calls if """Basic test report object (also used for setup and teardown calls if
they fail).""" they fail).
Reports can contain arbitrary extra attributes.
"""
__test__ = False __test__ = False
@ -354,7 +361,10 @@ class TestReport(BaseReport):
@final @final
class CollectReport(BaseReport): class CollectReport(BaseReport):
"""Collection report object.""" """Collection report object.
Reports can contain arbitrary extra attributes.
"""
when = "collect" when = "collect"

View File

@ -57,6 +57,8 @@ from _pytest.python_api import raises
from _pytest.recwarn import deprecated_call from _pytest.recwarn import deprecated_call
from _pytest.recwarn import WarningsRecorder from _pytest.recwarn import WarningsRecorder
from _pytest.recwarn import warns from _pytest.recwarn import warns
from _pytest.reports import CollectReport
from _pytest.reports import TestReport
from _pytest.runner import CallInfo from _pytest.runner import CallInfo
from _pytest.stash import Stash from _pytest.stash import Stash
from _pytest.stash import StashKey from _pytest.stash import StashKey
@ -86,6 +88,7 @@ __all__ = [
"cmdline", "cmdline",
"collect", "collect",
"Collector", "Collector",
"CollectReport",
"Config", "Config",
"console_main", "console_main",
"deprecated_call", "deprecated_call",
@ -143,6 +146,7 @@ __all__ = [
"StashKey", "StashKey",
"version_tuple", "version_tuple",
"TempPathFactory", "TempPathFactory",
"TestReport",
"UsageError", "UsageError",
"WarningsRecorder", "WarningsRecorder",
"warns", "warns",