我如何知道 Flask 应用程序已准备好处理请求而无需实际轮询它?

Ars*_*nko 5 python testing flask python-3.x

在冒烟测试期间,我想确保 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()
Run Code Online (Sandbox Code Playgroud)

然后运行测试来执行requests库的请求。

如果代码保持原样,测试通常会在服务器实际启动之前ConnectionRefusedError运行,这会导致. 为了防止这种情况发生,我将以下代码附加到setUpClass

while True:
    try:
        requests.get("http://localhost:49201/", timeout=0.5)
        return
    except requests.exceptions.ConnectionError:
        pass
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但看起来很丑。鉴于测试用例由 Flask 应用程序控制,一旦应用程序准备好处理请求,就应该有一种方法可以通知它。不幸的是,我发现的最接近的东西是got_first_request,这没有帮助(除非我再次轮询服务器)。

异步运行时如何确定 Flask 应用程序已启动并准备好处理请求?