אספרסו רב-תהליכים

ככל שהאפליקציה גדלה, יכול להיות שיהיה לכם שימושי למקם חלק מרכיבי האפליקציה בתהליך שאינו התהליך הראשי של האפליקציה. כדי לבדוק רכיבי אפליקציה בתהליכים שאינם ברירת המחדל, אפשר להשתמש בפונקציונליות של Multiprocess Espresso. הכלי הזה, שזמין ב-Android 8.0 (רמת API ‏26) ואילך, מאפשר לבדוק בצורה חלקה את האינטראקציות בממשק המשתמש של האפליקציה שחוצות את גבולות התהליך של האפליקציה, תוך שמירה על ערבויות הסנכרון של Espresso.

כשמשתמשים ב-Multiprocess Espresso, חשוב לזכור את השיקולים הבאים לגבי גרסאות והיקף:

  • האפליקציה שלך צריכה לטרגט ל-Android 8.0 ‏ (API level 26) ומעלה.
  • הכלי יכול לבדוק רק רכיבי אפליקציה שכללתם בתהליכים בחבילת האפליקציה. אי אפשר לבדוק תהליכים חיצוניים.

שימוש בכלי

כדי לבדוק תהליך באפליקציה באמצעות Multiprocess Espresso, מוסיפים הפניה לארטיפקט espresso-remote בקובץ build.gradle של האפליקציה:

app/build.gradle

גרוב

dependencies {
    ...
    androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1'
}

Kotlin

dependencies {
    ...
    androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1')
}

בנוסף, צריך להוסיף את השורות הבאות למניפסט של האפליקציה androidTest:

  • רכיב <instrumentation> שמגדיר את התהליך.
  • רכיב <meta-data> שמציין שרוצים להשתמש ב-Multiprocess Espresso.

בקטע הקוד הבא אפשר לראות איך מוסיפים את הרכיבים האלה:

src/androidTest/AndroidManifest.xml

<manifest ... package="androidx.test.mytestapp.tests">
  <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" />
  <instrumentation
    android:name="androidx.test.runner.AndroidJUnitRunner"
    android:targetPackage="androidx.test.mytestapp"
    android:targetProcesses="*">
    <meta-data
      android:name="remoteMethod"
      android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" />
  </instrumentation>
</manifest>

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

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

הסבר על הארכיטקטורה של הכלי

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

  1. מסגרת Android יוצרת ומתחילה תהליך חדש כדי לעקוב אחרי מבנה הניווט של האפליקציה. כל תהליך Instrumentation כולל מופע חדש של AndroidJUnitRunner. בשלב הזה, שני תהליכי המדידה לא יכולים לתקשר אחד עם השני.
  2. כל מופע של AndroidJUnitRunner רושם את Espresso כמסגרת הבדיקה שלו.
  3. שני המקרים של AndroidJUnitRunner מבצעים לחיצת יד כדי ליצור חיבור ביניהם. במקביל, כל מופע של AndroidJUnitRunner מתחבר לכל הלקוחות הרשומים, כמו Espresso, עם המקבילים שלהם בתהליכים אחרים, כדי שהלקוחות האלה יוכלו ליצור ביניהם ערוץ תקשורת ישיר.
  4. כל מופע של AndroidJUnitRunner ממשיך לחפש מופעים חדשים של מכשירי מדידה ולקוחות של מסגרות בדיקה שנוספו לאחרונה, ויוצר ערוצי תקשורת נוספים לפי הצורך.

איור 1 ממחיש את התוצאה של התהליך הזה:

איור 1. יצירת תקשורת בין כמה תהליכי מדידה באמצעות Multiprocess Espresso

מקורות מידע נוספים

למידע נוסף בנושא, אפשר לעיין במקורות המידע הבאים.