首页 > 解决方案 > 从 pytest 测试中调用烧瓶服务器

问题描述

import sys
import os
import logging
import requests
import json
import pytest
from multiprocessing import Process
from flask_file import main


@pytest.fixture
def endpoint():
   return "http://127.0.0.1:8888/"

def test_send_request(endpoint: str):
    server = Process(target=main)
    server.start()
    time.sleep(30)

    # check that the service is up and running
    service_up = requests.get(f"{endpoint}")

    server.terminate()
    server.join()

我想在测试中在本地启动和关闭服务器以测试一些请求。我知道服务器本身可以工作,因为我可以从 flask_file 本身运行 main() python flask_file,它会启动服务器……我可以 ping 它就好了。当我使用上述方法时,测试似乎确实完成了 30 多秒的睡眠而没有失败,但在这 30 多岁时,我无法在浏览器上打开端点并看到预期的“hello world”。

标签: pythonflask

解决方案


当您运行 Flask 内置开发服务器时(例如flask runapp.run(),只有一个连接是可能的。所以当您的测试访问应用程序时,您无法通过浏览器访问它。

无论如何,您应该重写您的测试和夹具以使用test_client,请参阅官方文档

https://flask.palletsprojects.com/en/1.1.x/testing/


推荐阅读