【问题标题】:Robot Framework POST Request using RequestsLibrary passing wrong arguments使用 RequestsLibrary 传递错误参数的机器人框架 POST 请求
【发布时间】:2018-02-13 13:02:23
【问题描述】:

上下文

使用 RequestsLibrary 自动化测试,以将 XML Post 请求发送到服务器并接收应验证的响应。

测试当前获取 XML 文件的“有效负载”并尝试将其作为发布请求的“数据”参数传递。

错误

使用 Robot Framework 上的 RequestsLibrary,POST 请求不断导致

<Response [500]>

Page can either not be found or displayed. <br />
Please try again or return to login.

在响应体内。

问题

我们正在寻找的响应代码当然是 200,但是不断收到 500。因此响应正文包含

Page can either not be found or displayed. <br />
Please try again or return to login.

而不是所需的 XML 响应,例如

><MsgType>ERROR</MsgType>
<MsgData>&lt;ERROR&gt;&lt;CODE&gt;0110&lt;/CODE&gt;&lt;MSGTXT&gt;Encryption 
Failure&lt;/MSGTXT&gt;&lt;/ERROR&gt;</MsgData></ProcessMsgResult>
</ProcessMsgResponse></soap:Body></soap:Envelope>

这应该是对无效请求的响应。

守则

Post request XML payload
    Disable Warnings
    Create Session    Gateway    https://URLHERE    debug=3
    ${file_data}=    Get Binary File    ${CURDIR}${/}text.xml
    &{headers}=    Create Dictionary    Content-Type    text/xml
    ${resp}=    Post Request    Gateway    /post    data=${file_data}    headers=${headers}
    Log    ${resp.text}
    Log    ${resp.status_code}
    Should Be Equal As Strings    ${resp.status_code}    200

这是我使用 data 作为 ${file_data}headers 作为 ${headers} 的 Post Request 参数运行的代码。 但是,从测试运行报告来看,${file_data} 没有正确传递给 Post Request 关键字,因为它使用 &lt;text/xml&gt; 作为数据参数,而不是 ${file_data}

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

这就是问题所在,我不确定为什么 data 参数总是data=&lt;text/xml&gt;

问题

之前有没有人遇到过这个参数没有正确传递的问题?我认为应该是data=&lt;${file_data&gt;,因此将不再收到 500 响应,因为服务器会收到一个可以理解的XML 请求。

【问题讨论】:

  • 问题很可能来自服务器 - 它的响应是半通用的 500 错误;它是否需要身份验证 - 这可能是这种措辞的情况?这是非常特定于应用程序的,由于您可能无法在此公共论坛中分享实际的 url 或 API 协议,因此您必须自己查找问题。此外,不要假设文件的内容不在请求中 - 这就是它到达日志的方式,根据 lib 的源(类方法 _format_data_to_log_string_according_to_header)来判断。无论如何,它不应该记录完整的文件 - 如果它是 5MB 大怎么办?
  • 文件只有 2KB。好的,感谢有关身份验证的建议。将对此进行调查。而且,我看到,使用类方法作为“_format_data_to_log_string_according_to_header”,日志将数据显示为标题名称。
  • 它是否适用于身份验证?
  • 不幸的是,身份验证不是问题。我相信它在 XML 有效负载中。服务器不喜欢实际的 XML 请求。

标签: xml http-post httprequest robotframework


【解决方案1】:

在使用相同的关键字时,我也得到了相同的响应代码 500。

对我有用的正确解决方案是 -

创建会话 iamconnected http://10.204.17.117:8085/ ${Request_Header} 创建字典 Content-Type=text/xml;字符集=utf-8 ${Request_Body} 获取文件 IF1021VE.xml ${resp} Post Request iamconnected Runner/services ${Request_Body} headers=${Request_Header}

所以在这段代码中,完全限定的 URL 是 - http://10.204.17.117:8085/Runner/services

Runner/services 是我通过的params

我正在为 Get File 使用预构建的操作系统库来从 XML 文件中获取内容

iamconnected 是我的别名。

RequestsHeader 是我的标题

注意:当我使用请求库页面中提到的字典时,我得到了相同的服务器响应代码 500

【讨论】:

  • 这如何回答这个问题?
  • 通过使用字典,我们得到服务器响应码 500 ,我们需要 200 才能成功连接,而且 url 也有变化,基本 url 需要在 Create session 中有。这就是它的帮助
【解决方案2】:

不正确

Create Session      aliasName   url=http://address/sub1/sub2/sub3
${resp}=    Post Request  alias=aliasName   uri=/  data=${file_data}   headers=${headers}

正确

Create Session      aliasName   url=http://address/
${resp}=    Post Request  alias=aliasName   uri=sub1/sub2/sub3  data=${file_data}   headers=${headers}

【讨论】:

  • 欢迎来到 SO!请编辑您的答案并解释!
猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 2023-03-29
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多