ابدأ باختبارات الأجهزة

يصف هذا الدليل كيفية إعداد اختبار الأجهزة وتشغيله باستخدام 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 )، أضف مستودع Google Maven إلى كل قسم من 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 )، قم بإضافة تبعية لمختبر الاختبار مكتبة لقطات الشاشة.

    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 :

  • التقط لقطة شاشة كاملة على API 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:

تمكين المنسق

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

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

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

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

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

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

--environment-variables clearPackageData=true

تمكين المشاركة

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

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

لتمكين مشاركة الاختبار في وحدة تحكم Firebase، اتبع الخطوات التالية:

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

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

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

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

لمزيد من المعلومات حول الفوترة، اقرأ الاستخدام والحصص والفوترة .