繁体   English   中英

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

[英]How to test python/flask app with third-party http lib?

我的烧瓶应用程序有一个最纯粹的套件,效果很好。 但是,我想测试一些使用第三方库 (Qt) 发送 http 请求的代码。 这怎么可能? 我看到flask-testinglive_server夹具,它与flask.url_for()一起完成这个,但是在夹具中启动服务器需要太多时间。

是否有更快的方法将 http 请求从第三方 http 库发送到烧瓶应用程序?

谢谢!

原来,你可以通过手动转换第三方请求做FlaskClient要求,使用monkeypatch不管是什么“派”方法的第三方的lib用途,然后转换flask.Response响应返回给第三方的回复对象. 所有这些都在不使用 TCP 端口的情况下发生。

这是我编写的用于将 Qt http 请求桥接到烧瓶应用程序的夹具:

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM