web-dev-qa-db-fra.com

Comment extraire une variable de XML à l'aide de Postman?

J'essaie d'extraire un SessionId du XML qui est renvoyé par une API SOAP.

J'ai lu la documentation Postman (plusieurs fois) mais ce n'était pas le plus utile pour atteindre mon objectif.

Ce qui a été suggéré dans quelques blogs était de convertir le XML en JSON, puis de choisir le jeton et sa valeur à partir de là, mais cela n'a pas aidé non plus.

J'ai utilisé ce qui suit dans mon test:

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

Ce qui précède a créé la variable "Session_Id" mais ne lui a pas réellement attribué de valeur. Je suis perplexe.

Je récupère définitivement les données de l'API, et elles sont visibles dans la réponse "Body" de Postman.

13
Kyle Burriss

Pour extraire une variable de XML à l'aide de Postman, convertissez d'abord votre XML en JSON, en utilisant la méthode du convertisseur xml2Json:

var responseJson = xml2Json(responseBody);

(Où "responseBody" est votre corps xml.) Utilisez ensuite la méthode console.log pour sortir vos données JSON, comme suit:

console.log(responseJson);

Assurez-vous d'avoir suivi ce tutoriel sur Activation Chrome Dev Tools in Postman

Dans votre Test Runner, exécutez le test, puis faites un clic droit et "Inspectez" n'importe où dans le Runner. Sélectionnez l'onglet "Console" une fois les outils de développement de Chrome lancés. Développez la partie "Objet".

Ensuite, développez (développez) jusqu'à ce que vous voyiez la propriété dont vous avez besoin des données. Ensuite, définissez la variable en ajoutant chaque niveau d'exploration au paramètre souhaité:

postman.setGlobalVariable("Session_Id", responseJson.UserSessionToken.SessionID); 

Dans ce cas, "responseJson" est l'objet, "UserSessionToken" était le niveau suivant dans l'exploration vers le bas, et SessionId était le paramètre dont j'avais besoin dans ce cadre.

21
Kyle Burriss

Postman v7.20.1

Je voudrais ajouter ma réponse car ci-dessus, il y a quelques détails qui m'ont pris du temps à résoudre:

  • comment gérer un multipartie SOAP response
  • comment gérer un objet JSON
  • responseBody definition

Voici les premières lignes de ma réponse XML à analyser:

------=_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>

Après avoir remarqué qu'il s'agissait d'une partie multiple, je me suis retrouvé avec ce test Postman:

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