【问题标题】:Syntax for passing REST data in Robot Framework在 Robot Framework 中传递 REST 数据的语法
【发布时间】:2017-03-16 08:44:29
【问题描述】:

见下面的代码,特别是数据部分。机器人不喜欢这样。

*** Test Cases ***
Add Patient
    Log  Add Patient
    [Tags]  Add_Patient
    ${number}=  Generate Random Number  ${4}
    ${data}=  {"patients": [ new "sponsor": "test1", "protocol": "Blue18-B18VP1","site_number": "1001","integration_id": int_id_${number},"subject_number": "RT0001","subject_status": "T","randomization_date": "01Jan2017", "treatment_id": "B18VP2"} ]}
    Create Session  sw3  ${ENVIRONMENT_TO_RUN_AGAINST}  debug=3
    ${resp}=  Post Request  sw3  ${ENVIRONMENT_TO_RUN_AGAINST}/api/v1/test1/patients
    \  ...  Content-Type:application/json
    \  ...  Authorization:authkey02 Accept=application/json
    \  ...  data=${data}

报错如下:

Creating keyword failed: No keyword with name '{"patients": [ new "sponsor": "test1", "protocol": "Blue18-B18VP1","site_number": "1001","integration_id": int_id_${number},"subject_number": "RT0001","subject_status": "T","randomization_date": "01Jan2017", "treatment_id": "B18VP2"} ]}' found.

【问题讨论】:

  • 你希望new "sponsor" 做什么,或者这是一个错字?

标签: rest robotframework


【解决方案1】:

将数据作为动态值而不是字符串传递很重要。因此,不要创建您的字符串,而是创建列表和/或字典 - 如果您随后将其传递过来,它将被表示为 JSON。例如:

${patients} =    Create List    ${valueA}    ${valueB}    ${valueC}
${data} =    Create Dictionary    patients=${patients}
${resp} =    Post Request    alias=${alias}    uri=${uri}    data=${data}

【讨论】:

    【解决方案2】:

    设置变量

    您必须使用诸如Set variableCatenate 之类的关键字来创建一个字符串,这就是该错误消息试图告诉您的内容。当您想要跨多行定义字符串时,Catenate 很有用。

    例如:

    ${data}=  Catenate
    ...   {"patients": 
    ...     [ new "sponsor": "test1", 
    ...       "protocol": "Blue18-B18VP1",
    ...       "site_number": "1001",
    ...       "integration_id": int_id_${number},
    ...       "subject_number": "RT0001",
    ...       "subject_status": "T",
    ...       "randomization_date": "01Jan2017", 
    ...       "treatment_id": "B18VP2"
    ...     ]
    ...  }
    

    但是,您问题中的数据似乎是无效的 JSON。我不知道你想用[ new "sponsor": "test1" ... 做什么。无论如何,要解决创建包含json数据的变量的问题,需要在变量名后面的第一个单元格中使用关键字。

    定义标题字典

    您必须将标头作为字典传递,而不是作为单个参数传递。您可以使用Create Dictionary 创建字典,如下所示:

    &{headers}=  Create Dictionary
    ...  Content-Type=application/json
    ...  Authorization=authkey02 
    ...  Accept=application/json
    

    发出 POST 请求

    要发出 post 请求,您应该使用命名参数,像这样传递标头和数据:

    ${resp}=  Post Request  sw3  ${ENVIRONMENT_TO_RUN_AGAINST}/api/v1/test1/patients
    ...  headers=${headers}
    ...  data=${data}
    

    更多示例,请查看 requests 库本身的测试用例:

    https://github.com/bulkan/robotframework-requests/blob/master/tests/testcase.txt

    【讨论】:

    • 啊新是一个错字道歉:)
    • 该更改仍然出现错误...关键字“RequestsLibrary.Post Request”为参数“数据”获取了多个值。
    • @user3414559:我已经用更多细节更新了我的答案。
    猜你喜欢
    • 2021-06-16
    • 2017-12-30
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多