From 84ea161d1409d115e4d55d4ad89f183bc2858589 Mon Sep 17 00:00:00 2001 From: Jose Carvajal Date: Wed, 17 Dec 2025 10:06:16 +0100 Subject: [PATCH] fix: strip trailing @suffix for method_name in _get_code_ref --- pytest_reportportal/service.py | 31 ++++++++++++++++++++---- tests/unit/test_service.py | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 5 deletions(-) diff --git a/pytest_reportportal/service.py b/pytest_reportportal/service.py index 521242c..235ebc7 100644 --- a/pytest_reportportal/service.py +++ b/pytest_reportportal/service.py @@ -367,6 +367,31 @@ def _get_scenario_template(self, scenario: Scenario) -> Optional[ScenarioTemplat if scenario_template and isinstance(scenario_template, ScenarioTemplate): return scenario_template + def _get_method_name(self, item: Item) -> str: + """Get the original test method name. + + Returns item.originalname if available, + otherwise strips any trailing @suffix from item.name while + preserving @ inside parameter brackets. + + :param item: pytest.Item + :return: original method name + """ + if hasattr(item, "originalname") and item.originalname is not None: + return item.originalname + + name = item.name + if "@" not in name: + return name + + last_bracket = name.rfind("]") + at_pos = name.rfind("@") + + if at_pos > last_bracket: + return name[:at_pos] + + return name + def _generate_names(self, test_tree: dict[str, Any]) -> None: if test_tree["type"] == LeafType.ROOT: test_tree["name"] = "root" @@ -584,11 +609,7 @@ def _get_code_ref(self, item: Item) -> str: # same path on different systems and do not affect Test Case ID on # different systems path = os.path.relpath(str(item.fspath), ROOT_DIR).replace("\\", "/") - method_name = ( - item.originalname - if hasattr(item, "originalname") and getattr(item, "originalname") is not None - else item.name - ) + method_name = self._get_method_name(item) parent = item.parent classes = [method_name] while not isinstance(parent, Module): diff --git a/tests/unit/test_service.py b/tests/unit/test_service.py index 286a4c4..b914cde 100644 --- a/tests/unit/test_service.py +++ b/tests/unit/test_service.py @@ -26,3 +26,47 @@ def test_get_item_parameters(mocked_item, rp_service): expect(rp_service._get_parameters(mocked_item) is None) assert_expectations() + + +def test_get_method_name_regular(mocked_item, rp_service): + """Test that regular test names are returned as-is.""" + mocked_item.name = "test_simple_function" + mocked_item.originalname = None + + result = rp_service._get_method_name(mocked_item) + + expect(result == "test_simple_function") + assert_expectations() + + +def test_get_method_name_uses_originalname(mocked_item, rp_service): + """Test that originalname is preferred when available.""" + mocked_item.name = "test_verify_data[Daily]@sync_group" + mocked_item.originalname = "test_verify_data" + + result = rp_service._get_method_name(mocked_item) + + expect(result == "test_verify_data") + assert_expectations() + + +def test_get_method_name_strips_suffix(mocked_item, rp_service): + """Test that trailing @suffix is stripped when originalname is None.""" + mocked_item.name = "test_export_data@data_export" + mocked_item.originalname = None + + result = rp_service._get_method_name(mocked_item) + + expect(result == "test_export_data") + assert_expectations() + + +def test_get_method_name_preserves_at_inside_params(mocked_item, rp_service): + """Test that @ inside parameter brackets is preserved.""" + mocked_item.name = "test_email[user@example.com]" + mocked_item.originalname = None + + result = rp_service._get_method_name(mocked_item) + + expect(result == "test_email[user@example.com]") + assert_expectations()