بدء استخدام اختبارات قياس حالة التطبيق

يوضّح هذا الدليل كيفية إعداد اختبار الأجهزة وتشغيله باستخدام Firebase Test Lab. لاستخدام هذا الدليل، ستحتاج إلى اختبار أجهزة (تكتبه أنت أو فريقك) يستخدم إطارَي اختبار Android، وهما Espresso أو UI Automator. يمكن أن تستغرق اختبارات الأجهزة ما يصل إلى 45 دقيقة على الأجهزة الفعلية وما يصل إلى 60 دقيقة على الأجهزة الافتراضية.

في الخطوات اللاحقة، ستحمّل حزمة APK الخاصة بتطبيقك وحزمة APK الخاصة بالاختبار إلى Firebase.

(اختياري) إضافة مكتبة لقطات الشاشة إلى تطبيقك

يتضمّن الإصدار Firebase Test Lab مكتبة (testlab-instr-lib) يمكنك استخدامها لمعالجة أي لقطات شاشة تأخذها باستخدام ScreenCapture من 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>. إذا كنت تختبر تطبيقك على الإصدار 10 من نظام التشغيل Android (المستوى 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: أخذ لقطات شاشة أثناء الاختبار

في أي مرحلة من مراحل الاختبار تريد فيها أخذ لقطة شاشة، استدعِ طريقة Screenshot.capture() من مكتبة AndroidX. ينتج عن ذلك كائن ScreenCapture. عندما تستدعي process() على العنصر ScreenCapture، تتم معالجته باستخدام ScreenCaptureProcessor المسجَّل في AndroidManifest.xml. يُرجى العِلم أنّه يتم استخدام BasicScreenCaptureProcessor في حال عدم تسجيل أي معالِجات. بما أنّك سجّلت FirebaseScreenCaptureProcessor، ستتم معالجة لقطات الشاشة من خلال FirebaseScreenCaptureProcessor وستكون متاحة لك مع نتائجك عند إجراء الاختبار باستخدام Firebase Test Lab.

أمثلة على حالات الاستخدام لإنشاء ScreenCapture:

  • يمكنك التقاط لقطة شاشة كاملة على الإصدارات التي تتضمّن واجهة برمجة التطبيقات Build.VERSION_CODES.JELLY_BEAN_MR2 أو الإصدارات الأحدث باتّباع الخطوات التالية:

    Screenshot.capture()
    
  • التقاط ScreenCapture للنشاط على أي مستوى لواجهة برمجة التطبيقات يُرجى العِلم أنّ هذا هو الخيار الوحيد للأجهزة التي تعمل بإصدار أقدم من Build.VERSION_CODES.JELLY_BEAN_MR2.

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

أمثلة على حالات استخدام معالجة ScreenCapture

  • معالجة 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:

تفعيل Orchestrator

Android Test Orchestrator هي أداة تُشغّل كل اختبار من اختبارات الأجهزة في تطبيقك بشكل مستقل. يستخدم Test Lab دائمًا أحدث إصدار من Orchestrator.

لتفعيل Orchestrator في Test Lab، انقر على خيارات إضافية > التشغيل باستخدام Orchestrator في إعداد اختبار الأجهزة.

عند استخدام Orchestrator، ستستفيد من المزايا التالية:

  • لا توجد حالة مشترَكة. يتم تشغيل كل اختبار في نسخة أدوات خاصة به، وبالتالي لا تتراكم حالة مشتركة بين الاختبارات.
  • أعطال معزولة في حال تعذُّر إجراء اختبار، سيتم إيقاف هذا الاختبار فقط، وسيظل بإمكانك إجراء الاختبارات الأخرى في مجموعتك.

يُرجى العِلم أنّه عند استخدام Orchestrator، يتم تشغيل كل اختبار في مثيل أدوات خاص به، ما يعني أنّه تتم إعادة تشغيل عملية التطبيق بعد كل حالة اختبار. قد تؤثر أوقات التشغيل المتزايدة الناتجة في استخدام الحصة أو الوقت الذي يتم تحصيل رسوم مقابله، وقد تؤدي إلى تجاوز حدود المهلة المحددة لأجهزتك. إذا قلّلت وقت بدء تشغيل تطبيقك، سيتم تقليل هذا الوقت الإضافي.

لضبط خيارات إضافية في Orchestrator، حدِّدها من خلال حقل environmentVariables. على سبيل المثال، لاستخدام clearPackageData، استخدِم الخيار التالي في gcloud:

--environment-variables clearPackageData=true

تفعيل التقسيم

تقسّم تجزئة الاختبار مجموعة من الاختبارات إلى مجموعات فرعية (أجزاء) يتم تشغيلها بشكل منفصل. تُشغّل Test Lab تلقائيًا كل جزء بالتوازي باستخدام أجهزة متعددة، وتُكمل المجموعة الكاملة من الاختبارات في وقت أقل.

على سبيل المثال، إذا أنشأت N جزءًا، سيتم تشغيل N أجهزة متطابقة لكل جهاز تحدّده، وسيتم تنفيذ مجموعة فرعية من الاختبارات على كل جهاز.Test Lab وهذا يعني أنّ حالات الاختبار المقسَّمة يمكن أن تؤدي إلى تنفيذ اختبارات متعددة لكل جهاز. ومع ذلك، تؤدي حالات الاختبار غير المقسَّمة إلى تنفيذ اختبار واحد لكل جهاز. للتعرّف على مفاهيم Test Lab، راجِع مقالة المفاهيم الأساسية.

لتفعيل تقسيم الاختبار في Firebase، اتّبِع الخطوات التالية:

  1. في إعداد اختبار الأجهزة، انقر على خيارات إضافية.

  2. في قسم التقسيم، أدخِل عدد الأجزاء التي تريد تشغيلها.

الفوترة لتقسيمات الاختبار

تنفِّذ Test Lab عمليات التقسيم من خلال الاستفادة من آلية التقسيم المضمّنة في فئة AndroidJUnitRunner. لتجنُّب تحصيل رسوم منك مقابل إنشاء أجزاء فارغة (أجزاء بدون حالات اختبار معيّنة)، يجب أن يكون عدد الأجزاء التي تنشئها أقل من العدد الإجمالي لحالات الاختبار. استنادًا إلى المدة التي تستغرقها كل حالة اختبار، يُنصح عادةً بتعيين من حالتَي اختبار إلى 10 حالات لكل جزء.

لمزيد من المعلومات عن الفوترة، يُرجى الاطّلاع على الاستخدام والحصص والفوترة.