From 17f7983cefabdcd5bebaa4deb8f1a74eb8885835 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Fri, 20 Mar 2026 09:40:23 +0100 Subject: [PATCH] core: Introduce mechanism for deferring skips We need to defer skips till after the setup is complete to have all the artifacts ready for the tests logs to be generated. Signed-off-by: Robert Baldyga --- core/test_run_utils.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/core/test_run_utils.py b/core/test_run_utils.py index 690252a..bebb2d0 100644 --- a/core/test_run_utils.py +++ b/core/test_run_utils.py @@ -268,6 +268,39 @@ def __generate_tests(cls, metafunc): TestRun.generate_tests = __generate_tests +@classmethod +def __post_collect(cls, items): + for item in items: + deferred_skips = [] + remaining_markers = [] + for marker in item.own_markers: + if marker.name == "skip": + deferred_skips.append(marker) + elif marker.name == "skipif": + condition = marker.args[0] if marker.args else False + if condition: + reason = marker.kwargs.get("reason", "") + deferred_skips.append(pytest.mark.skip(reason=reason)) + else: + remaining_markers.append(marker) + if deferred_skips: + item.own_markers = remaining_markers + item._deferred_skips = deferred_skips + + +TestRun.post_collect = __post_collect + + +@classmethod +def __post_setup(cls, item): + for marker in getattr(item, "_deferred_skips", []): + reason = marker.kwargs.get("reason", marker.args[0] if marker.args else "") + pytest.skip(reason) + + +TestRun.post_setup = __post_setup + + @classmethod def __addoption(cls, parser): parser.addoption("--parametrization-type", choices=["pair", "full"], default="pair")