我在以下环境中使用机器人框架。
我想从keyvalue到Post请求创建json。 我尝试了以下模式和 测试创建Json1正常工作,但测试创建Json2没有。
*** Settings ***
Library Collections
Library json
*** Variables ***
${NAME} XXXX
${ID} YYYY
*** Test Cases ***
Test Create Json1
${req_dict} Create Dictionary name=${NAME} id=${ID}
${req_json} Json.Dumps ${req_dict}
Log To Console *** Test Create Json1 Result ***
Log To Console ${req_json}
Test Create Json2
${resp} Prepare Json Keyword name=${NAME} id=${ID}
Log To Console *** Test Create Json2 Result ***
Log To Console ${resp}
*** Keywords ***
Prepare Json Keyword
[Arguments] @{args}
${req_dict} Create Dictionary @{args}
${req_json} Json.Dumps ${req_dict}
[Return] ${req_json}
输出
Test Create Json1
{"name": "XXXX", "id": "YYYY"}
Test Create Json2
{"name=XXXX": "id=YYYY"}
我想在关键字中创建json,如何更改Test Create Json2?
答案 0 :(得分:1)
您的根本问题是在字典创建中。在测试1中,您可以正确创建字典。它需要name = parameter对。
在测试2中,您传递的是“NAME = XXXX”“ID = YYYY”字符串。这将创建一个字典,其键为“NAME = XXXX”,值为“ID = YYYY”。
您需要拆分字符串并将其设置为字典,如下所示:
*** Settings ***
Library Collections
Library json
Library String
*** Variables ***
${NAME} XXXX
${ID} YYYY
*** Test Cases ***
Test Create Json1
${req_dict} Create Dictionary name=${NAME} id=${ID}
${req_json} Json.Dumps ${req_dict}
Log To Console *** Test Create Json1 Result ***
Log To Console ${req_json}
Test Create Json2
${resp} Prepare Json Keyword name=${NAME} id=${ID}
Log To Console *** Test Create Json2 Result ***
Log To Console ${resp}
*** Keywords ***
Prepare Json Keyword
[Arguments] @{args}
${req_dict} Create Dictionary
:FOR ${pair} IN @{args}
\ ${key} ${value}= Split String ${pair} =
\ Set To Dictionary ${req_dict} ${key}=${value}
${req_json} Json.Dumps ${req_dict}
[Return] ${req_json}