Question

Nous utilisons le RESTE assurée cadre de faire un peu d'unité/tests d'intégration en Java.

La réponse XML à partir d'un service REST est similaire à ceci:

<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns="urn:service:com:namespace:item/1"
    returned="3" found="3">

    <ItemRef object="urn:svc:com:car:item:123456" type="door">door-123456.pdf</ItemRef>
    <ItemRef object="urn:svc:com:car:item:983425" type="mirror">mirror-43562577.pdf</ItemRef>
    <ItemRef object="urn:svc:com:car:item:983425" type="wheel" >door-94584854.pdf</ItemRef>    
</Items>

Dans mon test, je suis intéressé pour consulter le nombre d'éléments retournés par la lecture de l'attribut returned comme ceci

givenOK()
    .expect()
        .body("Items.@returned", equalTo("3")) // this is a string
    .when()
    .get(myurl)

Et ça fonctionne bien

Maintenant, je veux que le bien de contrôler si l'URNE dans la xmlns est correcte avec la même logique:

givenOK()
    .expect()
        .body("Items.@returned", equalTo("3")) // this is a string
        .body("Items.@xmlns", equalTo("urn:service:com:namespace:item/1"))
    .when()
    .get(myurl)

Mais lors de mon essai, l'expression Items.@xmlns ne semble pas renvoyer la valeur de l'attribut, mais vide:[]

Aucune idée de pourquoi cela ne fonctionne pas?

Était-ce utile?

La solution

Se pourrait-il que le "xmlns" attribut est traitée d'une manière particulière parce qu'elle indique un espace de noms?

Un possible de contourner ce serait déclarer l'espace de noms dans le XmlConfig et de vérifier quelque chose dans le corps.

given().
        config(RestAssured.config().xmlConfig(XMLConfig.xmlConfig().declareNamespace("ns", "urn:service:com:namespace:item/1"))).
when().
        get(myUrl).
then().
        body("'ns:ItemRef'[0]", equalTo("door-123456.pdf"));

Et un autre exemple avec plusieurs nœuds et les attributs (chemin):

given()
    .config(
        RestAssured.config()
            .xmlConfig(XmlConfig.xmlConfig()
                .declareNamespace("ns", "urn:service:com:namespace:item/1"))).
    when()
        .get(myUrl)
    .then()
        .body("'ns:RootNode'.'ns:Level1'.'ns:Level2'[0].'@ns:id'", equalTo("AN-ID-123"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top