2222from allure_pytest .utils import get_outcome_status , get_outcome_status_details
2323from allure_pytest .utils import get_pytest_report_status
2424from allure_pytest .utils import format_allure_link
25+ from allure_pytest .utils import get_history_id
2526from allure_commons .utils import md5
2627
2728
@@ -101,18 +102,19 @@ def pytest_runtest_setup(self, item):
101102 self ._update_fixtures_children (item )
102103 uuid = self ._cache .get (item .nodeid )
103104 test_result = self .allure_logger .get_test (uuid )
104- params = item . callspec . params if hasattr (item , 'callspec' ) else {}
105+ params = self . __get_pytest_params (item )
105106 test_result .name = allure_name (item , params )
106107 full_name = allure_full_name (item )
107108 test_result .fullName = full_name
108- test_result .historyId = md5 (item .nodeid )
109109 test_result .testCaseId = md5 (full_name )
110110 test_result .description = allure_description (item )
111111 test_result .descriptionHtml = allure_description_html (item )
112112 current_param_names = [param .name for param in test_result .parameters ]
113- test_result .parameters .extend (
114- [Parameter (name = name , value = represent (value )) for name , value in params .items ()
115- if name not in current_param_names ])
113+ test_result .parameters .extend ([
114+ Parameter (name = name , value = represent (value ))
115+ for name , value in params .items ()
116+ if name not in current_param_names
117+ ])
116118
117119 @pytest .hookimpl (hookwrapper = True )
118120 def pytest_runtest_call (self , item ):
@@ -132,6 +134,11 @@ def pytest_runtest_teardown(self, item):
132134 yield
133135 uuid = self ._cache .get (item .nodeid )
134136 test_result = self .allure_logger .get_test (uuid )
137+ test_result .historyId = get_history_id (
138+ test_result .fullName ,
139+ test_result .parameters ,
140+ original_values = self .__get_pytest_params (item )
141+ )
135142 test_result .labels .extend ([Label (name = name , value = value ) for name , value in allure_labels (item )])
136143 test_result .labels .extend ([Label (name = LabelType .TAG , value = value ) for value in pytest_markers (item )])
137144 self .__apply_default_suites (item , test_result )
@@ -287,8 +294,18 @@ def add_parameter(self, name, value, excluded, mode: ParameterMode):
287294 if existing_param :
288295 existing_param .value = represent (value )
289296 else :
290- test_result .parameters .append (Parameter (name = name , value = represent (value ),
291- excluded = excluded or None , mode = mode .value if mode else None ))
297+ test_result .parameters .append (
298+ Parameter (
299+ name = name ,
300+ value = represent (value ),
301+ excluded = excluded or None ,
302+ mode = mode .value if mode else None
303+ )
304+ )
305+
306+ @staticmethod
307+ def __get_pytest_params (item ):
308+ return item .callspec .params if hasattr (item , 'callspec' ) else {}
292309
293310 def __apply_default_suites (self , item , test_result ):
294311 default_suites = allure_suite_labels (item )
0 commit comments