این راهنما نحوه آمادهسازی و اجرای یک تست ابزار دقیق با استفاده از Firebase Test Lab را شرح میدهد. برای استفاده از این راهنما، به یک تست ابزار دقیق (نوشته شده توسط شما یا تیمتان) نیاز دارید که از چارچوبهای تست اندروید Espresso یا UI Automator استفاده کند. تستهای ابزار دقیق میتوانند تا ۴۵ دقیقه روی دستگاههای فیزیکی و تا ۶۰ دقیقه روی دستگاههای مجازی اجرا شوند.
در مراحل بعدی، فایل APK برنامه و فایل APK آزمایشی خود را در Firebase آپلود خواهید کرد.
(اختیاری) کتابخانه اسکرینشات را به برنامه خود اضافه کنید
Firebase Test Lab شامل یک کتابخانه (testlab-instr-lib) است که میتوانید از آن برای پردازش هر اسکرینشاتی که با ScreenCapture اندرویدکس هنگام اجرای تستهای ابزار دقیق میگیرید، مانند تستهایی که با استفاده از چارچوب تست Espresso نوشته شدهاند، استفاده کنید. این بخش نحوه ایجاد اشیاء ScreenCapture با کتابخانه اندرویدکس و نحوه پردازش آنها با استفاده از testlab-instr-lib را شرح میدهد.
پس از اجرای تست ابزار دقیق، میتوانید تصاویر گرفته شده را در کنسول Firebase مشاهده کنید.
یک نمونه برنامه را امتحان کنید
برای امتحان کردن این قابلیت، برنامه نمونه NotePad را دانلود کنید. قابلیت گرفتن اسکرینشات از قبل در پروژه NotePad گنجانده شده است.
مرحله ۱. کتابخانه اسکرینشات را به پروژه خود اضافه کنید
در فایل Gradle تنظیمات سطح ریشه پروژه آزمایشی خود (
settings.gradle.ktsیاsettings.gradle)، مخزن 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() } } // ...
در فایل 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>، مجوزهای سیستمی را برای برنامه خود مشخص کنید. اگر در حال آزمایش روی اندروید ۱۰ (سطح API ۲۹) یا بالاتر هستید، مجوز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()از فعالیت در هر سطح API یک
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();
مرحله ۳. تست خود را بسازید و اجرا کنید
برنامه خود را بسازید و APK ها را آزمایش کنید (برای دستورالعمل ها به بخش «برنامه خود را آزمایش کنید » مراجعه کنید).
فایلهای APK را در داشبورد Test Lab کنسول Firebase آپلود کنید.
در نهایت، آزمون خود را اجرا کنید.
مرحله ۴. مشاهده اسکرینشاتهای آزمایشی
پس از اتمام آزمایش، میتوانید هر اسکرینشات گرفته شده را در کنسول Firebase مشاهده کنید.
در برگه «آزمونها» ، آزمون تکمیلشده خود را انتخاب کنید، سپس روی برگه « نتایج» کلیک کنید.
دوباره آزمون خود را انتخاب کنید، سپس روی برگه Screenshots که ظاهر میشود کلیک کنید.
(اختیاری) ویژگیهای آزمایشی اضافی را فعال کنید
قبل از اجرای تست با Test Lab میتوانید ویژگیهای زیر را در آن فعال کنید:
فعال کردن ارکستراتور
Android Test Orchestrator ابزاری است که هر یک از تستهای Instrumentation برنامه شما را به طور مستقل اجرا میکند. 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 ، مراحل زیر را دنبال کنید:
در تنظیمات تست ابزار دقیق، روی گزینههای اضافی کلیک کنید.
در بخش Sharding ، تعداد Shardهایی که میخواهید اجرا کنید را وارد کنید.
صدور صورتحساب برای قطعات آزمایشی
Test Lab Shardهای شما را با استفاده از مکانیزم Sharding داخلی AndroidJUnitRunner پیادهسازی میکند. برای جلوگیری از دریافت هزینه برای ایجاد Shardهای خالی (Shardهای بدون Test Caseهای اختصاص داده شده)، تعداد Shardهایی که ایجاد میکنید باید کمتر از تعداد کل Test Caseها باشد. بسته به مدت زمان اجرای هر Test Case، معمولاً ایده خوبی است که 2 تا 10 Test Case به هر Shard اختصاص دهید.
برای اطلاعات بیشتر در مورد صورتحساب، بخش «استفاده، سهمیهها و صورتحساب» را مطالعه کنید.