В этом руководстве рассказывается, как подготовить и запустить инструментальный тест с помощью Firebase Test Lab. Чтобы воспользоваться этим руководством, вам понадобится инструментальный тест (написанный вами или вашей командой), в котором используются фреймворки Espresso или UI Automator. Инструментальные тесты могут выполняться до 45 минут на физических устройствах и до 60 минут на виртуальных устройствах.
На следующих этапах вы загрузите APK-файлы приложения и теста в Firebase.
Добавьте в приложение библиотеку скриншотов (необязательно)
В Firebase Test Lab есть библиотека testlab-instr-lib, которая позволяет обрабатывать скриншоты, сделанные с помощью ScreenCapture из AndroidX, при выполнении инструментальных тестов, например написанных с использованием фреймворка Espresso.
В этом разделе описывается, как создавать объекты ScreenCapture с помощью библиотеки AndroidX и как обрабатывать их с помощью testlab-instr-lib.
После завершения инструментального теста вы можете посмотреть скриншоты в консоли Firebase.
Попробуйте пример приложения
Чтобы попробовать эту функцию, скачайте пример приложения NotePad. Возможность делать скриншоты уже встроена в проект NotePad.
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() } } // ...
В файле 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") // ...
В файле
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> ...Добавьте в файл
AndroidManifest.xmlприложения следующие строки в элементе<manifest>:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>В файле
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()Сделайте
ScreenCaptureActivity на любом уровне 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. Как создать и запустить тест
Создайте приложение и протестируйте APK-файлы (см. инструкции).
В консоли Firebase выберите DevOps & Engagement (DevOps и вовлечение) > Test Lab (Лаборатория тестирования) и загрузите APK-файлы.
Запустите тестирование.
Шаг 4. Как посмотреть скриншоты тестирования
После завершения тестирования вы можете посмотреть все сделанные скриншоты. Для этого выполните следующие действия:
В консоли Firebase выберите DevOps & Engagement (DevOps и вовлечение) > Test Lab (Лаборатория тестирования).
На вкладке Тестирование выберите завершенный тест и откройте вкладку Результаты.
Снова выберите тест и перейдите на вкладку Скриншоты.
Как включить дополнительные функции тестирования (необязательно)
Перед запуском теста в Test Lab вы можете включить следующие функции:
Включить Orchestrator
Инструмент оркестрации тестов Android позволяет запускать каждый инструментальный тест приложения независимо от других. 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, выполните следующие действия:
В разделе Настройка инструментального теста нажмите Дополнительные настройки.
В разделе Сегментирование укажите количество сегментов, которые нужно запустить.
Оплата тестовых сегментов
Test Lab реализует сегменты, используя встроенный механизм сегментирования AndroidJUnitRunner. Чтобы не платить за пустые сегменты (без назначенных тестовых сценариев), создавайте меньше сегментов, чем у вас тестовых сценариев. В зависимости от того, сколько времени занимает выполнение каждого тестового примера, обычно рекомендуется назначать от 2 до 10 тестовых примеров на сегмент.
Подробнее об использовании, квотах и оплате…