يشرح هذا الدليل كيفية إعداد اختبار قياس حالة التطبيق وإجرائه باستخدام Firebase Test Lab. لاستخدام هذا الدليل، ستحتاج إلى اختبار قياس حالة التطبيق (من كتابتك أو كتابة فريقك) يستخدم إطارَي اختبار Android، وهما Espresso أو UI Automator. يمكن أن تستغرق اختبارات قياس حالة التطبيق ما يصل إلى 45 دقيقة على الأجهزة الفعلية وما يصل إلى 60 دقيقة على الأجهزة الافتراضية.
في الخطوات اللاحقة، ستحمِّل ملف APK الخاص بتطبيقك وملف APK الخاص باختبارك إلى Firebase.
(اختياري) إضافة مكتبة لقطات الشاشة إلى تطبيقك
Firebase Test Lab يتضمّن مكتبة (testlab-instr-lib) يمكنك استخدامها لمعالجة أي لقطات شاشة تأخذها باستخدام ScreenCapture من AndroidX’s ScreenCapture عند إجراء اختبارات قياس حالة التطبيق، مثل الاختبارات المكتوبة باستخدام إطار عمل اختبار 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. ينتج عن ذلك عنصر
ScreenCaptureobject.
عند استدعاء process() على عنصر ScreenCapture، تتم معالجته
باستخدام ScreenCaptureProcessor
المسجَّل في AndroidManifest.xml. يُرجى العِلم أنّه يتم استخدام BasicScreenCaptureProcessor إذا لم يتم تسجيل أي معالِجات.
بما أنّك سجّلت FirebaseScreenCaptureProcessor، ستتم معالجة لقطات الشاشة
من خلال FirebaseScreenCaptureProcessor وستكون متاحة
لك مع نتائجك عند إجراء الاختبار باستخدام Firebase Test Lab.
أمثلة على حالات الاستخدام لإنشاء ScreenCapture:
أخذ `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: إنشاء الاختبار وإجراؤه
أنشئ ملفَي APK للتطبيق والاختبار (راجِع اختبار تطبيقك للحصول على التعليمات).
في وحدة تحكّم Firebase، انتقِل إلى DevOps ومعدّل الاهتمام بالتطبيق > مركز الاختبار الافتراضي، ثم حمِّل ملفات APK.
أخيرًا، نفِّذ الاختبار.
الخطوة 4: عرض لقطات شاشة الاختبار
بعد اكتمال الاختبار، يمكنك عرض أي لقطات شاشة تم أخذها:
في وحدة تحكّم Firebase، انتقِل إلى DevOps والتفاعل > مركز الاختبار الافتراضي.
في علامة التبويب الاختبارات ، اختَر الاختبار المكتمل، ثم انقر على علامة التبويب النتائج.
اختَر الاختبار مرة أخرى، ثم انقر على علامة التبويب لقطات الشاشة التي تظهر.
(اختياري) تفعيل ميزات اختبار إضافية
يمكنك تفعيل الميزات التالية في الاختبار قبل إجرائه باستخدام 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 حالات اختبار لكل جزء.
لمزيد من المعلومات حول الفوترة، يُرجى قراءة مقالة الاستخدام والحصص والفوترة.