如何使用第三方http库测试python/flask应用程序?

如何使用第三方http库测试python/flask应用程序?,python,flask,flask-testing,Python,Flask,Flask Testing,我的烧瓶应用程序有一个最纯粹的套件,效果非常好。但是,我想测试一些使用第三方库(Qt)发送http请求的代码。这怎么可能?我看到flask testing有一个live\u服务器装置,它与flask.url\u for()一起完成这项工作,但是在装置中启动服务器需要太多时间 有没有更快的方法将http请求从第三方http库发送到flask应用程序 谢谢 结果表明,您可以手动将第三方请求转换为FlaskClient请求,对第三方lib使用的任何“发送”方法使用monkeypatch,然后将flas

我的烧瓶应用程序有一个最纯粹的套件,效果非常好。但是,我想测试一些使用第三方库(Qt)发送http请求的代码。这怎么可能?我看到
flask testing
有一个
live\u服务器
装置,它与
flask.url\u for()
一起完成这项工作,但是在装置中启动服务器需要太多时间

有没有更快的方法将http请求从第三方http库发送到flask应用程序


谢谢

结果表明,您可以手动将第三方请求转换为
FlaskClient
请求,对第三方lib使用的任何“发送”方法使用
monkeypatch
,然后将
flask.Response
响应转换回第三方回复对象。所有这些都是在不使用TCP端口的情况下发生的

以下是我编写的用于将Qt http请求桥接到flask应用程序的装置:

@pytest.fixture
def qnam(qApp, client, monkeypatch):

    def sendCustomRequest(request, verb, data):
        # Qt -> Flask
        headers = []
        for name in request.rawHeaderList():
            key = bytes(name).decode('utf-8')
            value = bytes(request.rawHeader(name)).decode('utf-8')
            headers.append((key, value))
        query_string = None
        if request.url().hasQuery():
            query_string = request.url().query()
        # method = request.attribute(QNetworkRequest.CustomVerbAttribute).decode('utf-8')
        # send
        response = FlaskClient.open(client,
                                    request.url().path(),
                                    method=verb.decode('utf-8'),
                                    headers=headers,
                                    data=data)
        # Flask -> Qt
        class NetworkReply(QNetworkReply):
            def abort(self):
                pass
        reply = NetworkReply()
        reply.setAttribute(QNetworkRequest.HttpStatusCodeAttribute, response.status_code)
        for key, value in response.headers:
            reply.setRawHeader(key.encode('utf-8'), value.encode('utf-8'))
        reply.open(QIODevice.ReadWrite)
        reply.write(response.data)
        QTimer.singleShot(10, reply.finished.emit) # after return
        return reply

    qnam = QNetworkAccessManager.instance() # or wherever you get your instance

    monkeypatch.setattr(qnam, 'sendCustomRequest', sendCustomRequest)
    return ret