شروع به کار با آزمایش‌های ابزار دقیق

این راهنما نحوه آماده‌سازی و اجرای آزمایش ابزار دقیق را بااستفاده از Firebase Test Lab شرح می‌دهد. برای استفاده از این راهنما، به آزمایش ابزار دقیق (نوشته‌شده توسط شما یا تیمتان) نیاز دارید که از چارچوب‌های آزمایشی Android Espresso یا UI Automator استفاده می‌کند. آزمایش‌های ابزار دقیق می‌تواند تا ۴۵ دقیقه در دستگاه‌های فیزیکی و تا ۶۰ دقیقه در دستگاه‌های مجازی اجرا شود.

در مراحل بعدی، 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()
        }
    }
    // ...
  2. در فایل 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")
      // ...
  3. در فایل 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>
    ...
    
  4. در فایل AndroidManifest.xml برنامه‌تان، خطوط زیر را در عنصر <manifest> اضافه کنید:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. در فایل AndroidManifest.xml، اجازه‌های سیستم را برای برنامه‌تان با افزودن خطوط زیر در برچسب <manifest> مشخص کنید. اگر درحال آزمایش در Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹) یا بالاتر هستید، اجازه 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:

  • گرفتن ScreenCapture کامل در API Build.VERSION_CODES.JELLY_BEAN_MR2 و بالاتر:

    Screenshot.capture()
    
  • ScreenCapture از «فعالیت» در هر سطح API بگیرید. توجه داشته باشید که این تنها گزینه برای دستگاه‌هایی است که نسخه‌شان پایین‌تر از 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();
    

مرحله ۳. ساختن و اجرای آزمایش

  1. برنامه‌تان را بسازید و فایل‌های APK را آزمایش کنید (برای دستورالعمل‌ها، آزمایش کردن برنامه را ببینید).

  2. در کنسول Firebase، به DevOps و تعامل > Test Lab بروید، سپس فایل‌های APK را بارگذاری کنید.

  3. درنهایت، آزمایشتان را اجرا کنید.

مرحله ۴. مشاهده نماگرفت‌های آزمایش

پس‌از تکمیل آزمایش، می‌توانید نماگرفت‌هایی را که گرفته شده است مشاهده کنید:

  1. در کنسول Firebase، به DevOps و تعامل > Test Lab بروید.

  2. در برگه آزمایش‌ها، آزمایش تکمیل‌شده‌تان را انتخاب کنید، سپس روی برگه نتایج کلیک کنید.

  3. آزمایشتان را دوباره انتخاب کنید، سپس روی برگه نماگرفت‌ها که نشان داده می‌شود کلیک کنید.

(اختیاری) فعال کردن ویژگی‌های آزمایشی اضافی

می‌توانید ویژگی‌های زیر را در آزمایشتان قبل‌از اجرای آن با 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، این مراحل را دنبال کنید:

  1. در راه‌اندازی آزمایش ابزار، روی گزینه‌های بیشتر کلیک کنید.

  2. در بخش تکه‌بندی، تعداد تکه‌هایی را که می‌خواهید اجرا شود وارد کنید.

صدور صورت‌حساب برای قطعات آزمایشی

Test Lab با بهره‌گیری از مکانیزم قطعه‌بندی داخلی AndroidJUnitRunner، قطعه‌های شما را پیاده‌سازی می‌کند. برای جلوگیری از کسر هزینه برای ایجاد قطعه‌های خالی (قطعه‌های بدون چارچوب تست اختصاص‌یافته)، تعداد قطعه‌هایی که ایجاد می‌کنید باید کمتر از تعداد کل چارچوب‌های تست باشد. بسته به اینکه اجرای هر چارچوب تست چقدر طول می‌کشد، معمولاً ایده خوبی است که ۲ تا ۱۰ چارچوب تست به هر قطعه اختصاص داده شود.

برای اطلاعات بیشتر درباره صورت‌حساب، استفاده، سهمیه‌ها، و صورت‌حساب را بخوانید.