You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:21:47