xml - 在 Postman 中解析对另一个请求的 XML 响应

标签 xml xml-parsing postman

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

例如:我提出第一个请求

<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>

我有一个包含这两个网络服务的集合,我从 Postman Runner 运行,但无法解析响应。

谁能帮帮我? 谢谢! :)

最佳答案

诀窍在于如何将 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

关于xml - 在 Postman 中解析对另一个请求的 XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812012/

相关文章:

json - 如何将两个不同的对象传递给 postman 中的 POST 请求以测试 RESTful API?

django - 文件 : "Upload a valid image" using Postman in Django Rest Framework

jquery - 如何让 jQuery.parseXML 在 node.js 中工作

iphone - 显示xml页面的内容

java - 使用java从XML中查找重复的实体标签

PHP XML 遍历出错

c# - .NET XmlSerializer(反)使用架构编译器 xsd.exe 和错误的命名空间绑定(bind)从不同的命名空间序列化派生类型

xml - 在使用点表示法访问 XML 节点时是否可以使用属性?

XCCDF 上的 C# Linq-to-XML