YAML: Как обратиться и проверить элемент массива JSON по индексу? - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь проверить YAML для определенного элемента в массиве.Массив содержит несколько элементов одного типа сбора данных.Проблема в том, что массив может динамически варьироваться от 0, 1, 2, 3 ... 10 в общем количестве элементов, и мы не можем предсказать это заранее (поэтому пока мы прибегаем к проверке только первого элемента массива), так как мыЗапустите эти тесты на нескольких других машинах.

Я не знаю, как его кодировать, чтобы он проверял хотя бы один элемент массива (и игнорирует тот факт, что может быть найдено больше элементов).«Жесткое кодирование» определенного ожидаемого количества элементов массива приведет к сбою теста на некоторых машинах, поскольку количество элементов массива не соответствует фактическим результатам из-за разного количества элементов массива.

Поэтому мы должны обратиться кпервый элемент, который он находит, указав первый индекс этого массива.

Мы используем JSON в качестве тела возвращаемого ответа (и я использую преобразователь JSON в YAML (https://www.json2yaml.com/) для отображения данныхв формате YAML)

Я имел в виду множество документов для YAML и ссылался на примеры, но ни один из них не охватывал адресацию конкретных элементов массива.Поиск в Google также пока не помог.

JSON выглядит так:

[
  {
    "network_name": "Network Device 1",
    "id": "1234abcd-5467-efgh-8901-ijkl2345mnop",
    "priority": 3,
    "interfaces": [
      {
        "port_id": "eth1",
        "speed": "10Gbit/s",
        "mtu": 1500
      },
      {
        "port_id": "eth2",
        "speed": "10Gbit/s",
        "mtu": 1500
      },
      {
        "port_id": "eth3",
        "speed": "1Gbit/s",
        "mtu": 1500
      }
    ]
  }
]

А вот мой текущий код:

---
test_name: Access network server
includes:
  - !include common.yaml

stages:
  - &the_id_anchor
    name: Access test - network devices
    request:
      url: "http://{service.host_ip:s}:{service.host_port:d}/v1.0/network-devices/"
      method: GET

    response:
      status_code: 200
      save:
        body:
          the_id: 0.id

  - name: Access test - network devices_2
    request:
      url: "http://{service.host_ip:s}:{service.host_port:d}/v1.0/network-devices/"
      method: GET
    response:
      status_code: 200
      body:
        - id: "{the_id:s}"
          network_name: 
          interfaces:
          - port_id: "eth1"

Вот ошибкаЯ получаю:

>           raise TestFailError("Test '{:s}' failed:\n{:s}".format(self.name, self._str_errors()), failures=self.errors)
E           tavern.util.exceptions.TestFailError: Test 'Access test - network devices_2' failed:
E           - Value mismatch in body: Length of returned list was different than expected - expected 1 items, got 3 (expected["0"]["interfaces"] = '[{'port_id': 'eth1'}]' (type = <class 'list'>), actual["0"]["interfaces"] = '[{'port_id': 'eth1', 'speed': '10Gbit/s', 'mtu': 1500}, {'port_id': 'eth2', 'speed': '10Gbit/s', 'mtu': 1500}, {'port_id': 'eth3', 'speed': '1Gbit/s', 'mtu': 1500}]' (type = <class 'list'>))

Итак, как мне сделать проверку YAML только для первого элемента этого массива (только первый port_ID, speed и mtu) и игнорировать остальные, если есть еще много интерфейсов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...