我必须测试一些以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>
回应的:
<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>
我想将6666放入GlobalVariable或EnvironmentVariable中,以用于第二个请求调用。
我现在尝试一下:
首先,我在“管理环境-GLOBALS”中设置参数(NumberReq),然后在“测试”中输入以下代码:
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>
我有一个包含这两个Web服务的集合,我从Postman Runner运行,但是无法解析响应。
谁能帮我?
谢谢! :)
最佳答案
诀窍是如何将XML转换为JSON,以及如何访问JSON数据。
您解析的JSON具有以下结构:
因此,为了从中获取值,您应该像这样逐步获取元素:
jsonData["xs:schema"]["xs:element"][0]["$"]["name"]
因此,要设置变量,您需要执行以下操作:
postman.setEnvironmentVariable("NumberReq", jsonData["soap:Body"]["ns2:execResponse"]["ns2:execReturn"]);
希望上面的示例正是您需要的代码。如果不是,请修改解析后的JSON的结构,并更改为所需元素的方式。
也许您也可以使用“点”结构来完成此操作,例如
jsonData.Body.execResponse.execReturn