如何从Robot Framework中的JSON列表中获取价值?

时间:2019-02-28 16:36:09

标签: python json robotframework

作为Robot Framework验证的一部分,我将以下数据(存储为${response})作为获取请求响应:

{
    "interfaces": [
        {
            "name": "eth0",
            "status": "ready",
            "macAddress": "xx:xx:xx:xx:xx:xx",
            "ipv4": {
                "mode": "DHCP",
                "address": "127.0.0.1",
                "mask": "255.255.255.0",
            },
            "ipv6": {
                "mode": "DISABLED",
                "addresses": [],
                "gateway": "",
            }
        }
    ],
    "result": 0
}

我想获取键ipv4的值并将其与预定义值进行比较。我尝试从HttpLibrary.HTTP中使用它,因为Robot Framework 3.1不再推荐使用它,因此我想使用Evaluate。 机器人框架中是否可能?

4 个答案:

答案 0 :(得分:6)

如果变量${response}是一个响应对象-而不是字符串,则有效载荷的内容-最直接的方法是调用其json()方法,该方法将有效载荷作为已解析的字典返回:

${the data}=    Evaluate    ${response.json()}

另一种方法是自己通过json.loads()解析有效负载,并传递存储它的.content属性(这几乎是.json()内部执行的操作):

${the data}=    Evaluate    json.loads(${response.content})    json

如果变量${response}是一个字符串,即实际有效负载,则只需将其传递给json.loads()

${the data}=    Evaluate    json.loads($response)    json

现在您已将数据作为常规词典使用,请按常规方式进行验证:

Should Be Equal    ${the data['interfaces'][0]['ipv4']}    ${your predefined dictionary}

答案 1 :(得分:0)

这就是您所需要的吗?

jsonObj = {
    "interfaces": [
        {
            "name": "eth0",
            "status": "ready",
            "macAddress": "xx:xx:xx:xx:xx:xx",
            "ipv4": {
                "mode": "DHCP",
                "address": "127.0.0.1",
                "mask": "255.255.255.0",
            },
            "ipv6": {
                "mode": "DISABLED",
                "addresses": [],
                "gateway": "",
            }
        }
    ],
    "result": 0
}

ipv6 = jsonObj['interfaces'][0]['ipv6']

print (ipv6)

输出:

{'mode': 'DISABLED', 'addresses': [], 'gateway': ''}

答案 2 :(得分:0)

我不知道Robot Framework,但是如果您想操纵JSON,则可以使用内置的lib json。

Option Base 1

答案 3 :(得分:0)

就我而言,我就是这样工作的:

${response.json()['data'][1]['b1_YDESCRI']}