2017-07-14 3 views
1

J'essaie d'utiliser Rest Assured dans le framework Serenity pour valider une réponse de point de terminaison. J'envoie un corps xml au point d'extrémité et attends une réponse JSON en arrière comme si:Comment obtenir la valeur d'une clé si elle contient un espace dans Rest Assured/Serenity?

{"Entry ID" : "654123"} 

Je veux envoyer le XML et de vérifier dans la réponse JSON que la valeur de la clé « ID d'entrée » est pas vide ou nul. Le problème est que la clé contient un espace, et je crois que cela cause une erreur. Voici ce que j'ai jusqu'à présent:

SerenityRest.given().contentType(ContentType.XML) 
.body(xmlBody) 
.when().accept(ContentType.JSON).post(endpoint) 
.then().body("Entry ID", not(isEmptyOrNullString())) 
.and().statusCode(200); 

Ce produit l'erreur:

java.lang.IllegalArgumentException: Invalid JSON expression: 
Script1.groovy: 1: unable to resolve class       Entry 
@ line 1, column 33. 
         Entry ID 
          ^

1 error 

J'ai essayé enroulant le terme « ID d'entrée » de différentes manières sans succès:

.body("'Entry ID'", not(isEmptyOrNullString())) 
.body("''Entry ID''", not(isEmptyOrNullString())) 
.body("\"Entry ID\"", not(isEmptyOrNullString())) 
.body("['Entry ID']", not(isEmptyOrNullString())) 
.body("$.['Entry ID']", not(isEmptyOrNullString())) 

Est-il possible d'obtenir la valeur d'une clé contenant un espace dans Rest Assured?

+0

Passer au Karaté [https: // GitHub. com/intuit/karate] il n'a pas ce problème, voici un exemple: https://github.com/intuit/karate/blob/8c27030c570fb5a42234e8cca4652cdb241c639b/karate-junit4/src/test/java/com/intuit/karate/ junit4/demos/js-arrays.feature # L26 –

+0

Ma pensée est que quelque chose d'autre doit être faux. body ("['Entry ID']") est la bonne façon de le faire. https://stackoverflow.com/questions/34074569/apply-jsonpath-filter-to-field-with-space Cela fonctionne avec jayway json path qui est ce que restaure utilise. Peut-être essayer de le saisir en utilisant le chemin à la place, puis le vérifier après? https://github.com/rest-assured/rest-assured/wiki/Usage#single-path – canpan14

Répondre

0

Vous avez juste besoin d'échapper à la clé avec des guillemets simples:

then().body("'Entry ID'", not(isEmptyOrNullString())) 

Voici un exemple (testé dans la version 3.0.6):

// Given 
String json = "{\"Entry ID\" : \"654123\"}"; 

// When 
JsonPath jsonPath = JsonPath.from(json); 

// Then 
assertThat(jsonPath.getString("'Entry ID'"), not(isEmptyOrNullString()));