В этом руководстве рассказывается, как подготовить и запустить инструментальный тест с помощью 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. Как добавить библиотеку скриншотов в проект
В файле 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()Сделать
ScreenCaptureдействий на любом уровне API. Обратите внимание, что это единственный вариант для устройств с версией ниже Build.VERSION_CODES.JELLY_BEAN_MR2.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
Примеры использования ScreenCapture
Как обработать
ScreenCaptureс помощьюFirebaseScreenCaptureProcessorScreenshot.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 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, выполните следующие действия:
В разделе Настройка инструментальных тестов нажмите Дополнительные параметры.
В разделе Шардинг укажите количество шардов, которые нужно запустить.
Оплата тестовых сегментов
Test Lab реализует сегментирование с помощью встроенного механизма сегментирования JUnitRunner. Чтобы избежать оплаты за создание пустых сегментов (без назначенных тестовых случаев), количество создаваемых сегментов должно быть меньше общего количества тестовых случаев. В зависимости от того, сколько времени занимает выполнение каждого тестового случая, обычно рекомендуется назначать 2–10 тестовых случаев на сегмент.
Подробнее о квотах, использовании и оплате…