我有一个Json文件,其中有一个字段,我需要编辑并保存该文件以供下次使用。
但我需要编辑的字段如下所示,
我需要在场中随机生成值,我将在运行时间中随机生成,我将在变量中捕获并将其传递给此json特定键" dp"然后保存json。
保存的json将用于REST POST URL。
{
"p": "10",
"v": 100,
"vt": [
{
"dp": "Field to be edited"(integer value) ,
]
}
请帮帮我,我正在使用ROBOT框架,我需要在运行时更新json字段。
答案 0 :(得分:22)
最简单的解决方案是编写一个可以为您更改值的python关键字。但是,您可以通过执行以下步骤来解决机器人关键字:
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模块的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}”中