我有一个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__'
答案 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."