如何验证来自 json 响应(Python)的数据?
Posted
技术标签:
【中文标题】如何验证来自 json 响应(Python)的数据?【英文标题】:How to validate data from json response (Python)? 【发布时间】:2021-05-04 07:41:30 【问题描述】:我正在使用 Robot Framework 创建 API 测试。我使用请求库,执行 GET 请求,并希望验证响应。但它向我显示了一个错误:
AttributeError: 'dict' 对象没有属性 'count'。
还有其他方法可以验证响应吗?
库代码
import requests
def get_method(URL):
try:
response = requests.get(URL,timeout=3)
response.raise_for_status()
except requests.exceptions.HTTPError as error1:
raise TypeError("Http Error:", error1)
except requests.exceptions.Timeout as error2:
raise TimeoutError("Timeout Error:", error2)
except requests.exceptions.ConnectionError as error3:
raise ConnectionError("Error Connecting:", error3)
return response
关键字文件
from robot.api.deco import keyword
import jsonschema
import json
class keywords:
ROBOT_LIBRARY_SCOPE = 'TESTS'
schemaAllUsers =
"type": "array",
"count": "type": "number",
"results": [
"name": "type": "string",
"height": "type": "number",
"mass": "type": "number"
]
@keyword
def get_request(self, URL):
return restAPI_library.get_method(URL)
@keyword
def assert_users_response(self, response):
assert response.status_code == 200
@keyword
def get_json_response(self, URL):
return restAPI_library.get_method(URL).json()
@keyword
def validate_json_response(self, response):
assert response.count == '82'
测试文件*
Library keywords.py
*** Test Cases ***
TC - Verify GET request for all users
$Users Get Request $people_endpoint
Assert Users Response $Users
$response Get Json Response $people_endpoint
VALIDATE JSON RESPONSE $response
*** Variables ***
$people_endpoint https://swapi.dev/api/people
【问题讨论】:
【参考方案1】:这也应该说明问题和解决方案:
my_dict =
"count": 5
print(my_dict["count"]) # 5
print(my_dict.count) # AttributeError: 'dict' object has no attribute 'count'
【讨论】:
【参考方案2】:Pavel 暗示的简单解决方案
@keyword
def validate_json_response(self, response):
assert response['count'] == '82
如果你想重复使用 thi,你可以做的是在 paht 中找到元素并评估该元素。 在你的 python 库中添加关键字,类似这样。
@keyword
def pathGet(self, dictionary , path):
for item in path:
dictionary = dictionary[item]
return dictionary
测试使用如下
*** Variables ***
@DIR_COUNT count
在测试中你将添加这个块
$count= pathGet $response $DIR_COUNT
Should Be Equal $count $82
通过这种方式,您可以重复使用关键字,而不管元素路径如何。
【讨论】:
以上是关于如何验证来自 json 响应(Python)的数据?的主要内容,如果未能解决你的问题,请参考以下文章
RestAssured 中的无效 JSON Schema 异常,同时针对来自 swagger 的模式进行验证
如何使用来自 3rd 方站点的 URL 端点进行 JSON 响应