【问题标题】:How to assert values in a Json response of List of dictionaries如何在字典列表的 Json 响应中断言值
【发布时间】:2020-02-04 23:17:03
【问题描述】:

这是我从 GET 请求中得到的 Json 响应。


[
    {
        "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"
    }

]

  1. 从响应中,我如何断言每个字典列表都有 run_date、id、job_id 和 state。

  2. 如果得到 id == 215 并且状态为成功,我可以断言吗?

提前致谢

【问题讨论】:

  • 你到底是什么意思,你怎么能断言它?通过检查条件是否为真,如果不是则引发AssertionError(或其他)异常。哪一部分你不知道该怎么做?

标签: python list assertion


【解决方案1】:

编辑:您可以使用像 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

传递运行、断言和 ID 列表以断言成功 但这太嵌套了,所以我会分成两个这样的函数:

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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多