20
20
21
21
__all__ = ("is_debugging" , "Settings" )
22
22
SESSION_TIMEOUT_KEY = pytest .StashKey [float ]()
23
+ SESSION_EXPIRE_KEY = pytest .StashKey [float ]()
23
24
24
25
25
26
HAVE_SIGALRM = hasattr (signal , "SIGALRM" )
@@ -104,6 +105,7 @@ def pytest_addoption(parser):
104
105
type = "bool" ,
105
106
default = False ,
106
107
)
108
+ parser .addini ("session_timeout" , SESSION_TIMEOUT_DESC )
107
109
108
110
109
111
class TimeoutHooks :
@@ -159,12 +161,18 @@ def pytest_configure(config):
159
161
config ._env_timeout_func_only = settings .func_only
160
162
config ._env_timeout_disable_debugger_detection = settings .disable_debugger_detection
161
163
162
- timeout = config .getoption ("--session-timeout" )
164
+ timeout = config .getoption ("session_timeout" )
165
+ if timeout is None :
166
+ ini = config .getini ("session_timeout" )
167
+ if ini :
168
+ timeout = _validate_timeout (config .getini ("session_timeout" ), "config file" )
163
169
if timeout is not None :
164
170
expire_time = time .time () + timeout
165
171
else :
166
172
expire_time = 0
167
- config .stash [SESSION_TIMEOUT_KEY ] = expire_time
173
+ timeout = 0
174
+ config .stash [SESSION_TIMEOUT_KEY ] = timeout
175
+ config .stash [SESSION_EXPIRE_KEY ] = expire_time
168
176
169
177
170
178
@pytest .hookimpl (hookwrapper = True )
@@ -185,9 +193,9 @@ def pytest_runtest_protocol(item):
185
193
hooks .pytest_timeout_cancel_timer (item = item )
186
194
187
195
# check session timeout
188
- expire_time = item .session .config .stash [SESSION_TIMEOUT_KEY ]
196
+ expire_time = item .session .config .stash [SESSION_EXPIRE_KEY ]
189
197
if expire_time and (expire_time < time .time ()):
190
- timeout = item .session .config .getoption ( "--session-timeout" )
198
+ timeout = item .session .config .stash [ SESSION_TIMEOUT_KEY ]
191
199
item .session .shouldfail = f"session-timeout: { timeout } sec exceeded"
192
200
193
201
@@ -223,7 +231,7 @@ def pytest_report_header(config):
223
231
)
224
232
)
225
233
226
- session_timeout = config .getoption ("--session-timeout " )
234
+ session_timeout = config .getoption ("session_timeout " )
227
235
if session_timeout :
228
236
timeout_header .append ("session timeout: %ss" % session_timeout )
229
237
if timeout_header :
0 commit comments