DET*_*T66 4 xml xml-parsing postman
我必须测试一些以XML格式响应的web服务,并且我想解析从第一个请求到第二个请求调用的响应.
例如:我提出第一个请求
<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>
Run Code Online (Sandbox Code Playgroud)
谁回应:
<soap:Body>
<ns2:execResponse xmlns:ns4="http://address.com" xmlns:ns3="http://services" xmlns:ns2="http://services.com">
<ns2:execReturn>6666
</ns2:execReturn>
</ns2:execResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我想将6666放在GlobalVariable或EnvironmentVariable中以用于第二次请求调用.
我现在尝试直到:
首先我在Manage Environments - GLOBALS中设置一个参数(NumberReq),然后在TESTS中我把这段代码:
var jsonData = xml2Json(responseBody);
postman.setEnvironmentVariable("NumberReq", jsonData.execReturn);
Run Code Online (Sandbox Code Playgroud)
在下一个请求中,我尝试使用这样的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>
Run Code Online (Sandbox Code Playgroud)
我有这两个webservices的集合,我从Postman Runner运行,但不能解析响应.
谁能帮我?谢谢!:)
诀窍是如何将XML转换为JSON以及如何访问JSON数据.
您解析的JSON具有下一个结构:
因此,为了从中获取值,您应该像这样逐步获取元素:
jsonData["xs:schema"]["xs:element"][0]["$"]["name"]
Run Code Online (Sandbox Code Playgroud)
因此,要设置变量,您需要执行此操作:
postman.setEnvironmentVariable("NumberReq", jsonData["soap:Body"]["ns2:execResponse"]["ns2:execReturn"]);
Run Code Online (Sandbox Code Playgroud)
希望上面的例子正是您需要的代码.如果没有,请修改parced JSON的结构并更改所需元素的方式.
也许你也可以使用"点"结构来做到这一点 jsonData.Body.execResponse.execReturn
小智 7
我能够想出一个稍微更简单的解决方案来读取 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);
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8031 次 |
| 最近记录: |