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

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

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

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

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

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

Попробуйте образец приложения

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

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

  1. В файле Gradle настроек корневого уровня вашего тестового проекта ( settings.gradle.kts или settings.gradle ) добавьте репозиторий Google 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()
        }
    }
    // ...
  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 активности на любом уровне 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 тестовых случаев на каждый сегмент.

Дополнительные сведения о выставлении счетов см. в статье Использование, квоты и выставление счетов .