Robot Framework使用RequestsLibrary发送XML内容POST请求报错排查
解决Robot Framework发送XML请求体及验证响应的问题
我来帮你搞定这个问题!你遇到的核心是如何正确用RequestsLibrary发送纯XML格式的POST请求体(而非文件),同时获取完整响应内容做验证。咱们一步步拆解:
先看你之前代码的问题
你修改后的代码里用了&{data}= Create Dictionary name=${file_data.strip()},这相当于把XML内容打包成了表单键值对(name=xxx),但服务器期望的是纯XML文本作为请求体,这种格式不匹配就是导致500错误的根本原因。
正确的实现代码
*** Settings *** Library Collections Library RequestsLibrary Library XML Library OperatingSystem *** Test Cases *** Send XML Content and Validate Response # 1. 创建会话,初始化基础URL Create Session Gateway https://GatewayURL.asmx # 2. 读取XML文件的文本内容(用Get File而非二进制读取,避免编码问题) ${xml_content}= Get File ${CURDIR}${/}data.xml # 3. 设置请求头,明确告知服务器请求体是XML格式 &{headers}= Create Dictionary Content-Type=text/xml; charset=utf-8 # 4. 发送POST请求:直接把XML文本作为data参数传入(不要包字典!) ${response}= Post Request Gateway /post data=${xml_content} headers=${headers} # 5. 验证响应状态码 Should Be Equal As Strings ${response.status_code} 200 # 6. 获取完整的响应XML内容,用于后续验证 ${response_xml}= Set Variable ${response.text} # 示例:用XML库验证响应中的指定节点值 ${target_node_value}= Get Element Text ${response_xml} //YourTargetNode Should Be Equal ${target_node_value} ExpectedNodeValue
关键要点说明
- 直接传XML文本作为data参数:
Post Request的data参数如果接收字符串,会直接把它作为请求体发送;如果传字典,会自动编码成application/x-www-form-urlencoded的表单数据,这和服务器需要的text/xml完全不兼容,这是你之前踩的坑。 - 用Get File读取XML:XML是文本文件,
Get File会以文本方式读取,避免二进制读取带来的编码混乱。 - 获取响应内容:
${response.text}就能拿到服务器返回的完整XML文本,之后可以用XML库的各种关键字(比如Xpath Should Exist、Get Attribute Value等)做精准验证。 - 关于你疑惑的“Header被当作Data”:看你报错里的
data=<text/xml>,这其实是因为你把XML内容放到了字典的name键里,表单数据被转义后显示异常,并不是Header被误用。只要直接传字符串作为data,这个问题就会消失。
匹配你的理想流程
上面的代码完美贴合你的需求:
- 通过
Get File从目录提取XML文件内容 - 把XML文本作为
data配合正确的Content-Type头发送POST请求 - RequestsLibrary会自动等待服务器响应
- 通过
${response.text}拿到响应XML,再用XML库完成验证
内容的提问来源于stack exchange,提问作者RangHu
相关产品推荐
相关产品推荐

