JSON-skemavalidering med REST-sikret

1. Oversigt

Det REST-sikre bibliotek giver support til test af REST API'er, normalt i JSON-format.

Fra tid til anden kan det være ønskeligt, uden at analysere svaret i detaljer, først at vide, om JSON-kroppen overholder et bestemt JSON-format.

I denne hurtige vejledning ser vi på, hvordan vi kan validere et JSON-svar baseret på et foruddefineret JSON-skema.

2. Opsætning

Den oprindelige REST-sikrede opsætning er den samme som vores tidligere artikel.

Derudover skal vi også medtage json-skema-validator modul i pom.xml fil:

 io.rest-forsikret json-skema-validator 3.3.0 test 

Følg dette link for at sikre, at du har den nyeste version.

3. JSON-skemavalidering

Lad os se på et eksempel.

Som et JSON-skema bruger vi en JSON, der er gemt i en fil, der hedder event_0.json, som er til stede i klassestien:

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

Under forudsætning af at dette er det generelle format efterfulgt af alle data, der returneres af vores REST API, kan vi derefter kontrollere et JSON-svar for overensstemmelse som sådan:

@Test offentligt ugyldigt givetUrl_whenJsonResponseConformsToSchema_thenCorrect () {get ("/ events? Id = 390"). Derefter (). AssertThat () .body (matchesJsonSchemaInClasspath ("event_0.json")); }

Bemærk, at vi stadig importerer statisk matchesJsonSchemaInClasspath fra io.restassured.module.jsv.JsonSchemaValidator.

4. JSON-skemavalidering Indstillinger

4.1. Valider et svar

Det json-skema-validator modul af REST-sikret giver os magten til at udføre finkornet validering ved at definere vores egne brugerdefinerede konfigurationsregler.

Sig, at vi ønsker, at vores validering altid bruger JSON-skemaversion 4:

@Test offentlig ugyldighed givenUrl_whenValidatesResponseWithInstanceSettings_thenCorrect () {JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder () .setValidationConfiguration (ValidationConfiguration.newBuilder () .setDefaultVioners). get ("/ events? id = 390"). derefter (). assertThat () .body (matchesJsonSchemaInClasspath ("event_0.json") .using (jsonSchemaFactory)); }

Vi ville gøre dette ved at bruge JsonSchemaFactory og specificer version 4 Skemaversion og hævde, at det bruger dette skema, når en anmodning fremsættes.

4.2. Kontroller valideringer

Som standard er json-skema-validator kører kontrollerede valideringer på JSON-svarstrengen. Dette betyder, at hvis skemaet definerer odds som en matrix som i følgende JSON:

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

så forventer validatoren altid en matrix som værdien for odds, deraf et svar hvor odds er en Snor mislykkes validering. Så hvis vi gerne vil være mindre strenge med vores svar, kan vi tilføje en brugerdefineret regel under validering ved først at foretage følgende statiske import:

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

udfør derefter testen med valideringskontrollen indstillet til falsk:

@Test offentlig ugyldighed givenUrl_whenValidatesResponseWithStaticSettings_thenCorrect () {get ("/ events? Id = 390"). Derefter (). AssertThat (). Body (matchesJsonSchemaInClasspath ("event_0.json"). Ved hjælp af (indstillinger (). Med (). Kontrolleret validering) (falsk))); }

4.3. Global valideringskonfiguration

Disse tilpasninger er meget fleksible, men med et stort antal tests bliver vi nødt til at definere en validering for hver test, dette er besværligt og ikke særlig vedligeholdeligt.

For at undgå dette, vi har friheden til at definere vores konfiguration kun én gang og lade den gælde for alle tests.

Vi konfigurerer valideringen til ikke at være markeret og bruger den altid mod JSON-skemaversion 3:

JsonSchemaFactory fabrik = JsonSchemaFactory.newBuilder () .setValidationConfiguration (ValidationConfiguration.newBuilder () .setDefaultVersion (SchemaVersion.DRAFTV3) .freeze ()). Freeze (); JsonSchemaValidator.settings = indstillinger () .med (). JsonSchemaFactory (fabrik). Og (). Med (). Kontrolleret Validering (falsk);

derefter for at fjerne denne konfiguration kalder du nulstillingsmetoden:

JsonSchemaValidator.reset ();

5. Konklusion

I denne artikel har vi vist, hvordan vi kan validere et JSON-svar mod et skema, når vi bruger REST-sikret.

Som altid er den fulde kildekode til eksemplet tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found