在connexion / flask应用程序中,如何使用body中的参数伪造post请求?

时间:2017-06-14 21:41:13

标签: python flask http-post werkzeug

我正在尝试测试我的连接应用,我已经按照链接here

获取请求似乎工作正常。现在我正在尝试测试发布请求,但端点方法将参数作为参数。我的设置与上面链接的设置非常相似,我遵循了here列出的建议,但它似乎不起作用。在我的测试中,我尝试过类似的东西:

response = client.post('/path-to-request', data=dict(var1='data1', var2='data2'))

其中客户端ksindi here定义的客户端相同。我将这个路径映射到我的swagger文件中的python方法,并希望将post中打包的数据作为该方法的参数进行检索。 swagger文件中的示例代码段:

paths: 
    ... 
    /models:
        post: 
            operationId: bar.foo

...

然后在bar.py中我会有一个方法foo:

foo(data_here): 
    <code>

我上面提到的尝试似乎不起作用,我将通过该方法并且代码将执行但“data_here”将是None,我希望它是dict(var1 ='data1',var2 ='与post请求一起打包的data2')。任何帮助表示赞赏谢谢!

2 个答案:

答案 0 :(得分:1)

好的,所以我想我明白了。阅读答案here by Martjin,我可以通过以下方式让它发挥作用:

strict

答案 1 :(得分:0)

@pytest.fixture
def app():
    app = App(__name__, specification_dir=SWAGGER_PATH)
    app.app.json_encoder = JSONEncoder
    app.add_api("swagger.yaml")
    app_client = app.app.test_client()
    return app_client


def test_post_foo(app) -> None:
    """
    :except:201
    """

    response = app.post("/api/all", 
    content_type='application/json',
    data=json.dumps(foo_data))
    assert response.status_code == 201