在我的一个测试函数中,我有以下代码:
for key, expected_value in tools.config['expected_values']['devices']['specs'][device_spec].items():
if expected_value > 0:
try:
value = data[device_spec][key]
assert expected_value == value, pytest.fail('ERROR: Missing device using {}: {}.\nDetected: {}. Expected: {}\nEndpoint: {}'.format(device_spec, key, value, expected_value, endpoint), pytrace=False)
except KeyError:
pytest.fail('ERROR: There are no clients using {}: {}\nExpected: {}\nEndpoint: {}'.format(device_spec, key, expected_value, endpoint), pytrace=False)
raise SystemExit(1)
它可能会因为两个不同的原因而失败:
-
因为没有使用某些预期规格的预期设备数量(例如,检测到4个Linux,但预期为7个)。
-
因为根本没有使用特定规格的设备(例如,没有Windows设备)。
问题是,在测试运行时,这两个条件都可能满足。例如,配置可能是:
expected_values:
devices:
specs:
operating_systems:
LINUX: 1
MACOS: 2
WINDOWS: 0
ANDROID: 1
IOS: 1
假设只有1台MacOS设备,而没有Android设备。输出应为:
ERROR: Missing device using operating_system: MACOS.
Detected: 1. Expected: 2
Endpoint: example.com/api/operating_system
ERROR: There are no clients using operating_system: Android.
Expected: 1.
Endpoint: example.com/api/operating_system
实际上,如果我添加
print(key)
,我可以确认显示Linux,显示MacOS,然后代码停止。它没有读其他钥匙。
但是,只显示第一个,我猜是
pytest.fail
正在破坏
for
.那么,我怎样才能避免这种情况呢?