XML形式で応答するいくつかのWebサービスをテストする必要があり、最初の要求から2番目の要求呼び出しまでの応答を解析したいと思います。
例:最初のリクエストを行います
<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>
そして、2番目のリクエスト呼び出しで使用するために6666をGlobalVariableまたはEnvironmentVariableに入れたいと思います。
今まで試したこと:
最初に、Manage Environments-GLOBALSでparameter(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>
この2つの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
のような「ドット」構造を使用してそれを行うこともできます。
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>
それは正規表現で動作します、私はこれを使用します:
var regularExpression = /^.{0,12}/;
var text = jsonData["soap:Envelope"]["soap:Body"]["ns2:execResponse"]["ns2:execReturn"];
match = regularExpression.exec(text);
ありがとうございました! :)