הנה כמה בדיקות חיצוניים APIs ב שיקוי עם עקיפת

ª

ª

תוכן עניינים:

Anonim

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

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

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

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

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

העבר

שיטות Mock ולהחזיר כמה נתונים לדוגמה כך:

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

לאחר מכן התחלנו להשתמש ב- ExVCR, שהיא ספריה נהדרת, אבל יש חסרונות דומים כמו לועגים / stubs: זה מעודד עצלות ולא לטפח את ההפרדה של חששות קריטיים APIs מוגדרים היטב. ExVCR מאפשר אחד "להקליט" ו "השמעה" נתונים אמיתיים. זה קל מאוד לשלב (כולל כמה שורות במבחן שלך וכל דבר אחר הוא טופל). אבל באופן אידיאלי אתה צריך לחשוב על תלויות חיצוניות במבחנים, לא להפשיט אותם החוצה. זה עדיין עשוי להיות בחירה קיימא עבור תרחישים כאשר התנהגות נקודת הקצה צריך להיבדק עם תקורה מינימלית (אנו משתמשים בו לבדיקות שיחות שירותי AWS של אמזון כמו S3).

הזן מתאמים

מתאמים לעבוד נהדר ולקדם דיון סביב חוזים API והגדרות תקשורת מוגדר בבירור. אנו עדיין משתמשים בגישה זו, במיוחד כאשר המתאם מורכב יותר (כמו שקע JSON-RPC).

כך נראה מתאם:

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

ההווה והעתיד

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

עכשיו, אנחנו יכולים לבדוק את הערימה כולה, כולל ספריית HTTP, JSON קידוד / פענוח הספרייה, מנגנוני אימות. Repassme לעקוף כתוב היטב, אז אני יחסוך פרטים יישום. עם זאת, אנו משנים מעט את האופן שבו אנו משתמשים בו כדי לשמור על בדיקות קפדניות וקריאות:

ראשית, אנחנו לפעמים רוצים לקרוא לפייסבוק כאשר בדיקות מופעלות כמו חבילת אינטגרציה מלאה. אנו עושים זאת באופן לא סדיר כדי להבטיח שה- API של Facebook עדיין פועל בהתאם לציפיות שלנו. מוסיף - כולל אינטגרציה ל מבחן תערובת אינו מדמה את ה- API, אלא קורא לשירות החיצוני (שורות 5, 7).

אנו מפורשים כאשר אנו מדמים בקשות לשירותים חיצוניים, כך שכל בדיקה המשתמשת ב- Bypass חייבת להיות בעלת @tag facebook_bypass (קו 7).

סוף - סוף, ה ידית פונקציה (קווים 30-39) נקראת (בהתחשב בכך request_path התאמות). אני אוהב להתאים את ראש הפונקציה כפי שהיא עושה מפורש אשר נתיב אנו מגיבים ומאפשר לנו להגדיר פונקציות שונות עבור נתיבים שונים.

אז עוקף פועל רק בדיקות מתויגות עם @tag: לעקוף וכאשר אנחנו לא מנהלים את חבילת האינטגרציה שלנו. עוד דבר אחד שאנחנו עושים בעת הגדרת עקיפת הוא מאפשר לתג לעבור מזהה דף (שורות 8, 20). אז הנה איך מבחן אשר משתמש עקיפה נראה בכל התהילה שלה:

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

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