RestAssured e GPath expressão para o atributo não é consistente
-
21-12-2019 - |
Pergunta
Nós usamos o RESTO-a certeza de framework para realizar alguns de unidade testes de integração em Java.
O XML de resposta de um serviço REST é semelhante a este:
<?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>
No meu teste eu estou interessado para verificar o número de itens retornados pela leitura do atributo returned
como este
givenOK()
.expect()
.body("Items.@returned", equalTo("3")) // this is a string
.when()
.get(myurl)
E funciona bem
Agora eu quero, bem como para controlar se a URNA na xmlns está correto com a mesma lógica:
givenOK()
.expect()
.body("Items.@returned", equalTo("3")) // this is a string
.body("Items.@xmlns", equalTo("urn:service:com:namespace:item/1"))
.when()
.get(myurl)
Mas quando o meu teste, a expressão Items.@xmlns
parece não devolver o valor do atributo, mas vazia:[]
Alguma idéia de por que isso não está funcionando?
Solução
Poderia ser que o "xmlns" atributo é tratado de forma especial, porque indica um namespace?
Uma possível alternativa seria declarar o namespace no XmlConfig e verificar algo no corpo.
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"));
E outro exemplo, com vários nós e atributos (caminho explícito):
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"));