@@ -35,6 +35,7 @@ def __init__(self, report_path, config, report_data, template, css):
3535 self ._report = report_data
3636 self ._report .title = self ._report_path .name
3737 self ._suite_start_time = time .time ()
38+ self ._last_generated_time = None
3839
3940 @property
4041 def css (self ):
@@ -49,14 +50,31 @@ def _asset_filename(self, test_id, extra_index, test_index, file_extension):
4950 file_extension ,
5051 )[- self ._max_asset_filename_length :]
5152
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+
5270 def _generate_report (self , self_contained = False ):
53- generated = datetime .datetime .now ()
71+ self . _last_generated_time = datetime .datetime .now ()
5472 test_data = self ._report .data
5573 test_data = json .dumps (test_data )
5674 rendered_report = self ._template .render (
5775 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" ),
6078 version = __version__ ,
6179 styles = self .css ,
6280 run_count = self ._run_count (),
@@ -175,7 +193,7 @@ def pytest_sessionstart(self, session):
175193 self ._report .table_header = _fix_py (headers )
176194
177195 self ._report .running_state = "started"
178- if self ._config . getini ( "generate_report_on_test" ):
196+ if self ._should_generate_report_on_test ( ):
179197 self ._generate_report ()
180198
181199 @pytest .hookimpl (trylast = True )
@@ -256,7 +274,7 @@ def pytest_runtest_logreport(self, report):
256274 dur = test_duration if when == "call" else each .duration
257275 self ._process_report (each , dur , processed_extras )
258276
259- if self ._config . getini ( "generate_report_on_test" ):
277+ if self ._should_generate_report_on_test ( ):
260278 self ._generate_report ()
261279
262280 def _process_report (self , report , duration , processed_extras ):
0 commit comments