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

يوضّح هذا الدليل كيفية إعداد اختبار أداة قياس الأداء وتنفيذه باستخدام 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>. إذا كنت تختبر التطبيق على 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، تتم معالجته باستخدام 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 من خلال 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" شريحة، ستعمل أداة Test Lab على تشغيل "N" جهازًا متطابقًا لكل جهاز تختاره، وتشغيل مجموعة فرعية من الاختبارات على كل جهاز. وهذا يعني أنّ حالات الاختبار المجزّأة يمكن أن تؤدي إلى تنفيذ اختبارات متعددة لكل جهاز. في المقابل، تؤدي حالات الاختبار غير المقسّمة إلى تنفيذ اختبار واحد لكل جهاز. للتعرّف على مفاهيم Test Lab، اطّلِع على المفاهيم الرئيسية.

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

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

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

الفوترة للشظايا الاختبارية

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

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