【问题标题】:How to validate data from json response (Python)?如何验证来自 json 响应(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 

【问题讨论】:

    标签: python json api robotframework response


    【解决方案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}
      

      通过这种方式,您可以重复使用关键字,而不管元素路径如何。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-26
        • 2017-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        相关资源
        最近更新 更多