如何验证来自 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 响应

响应来自 Json 的呼叫数据

Python - 解析来自 IBM Watson Tone Analyzer 的 Json 响应

在 Python 3.6 中解码来自 API 的文本响应

以(Json 格式)解析来自 Google Place api 响应的数据