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

במדריך הזה נסביר איך להכין ולהריץ בדיקת אינסטרומנטציה באמצעות Firebase Test Lab כדי להשתמש במדריך הזה, צריך בדיקת אינסטרומנטציה (נכתב על ידך או על ידי הצוות שלך) שמשתמש אספרסו או UI Automator frameworks של Android לבדיקה. בדיקות אינסטרומנטציה יכולות להימשך עד 45 דקות במכשירים פיזיים ועד 60 דקות במכשירים וירטואליים.

בשלבים הבאים תעלו את קובץ ה-APK של האפליקציה ואת קובץ ה-APK של הבדיקה ל-Firebase.

(אופציונלי) מוסיפים את ספריית צילומי המסך לאפליקציה

Firebase Test Lab כולל ספרייה (testlab-instr-lib) שאפשר משמש לעיבוד צילומי מסך שיוצרים במכשירים של AndroidX צילום מסך במהלך הרצת בדיקות אינסטרומנטציה, כמו בדיקות שנכתבו באמצעות מסגרת בדיקת Espresso. בקטע הזה מוסבר איך ליצור אובייקטים של ScreenCapture באמצעות AndroidX ואיך לעבד אותם באמצעות testlab-instr-lib.

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

ניסיון באפליקציה לדוגמה

אפשר להוריד את האפליקציה לדוגמה של NotePad כדי לנסות את הפונקציונליות הזו. האפשרות לצלם צילומי מסך כבר משולב בפרויקט NotePad.

שלב 1. הוספה של ספריית צילומי המסך לפרויקט

  1. בקובץ Gradle של ההגדרות ברמת השורש של פרויקט הבדיקה (settings.gradle.kts או settings.gradle), מוסיפים את מאגר Maven של Google לכל קטע repositories:

    pluginManagement {
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
            gradlePluginPortal()
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
        }
    }
    // ...
  2. בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle), מוסיפים תלות בספריית צילומי המסך Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2")
      // ...
  3. בקובץ AndroidManifest.xml של הבדיקה, רושמים את FirebaseScreenCaptureProcessor בתג מטא-נתונים בתוך רכיב <instrumentation>. אפשר גם לציין את המעבד ב-AndroidJUnitRunner במקום זאת (עיינו בקטע חומרי עזר ל-AndroidJUnitRunner לקבלת הוראות לביצוע הפעולה).

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. בקובץ AndroidManifest.xml של האפליקציה, מוסיפים את השורות הבאות בתוך הרכיב <manifest>:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. בקובץ AndroidManifest.xml, צריך לציין את הרשאות המערכת עבור האפליקציה על ידי הוספת השורות הבאות בתוך התג <manifest>. אם אתם בודקים את האפליקציה ב-Android 10 (רמת API 29) ואילך, צריך להשמיט את ההרשאה WRITE_EXTERNAL_STORAGE (האפליקציה לא זקוקה להרשאה הזו כדי לקרוא ולכתוב צילומי מסך במכשיר).

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

שלב 2. יצירת צילומי מסך במהלך הבדיקה

בכל שלב בבדיקה שבו רוצים לצלם מסך, קוראים ל-method‏ Screenshot.capture() מהספרייה AndroidX. פעולה זו יוצרת אובייקט ScreenCapture. כשקוראים ל-process() באובייקט ScreenCapture, הוא עובר עיבוד באמצעות ScreenCaptureProcessor שמירתום ב-AndroidManifest.xml. שימו לב אם לא רשומים מעבדים, נעשה שימוש ב-BasicScreenCaptureProcessor. מכיוון שרשמת את FirebaseScreenCaptureProcessor, צילומי המסך שלך יעובד באמצעות FirebaseScreenCaptureProcessor ויהיה זמין עבורך עם התוצאות כשמריצים את הבדיקה עם Firebase Test Lab.

תרחישים לדוגמה ליצירת ScreenCapture:

  • צילום מסך מלא ב-build של API.VERSION_CODES.JELLY_BEAN_MR2 וגם למעלה:

    Screenshot.capture()
    
  • לוקחים ScreenCapture מהפעילות בכל רמת API. הערה: האפשרות הזו זמינה רק למכשירים שמתחת ל-Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

תרחישים לדוגמה של עיבוד צילום מסך

  • מעבדים ScreenCapture דרך FirebaseScreenCaptureProcessor:

    Screenshot.capture().process();
    
  • עיבוד של ScreenCapture באמצעות ScreenCaptureProcessor שצוין (כך תוכלו לדלג על רישום המעבד):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • מגדירים את השם והפורמט של ScreenCapture ומעבדים אותם באמצעות מעבד מידע רשום:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

שלב 3. בנייה והפעלה של הבדיקה

  1. בניית האפליקציה ובדיקת חבילות ה-APK (מידע נוסף זמין במאמר בדיקת האפליקציה לקבלת הוראות).

  2. מעלים את קובצי ה-APK אל מרכז הבקרה של Test Lab במסוף Firebase.

  3. לבסוף, מריצים את הבדיקה.

שלב 4. הצגת צילומי המסך לבדיקה

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

  1. בכרטיסייה בדיקות בוחרים את הבדיקה שהושלמה. ולאחר מכן לוחצים על הכרטיסייה תוצאות.

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

(אופציונלי) הפעלת תכונות בדיקה נוספות

אפשר להפעיל את התכונות הבאות בבדיקה לפני שמפעילים אותה עם Test Lab:

הפעלת התזמור

תזמור בדיקות ל-Android הוא כלי שמפעיל כל אחת מבדיקות האינסטרומנטציה של האפליקציה בנפרד. Test Lab משתמש תמיד בגרסה האחרונה של 'תזמור'.

כדי להפעיל את Orchestrator עבור Test Lab, בהגדרת הבדיקה של המדידה לוחצים על אפשרויות נוספות > הפעלה באמצעות Orchestrator.

כאשר משתמשים ב-זורטור, נהנים מהיתרונות הבאים:

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

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

כדי להגדיר אפשרויות נוספות ל-Orchestrator, מציינים אותן דרך השדה environmentVariables. לדוגמה, כדי להשתמש ב-clearPackageData, השתמשו Option ב-gcloud:

--environment-variables clearPackageData=true

הפעלת חלוקה

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

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

כדי להפעיל חלוקה לפלחים לצורך בדיקה במסוף Firebase:

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

  2. בקטע פיצול, מזינים את מספר הפיצולים שרוצים להריץ.

חיוב עבור פיצולים לבדיקה

Test Lab מטמיע את הפיצולים באמצעות מנגנון הפיצול המובנה של AndroidJUnitRunner. כדי להימנע מחיוב על החלפה של פיצולים ריקים (פיצולים ללא הקצאה) במקרים של בדיקה), את מספר המפוצלים צריך להיות קטן מהמספר הכולל של מקרי הבדיקה. בהתאם לאופן שבו זמן רב שנדרש להרצה של כל מקרה בדיקה, בדרך כלל כדאי להקצות 2-10 בדיקות במקרים שונים.

מידע נוסף על חיוב זמין במאמר שימוש, מכסות וחיוב.