@@ -35,6 +35,7 @@ def __init__(self, report_path, config, report_data, template, css):
35
35
self ._report = report_data
36
36
self ._report .title = self ._report_path .name
37
37
self ._suite_start_time = time .time ()
38
+ self ._last_generated_time = None
38
39
39
40
@property
40
41
def css (self ):
@@ -49,14 +50,31 @@ def _asset_filename(self, test_id, extra_index, test_index, file_extension):
49
50
file_extension ,
50
51
)[- self ._max_asset_filename_length :]
51
52
53
+ def _should_generate_report_on_test (self ):
54
+ if not self ._config .getini ("generate_report_on_test" ):
55
+ return False
56
+
57
+ if self ._last_generated_time is None :
58
+ return True
59
+
60
+ seconds = self ._config .getini ("generate_report_on_test_rate" )
61
+
62
+ if seconds == 0.0 :
63
+ return True
64
+
65
+ return (
66
+ datetime .datetime .now () - self ._last_generated_time
67
+ >= datetime .timedelta (seconds = seconds )
68
+ )
69
+
52
70
def _generate_report (self , self_contained = False ):
53
- generated = datetime .datetime .now ()
71
+ self . _last_generated_time = datetime .datetime .now ()
54
72
test_data = self ._report .data
55
73
test_data = json .dumps (test_data )
56
74
rendered_report = self ._template .render (
57
75
title = self ._report .title ,
58
- date = generated .strftime ("%d-%b-%Y" ),
59
- time = generated .strftime ("%H:%M:%S" ),
76
+ date = self . _last_generated_time .strftime ("%d-%b-%Y" ),
77
+ time = self . _last_generated_time .strftime ("%H:%M:%S" ),
60
78
version = __version__ ,
61
79
styles = self .css ,
62
80
run_count = self ._run_count (),
@@ -175,7 +193,7 @@ def pytest_sessionstart(self, session):
175
193
self ._report .table_header = _fix_py (headers )
176
194
177
195
self ._report .running_state = "started"
178
- if self ._config . getini ( "generate_report_on_test" ):
196
+ if self ._should_generate_report_on_test ( ):
179
197
self ._generate_report ()
180
198
181
199
@pytest .hookimpl (trylast = True )
@@ -256,7 +274,7 @@ def pytest_runtest_logreport(self, report):
256
274
dur = test_duration if when == "call" else each .duration
257
275
self ._process_report (each , dur , processed_extras )
258
276
259
- if self ._config . getini ( "generate_report_on_test" ):
277
+ if self ._should_generate_report_on_test ( ):
260
278
self ._generate_report ()
261
279
262
280
def _process_report (self , report , duration , processed_extras ):
0 commit comments