断言 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."
我有一个 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."