@@ -599,18 +599,26 @@ def _get_code_ref(self, item: Item) -> str:
599599
600600 def _get_test_case_id (self , mark , leaf : Dict [str , Any ]) -> str :
601601 parameters : Optional [Dict [str , Any ]] = leaf .get ("parameters" , None )
602+ parameters_indices : Optional [Dict [str , Any ]] = leaf .get ("parameters_indices" ) or {}
602603 parameterized = True
603604 selected_params : Optional [List [str ]] = None
605+ use_index = False
604606 if mark is not None :
605607 parameterized = mark .kwargs .get ("parameterized" , False )
606608 selected_params : Optional [Union [str , List [str ]]] = mark .kwargs .get ("params" , None )
609+ use_index = mark .kwargs .get ("use_index" , False )
607610 if selected_params is not None and not isinstance (selected_params , list ):
608611 selected_params = [selected_params ]
609612
610613 param_str = None
611614 if parameterized and parameters is not None and len (parameters ) > 0 :
612615 if selected_params is not None and len (selected_params ) > 0 :
613- param_list = [str (parameters .get (param , None )) for param in selected_params ]
616+ if use_index :
617+ param_list = [str ((param , parameters_indices .get (param , None ))) for param in selected_params ]
618+ else :
619+ param_list = [str (parameters .get (param , None )) for param in selected_params ]
620+ elif use_index :
621+ param_list = [str (param ) for param in parameters_indices .items ()]
614622 else :
615623 param_list = [str (param ) for param in parameters .values ()]
616624 param_str = "[{}]" .format ("," .join (sorted (param_list )))
@@ -729,6 +737,19 @@ def _get_parameters(self, item) -> Optional[Dict[str, Any]]:
729737 return None
730738 return {str (k ): v .replace ("\0 " , "\\ 0" ) if isinstance (v , str ) else v for k , v in params .items ()}
731739
740+ def _get_parameters_indices (self , item ) -> Optional [Dict [str , Any ]]:
741+ """
742+ Get params indices of item.
743+
744+ :param item: Pytest.Item
745+ :return: dict of params indices
746+ """
747+ indices = item .callspec .indices if hasattr (item , "callspec" ) else None
748+ if not indices :
749+ return None
750+
751+ return indices
752+
732753 def _process_test_case_id (self , leaf : Dict [str , Any ]) -> str :
733754 """
734755 Process Test Case ID if set.
@@ -793,6 +814,7 @@ def _process_metadata_item_start(self, leaf: Dict[str, Any]) -> None:
793814 leaf ["name" ] = self ._process_item_name (leaf )
794815 leaf ["description" ] = self ._get_item_description (item )
795816 leaf ["parameters" ] = self ._get_parameters (item )
817+ leaf ["parameters_indices" ] = self ._get_parameters_indices (item )
796818 leaf ["code_ref" ] = self ._get_code_ref (item )
797819 leaf ["test_case_id" ] = self ._process_test_case_id (leaf )
798820 leaf ["issue" ] = self ._process_issue (item )
0 commit comments