Convalida dello schema JSON con garanzia REST

1. Panoramica

La libreria REST-assicurata fornisce supporto per il test delle API REST, solitamente in formato JSON.

Di tanto in tanto può essere desiderabile, senza analizzare la risposta in dettaglio, sapere prima di tutto se il corpo JSON è conforme a un determinato formato JSON.

In questo breve tutorial, daremo un'occhiata a come convalidare una risposta JSON in base a uno schema JSON predefinito .

2. Configurazione

La configurazione iniziale garantita da REST è la stessa del nostro articolo precedente.

Inoltre, dobbiamo includere anche il modulo json-schema-validator nel file pom.xml :

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

Per assicurarti di avere l'ultima versione, segui questo link.

3. Convalida dello schema JSON

Diamo un'occhiata a un esempio.

Come schema JSON, utilizzeremo un JSON salvato in un file chiamato event_0.json , che è presente nel classpath:

{ "id": "390", "data": { "leagueId": 35, "homeTeam": "Norway", "visitingTeam": "England", }, "odds": [{ "price": "1.30", "name": "1" }, { "price": "5.25", "name": "X" }] }

Quindi, supponendo che questo sia il formato generale seguito da tutti i dati restituiti dalla nostra API REST, possiamo quindi controllare una risposta JSON per la conformità in questo modo:

@Test public void givenUrl_whenJsonResponseConformsToSchema_thenCorrect() { get("/events?id=390").then().assertThat() .body(matchesJsonSchemaInClasspath("event_0.json")); }

Si noti che importeremo comunque in modo statico matchJsonSchemaInClasspath da io.restassured.module.jsv.JsonSchemaValidator.

4. Impostazioni di convalida dello schema JSON

4.1. Convalida una risposta

Il modulo json-schema-validator di REST-assicurato ci dà il potere di eseguire una convalida granulare definendo le nostre regole di configurazione personalizzate.

Diciamo che vogliamo che la nostra convalida utilizzi sempre la versione 4 dello schema JSON:

@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)); }

Lo faremmo utilizzando JsonSchemaFactory e specificando la versione 4 SchemaVersion e affermando che sta utilizzando quello schema quando viene effettuata una richiesta.

4.2. Verifica convalide

Per impostazione predefinita, json-schema-validator esegue convalide verificate sulla stringa di risposta JSON. Ciò significa che se lo schema definisce le quote come un array come nel seguente JSON:

{ "odds": [{ "price": "1.30", "name": "1" }, { "price": "5.25", "name": "X" }] }

quindi il validatore si aspetterà sempre un array come valore per odds , quindi una risposta in cui odds è una stringa fallirà la convalida. Quindi, se desideriamo essere meno rigidi con le nostre risposte, possiamo aggiungere una regola personalizzata durante la convalida effettuando prima la seguente importazione statica:

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

quindi eseguire il test con il controllo di convalida impostato su 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. Configurazione di convalida globale

Queste personalizzazioni sono molto flessibili, ma con un gran numero di test dovremmo definire una validazione per ogni test, questo è macchinoso e poco manutenibile.

Per evitare ciò, abbiamo la libertà di definire la nostra configurazione solo una volta e di lasciarla applicare a tutti i test .

Configureremo la convalida per essere deselezionata e per usarla sempre contro la versione 3 dello schema JSON:

JsonSchemaFactory factory = JsonSchemaFactory.newBuilder() .setValidationConfiguration( ValidationConfiguration.newBuilder() .setDefaultVersion(SchemaVersion.DRAFTV3) .freeze()).freeze(); JsonSchemaValidator.settings = settings() .with().jsonSchemaFactory(factory) .and().with().checkedValidation(false);

quindi per rimuovere questa configurazione chiamare il metodo di ripristino:

JsonSchemaValidator.reset();

5. conclusione

In questo articolo abbiamo mostrato come convalidare una risposta JSON rispetto a uno schema quando si utilizza REST-assicurato.

Come sempre, il codice sorgente completo per l'esempio è disponibile su GitHub.