web-dev-qa-db-ja.com

Postmanを使用してXMLから変数を抽出するにはどうすればよいですか?

SOAP APIから返されるXMLからSessionIdを抽出しようとしています。

私はPostmanのドキュメントを読みました(数回以上)が、私の目標を達成するのに最も役立ちませんでした。

いくつかのブログで示唆されたのは、XMLをJSONに変換し、トークンを取得し、そこからその値を取得することでしたが、それも役に立ちませんでした。

私はテストで以下を使用しました:

var jsonObject = xml2Json(responseBody);
postman.setGlobalVariable("Session_Id", jsonObject.SessionID);

上記は変数「Session_Id」を作成しましたが、実際にはそれに値を割り当てていません。私は困惑しています。

私は間違いなくAPIからデータを取得しています。そのデータはPostmanの「Body」レスポンスで確認できます。

13
Kyle Burriss

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はその中で必要なパラメーターでした。

21
Kyle Burriss

Postman v7.20.1

上記に解決に時間がかかったいくつかの詳細があるので、私の答えを追加したいと思います。

  • マルチパートに対処する方法SOAP応答
  • jSONオブジェクトを管理する方法
  • responseBodyの定義

これが、分析する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"));
        }
    }); 
});
1
tuxErrante