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