使用 Flask test_client() 自动解码 JSON

jas*_*aas 2 python flask

在使用 Flask 的内置test_client进行测试时,我发现无法自动解码 JSON 响应。

我用于测试登录过程的一些 pytest 代码是:

@pytest.mark.parametrize('user_info', [sign_in])
def test_sign_in_post(self, user_info, client):
    r = client.post(
        f'/{ApiConfig.name}/sign_in',
        data=json.dumps(user_info),
        content_type='application/json',
    )
    assert r.status_code == 200
    assert 'session_key' in json.loads(r.data.decode())
Run Code Online (Sandbox Code Playgroud)

我要问的部分是json.loads(r.data.decode())片段。有一个更好的方法吗?

requests例如,在模块中,代码将是assert 'session_key' in r.json()

dav*_*ism 5

现在 Flask 1.0 发布了,响应对象有一个json属性和一个get_json方法,就像request

resp = client.get('/api/users/)
print(resp.json)
Run Code Online (Sandbox Code Playgroud)

以前,您必须自己加载它:

from flask import json

rv = client.get('/api/users')
json.loads(rv.get_data(as_text=True))
Run Code Online (Sandbox Code Playgroud)