РЕДАКТИРОВАТЬ: Вы можете использовать некоторую библиотеку схем, например, Marshmallow, чтобы утверждать, что каждый прогон принадлежит определенной схеме
Я бы попробовал что-то вроде этого:
def assert_runs(runs, assertions, success_ids):
for run in runs:
for assertion in assertions:
assert assertion in run
if run['id'] in success_ids:
try:
assert run['state'] == 'success'
except AssertionError as e:
print('ERROR', run['id'], run['state'])
raise e
Передача списка прогонов, утверждений и идентификаторов для подтверждения успеха. Но это слишком вложенно, поэтому я бы разделил на две функции, такие как:
def assert_ids(run, success_ids):
if run['id'] in success_ids:
try:
assert run['state'] == 'success'
except AssertionError as e:
print('ERROR', run['id'], run['state'])
raise e
def assert_runs(runs, assertions, success_ids):
for run in runs:
for assertion in assertions:
assert assertion in run
assert_ids(run, success_ids)
И назвал бы это:
assertions = ['run_date', 'id', 'job_id', 'state']
runs = [
{
"run_date": "2020-01-31T11:14:11+00:00",
"id": 124,
"job_id": "2020-01-31T11:14:11+00:00",
"start_date": "2020-01-31T11:14:11.571934+00:00",
"state": "failed"
},
{
"run_date": "2020-01-31T11:14:11+00:00",
"id": 215,
"job_id": "2020-01-31T11:14:11+00:00",
"start_date": "2020-01-31T11:14:11.571934+00:00",
"state": "success"
},
{
"run_date": "2020-01-31T11:14:11+00:00",
"id": 746,
"job_id": "2020-01-31T11:14:11+00:00",
"start_date": "2020-02-04T11:46:32.465726+00:00",
"state": "pause"
}
]
assert_runs(runs, assertions, [215, 746])