JSON-schema-validatie met REST-verzekerd

1. Overzicht

De bibliotheek met REST-garantie biedt ondersteuning voor het testen van REST-API's, meestal in JSON-indeling.

Van tijd tot tijd kan het wenselijk zijn, zonder de respons in detail te analyseren, om eerst te weten of de JSON-body voldoet aan een bepaald JSON-formaat.

In deze korte tutorial bekijken we hoe we kunnen een JSON-antwoord valideren op basis van een vooraf gedefinieerd JSON-schema.

2. Installatie

De initiële REST-verzekerde setup is hetzelfde als in ons vorige artikel.

Daarnaast moeten we ook de json-schema-validator module in de pom.xml het dossier:

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

Volg deze link om er zeker van te zijn dat u de laatste versie heeft.

3. JSON-schemavalidatie

Laten we een voorbeeld bekijken.

Als JSON-schema gebruiken we een JSON die is opgeslagen in een bestand met de naam event_0.json, die aanwezig is in het klassenpad:

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

In de veronderstelling dat dit het algemene formaat is, gevolgd door alle gegevens die door onze REST API worden geretourneerd, kunnen we een JSON-antwoord controleren op conformiteit, zoals:

@Test openbare ongeldig gegevenUrl_whenJsonResponseConformsToSchema_thenCorrect () {get ("/ events? Id = 390"). Then (). AssertThat () .body (matchesJsonSchemaInClasspath ("event_0.json")); }

Merk op dat we nog steeds statisch zullen importeren matchesJsonSchemaInClasspath van io.restassured.module.jsv.JsonSchemaValidator.

4. Validatie van JSON-schema Instellingen

4.1. Valideer een reactie

De json-schema-validator module van REST-assured geeft ons de mogelijkheid om fijnmazige validatie uit te voeren door onze eigen aangepaste configuratieregels te definiëren.

Stel dat we willen dat onze validatie altijd de JSON-schemaversie 4 gebruikt:

@Test openbare leegte gegevenUrl_whenValidatesResponseWithInstanceSettings_thenCorrect () {JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder () .setValidationConfiguration (ValidationConfiguration.newBuilder () .setDefaulters. get ("/ events? id = 390"). then (). assertThat () .body (matchesJsonSchemaInClasspath ("event_0.json") .using (jsonSchemaFactory)); }

We zouden dit doen door de JsonSchemaFactory en specificeer de versie 4 SchemaVersion en beweren dat het dat schema gebruikt wanneer een verzoek wordt gedaan.

4.2. Controleer validaties

Standaard is het json-schema-validator voert gecontroleerde validaties uit op de JSON-antwoordreeks. Dit betekent dat als het schema definieert kansen als een array zoals in de volgende JSON:

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

dan verwacht de validator altijd een array als de waarde voor kansen, vandaar een reactie waar kansen is een Draad zal de validatie mislukken. Dus als we minder streng willen zijn met onze antwoorden, kunnen we tijdens de validatie een aangepaste regel toevoegen door eerst de volgende statische import uit te voeren:

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

voer vervolgens de test uit met de validatiecontrole ingesteld op false:

@Test openbare ongeldig gegevenUrl_whenValidatesResponseWithStaticSettings_thenCorrect () {get ("/ events? Id = 390"). Then (). AssertThat (). Body (matchesJsonSchemaInClasspath ("event_0.json"). Met (settings (). Met (). GecontroleerdValidatie (false))); }

4.3. Algemene validatieconfiguratie

Deze aanpassingen zijn erg flexibel, maar met een groot aantal tests zouden we voor elke test een validatie moeten definiëren, dit is omslachtig en niet erg onderhoudbaar.

Om dit te vermijden, we hebben de vrijheid om onze configuratie slechts één keer te definiëren en deze op alle tests te laten gelden.

We zullen de validatie configureren om te worden uitgeschakeld en altijd te gebruiken voor JSON-schemaversie 3:

JsonSchemaFactory factory = JsonSchemaFactory.newBuilder () .setValidationConfiguration (ValidationConfiguration.newBuilder () .setDefaultVersion (SchemaVersion.DRAFTV3) .freeze ()). Freeze (); JsonSchemaValidator.settings = instellingen (). Met (). JsonSchemaFactory (fabriek). En (). Met (). ChecksValidation (false);

roep vervolgens de reset-methode aan om deze configuratie te verwijderen:

JsonSchemaValidator.reset ();

5. Conclusie

In dit artikel hebben we laten zien hoe we een JSON-reactie kunnen valideren op basis van een schema wanneer we REST-assured gebruiken.

Zoals altijd is de volledige broncode voor het voorbeeld beschikbaar op GitHub.