在邮递员

时间:2017-03-15 14:01:33

标签: xml xml-parsing postman

我必须测试一些以XML格式响应的web服务,并且我想解析从第一个请求到第二个请求调用的响应。

Ex:我发出第一个请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.com">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:exec>
         <!--Optional:-->
         <ser:sName>55</ser:sName>
         <!--Zero or more repetitions:-->
         <ser:sArguments>{{Param1}}</ser:sArguments>
         <ser:sArguments>XX</ser:sArguments>
         <ser:sArguments>POSTMAN</ser:sArguments>
         <ser:sArguments></ser:sArguments>
         </ser:exec>
   </soapenv:Body>
</soapenv:Envelope>

谁回复:

<soap:Body>
        <ns2:execResponse xmlns:ns4="http://address.com" xmlns:ns3="http://services" xmlns:ns2="http://services.com">
            <ns2:execReturn>6666&#xd;
</ns2:execReturn>
        </ns2:execResponse>
    </soap:Body>
</soap:Envelope>

我想将6666放在GlobalVariable或EnvironmentVariable中以用于第二次请求调用。

我现在尝试直到

首先我在Manage Environments - GLOBALS中设置一个参数(NumberReq),然后在TESTS中我把这段代码:

var jsonData = xml2Json(responseBody);
postman.setEnvironmentVariable("NumberReq", jsonData.execReturn);

在下一个请求中,我尝试使用这样的NumberReq参数:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.com">
       <soapenv:Header/>
       <soapenv:Body>
          <ser:exec>
             <!--Optional:-->
             <ser:sName>99</ser:sName>
             <!--Zero or more repetitions:-->
             <ser:sArguments>00</ser:sArguments>
             <ser:sArguments>{{NumberReq}}</ser:sArguments>
             <ser:sArguments>{{Param2}}</ser:sArguments>
             <ser:sArguments>{{Param3}}</ser:sArguments>
             </ser:exec>
       </soapenv:Body>
    </soapenv:Envelope>

我有两个webservices的集合,我从Postman Runner运行,但不能解析响应。

任何人都可以帮助我吗? 谢谢! :)

3 个答案:

答案 0 :(得分:5)

诀窍是如何将XML转换为JSON以及如何访问JSON数据。

您解析的JSON具有下一个结构: enter image description here 因此,为了从中获取值,您应该像这样逐步获取元素:

jsonData["xs:schema"]["xs:element"][0]["$"]["name"]

所以要设置你需要做的变量:

postman.setEnvironmentVariable("NumberReq", jsonData["soap:Body"]["ns2:execResponse"]["ns2:execReturn"]);

希望上面的示例正是您需要的代码。如果没有,请修改parced JSON的结构并更改所需元素的方式。

也许您也可以使用“点”结构来完成,例如jsonData.Body.execResponse.execReturn

答案 1 :(得分:1)

它使用正则表达式,我使用它:

var regularExpression = /^.{0,12}/;
var text = jsonData["soap:Envelope"]["soap:Body"]["ns2:execResponse"]["ns2:execReturn"];

match = regularExpression.exec(text);

谢谢! :)

答案 2 :(得分:1)

我能够提出一个稍微简单的解决方案,以便从xml响应中读取信息。

var xmlTree = xml2Json(responseBody);
var text = xmlTree["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:loginResponse"]["loginReturn"]["_"];
var textstring = JSON.stringify(text);
console.log(textstring);
postman.setEnvironmentVariable("loginReturn", textstring);

这是回应

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:loginResponse>
            <loginReturn xsi:type="xsd:string">b1c705515532a9abc353b32e91de3b97</loginReturn>
        </ns1:loginResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

但是,我无法使用以下格式在后续请求中使用保存到环境中的变量

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:Magento">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:shoppingCartCreate soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <sessionId xsi:type="xsd:string">{{loginReturn}}</sessionId>
         <storeId xsi:type="xsd:string">1</storeId>
      </urn:shoppingCartCreate>
   </soapenv:Body>
</soapenv:Envelope>