Начните с инструментальных испытаний

В этом руководстве описывается, как подготовить и запустить инструментальный тест с использованием Firebase Test Lab . Чтобы использовать это руководство, вам понадобится инструментальный тест (написанный вами или вашей командой), который использует тестовые фреймворки Espresso или UI Automator Android. Инструментальные тесты могут выполняться до 45 минут на физических устройствах и до 60 минут на виртуальных устройствах .

Далее вы загрузите APK своего приложения и APK своего теста в Firebase.

(Необязательно) Добавьте библиотеку скриншотов в свое приложение.

Firebase Test Lab включает библиотеку (testlab-instr-lib), которую можно использовать для обработки любых снимков экрана, сделанных с помощью AndroidX ScreenCapture при запуске инструментальных тестов, таких как тесты, написанные с использованием фреймворка Espresso test . В этом разделе описывается, как создавать объекты ScreenCapture с помощью библиотеки AndroidX и как обрабатывать их с помощью testlab-instr-lib.

После завершения тестирования инструментария вы можете просмотреть сделанные снимки экрана в консоли Firebase .

Попробуйте пример приложения

Загрузите пример приложения NotePad, чтобы опробовать эту функциональность. Возможность делать снимки экрана уже включена в проект NotePad.

Шаг 1. Добавьте библиотеку скриншотов в свой проект

  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 (уровень 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 :

  • Сделайте полный снимок экрана на API Build.VERSION_CODES.JELLY_BEAN_MR2 и выше:

    Screenshot.capture()
    
  • Сделайте ScreenCapture Activity на любом уровне 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-файлы на панель управления Test Lab консоли Firebase .

  3. Наконец, проведите тест.

Шаг 4. Просмотрите тестовые скриншоты.

После завершения теста вы можете просмотреть все сделанные снимки экрана в консоли Firebase .

  1. На вкладке «Тесты» выберите выполненный вами тест, затем нажмите вкладку «Результаты» .

  2. Выберите тест еще раз, затем нажмите на появившуюся вкладку «Снимки экрана» .

(Необязательно) Включить дополнительные функции тестирования

Перед запуском теста с помощью Test Lab вы можете включить следующие функции:

Включить Оркестратор

Android Test Orchestrator — это инструмент, который запускает каждый из тестов инструментария вашего приложения независимо. 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. Чтобы избежать платы за запуск пустых шардов (шардов без назначенных тестовых случаев), количество создаваемых вами шардов должно быть меньше общего количества тестовых случаев. В зависимости от того, сколько времени требуется для выполнения каждого тестового случая, обычно хорошей идеей будет назначить 2–10 тестовых случаев на шард.

Дополнительную информацию о выставлении счетов см. в разделе Использование, квоты и выставление счетов .