يوضّح هذا الدليل كيفية إعداد اختبار الأجهزة وتشغيله باستخدام 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: إضافة مكتبة لقطات الشاشة إلى مشروعك
في ملف 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() } } // ...
في ملف 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") // ...
في ملف
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> ...
في ملف
AndroidManifest.xml
الخاص بتطبيقك، أضِف الأسطر التالية ضمن عنصر<manifest>
:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
في ملف
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: إنشاء اختبارك وتنفيذه
أنشئ تطبيقك واختبِر حِزم APK (راجِع مقالة اختبار تطبيقك للحصول على التعليمات).
حمِّل ملفات APK إلى لوحة بيانات Test Lab في وحدة تحكّم Firebase.
أخيرًا، نفِّذ اختبارك.
الخطوة 4: عرض لقطات شاشة الاختبار
بعد اكتمال الاختبار، يمكنك الاطّلاع على أي لقطات شاشة تم التقاطها في وحدة تحكّم Firebase.
في علامة التبويب الاختبارات، اختَر الاختبار الذي أكملته، ثم انقر على علامة التبويب النتائج.
اختَر اختبارك مرة أخرى، ثم انقر على علامة التبويب لقطات الشاشة التي تظهر.
(اختياري) تفعيل ميزات الاختبار الإضافية
يمكنك تفعيل الميزات التالية في اختبارك قبل تشغيله باستخدام Test Lab:
تفعيل Orchestrator
Android Test Orchestrator هي أداة تُشغّل كل اختبار من اختبارات الأجهزة في تطبيقك بشكل مستقل. يستخدم 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، اتّبِع الخطوات التالية:
في إعداد اختبار الأجهزة، انقر على خيارات إضافية.
في قسم التقسيم، أدخِل عدد الأجزاء التي تريد تشغيلها.
الفوترة لتقسيمات الاختبار
تنفِّذ Test Lab عمليات التقسيم من خلال الاستفادة من آلية التقسيم المضمّنة في فئة AndroidJUnitRunner. لتجنُّب تحصيل رسوم منك مقابل إنشاء أجزاء فارغة (أجزاء بدون حالات اختبار معيّنة)، يجب أن يكون عدد الأجزاء التي تنشئها أقل من العدد الإجمالي لحالات الاختبار. استنادًا إلى المدة التي تستغرقها كل حالة اختبار، يُنصح عادةً بتعيين من حالتَي اختبار إلى 10 حالات لكل جزء.
لمزيد من المعلومات عن الفوترة، يُرجى الاطّلاع على الاستخدام والحصص والفوترة.