ככל שהאפליקציה גדלה, יכול להיות שיהיה לכם שימושי למקם חלק מרכיבי האפליקציה בתהליך שאינו התהליך הראשי של האפליקציה. כדי לבדוק רכיבי אפליקציה בתהליכים שאינם ברירת המחדל, אפשר להשתמש בפונקציונליות של 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:
- מסגרת Android יוצרת ומתחילה תהליך חדש כדי לעקוב אחרי מבנה הניווט של האפליקציה. כל תהליך
Instrumentation
כולל מופע חדש שלAndroidJUnitRunner
. בשלב הזה, שני תהליכי המדידה לא יכולים לתקשר אחד עם השני. - כל מופע של
AndroidJUnitRunner
רושם את Espresso כמסגרת הבדיקה שלו. - שני המקרים של
AndroidJUnitRunner
מבצעים לחיצת יד כדי ליצור חיבור ביניהם. במקביל, כל מופע שלAndroidJUnitRunner
מתחבר לכל הלקוחות הרשומים, כמו Espresso, עם המקבילים שלהם בתהליכים אחרים, כדי שהלקוחות האלה יוכלו ליצור ביניהם ערוץ תקשורת ישיר. - כל מופע של
AndroidJUnitRunner
ממשיך לחפש מופעים חדשים של מכשירי מדידה ולקוחות של מסגרות בדיקה שנוספו לאחרונה, ויוצר ערוצי תקשורת נוספים לפי הצורך.
איור 1 ממחיש את התוצאה של התהליך הזה:

מקורות מידע נוספים
למידע נוסף בנושא, אפשר לעיין במקורות המידע הבאים.
- פיתוח מבוסס-בדיקות ב-Android באמצעות ספריית התמיכה בבדיקות של Android: סרטון מהסשן ב-Google I/O 2017, החל מדקה 36:41.