Robot Framework+SoapLibrary调用SOAP接口遇XML语法错误求助
解决Robot Framework SoapLibrary发送XML报错问题
问题根源
你遇到的XMLSyntaxError本质是服务返回的不是合法XML,而是HTML错误页面(从META和head标签不匹配可判断)。这说明带/soap的URL在SoapLibrary调用时,服务未正确处理请求,返回了网页错误内容;而换/wsdl返回的是WSDL文档,该地址仅用于获取服务描述,并非实际调用接口的端点。
解决方案
方案1:改用RequestsLibrary直接发送HTTP请求
若需直接发送自定义XML,跳过SoapLibrary的WSDL依赖,RequestsLibrary更灵活:
- 安装依赖库:
pip install robotframework-requests
- 修改测试代码:
*** Settings *** Library RequestsLibrary Library OperatingSystem *** Variables *** ${SOAP_ENDPOINT} http://localhost:81/WS/DLL/JDSPB_WS_IntegraLegado.dll/soap/IJDSPBCAB ${XML_FILE} ${CURDIR}/FILETEST.xml *** Test Cases *** Test Direct SOAP Request # 读取XML文件内容 ${xml_content} Get File ${XML_FILE} # 设置SOAP请求头 &{headers} Create Dictionary Content-Type=text/xml; charset=utf-8 # 发送POST请求 ${response} Post Request url=${SOAP_ENDPOINT} data=${xml_content} headers=${headers} # 验证响应(可选) Should Be Equal As Strings ${response.status_code} 200 Log ${response.text}
方案2:修正SoapLibrary的使用方式
若坚持用SoapLibrary,需先通过WSDL创建客户端,再调用对应方法(而非直接传XML文件):
- 加载WSDL并调用方法:
*** Variables *** ${WSDL_URL} http://localhost:81/WS/DLL/JDSPB_WS_IntegraLegado.dll/wsdl/IJDSPBCAB *** Test Cases *** Test Soap Method Call # 通过WSDL创建客户端 Create Soap Client ${WSDL_URL} # 替换为实际SOAP方法名及对应参数 ${response} Call SOAP Method YourTargetMethodName param1=xxx param2=xxx Log ${response}
若必须直接发送自定义XML,可尝试为SoapLibrary指定SOAPAction请求头:
Create Soap Client ${URL} soap_action=http://your-target-soap-action-uri ${response} Call SOAP Method With XML ${XML_FILE}
关键注意点
- 确认SOAP端点要求的请求方式:必须为POST,且
Content-Type请求头需正确(通常为text/xml或application/soap+xml)。 - 对比SOAP工具的请求详情:用抓包工具(如Fiddler、Postman)查看成功调用时的URL、请求头、请求体,确保Robot Framework的请求与之一致。
内容的提问来源于stack exchange,提问作者evojd
相关产品推荐
相关产品推荐

