Skip to content

Commit 929fdae

Browse files
committed
Try to kill the live server process gracefully on test teardown
1 parent 5048d0c commit 929fdae

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

pytest_flask/fixtures.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import multiprocessing
55
import pytest
66
import socket
7+
import signal
8+
import os
9+
import logging
710

811
try:
912
from urllib2 import urlopen
@@ -49,9 +52,10 @@ class LiveServer(object):
4952
:param port: The port to run application.
5053
"""
5154

52-
def __init__(self, app, port):
55+
def __init__(self, app, port, clean_stop=False):
5356
self.app = app
5457
self.port = port
58+
self.clean_stop = clean_stop
5559
self._process = None
5660

5761
def start(self):
@@ -82,7 +86,20 @@ def url(self, url=''):
8286
def stop(self):
8387
"""Stop application process."""
8488
if self._process:
85-
self._process.terminate()
89+
if self.clean_stop:
90+
# We wait a maximum of 5 seconds for the server to terminate cleanly
91+
timeout = 5
92+
try:
93+
os.kill(self._process.pid, signal.SIGINT)
94+
self._process.join(timeout)
95+
except Exception as ex:
96+
logging.error('Failed to join the live server process: %r', ex)
97+
finally:
98+
if self._process.is_alive():
99+
# If it's still alive, kill it
100+
self._process.terminate()
101+
else:
102+
self._process.terminate()
86103

87104
def __repr__(self):
88105
return '<LiveServer listening at %s>' % self.url()
@@ -123,7 +140,8 @@ def test_server_is_up_and_running(live_server):
123140
monkeypatch.setitem(app.config, 'SERVER_NAME',
124141
_rewrite_server_name(server_name, str(port)))
125142

126-
server = LiveServer(app, port)
143+
clean_stop = request.config.getvalue('live_server_clean_stop')
144+
server = LiveServer(app, port, clean_stop)
127145
if request.config.getvalue('start_live_server'):
128146
server.start()
129147

pytest_flask/plugin.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ def pytest_addoption(parser):
123123
action="store_false", dest="start_live_server",
124124
help="don't start server automatically when live_server "
125125
"fixture is applyed.")
126+
group.addoption('--live-server-clean-stop',
127+
action="store_true", dest="live_server_clean_stop", default=True,
128+
help="attempt to kill the live server cleanly.")
129+
group.addoption('--no-live-server-clean-stop',
130+
action="store_false", dest="live_server_clean_stop",
131+
help="terminate the server forcefully after stop.")
126132

127133

128134
def pytest_configure(config):

0 commit comments

Comments
 (0)