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

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

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

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

يشتمل مركز الاختبار الافتراضي لمنصة Firebase على مكتبة (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 (المستوى 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، تتم معالجته باستخدام معالج لقطات الشاشة المسجّل في AndroidManifest.xml. يُرجى العِلم أنّه يتم استخدام BasicScreenCaptureProcessor في حال عدم تسجيل أي معالجات. بما أنّك سجّلت FirebaseScreenCaptureProcessor، ستتم معالجة لقطات الشاشة عبر FirebaseScreenCaptureProcessor وستكون متاحة لك مع نتائجك عند إجراء الاختبار باستخدام Firebase Test Lab.

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

  • التقط لقطة شاشة كاملة على إصدار واجهة برمجة التطبيقات.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 عبر 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. اختَر الاختبار مرة أخرى، ثم انقر على علامة التبويب لقطات الشاشة التي تظهر.

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

يمكنك تفعيل الميزات التالية في الاختبار قبل تشغيله باستخدام مركز الاختبار الافتراضي:

تفعيل الأوركسترا

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

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

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

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

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

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

--environment-variables clearPackageData=true

تفعيل عملية التقسيم إلى أجزاء

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

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

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

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

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

طريقة الفوترة للأجزاء التجريبية

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

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