SOAP APIから返されるXMLからSessionIdを抽出しようとしています。
私はPostmanのドキュメントを読みました(数回以上)が、私の目標を達成するのに最も役立ちませんでした。
いくつかのブログで示唆されたのは、XMLをJSONに変換し、トークンを取得し、そこからその値を取得することでしたが、それも役に立ちませんでした。
私はテストで以下を使用しました:
var jsonObject = xml2Json(responseBody);
postman.setGlobalVariable("Session_Id", jsonObject.SessionID);
上記は変数「Session_Id」を作成しましたが、実際にはそれに値を割り当てていません。私は困惑しています。
私は間違いなくAPIからデータを取得しています。そのデータはPostmanの「Body」レスポンスで確認できます。
Postmanを使用してXMLから変数を抽出するには、まずxml2Jsonコンバーターメソッドを使用して、XMLをJSONに変換します。
var responseJson = xml2Json(responseBody);
(「responseBody」はXMLボディです。)次に、console.logメソッドを使用して、JSONデータを次のように出力します。
console.log(responseJson);
Enabling Chrome Post Tools in Dev Tools でこのチュートリアルに従っていることを確認してください
テストランナー内でテストを実行し、右クリックして、ランナーの任意の場所で「検査」します。 Chromeの開発ツールが起動したら、[コンソール]タブを選択します。 「オブジェクト」部分を展開します。
次に、データが必要なプロパティが表示されるまでドリルダウン(展開)します。その後、必要なパラメータに各ドリルダウンレベルを追加して変数を設定します。
postman.setGlobalVariable("Session_Id", responseJson.UserSessionToken.SessionID);
この場合、「responseJson」がオブジェクトであり、「UserSessionToken」はドリルダウンの次のレベルであり、SessionIdはその中で必要なパラメーターでした。
Postman v7.20.1
上記に解決に時間がかかったいくつかの詳細があるので、私の答えを追加したいと思います。
これが、分析するXML応答の最初の行です。
------=_Part_694527_1470506002.1584708814081
Content-Type: application/xop+xml;charset=UTF-8;type="text/xml"
Content-Transfer-Encoding: 8bit
Content-ID:
<e3bd82ac-d88f-49d4-8088-e07ff1c8d407>
<?xml version="1.0" encoding="UTF-8" ?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<ns2:GenericResponse xmlns:ns2="http://XXXXXXXX">
<ns2:Service IdcService="XXXXXXXX">
<ns2:Document>
<ns2:Field name="XXXXXXXX:isSetDefault">1</ns2:Field>
<ns2:Field name="XXXXXXXX">CHECKIN_UNIVERSAL</ns2:Field>
私がそれがマルチパートであることに気付いた後、私はこのPostman Testで終わりました:
var response = pm.response.text();
var responseBody = response.substr(response.indexOf('<env:'));
pm.test("The body of the response is a valid XML", function () {
pm.expect(xml2Json(responseBody)).to.exist;
});
pm.test("UCM file upload checkin succesfull", function(){
var responseJson = xml2Json(responseBody);
var JsonFields = (responseJson['env:Envelope']['env:Body']['ns2:GenericResponse']['ns2:Service']['ns2:Document']['ns2:Field']);
JsonFields.forEach( field => {
if (field.name == 'StatusMessage'){
console.log("Field = " + field.name);
pm.expect(field.text().to.include("Successfully checked in"));
}
});
});