在冒烟测试期间,我想确保Flask应用程序正确处理一些基本请求。这涉及异步启动Flask应用程序:
class TestSmoke(unittest.TestCase):
@staticmethod
def run_server():
app.run(port=49201)
@classmethod
def setUpClass(cls):
cls.flaskProcess = multiprocessing.Process(target=TestSmoke.run_server)
cls.flaskProcess.start()
然后运行使用requests
库执行请求的测试。
如果代码保持原样,那么测试通常在服务器实际启动之前运行,从而产生ConnectionRefusedError
。为防止这种情况发生,我将以下代码添加到setUpClass
:
while True:
try:
requests.get("http://localhost:49201/", timeout=0.5)
return
except requests.exceptions.ConnectionError:
pass
虽然这有效但看起来很难看。鉴于测试用例控制着Flask应用程序,应该有一种方法可以在应用程序准备好处理请求时得到通知。不幸的是,我发现的最接近的是got_first_request
,这对我没有帮助(除非我再一次轮询服务器)。
如何确定Flask应用程序已启动并准备好在异步运行时处理请求?