【问题标题】:Making a PUT request through Robot Framework using Requests Library使用 Requests Library 通过 Robot Framework 发出 PUT 请求
【发布时间】:2018-07-04 13:43:50
【问题描述】:

背景: Robot Framework 的新手,但尝试将 RequestsLibrary 与 OperatingSystem 和 XML 一起使用来自动化 RIDE 上的一些 REST 测试。

要求: 发送带有 XML 正文的文件,并在收到服务器的 XML 响应后进行验证。

问题: 当前设置导致 500 内部服务器错误。

  • 是否可以将 XML 文件的内容而不是 XML 文件本身发送到服务器?

  • 是否可以从服务器返回响应的内容而不是响应码?

已经花了一段时间搜索指针,但没有发现任何对处理 JSON 而不是 XML 的大多数请求和响应有太大帮助的东西。

理想流程:

1)从目录中的文件中提取XML文件内容

2)作为 POST 请求发送到服务器 URL

3)等待响应

4)返回这个 XML 响应并验证它是正确的

代码:

*** Settings ***
Library           Collections
Library           RequestsLibrary
Library           XML
Library           Selenium2Library
Library           OperatingSystem

*** Test Cases ***
Example 1
    Create Session    Gateway    https://GatewayURL.asmx
    ${file_data}=    Get Binary File    ${CURDIR}${/}data.xml
    ${files}=    Create Dictionary    ${file_data}
    ${response}=    Post Request    Gateway    /post    files=${files}

我已使用有用的建议添加到代码中。

Post request data in dictionary SAMPLE
    Create Session    Gateway    URL HERE    debug=3
    ${file_data}=    Get Binary File    ${CURDIR}${/}data.xml
    &{data}=    Create Dictionary    name=${file_data.strip()}
    &{headers}=    Create Dictionary    Content-Type=text/xml
    ${resp}=    Post Request    Gateway    /post    data=${data}    headers=${headers}
    Should Be Equal As Strings    ${resp.status_code}    200

此处使用的 N.B URL 很遗憾无法共享此 URL。

失败如下。不确定为什么数据是 text/xml 当它用于标题时。这导致服务器 500 错误。

Post Request using : alias=Gateway, uri=/post, data=<text/xml>, headers={u'Content-Type': u'text/xml'}, files=None, allow_redirects=True 

500 != 200

我想发送 XML 文件的内容而不是 XML 文件本身,因为服务器“不知道如何处理”文件,但能够“处理”XML 文件的实际内容。

在 RF 不接受 Post Request Keyword 的 data 参数之前,您是否遇到过这个问题?出于某种原因,它总是对 Data 使用 Header 参数...

【问题讨论】:

  • 您能否edit 您的问题并使用公开可用的 URL 更新示例,以便我们可以复制您的结果?是否还可以添加从系统收到的实际错误消息?
  • 尚不清楚您面临的实际问题是什么?抱歉,我不理解问题中的两个要点及其上下文。如果问题是“如何获取服务器的响应并使用它”,请继续阅读答案:)
  • @RangHu 所以看起来答案就是你要找的;我建议请编辑问题 - 删除项目符号(它们令人困惑),将它们替换为“如何获取服务器响应的有效负载,以进行进一步验证?”。
  • 感谢您的建议,将更新问题信息。

标签: xml rest request xmlhttprequest robotframework


【解决方案1】:

Put Request(以及 lib 中的其他请求类型)的返回是一个 Response object,来自 python 的 requests 库。因此,您可以完全访问其属性和方法,如上面的链接所述。

例如,如果您想要响应的有效负载:

Log To Console    ${response.text}
${payload}=       Set Variable    ${response.text}
# process/verify the server's responose, it's now in the ${payload} variable

(如果服务器的响应不是 Unicode,您可能需要检查文档中的 text 并明确设置正确的)

另一个例子 - 如果你需要一个特定的标题:

Log To Console    ${response.headers['content-encoding']}
# or, this will print them all:
Log To Console    ${response.headers}

最后一个例子,响应的状态码:

Should Be Equal As Strings  ${response.status_code}  200

RE:更新后的问题,如何实际发送带有 PUT 请求的文件。在您显示的代码中,存在此错误 - 您正在此处读取文件:

...
${file_data}=    Get Binary File    ${CURDIR}${/}data.xml

然后,将其内容作为值存储在字典中:

&{data}=         Create Dictionary    name=${file_data.strip()}

并将字典作为有效负载发送:

${resp}=    Post Request    Gateway    /post    data=${data}    headers=${headers}

我非常怀疑这是在接收服务的规范中 - 很可能它期望有效负载中的文件内容;此外,它可能期望文件名为name 标头(但我在这里猜测,适应实际的要求)。所以流程大概是:

Create Session    Gateway    URL HERE    debug=3
${file_data}=    Get Binary File    ${CURDIR}${/}data.xml
&{headers}=    Create Dictionary    Content-Type=text/xml      name=data.xml
${resp}=    Post Request    Gateway    /post    data=${file_data}    headers=${headers}
Should Be Equal As Strings    ${resp.status_code}    200

无论如何,这是一个不知道服务的猜谜游戏;如果 ^ 没有帮助,请检查其日志并与开发人员交谈 - 请求的正确格式是什么。

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 2016-05-17
    • 2020-11-14
    • 2017-08-12
    • 1970-01-01
    • 2016-11-20
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多