Я пытаюсь проверить 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) и игнорировать остальные, если есть еще много интерфейсов?