הצצה אל מאחורי הקלעים של Appium



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

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

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

קצת על הפילוסופיה של Appium

מאחורי הרעיון של Appium עומדים 4 עקרונות עיקריים:

1. איננו צריכים לשנות שום דבר באפליקציה ולא לקמפל אותה מחדש, על מנת לכתוב לה תרחישי אוטומציה.
2. איננו צריכים לדבוק בשפת תכנות אחת מסוימת בכדי לכתוב ולהריץ בדיקות
3. תשתית אוטומציה לא צריכה להמציא את הגלגל בכל פעם מחדש בהיבט של ממשק השימוש (API)
4. תשתית אוטומציה צריכה להיות Open Source, דבר שיתן לה המון עוצמה.

ה-Design של Appium

אז איך המבנה של תשתית Appium משתלב עם הפילוסופיה שלו?

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

רכיבי האוטומציה המובנים במערכות ההפעלה הם:

את עקרונות מספר 2 ו-3 מימשו Appium בכך שדבקו ב API אחד עבור כל רכיבי האוטומציה, ובכך המשתמש אינו צריך לגשת לכל תשתית באופן שונה (WebDriver API).

כחלק מארכיטקטורת שרת-לקוח, יתקשר הלקוח (שפת התכנות שתבחרו) עם שרת Appium באמצעות פרוטוקול בשם  JSON Wire Protocol. בעצם, כל התקשורת בין הלקוח לשרת Appium מבוססת בקשות HTTP סטנדרטיות ובעקבות כך, כל לקוח יוכל לממש את הפניות לשרת.

ועקרון מספר 4, טוב, הוא די מובן מאליו... לא הייתם קוראים את זה אם Appium לא הייתה Open Source.


מושגים שחשוב להכיר ב-Appium

ארכיטקטורת שרת-לקוח: 
Appium הוא בעצם שרת Web שחושף למשתמשיו REST API, השרת מאזין לפקודות, מייצא אותן על המכשיר הנייד שהוגדר לו, ומחזיר בתשובת http את התוצאה של שליחת הפקודה.

העובדה שAppium עובד בתצורת שרת-לקוח פותח אותנו למגוון אפשרויות: אנחנו יכולים לכתוב לעצמנו את הקוד באיזו שפה שנבחר (שתמוכת בלקוח http), אבל כמובן שרצוי ועדיף להשתמש בספריות המובנות של Appium לשפות התכנות השונות. אנחנו יכולים גם לשים את השרת באיזה מחשב שנרצה ולתקשר אליו מהלקוח ואפילו לכתוב את הקוד שפונה אליו בשירות ענן כמו זה של Sauce Labs

Session: 
אוטומציה תמיד תבוצע בתצורה של Session - הלקוח שלוח אל השרת בקשת POST לפתיחת session עם אובייקט Json בשם Desired Capabilities, השרת יחזיר תשובה שתכיל את ה-session ID לצורך המשך התקשורת בניו לבין הלקוח.

Desired Capabilities:
אובייקט JSON - בעצם מספר של מפתחות וערכים (כמו Dictionary ב C#, או map בJava) שנשלח אל שרת Appium על מנת לצהיר בפניו איזה session יהיה מעוניין הלקוח לפתוח מולו.

קיימות גם יכולות (capabilities) שמשפיעות על התנהגות השרת במהלך הרצת האוטומציה. לדוגמה, אם נכריז על platformName כ - iOS השרת יצטרך ליצור iOS session ולא Android או Windows. ניתן לקרוא עוד כאן.

שרת Appium:
שרת http , אשר נכתב ב Node.js. אחראי לקבל את הבקשות מהלקוח ולהריץ אותן על מכשיר הmobile.

לקוח Appium: 
קיימות ספריות לקוח עבור Appium (בשפות Java, Ruby, Python, PHP, JavaScript, ו- C#) אשר תומכות בהרחבת פרוטוקול ה-WebDriver (עליו דיברנו קודם) על מנת לבצע תקשורת אל מול השרת.

סיכום

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

נתראה בפוסט הבא :)



הפוסט נכתב על בסיס appium documentation

תגובות

פוסטים פופולריים מהבלוג הזה

תכנות מונחה עצמים | Dependency Inversion Principle

מהם קבצי DLL ואיך להשתמש בהם?

מה ההבדל בין אוטומציה לפיתוח רגיל