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

يصف هذا الدليل كيفية إعداد اختبار لقياس حالة التطبيق وتشغيله باستخدام Firebase Test Lab. لاستخدام هذا الدليل، ستحتاج إلى اختبار لقياس حالة التطبيق (تكتبه أنت أو فريقك) يستخدم Espresso أو UI Automator أُطر عمل اختبار Android. يمكن تشغيل اختبارات لقياس حالة التطبيق لمدة تصل إلى 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. في وحدة تحكّم Firebase، انتقِل إلى DevOps & Engagement > Test Lab، ثم حمِّل ملفات APK.

  3. أخيرًا، شغِّل الاختبار.

الخطوة 4: عرض لقطات شاشة الاختبار

بعد اكتمال الاختبار، يمكنك الاطّلاع على أي لقطات شاشة تم التقاطها:

  1. في وحدة تحكّم Firebase، انتقِل إلى DevOps والتفاعل > Test Lab.

  2. في علامة التبويب الاختبارات، اختَر الاختبار المكتمل، ثم انقر على علامة التبويب النتائج.

  3. اختَر الاختبار مرة أخرى، ثم انقر على علامة التبويب لقطات الشاشة التي تظهر.

(اختياري) تفعيل ميزات الاختبار الإضافية

يمكنك تفعيل الميزات التالية في الاختبار قبل إجرائه باستخدام Test Lab:

تفعيل Orchestrator

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

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

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

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

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

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

--environment-variables clearPackageData=true

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

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

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

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

  1. في إعداد اختبار قياس حالة التطبيق، انقر على خيارات إضافية.

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

الفوترة لأجزاء الاختبار

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

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