@@ -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 ):
0 commit comments