Validation de schéma JSON avec REST-assuré
1. Vue d'ensemble
La bibliothèque assurée par REST prend en charge le test des API REST, généralement au format JSON.
De temps en temps, il peut être souhaitable, sans analyser la réponse en détail, de savoir d'abord si le corps JSON est conforme à un certain format JSON.
Dans ce rapide tutoriel, nous allons voir commentwe can validate a JSON response based on a predefined JSON schema.
2. Installer
La configuration initiale assurée par REST est la même queour previous article.
De plus, nous devons également inclure le modulejson-schema-validator dans le fichierpom.xml:
io.rest-assured
json-schema-validator
3.0.0
Pour vous assurer que vous disposez de la dernière version, suivezthis link.
Nous avons également besoin d’une autre bibliothèque portant le même nom mais avec un auteur et des fonctionnalités différents. Ce n’est pas un module de REST assuré mais plutôt, il est utilisé sous le capot par lesjson-schema-validator pour effectuer la validation:
com.github.fge
json-schema-validator
2.2.6
Sa dernière version peut être trouvéehere.
La bibliothèque,json-schema-validator, peut également avoir besoin de la dépendancejson-schema-core:
com.github.fge
json-schema-core
1.2.5
Et la dernière version est toujours trouvéehere.
3. Validation du schéma JSON
Voyons un exemple.
En tant que schéma JSON, nous utiliserons un JSON enregistré dans un fichier appeléevent_0.json, qui est présent dans le classpath:
{
"id": "390",
"data": {
"leagueId": 35,
"homeTeam": "Norway",
"visitingTeam": "England",
},
"odds": [{
"price": "1.30",
"name": "1"
},
{
"price": "5.25",
"name": "X"
}]
}
En supposant qu'il s'agisse du format général suivi de toutes les données renvoyées par notre API REST, nous pouvons alors vérifier la conformité d'une réponse JSON, comme suit:
@Test
public void givenUrl_whenJsonResponseConformsToSchema_thenCorrect() {
get("/events?id=390").then().assertThat()
.body(matchesJsonSchemaInClasspath("event_0.json"));
}
Notez que nous allons toujours importer statiquementmatchesJsonSchemaInClasspath depuisio.restassured.module.jsv.JsonSchemaValidator.
4. Validation du schéma JSON Paramètres
4.1. Valider une réponse
Le modulejson-schema-validator de REST-assuré nous donne le pouvoir d'effectuer une validation fine en définissant nos propres règles de configuration personnalisées.
Supposons que notre validation utilise toujours le schéma JSON version 4:
@Test
public void givenUrl_whenValidatesResponseWithInstanceSettings_thenCorrect() {
JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder()
.setValidationConfiguration(
ValidationConfiguration.newBuilder()
.setDefaultVersion(SchemaVersion.DRAFTV4).freeze())
.freeze();
get("/events?id=390").then().assertThat()
.body(matchesJsonSchemaInClasspath("event_0.json")
.using(jsonSchemaFactory));
}
Nous ferions cela en utilisant lesJsonSchemaFactory et en spécifiant la version 4SchemaVersion et en affirmant qu'il utilise ce schéma lorsqu'une demande est faite.
4.2. Vérifier les validations
Par défaut, lejson-schema-validator exécute des validations vérifiées sur la chaîne de réponse JSON. Cela signifie que si le schéma définitodds comme un tableau comme dans le JSON suivant:
{
"odds": [{
"price": "1.30",
"name": "1"
},
{
"price": "5.25",
"name": "X"
}]
}
alors le validateur attendra toujours un tableau comme valeur pourodds, donc une réponse oùodds est unString échouera à la validation. Ainsi, si nous souhaitons être moins stricts dans nos réponses, nous pouvons ajouter une règle personnalisée lors de la validation en effectuant tout d'abord l'importation statique suivante:
io.restassured.module.jsv.JsonSchemaValidatorSettings.settings;
puis exécutez le test avec le contrôle de validation réglé surfalse:
@Test
public void givenUrl_whenValidatesResponseWithStaticSettings_thenCorrect() {
get("/events?id=390").then().assertThat().body(matchesJsonSchemaInClasspath
("event_0.json").using(settings().with().checkedValidation(false)));
}
4.3. Configuration de validation globale
Ces personnalisations sont très flexibles, mais avec un grand nombre de tests, il faudrait définir une validation pour chaque test, ce qui est fastidieux et difficile à gérer.
Pour éviter cela,we have the freedom to define our configuration just once and let it apply to all tests.
Nous allons configurer la validation pour qu'elle soit décochée et pour toujours l'utiliser avec la version 3 du schéma JSON:
JsonSchemaFactory factory = JsonSchemaFactory.newBuilder()
.setValidationConfiguration(
ValidationConfiguration.newBuilder()
.setDefaultVersion(SchemaVersion.DRAFTV3)
.freeze()).freeze();
JsonSchemaValidator.settings = settings()
.with().jsonSchemaFactory(factory)
.and().with().checkedValidation(false);
puis pour supprimer cette configuration, appelez la méthode reset:
JsonSchemaValidator.reset();
5. Conclusion
Dans cet article, nous avons montré comment nous pouvons valider une réponse JSON par rapport à un schéma lors de l'utilisation de la garantie REST.
Comme toujours, le code source complet de l'exemple est disponibleover on GitHub.