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

يوضّح هذا الدليل كيفية إعداد اختبار الأجهزة وتشغيله باستخدام 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 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 Console، اتّبِع الخطوات التالية:

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

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

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

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

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