From c779aa7bde280c383fc955b55b7b515a50dc0c31 Mon Sep 17 00:00:00 2001 From: "pavel.butuzov" Date: Thu, 11 Dec 2025 10:37:00 +0300 Subject: [PATCH] fix: TMS-33883: fix parsing message for pytest skip-markers. --- .../src/testit_adapter_pytest/utils.py | 31 ++++++++++++------- .../listeners.py | 13 ++++---- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/testit-adapter-pytest/src/testit_adapter_pytest/utils.py b/testit-adapter-pytest/src/testit_adapter_pytest/utils.py index d9faad7..8c5860e 100644 --- a/testit-adapter-pytest/src/testit_adapter_pytest/utils.py +++ b/testit-adapter-pytest/src/testit_adapter_pytest/utils.py @@ -8,6 +8,7 @@ from traceback import format_exception_only +from _pytest.mark import Mark from testit_python_commons.models.link import Link from testit_python_commons.models.test_result import TestResult from testit_python_commons.models.test_result_with_all_fixture_step_results_model import TestResultWithAllFixtureStepResults @@ -36,18 +37,24 @@ def form_test(item) -> ExecutableTest: ) if item.own_markers: - for mark in item.own_markers: - if mark.name == 'skip' or mark.name == 'skipif': - executable_test.outcome = 'Skipped' - if mark.args: - executable_test.message = mark.args[0] - if mark.kwargs and 'reason' in mark.kwargs: - executable_test.message = mark.kwargs['reason'] - if mark.name == 'xfail': - if mark.args: - executable_test.message = mark.args[0] - if mark.kwargs and 'reason' in mark.kwargs: - executable_test.message = mark.kwargs['reason'] + executable_test = __set_outcome_and_message_from_markers(executable_test, item.own_markers) + + return executable_test + + +def __set_outcome_and_message_from_markers(executable_test: ExecutableTest, markers: List[Mark]) -> ExecutableTest: + for marker in markers: + if marker.name in ('skip', 'skipif'): + executable_test.outcome = 'Skipped' + if marker.name in ('skip', 'skipif', 'xfail'): + if len(marker.args) == 1 and isinstance(marker.args, str): + executable_test.message = marker.args[0] + + condition_in_args = marker.args and marker.args[0] + condition_in_kwargs = marker.kwargs and 'condition' in marker.kwargs and marker.kwargs['condition'] + + if (condition_in_kwargs or condition_in_args) and 'reason' in marker.kwargs: + executable_test.message = marker.kwargs['reason'] return executable_test diff --git a/testit-adapter-robotframework/src/testit_adapter_robotframework/listeners.py b/testit-adapter-robotframework/src/testit_adapter_robotframework/listeners.py index 1879677..211eb53 100644 --- a/testit-adapter-robotframework/src/testit_adapter_robotframework/listeners.py +++ b/testit-adapter-robotframework/src/testit_adapter_robotframework/listeners.py @@ -59,13 +59,12 @@ def end_test(self, name, attributes): self.active_test.outcome = STATUSES[attributes['status']] self.active_test.started_on = convert_time(attributes['starttime']) self.active_test.completed_on = convert_time(attributes['endtime']) - if not self.active_test.message: - if self.active_test.outcome == 'Failed': - for step in (self.active_test.setUpResults + self.active_test.stepResults + - self.active_test.tearDownResults): - if step.outcome == 'Failed': - self.active_test.message = f"Failed on step: '{step.title}'" - break + if not self.active_test.message and self.active_test.outcome == 'Failed': + for step in (self.active_test.setUpResults + self.active_test.stepResults + + self.active_test.tearDownResults): + if step.outcome == 'Failed': + self.active_test.message = f"Failed on step: '{step.title}'" + break self.active_test.traces = attributes['message'] self.active_test.duration = attributes['elapsedtime'] self.adapter_manager.write_test(