断言JSON响应

时间:2016-01-27 07:03:29

标签: python json response assert

我有一个python API调用,服务器响应作为JSON输出来到我身边。

如何断言此输出的“状态”为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__'

3 个答案:

答案 0 :(得分:3)

如果您只是需要检查请求是否成功,那么使用request.status_code可以解决问题:

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

如果您想要检查响应中特定键值对的存在,则需要将响应有效负载从json转换为dict:

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。

答案 1 :(得分:0)

它应该是==,我。即比较(=)而不是赋值(0)和"0"作为整数而不是{{1}}作为字符串(不完全确定后者)。

答案 2 :(得分:0)

状态代码为断言:

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."