如何在Robot Framework中编辑JSON词典

时间:2018-06-19 18:04:34

标签: json robotframework

我目前正在实现一些测试自动化,该自动化使用对REST API的json POST来初始化SUT中的测试数据。使用我在另一个线程中找到的信息进行编辑的大多数字段都没有问题:Json handling in ROBOT

但是,我正在编辑的一组信息中的一个是元数据字典。

{
    "title": "Test Auotmation Post 2018-03-06T16:12:02Z",
    "content": "dummy text",
    "excerpt": "Post made by automation for testing purposes.",
    "name": "QA User",
    "status": "publish",
    "date": "2018-03-06T16:12:02Z",
    "primary_section": "Entertainment",
    "taxonomy": {
        "section": [
            "Entertainment"
        ]
    },
    "coauthors": [
        {
            "name": "QA User - CoAuthor",
            "meta": {
                "Title": "QA Engineer",
                "Organization": "That One Place"
            }
        }
    ],
    "post_meta": [
        {
            "key": "credit",
            "value": "QA Engineer"
        },
        {
            "key": "pub_date",
            "value": "2018-03-06T16:12:02Z"
        },
        {
            "key": "last_update",
            "value": "2018-03-06T16:12:02Z"
        },
        {
            "key": "source",
            "value": "wordpress"
        }
    ]
}

是否可以在词典中的词典上使用“设置为词典”关键字?我希望能够特别在post_meta内部编辑pub_date和last_update的值。

2 个答案:

答案 0 :(得分:0)

最直接的方法是使用Evaluate关键字,并在其中设置sub-dict值。假设您正在使用名为${value}的字典:

Evaluate     $value['post_meta'][1]['pub_date'] = 'your new value here'

我将不介绍如何查找{'1}}列表的索引,该索引具有值为'pub_date'的'key',因为这不是您的问题。

答案 1 :(得分:0)

  

是否可以在词典中的词典上使用“设置为词典”关键字?

是的,有可能。

但是,由于post_meta是列表而不是字典,因此您将必须编写一些代码来迭代post_meta的所有值,直到找到要更新的密钥为止。 。

您可以在python中非常简单地执行此操作。您也可以在robot中编写一个关键字来为您完成此操作。这是一个示例:

*** Keywords ***
Set list element by key
    [Arguments]  ${data}  ${target_key}  ${new_value}

    :FOR  ${item}  IN  @{data}
    \  run keyword if  '''${item['key']}''' == '''${target_key}'''
    \  ...  set to dictionary  ${item}  value=${new_value}

    [return]  ${data}

假设您有一个名为${data}的变量,它包含原始JSON数据作为字符串,则可以像下面这样调用该关键字:

${JSON}=  evaluate  json.loads('''${data}''')    json

set list element by key  ${JSON['post_meta']}  pub_date     yesterday
set list element by key  ${JSON['post_meta']}  last_update  today

然后,您将在${JSON}中拥有一个带有修改后值的python对象。