Как получить значение из списка JSON в Robot Framework? - PullRequest
0 голосов
/ 28 февраля 2019

В рамках проверки в 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.Будет ли это возможно в Robot Framework?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Я не знаю Robot Framework, но если вы хотите манипулировать JSON, вы можете использовать встроенный lib json.

import json

data = json.loads(response)

ipv4 = data['interfaces'][0]['ipv4']
0 голосов
/ 01 марта 2019

Если переменная ${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}
0 голосов
/ 28 февраля 2019

Это все, что вам нужно?

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': ''}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...