【发布时间】: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><ERROR><CODE>0110</CODE><MSGTXT>Encryption
Failure</MSGTXT></ERROR></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 关键字,因为它使用 <text/xml> 作为数据参数,而不是 ${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=<text/xml>。
问题
之前有没有人遇到过这个参数没有正确传递的问题?我认为应该是data=<${file_data>,因此将不再收到 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