【问题标题】:Flask: Interpolating new attributes in request context for testingFlask:在请求上下文中插入新属性以进行测试
【发布时间】:2021-05-24 14:35:30
【问题描述】:

我有一个向请求对象添加属性的中间件。

# middleware.py
from flask import request

...

def middleware():
    # some logic..
    result = api_call(processed_auth_token)    
    setattr(request, "result", result)

我将此属性用作路由器逻辑的一部分

# routes.py
@app.route('/my_route')
@middleware
def simple_route():
    ...
    # use request.result here...

在测试期间,我不想经历生成令牌和调用 api_call 的麻烦(也是出于实际原因,因为我的部署管道无法访问互联网)。我希望能够在测试期间将不同的值附加到我的结果属性。所以给定一个像下面这样的测试场景

# test_simple_route.py
...
def test_simple_route(client):
    # client is in the context of test_client
    response = client.get('/my_route')
    ...

如何在上面的get请求中的请求对象(来自flask)中设置“result”属性?我试过使用test_request_context,但请求最终在与客户端不同的上下文中。有什么想法吗?

【问题讨论】:

    标签: python flask request pytest middleware


    【解决方案1】:

    通过测试客户端发出请求会设置一个新的请求上下文。

    您可以在设置请求上下文后直接调用视图函数来测试中间件,如下所示:

    import flask
    
    def test_simple_route(app):
        with app.test_request_context():
            setattr(flask.request, "result", "test-value")
            response = simple_route() 
    

    我强烈建议在此用例中使用 session 对象。 它们允许存储从请求到每个用户请求的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-10
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多