RestAssured et GPath expression pour l'attribut n'est pas conforme
-
21-12-2019 - |
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?
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"));