Validation de schéma JSON avec garantie REST

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 didacticiel, nous verrons comment nous pouvons valider une réponse JSON basée sur un schéma JSON prédéfini .

2. Configuration

La configuration initiale assurée par REST est la même que dans notre article précédent.

De plus, nous devons également inclure le module json-schema-validator dans le fichier pom.xml :

 io.rest-assured json-schema-validator 3.3.0 test 

Pour vous assurer que vous disposez de la dernière version, suivez ce lien.

3. Validation du schéma JSON

Jetons un œil à 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 ensuite qu'il s'agit du format général suivi de toutes les données renvoyées par notre API REST, nous pouvons ensuite 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 continuerons d'importer statiquement matchesJsonSchemaInClasspath à partir de io.restassured.module.jsv.JsonSchemaValidator.

4. Paramètres de validation du schéma JSON

4.1. Valider une réponse

Le module json-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.

Disons que nous voulons 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 le ferions en utilisant JsonSchemaFactory et spécifions la version 4 SchemaVersion et affirmons qu'il utilise ce schéma lorsqu'une demande est faite.

4.2. Vérifier les validations

Par défaut, json-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éfinit les cotes en tant que 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 des cotes , par conséquent une réponse où les cotes est une chaîne échouera à la validation. Donc, si nous souhaitons être moins stricts avec nos réponses, nous pouvons ajouter une règle personnalisée lors de la validation en effectuant d'abord l'importation statique suivante:

io.restassured.module.jsv.JsonSchemaValidatorSettings.settings;

puis exécutez le test avec le contrôle de validation défini sur false :

@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, c'est lourd et peu maintenable.

Pour éviter cela, nous avons la liberté de définir notre configuration une seule fois et de la laisser s'appliquer à tous les tests .

Nous allons configurer la validation pour qu'elle soit décochée et pour toujours l'utiliser avec le schéma JSON version 3:

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 de réinitialisation:

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 disponible à l'adresse over sur GitHub.