Skip to content

Commit 62aff0d

Browse files
authored
Merge pull request #407 from Sgitario/jcarvaja/bug_test_name
fix: strip trailing @suffix for method_name in _get_code_ref
2 parents 8e99672 + 84ea161 commit 62aff0d

2 files changed

Lines changed: 70 additions & 5 deletions

File tree

pytest_reportportal/service.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,31 @@ def _get_scenario_template(self, scenario: Scenario) -> Optional[ScenarioTemplat
367367
if scenario_template and isinstance(scenario_template, ScenarioTemplate):
368368
return scenario_template
369369

370+
def _get_method_name(self, item: Item) -> str:
371+
"""Get the original test method name.
372+
373+
Returns item.originalname if available,
374+
otherwise strips any trailing @suffix from item.name while
375+
preserving @ inside parameter brackets.
376+
377+
:param item: pytest.Item
378+
:return: original method name
379+
"""
380+
if hasattr(item, "originalname") and item.originalname is not None:
381+
return item.originalname
382+
383+
name = item.name
384+
if "@" not in name:
385+
return name
386+
387+
last_bracket = name.rfind("]")
388+
at_pos = name.rfind("@")
389+
390+
if at_pos > last_bracket:
391+
return name[:at_pos]
392+
393+
return name
394+
370395
def _generate_names(self, test_tree: dict[str, Any]) -> None:
371396
if test_tree["type"] == LeafType.ROOT:
372397
test_tree["name"] = "root"
@@ -584,11 +609,7 @@ def _get_code_ref(self, item: Item) -> str:
584609
# same path on different systems and do not affect Test Case ID on
585610
# different systems
586611
path = os.path.relpath(str(item.fspath), ROOT_DIR).replace("\\", "/")
587-
method_name = (
588-
item.originalname
589-
if hasattr(item, "originalname") and getattr(item, "originalname") is not None
590-
else item.name
591-
)
612+
method_name = self._get_method_name(item)
592613
parent = item.parent
593614
classes = [method_name]
594615
while not isinstance(parent, Module):

tests/unit/test_service.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,47 @@ def test_get_item_parameters(mocked_item, rp_service):
2626
expect(rp_service._get_parameters(mocked_item) is None)
2727

2828
assert_expectations()
29+
30+
31+
def test_get_method_name_regular(mocked_item, rp_service):
32+
"""Test that regular test names are returned as-is."""
33+
mocked_item.name = "test_simple_function"
34+
mocked_item.originalname = None
35+
36+
result = rp_service._get_method_name(mocked_item)
37+
38+
expect(result == "test_simple_function")
39+
assert_expectations()
40+
41+
42+
def test_get_method_name_uses_originalname(mocked_item, rp_service):
43+
"""Test that originalname is preferred when available."""
44+
mocked_item.name = "test_verify_data[Daily]@sync_group"
45+
mocked_item.originalname = "test_verify_data"
46+
47+
result = rp_service._get_method_name(mocked_item)
48+
49+
expect(result == "test_verify_data")
50+
assert_expectations()
51+
52+
53+
def test_get_method_name_strips_suffix(mocked_item, rp_service):
54+
"""Test that trailing @suffix is stripped when originalname is None."""
55+
mocked_item.name = "test_export_data@data_export"
56+
mocked_item.originalname = None
57+
58+
result = rp_service._get_method_name(mocked_item)
59+
60+
expect(result == "test_export_data")
61+
assert_expectations()
62+
63+
64+
def test_get_method_name_preserves_at_inside_params(mocked_item, rp_service):
65+
"""Test that @ inside parameter brackets is preserved."""
66+
mocked_item.name = "test_email[user@example.com]"
67+
mocked_item.originalname = None
68+
69+
result = rp_service._get_method_name(mocked_item)
70+
71+
expect(result == "test_email[user@example.com]")
72+
assert_expectations()

0 commit comments

Comments
 (0)