با تست های ابزار دقیق شروع کنید

این راهنما نحوه آماده سازی و اجرای تست ابزار دقیق با استفاده از Firebase Test Lab را شرح می دهد. برای استفاده از این راهنما، به یک تست ابزار دقیق (نوشته شده توسط شما یا تیمتان) نیاز دارید که از چارچوب های تست اندروید 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. کتابخانه اسکرین شات را به پروژه خود اضافه کنید

  1. در فایل Gradle در سطح ریشه (سطح پروژه) پروژه آزمایشی خود ( build.gradle )، مخزن Maven Google را به هر بخش مخازن اضافه کنید:

    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
        // ...
      }
    }
  2. در فایل Gradle ماژول (سطح برنامه) خود (معمولا app/build.gradle )، یک وابستگی برای کتابخانه اسکرین شات آزمایشگاه تست اضافه کنید.

    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 (سطح 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>

مرحله 2. در طول آزمایش خود اسکرین شات بگیرید

در هر نقطه از آزمایش خود که می خواهید اسکرین شات بگیرید، متد 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();
    

مرحله 3. آزمایش خود را بسازید و اجرا کنید

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

  2. فایل‌های APK را در داشبورد آزمایشگاه آزمایشی کنسول Firebase آپلود کنید.

  3. در نهایت، تست خود را اجرا کنید.

مرحله 4. اسکرین شات های آزمایشی خود را مشاهده کنید

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

  1. در تب Tests ، آزمون تکمیل شده خود را انتخاب کنید، سپس روی تب Results کلیک کنید.

  2. دوباره تست خود را انتخاب کنید، سپس روی تب Screenshots که ظاهر می شود کلیک کنید.

(اختیاری) ویژگی های تست اضافی را فعال کنید

می‌توانید ویژگی‌های زیر را در آزمون خود قبل از اجرای آن با Test Lab فعال کنید:

ارکستراتور را فعال کنید

Android Test Orchestrator ابزاری است که هر یک از تست های ابزار دقیق برنامه شما را به طور مستقل اجرا می کند. آزمایشگاه تست همیشه از آخرین نسخه ارکستراتور استفاده می کند.

برای فعال کردن ارکستراتور برای آزمایشگاه تست، در تنظیمات تست ابزار دقیق، روی گزینه‌های اضافی > اجرا با ارکستراتور کلیک کنید.

مزایا و معایب

  • مزیت: حالت مشترک وجود ندارد. هر آزمون در نمونه ابزار دقیق خودش اجرا می‌شود، بنابراین یک حالت مشترک در بین تست‌ها جمع نمی‌شود.
  • مزیت: تصادفات جدا شده. اگر آزمایشی خراب شود، فقط آن ابزار دقیق خاتمه می‌یابد و سایر آزمایش‌های مجموعه شما همچنان می‌توانند اجرا شوند.
  • اشکال: زمان های طولانی تر . هر تست نمونه ابزار دقیق خود را اجرا می کند، به این معنی که فرآیند تست در کل کمی طولانی تر می شود. اگر علامت نزنید، افزایش زمان اجرا می‌تواند به طور بالقوه بر میزان استفاده از سهمیه یا زمان صورت‌حساب شما تأثیر بگذارد و ممکن است باعث شود که محدودیت‌های زمانی دستگاه‌هایتان را کاهش دهید.

اشتراک گذاری را فعال کنید

تقسیم بندی تست مجموعه ای از تست ها را به گروه های فرعی (شاردها) تقسیم می کند که به طور جداگانه به صورت مجزا اجرا می شوند. Test Lab به طور خودکار هر قطعه را با استفاده از چندین دستگاه به صورت موازی اجرا می کند و کل مجموعه آزمایش ها را در زمان کمتری کامل می کند.

تقسیم بندی تست چگونه کار می کند

فرض کنید که N خرده ها را ایجاد کرده اید. برای هر دستگاهی که انتخاب می‌کنید، Test Lab N دستگاه یکسان را می‌چرخاند و زیرمجموعه‌ای از آزمایش‌ها را روی هر دستگاه اجرا می‌کند. این بدان معناست که موارد تست خرد شده می‌تواند منجر به اجرای آزمایش‌های متعدد در هر دستگاه شود، بر خلاف موارد تست غیرتختی، که همیشه منجر به یک اجرای آزمایش در هر دستگاه می‌شود (برای مروری سریع بر مفاهیم کلیدی در Test Lab، به مفاهیم کلیدی مراجعه کنید).

می‌توانید اشتراک‌گذاری آزمایشی را در کنسول Firebase فعال کنید:

  1. در تنظیم تست ابزار دقیق، روی گزینه های اضافی کلیک کنید.

  2. در قسمت Sharding تعداد خرده هایی را که می خواهید اجرا کنید وارد کنید.

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

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

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