无法在Postman预请求脚本中访问XML响应

时间:2018-10-01 17:54:12

标签: postman

我在从Postman预请求脚本中提取xml respose时遇到麻烦。我的预定要求如下:

pm.sendRequest({
   url: "https://login.salesforce.com/services/Soap/u/40.0",
   method: 'POST',
   header: {
       'soapaction': "Required", 
       'Content-Type': 'text/xml',
   },
   body: {
       mode: 'raw',
       raw: "<se:Envelope xmlns:se=\"http://schemas.xmlsoap.org/soap/envelope/\"> \
                <se:Header/> \
                <se:Body> \
                    <login xmlns=\"urn:partner.soap.sforce.com\"> \
                        <username>user</username> \
                        <password>password</password> \
                    </login> \
                </se:Body> \
            </se:Envelope>"
   }
}, function (err, responseBody) {
    console.log(pm.request.body);
    var xmlTree = xml2Json(responseBody);
    console.log(xmlTree);
    console.log("sessionid: " + xmlTree['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId);
    //pm.environment.set("sys_id", response.json().result.sys_id);
    postman.setEnvironmentVariable("sessionid", xmlTree['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId);
});

当我在Postman控制台中查看响应时,我看到了正确的响应,但是当我尝试通过“ pm.request.body”或仅通过“ responseBody”访问它时,我得到一个空/空值。

以下是我看到的响应,并在我输出到日志时注意它为空:

enter image description here

有什么想法吗?

此外,我可以使用响应JSON负载的url做完全相同的事情,并使用相同的方法提取响应并使用值。有谁知道XML响应是否有所不同?还是应该以不同的方式处理它们?

1 个答案:

答案 0 :(得分:0)

在深入研究之后,我发现响应是返回一个“ Stream”对象,该对象需要使用text()函数反序列化。

pm.sendRequest(loginRequest, function (err, response) {
    var xmlTree = xml2Json(response.text());
    var sessionid = xmlTree['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId;
    console.log("sessionid: " + sessionid);
    pm.environment.set("sessionid", sessionid);
});