断言 JSON 响应

assert JSON response

我有一个 python API 调用,服务器响应作为 JSON 输出传给我。

如何断言此输出中的 "status" 为 0,例如:

def test_case_connection():
    req = requests.get_simple(url=Server.MY_SERVER, params=my_vars)
    assert req["status"]="0"

这是我试过的。

响应看起来像:

{"status" : 0, ......}

我得到的错误是:

TypeError: 'Response' object has no attribute '__getitem__'

应该是assert req['status'] == 0,我。 e.比较 (==) 而不是赋值 (=) 和 0 作为整数而不是 "0" 作为字符串(不完全确定后者)。

如果您只需要检查请求是否成功,使用 request.status_code 即可:

def test_case_connection():
    req = requests.get_simple(url=Server.MY_SERVER, params=my_vars)
    assert req.status_code == 200

如果您想改为检查响应中是否存在特定的 key-value 对,则需要将响应负载从 json 转换为字典:

import json

def test_case_connection():
    req = requests.get_simple(url=Server.MY_SERVER, params=my_vars)
    data = json.loads(req.content)
    assert data["status"] == "0"

如果您使用的是 Requests 库,则可以避免使用其 builtin json decoder.

手动转换 json

断言中的状态码:

response.ok #it is True if response status code is 200.

在 pytest 的上下文中它会是这样的:

@pytest.mark.parametrize("fixture_name", [(path, json)], indirect=True)
def test_the_response_status_code_first(fixture_name):
    assert fixture_name.ok, "The message for the case if the status code != 200."
    # the same with checking status code directly:
    assert fixture_name.status_code == 200, "Some text for failure. Optional."