אימות סכמת JSON עם מבטיח REST

1. סקירה כללית

הספרייה המובטחת על ידי REST מספקת תמיכה לבדיקת ממשקי API של REST, בדרך כלל בפורמט JSON.

מעת לעת עשוי להיות רצוי, מבלי לנתח את התגובה בפירוט, לדעת ראשית אם גוף ה- JSON תואם לפורמט JSON מסוים.

במדריך מהיר זה, נבחן כיצד אנו יכולים לאמת תגובת JSON על בסיס סכימת JSON מוגדרת מראש.

2. התקנה

ההתקנה הראשונית המובטחת על ידי REST זהה למאמר הקודם שלנו.

בנוסף, עלינו לכלול את ה- json-schema-validator מודול ב pom.xml קוֹבֶץ:

 io. מבחן json-schema-validator 3.3.0 בטוח 

כדי להבטיח שיש לך את הגרסה האחרונה, לחץ על קישור זה.

3. אימות סכמת JSON

בואו נסתכל על דוגמא.

כסכמת JSON נשתמש ב- JSON שנשמר בקובץ שנקרא אירוע_0.json, שנמצא במסלול הכיתה:

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

ואז בהנחה שזהו הפורמט הכללי ואחריו כל הנתונים שהוחזרו על ידי ה- REST API שלנו, נוכל לבדוק את תגובת JSON לגבי התאמה כזו:

@Test הציבור בטל שניתןUrl_whenJsonResponseConformsToSchema_thenCorrect () {get ("/ events? Id = 390"). ואז (). AssertThat () .body (matchesJsonSchemaInClasspath ("event_0.json")); }

שימו לב שעדיין נייבא סטטית התאמות JsonSchemaInClasspath מ io.restassured.module.jsv.JsonSchemaValidator.

4. אימות סכמת JSON הגדרות

4.1. אמת את התגובה

ה json-schema-validator מודול של REST- מובטח נותן לנו את הכוח לבצע אימות גרעיני עדין על ידי הגדרת כללי התצורה המותאמים אישית שלנו.

נניח שאנחנו רוצים שהאימות שלנו ישתמש תמיד בסכמת JSON בגרסה 4:

@Test public void givenUrl_whenValidatesResponseWithInstanceSettings_thenCorrect () {JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder () .setValidationConfiguration (ValidationConfiguration.newBuilder () .setDefaultVioners.). get ("/ events? id = 390"). ואז (). assertThat () .body (matchesJsonSchemaInClasspath ("event_0.json") .using (jsonSchemaFactory)); }

היינו עושים זאת באמצעות JsonSchemaFactory וציין את הגרסה 4 SchemaVersion וקבע כי הוא משתמש בסכמה זו כאשר מתבצעת בקשה.

4.2. בדוק אימות

כברירת מחדל, ה- json-schema-validator מריץ אימות מסומן על מחרוזת התגובה JSON. פירוש הדבר שאם הסכימה מגדירה קְטָטָה כמערך כמו ב- JSON הבא:

{"סיכויים": [{"price": "1.30", "name": "1"}, {"price": "5.25", "name": "X"}]}

ואז המאמת תמיד מצפה למערך כערך עבור קְטָטָהומכאן תגובה היכן קְטָטָה הוא חוּט נכשל באימות. לכן, אם ברצוננו להקפיד פחות על התגובות שלנו, אנו יכולים להוסיף כלל מותאם אישית במהלך האימות על ידי ביצוע הייבוא ​​הסטטי הבא:

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

ואז לבצע את הבדיקה עם בדיקת האימות מוגדרת ל שֶׁקֶר:

@Test public void givenUrl_whenValidatesResponseWithStaticSettings_thenCorrect () {get ("/ events? Id = 390"). ואז (). AssertThat (). Body (matchesJsonSchemaInClasspath ("event_0.json"). באמצעות (הגדרות (). עם (). בדוק validation (שֶׁקֶר))); }

4.3. תצורת אימות גלובלית

ההתאמות האישיות הללו גמישות מאוד, אך עם מספר רב של בדיקות נצטרך להגדיר אימות עבור כל בדיקה, זה מסורבל ולא ניתן לתחזק במיוחד.

כדי להימנע מכך, יש לנו את החופש להגדיר את התצורה שלנו פעם אחת בלבד ולתת לה לחול על כל הבדיקות.

נגדיר את האימות שלא יהיה מסומן ולהשתמש בו תמיד נגד סכמת JSON גרסה 3:

מפעל JsonSchemaFactory = JsonSchemaFactory.newBuilder () .setValidationConfiguration (ValidationConfiguration.newBuilder () .setDefaultVersion (SchemaVersion.DRAFTV3) .freeze ()). להקפיא (); JsonSchemaValidator.settings = הגדרות (). עם (). JsonSchemaFactory (מפעל). ו- (). עם (). בדק אימות (שקר);

ואז להסרת תצורה זו התקשר לשיטת האיפוס:

JsonSchemaValidator.reset ();

5. מסקנה

במאמר זה הראינו כיצד אנו יכולים לאמת תגובת JSON כנגד סכמה בעת שימוש ב- REST מובטח.

כמו תמיד, קוד המקור המלא של הדוגמה זמין ב- GitHub.


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