В этом руководстве описано, как подготовить и запустить инструментальный тест с помощью 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. Добавьте библиотеку скриншотов в свой проект.
В корневом файле настроек 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в теге 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> ...В файл
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. Обратите внимание, что это единственная опция для устройств с версиями 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. Создайте и запустите тест.
Создайте свое приложение и протестируйте APK-файлы (см. раздел «Тестирование приложения» для получения инструкций).
Загрузите APK-файлы на панель управления Test Lab в консоли Firebase .
Наконец, запустите свой тест.
Шаг 4. Просмотрите тестовые скриншоты.
После завершения тестирования вы сможете просмотреть все сделанные снимки экрана в консоли Firebase .
На вкладке «Тесты» выберите пройденный тест, затем нажмите вкладку «Результаты» .
Снова выберите свой тест, затем нажмите на появившуюся вкладку «Скриншоты» .
(Необязательно) Включите дополнительные функции тестирования
Перед запуском теста в 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 , выполните следующие действия:
В настройках тестирования измерительного оборудования нажмите «Дополнительные параметры» .
В разделе «Шардирование» укажите количество шардов, которые вы хотите запустить.
Оплата за тестовые сегменты
Test Lab реализует ваши шарды, используя встроенный механизм шардинга AndroidJUnitRunner. Чтобы избежать платы за запуск пустых шардов (шардов без назначенных тестовых случаев), количество создаваемых шардов должно быть меньше общего количества тестовых случаев. В зависимости от времени выполнения каждого тестового случая, обычно рекомендуется назначать от 2 до 10 тестовых случаев на каждый шард.
Для получения более подробной информации о выставлении счетов ознакомьтесь с разделом «Использование, квоты и выставление счетов» .