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

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

На следующих этапах вы загрузите APK-файл вашего приложения и APK-файл вашего теста в Firebase.

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

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

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

Попробуйте тестовую версию приложения.

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

Шаг 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 в теге meta-data внутри элемента <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 активности на любом уровне API. Обратите внимание, что это единственная опция для устройств с версиями API ниже 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. Создайте и запустите тест.

  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 тестовых случаев на каждый шард.

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