Robot Framework中SOAP请求变量无法解析问题求助
解决Robot Framework SOAP请求中JSON嵌套变量无法解析的问题
看起来你遇到的核心问题是:Robot Framework不会自动解析SOAP报文字符串内部嵌套的变量,不管你写{TRANSACTIONID}还是{"TRANSACTIONID},都会被当成普通字符串传递,所以才会在响应里看到转义后的"TRANSACTIONID"。
下面给你具体的修复方案,分两步走:
1. 先单独格式化包含变量的JSON字符串
不要把变量直接写死在SOAP报文中,先把JSON部分抽出来,用Robot的字符串格式化语法替换变量,确保${TRANSACTIONID}被正确解析:
# 方法一:用Set Variable直接拼接(注意变量要加引号,符合JSON字符串格式) ${transaction_json}= Set Variable {"transactionId": "${TRANSACTIONID}","connectorId": 1,"mobileNumber": "+12323234345", "emailAddress": "xyz@gmail.com"} # 方法二:用Format String更清晰(推荐,尤其是变量多的时候) ${transaction_json}= Format String {"transactionId": "%s","connectorId": 1,"mobileNumber": "+12323234345", "emailAddress": "xyz@gmail.com"} ${TRANSACTIONID}
2. 将格式化后的JSON嵌入SOAP报文模板
把上面生成的${transaction_json}变量放到SOAP envelope的对应位置,再创建原始SOAP消息:
修改后的完整请求代码
Send Start Request [Arguments] ${abc} ${abc1} ${abc2} ${abc3} ${start_request} sleep ${Delay} Wait Until Keyword Succeeds 2 min 10 sec Create Soap Client ${login_details}[url]/soap/v1/CentralSystemService16Soap12?wsdl sleep ${Delay} # 先构建带变量的JSON字符串 ${transaction_json}= Format String {"transactionId": "%s","connectorId": 1,"mobileNumber": "+12323234345", "emailAddress": "xyz@gmail.com"} ${TRANSACTIONID} # 构建完整SOAP报文,嵌入格式化后的JSON ${soap_template}= Set Variable <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="urn://Ocpp/Cs/2015/10/"> <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <ns:data>${transaction_json}</ns:data> </soap:Header> <soap:Body> <ns:dataTransferRequest></ns:dataTransferRequest> </soap:Body> </soap:Envelope> ${message}= Create Raw Soap Message ${soap_template} sleep ${Delay} ${soap_response}= Wait Until Keyword Succeeds 2 min 10 sec Call Soap Method StartTransaction ${message} ${transactionID}= Get Wsdl Object Attribute ${soap_response} transactionId ${ID}= Convert To String ${transactionID} Set Suite Variable ${ID}
为什么原来的写法无效?
Robot Framework的变量替换规则是:只有直接作为关键字参数的变量会被解析,字符串内部的{xxx}不会自动识别替换——除非你主动用字符串格式化(比如Format String)或者变量拼接的方式处理。你之前的报文是一个固定字符串,{TRANSACTIONID}被当成了JSON的一部分,所以直接被转义后传到了服务端。
按照上面的方法修改后,${TRANSACTIONID}会先被替换成实际值,再生成合法的JSON,最后嵌入SOAP报文,就能解决变量不解析的问题了。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

