מבוא ל- MockServer

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

MockServer הוא כלי ללעוג / לדקור APIs חיצוניים של HTTP.

2. תלות Maven

לעשות שימוש MockServer ביישום שלנו, עלינו להוסיף שתי תלות:

 org.mock-server mockserver-netty 3.10.8 org.mock-server mockserver-client-java 3.10.8 

הגרסה האחרונה של התלות זמינה כ- mockserver-netty ו- mockserver-client.

3. MockServer פונקציונליות

במילים פשוטות, הכלי יכול:

  • ליצור ולהחזיר תגובות קבועות
  • להעביר בקשה לשרת אחר
  • לבצע התקשרות חוזרות
  • לאמת בקשה

4. איך לרוץ MockServer

אנו יכולים להפעיל את השרת בכמה דרכים שונות - בואו נחקור כמה משיטות אלה.

4.1. ההשקה באמצעות תוסף Maven

פעולה זו תפעיל את השרת במהלך כיתת מבחן-תהליך שלב ועצור ב תאשר שלב:

 org.mock-server mockserver-maven-plugin 3.10.8 1080 1090 DEBUG org.mockserver.maven.ExampleInitializationClass תהליך-מבחן-מחלקות תהליך-מבחן-שיעורים התחל אימות עצור 

4.2. הפעלה באמצעות Java API

אנחנו יכולים להשתמש ב- startClientAndServer () Java API להפעלת השרת. בדרך כלל היינו מפעילים שרת לפני הפעלת כל הבדיקות:

מחלקה ציבורית TestMockServer {mockServer פרטי ClientAndServer; @BeforeClass חלל ציבורי startServer () {mockServer = startClientAndServer (1080); } @AfterClass הריק הציבורי stopServer () {mockServer.stop (); } // ...}

5. לקוחות מדומים

MockServerClient API משמש לאספקת יכולת להתחבר ל- MockServer. הוא מדגמן בקשות ואת התגובות המתאימות מהשרת.

הוא תומך בפעולות מרובות:

5.1. יצירת ציפיות עם תגובות מדומות

ציפיות הן מנגנון שבאמצעותו אנו לועגים לבקשה מלקוח ואת התגובה המתקבלת ממוקסהרבר.

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

ניתן להתאים בקשות באמצעות:

  • נתיב - נתיב URL
  • מחרוזת שאילתה - פרמטרים של כתובת אתר
  • כותרות - כותרות בקשה
  • עוגיות - עוגיות בצד הלקוח
  • גוף - גוף בקשת POST עם סכמת XPATH, JSON, JSON, ביטוי רגיל, התאמה מדויקת של טקסט רגיל או פרמטרי גוף

ניתן לציין את כל הפרמטרים הנ"ל באמצעות טקסט רגיל או ביטויים רגולריים.

ופעולת תגובה תכלול:

  • קודי סטטוס - קודי סטטוס HTTP תקפים למשל. 200, 400 וכו '.
  • גוף - זהו רצף הבתים המכיל כל תוכן
  • כותרות - כותרות תגובה עם שם וערך אחד או יותר
  • עוגיות - עוגיות תגובה עם שם וערך אחד או יותר

בואו נראה איך אנחנו יכולים ליצור ציפייה:

מחלקה ציבורית TestMockServer {private void createExpectationForInvalidAuth () {new MockServerClient ("127.0.0.1", 1080). when (request () .withMethod ("POST") .withPath ("/ validate") .withHeader ("\" Content- הקלד \ ", \" application / json \ "") .withBody (מדויק ("{שם משתמש: 'foo', סיסמה: 'בר'}")), בדיוק (1)). תגובה (תגובה () .withStatusCode ( 401) .withHeaders (כותרת חדשה ("סוג תוכן", "application / json; charset = utf-8"), כותרת חדשה ("Cache-Control", "public, max-age = 86400")) .withBody ( "{message: 'שילוב שגוי של שם משתמש וסיסמה'}"). withDelay (TimeUnit.SECONDS, 1)); } // ...}

הנה, אנו דוקרים א הודעה בקשה לשרת. וציינו כי כמה פעמים עלינו להגיש בקשה זו באמצעות בדיוק (1) שִׂיחָה.

עם קבלת בקשה זו לעגנו לתגובה עם שדות כמו קוד סטטוס, כותרות וגוף התגובה.

5.2. העברת בקשה

ניתן להגדיר ציפייה להעברת הבקשה. כמה פרמטרים יכולים לתאר את הפעולה קדימה:

  • מנחה - המארח להעביר למשל. www.baeldung.com
  • נמל - הנמל שאליו הבקשה להעביר, יציאת ברירת המחדל היא 80
  • תָכְנִית - פרוטוקול לשימוש למשל HTTP או HTTPS

בואו נראה דוגמה לבקשת העברה:

חלל פרטי createExpectationForForward () {MockServerClient חדש ("127.0.0.1", 1080). כאשר (בקשה () .withMethod ("GET") .withPath ("/ index.html"), בדיוק (1)). קדימה (קדימה () .withHost ("www.mock-server.com") .withPort (80) .withScheme (HttpForward.Scheme.HTTP)); }

במקרה זה לעגנו לבקשה שתפגע בבקשות ה- MockServer בדיוק ואז תועבר לשרת אחר. החיצוני קָדִימָה() השיטה מציינת את הפעולה קדימה ואת הפנימי קָדִימָה() שיחת שיטה מסייעת בבניית כתובת האתר ומעבירה את הבקשה.

5.3. ביצוע התקשרות חוזרת

ניתן להגדיר את השרת לבצע החזרה חוזרת בעת קבלת בקשה מסוימת. פעולת התקשרות חוזרת יכולה להגדיר מחלקה להתקשרות חוזרת org.mockserver.mock.action.ExpectationCallback מִמְשָׁק. צריך שיהיה לו קונסטרוקטור ברירת המחדל והוא צריך להיות על מסלול הכיתה.

בואו נראה דוגמה לציפיות עם התקשרות חוזרת:

חלל פרטי createExpectationForCallBack () {mockServer .when (בקשה (). withPath ("/ callback")). callback (callback () .withCallbackClass ("com.baeldung.mock.server.TestExpectationCallback")); }

כאן החיצוני התקשר חזרה() מציין את פעולת ההתקשרות ואת הפנימית התקשר חזרה() השיטה מציינת את המופע של מחלקת שיטת ההתקשרות.

במקרה זה, כאשר MockServer מקבל בקשה עם /התקשר חזרה, ואז תבוצע שיטת ידית ההתקשרות המיושמת בכיתה שצוינה:

מחלקה ציבורית TestExpectationCallback מיישמת ExpectationCallback {ידית HttpResponse ציבורית (HttpRequest httpRequest) {if (httpRequest.getPath (). getValue (). endsWith ("/ callback")) {return httpResponse; } אחר {return notFoundResponse (); }} סטטי ציבורי HttpResponse httpResponse = תגובה (). withStatusCode (200); }

5.4. אימות בקשות

MockServerClient יכול לבדוק אם המערכת בבדיקה שלחה בקשה:

בטל פרטי verifyPostRequest () {MockServerClient חדש ("localhost", 1080). verify (בקשה () .withMethod ("POST") .withPath ("/ validate") .withBody (מדויק ("{שם משתמש: 'foo', סיסמה) : 'סרגל'} ")), VerificationTimes. בדיוק (1)); }

הנה ה org.mockserver.verify.VerificationTimes class משמש כדי לציין את מספר הפעמים ששרת ה- Mock צריך להתאים לבקשה.

6. מסקנה

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

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


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