我正在尝试对数组中的特定元素进行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),并在有更多接口的情况下忽略其余部分?