JSON在ROBOT中处理

时间:2016-02-08 04:08:54

标签: json robotframework

我有一个Json文件,其中有一个字段,我需要编辑并保存该文件以供下次使用。

但我需要编辑的字段如下所示,

我需要在场中随机生成值,我将在运行时间中随机生成,我将在变量中捕获并将其传递给此json特定键" dp"然后保存json。

保存的json将用于REST POST URL。

            {
                "p": "10",
                "v": 100,
                "vt": [
                    {
                        "dp": "Field to be edited"(integer value) , 
                  ]          
            }

请帮帮我,我正在使用ROBOT框架,我需要在运行时更新json字段。

3 个答案:

答案 0 :(得分:22)

最简单的解决方案是编写一个可以为您更改值的python关键字。但是,您可以通过执行以下步骤来解决机器人关键字:

  1. 将JSON字符串转换为字典
  2. 修改字典
  3. 将字典转换回JSON字符串
  4. 将JSON字符串转换为字典

    Python有一个用于处理JSON数据的模块(json)。您可以使用evaluate关键字将JSON字符串转换为python字典,使用该模块的loads(加载字符串)方法。

    假设您的JSON数据位于名为${json_string}的机器人变量中,您可以将其转换为python字典,如下所示:

    ${json}=    evaluate    json.loads('''${json_string}''')    json
    

    通过上述内容,${json}现在包含对包含所有json数据的字典的引用。

    修改字典

    机器人附带的Collections库有一个名为set to dictionary的关键字,可用于设置字典元素的值。在这种情况下,您需要更改嵌套在JSON对象的vt元素内的字典的值。我们可以使用机器人extended variable syntax来引用嵌套字典。

    例如:

    set to dictionary    ${json["vt"]}    dp=the new value
    

    有了这个,${json}现在有了新值。但是,它仍然是一个python字典而不是JSON数据,所以还有一步。

    将字典转换回json

    将字典转换回JSON是第一步的反向。即,使用json模块的dumps(转储字符串)方法:

    ${json_string}=    evaluate    json.dumps(${json})    json
    

    有了这个,${json_string}将包含一个带有修改数据的有效JSON字符串。

    完整示例

    以下是一个完整的工作示例。在替换新值之前和之后将打印json字符串:

    *** Settings ***
    Library    Collections
    
    *** Test Cases ***
    Example
        ${json_string}=    catenate
        ...  {
        ...    "p": "10",
        ...    "v": 100,
        ...    "vt": {
        ...            "dp": "Field to be edited"
        ...          }
        ...  }
    
        log to console       \nOriginal JSON:\n${json_string}
        ${json}=             evaluate        json.loads('''${json_string}''')    json
        set to dictionary    ${json["vt"]}    dp=the new value
        ${json_string}=      evaluate        json.dumps(${json})                 json
        log to console       \nNew JSON string:\n${json_string}
    

答案 1 :(得分:2)

用于从文件读取和写入数据我正在使用OperatingSystem库

${json} Get Binary File ${json_path}nameOfJsonFile.json

它适用于API测试,读取.json和POST,就像这里

一样
*** Settings ***
Library    Collections
Library    ExtendedRequestsLibrary 
Library    OperatingSystem
*** Variables ***  
${uri}    https://blabla.com/service/
${json_path}    C:/home/user/project/src/json/
*** Test Cases ***
Robot Test Case  
   Create Session    alias    ${uri}    
   &{headers}  Create Dictionary  Content-Type=application/json; charset=utf-8
   ${json}  Get Binary File  ${json_path}nameOfJsonFile.json
   ${resp}    Post Request    alias    data=${json}    headers=${headers}
   Should Be Equal As Strings    ${resp.status_code}    200

答案 2 :(得分:0)

对于JSON中的整数值,其他答案对我不起作用。 这可行:

${json}=    Catenate    {    "p": "10",    "v": 100,    "vt": {    "dp": "Field to be edited"   }    }
${value}    Set Variable    2    #the value you want
${value}    Convert To Integer    ${value}
${json}=    Evaluate    json.loads('''${json}''')    json
Set To Dictionary    ${json["vt"]}    dp=${value}
${json}=    Evaluate    json.dumps(${json})    json
Log    ${json}

需要转换为整数,否则该值仍在字符串“ $ {value}”中