Начало работы с инструментальными тестами

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

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

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

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 в теге метаданных внутри элемента <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. В консоли Firebase выберите DevOps & Engagement (DevOps и взаимодействие) > Test Lab (Лаборатория тестирования) и загрузите APK-файлы.

  3. Запустите тест.

Шаг 4. Как посмотреть скриншоты тестирования

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

  1. В консоли Firebase выберите DevOps & Engagement (DevOps и взаимодействие) > Test Lab (Лаборатория тестирования).

  2. На вкладке Тесты выберите завершенный тест и нажмите на вкладку Результаты.

  3. Выберите тест ещё раз и нажмите на появившуюся вкладку Скриншоты.

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

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

Как включить Orchestrator

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

Подробнее о квотах, использовании и оплате…