يصف هذا الدليل كيفية تحضير اختبار الأجهزة وتشغيله باستخدام 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. أضف مكتبة لقطات الشاشة إلى مشروعك
في ملف Gradle الخاص بالمشروع الاختباري (على مستوى المشروع) (
build.gradle
) ، أضف مستودع Google Maven إلى كل قسم من أقسام المستودعات:buildscript { repositories { // Add the following line: google() // Google's Maven repository } dependencies { // ... // Check that you have the following line (if not, add it): classpath 'com.google.gms:google-services:4.3.8' // Google Services plugin } } allprojects { // ... repositories { // Add the following line: google() // Google's Maven repository // ... } }
في ملف Gradle الخاص بالوحدة (على مستوى التطبيق) (عادةً
app/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 (مستوى API 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>
الخطوة الثانية. خذ لقطات شاشة أثناء الاختبار
في أي مرحلة من الاختبار حيث تريد التقاط لقطة شاشة ، اتصل بطريقة 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
عبر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 ، في إعداد اختبار الأجهزة ، انقر فوق خيارات إضافية > Run with Orchestrator .
عند استخدام Orchestrator ، فإنك تستفيد مما يلي:
- لا دولة مشتركة. يتم تشغيل كل اختبار في مثيل الجهاز الخاص به ، لذلك لا تتراكم الحالة المشتركة عبر الاختبارات.
- حوادث متفرقة. في حالة تعطل أحد الاختبارات ، يتم إنهاء هذه الأجهزة فقط ، ولا يزال من الممكن تشغيل الاختبارات الأخرى في مجموعتك.
ضع في اعتبارك أنه عند استخدام Orchestrator ، يقوم كل اختبار بتشغيل مثيل الأجهزة الخاص به ، مما يعني إعادة تشغيل عملية التطبيق بعد كل حالة اختبار. قد تؤثر أوقات التشغيل المتزايدة الناتجة على استخدام حصتك أو وقت الفوترة وقد تتسبب في تجاوز حدود مهلة أجهزتك. إذا قمت بتقليل وقت بدء تشغيل التطبيق الخاص بك ، فسيتم تقصير هذا الحمل الزائد.
لتعيين خيارات إضافية لـ Orchestrator ، حددها عبر حقل environmentVariables
. على سبيل المثال ، لاستخدام clearPackageData
، استخدم هذا الخيار في gcloud:
--environment-variables clearPackageData=true
تمكين التجزئة
تجزئة الاختبار يقسم مجموعة من الاختبارات إلى مجموعات فرعية (أجزاء) يتم تشغيلها بشكل منفصل بشكل منفصل. يقوم Test Lab تلقائيًا بتشغيل كل جزء بالتوازي باستخدام أجهزة متعددة ، ويكمل مجموعة الاختبارات بأكملها في وقت أقل.
على سبيل المثال ، إذا قمت بإنشاء أجزاء N ، لكل جهاز تحدده ، يقوم Test Lab بتدوير N من الأجهزة المماثلة وتشغيل مجموعة فرعية من الاختبارات على كل جهاز. هذا يعني أن حالات الاختبار المجزأة يمكن أن تؤدي إلى عمليات تنفيذ اختبار متعددة لكل جهاز. ومع ذلك ، تؤدي حالات الاختبار غير المجزأة إلى تنفيذ اختبار واحد لكل جهاز. لمعرفة مفاهيم مختبر الاختبار ، راجع المفاهيم الأساسية .
لتمكين تجزئة التجزئة في وحدة تحكم Firebase ، اتبع الخطوات التالية:
في إعداد اختبار الأجهزة ، انقر فوق خيارات إضافية .
في قسم "المشاركة" ، أدخل عدد الأجزاء التي تريد تشغيلها.
إعداد الفواتير لاختبار القطع
ينفذ Test Lab شظاياك من خلال الاستفادة من آلية التجزئة المضمنة في AndroidJUnitRunner. لتجنب فرض رسوم على تدوير الأجزاء الفارغة (الأجزاء بدون حالات اختبار مخصصة) ، يجب أن يكون عدد الأجزاء التي تقوم بإنشائها أقل من إجمالي عدد حالات الاختبار. اعتمادًا على المدة التي تستغرقها كل حالة اختبار للتشغيل ، من الجيد عادةً تعيين 2-10 حالات اختبار لكل جزء.
لمزيد من المعلومات حول الفوترة ، اقرأ الاستخدام والحصص والفواتير .