В этом руководстве описывается, как подготовить и запустить инструментальный тест с помощью 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. Добавьте библиотеку скриншотов в свой проект
В файле настроек корневого уровня вашего тестового проекта 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() } } // ...
В файле 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
с помощью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 for Test Lab, в настройке инструментального тестирования щелкните Дополнительные параметры > Запустить с Orchestrator .
При использовании Orchestrator вы получаете следующие преимущества:
- Нет общего состояния. Каждый тест выполняется в собственном экземпляре инструментария, поэтому общее состояние не накапливается в тестах.
- Отдельные сбои. В случае сбоя теста прекращается только его инструментирование, а другие тесты в вашем наборе продолжают выполняться.
Имейте в виду, что при использовании Orchestrator каждый тест запускает свой собственный экземпляр инструментария, а это означает, что процесс приложения перезапускается после каждого тестового случая. В результате увеличенное время выполнения может повлиять на использование вашей квоты или оплачиваемого времени и может привести к превышению лимитов времени ожидания ваших устройств. Если вы уменьшите время запуска вашего приложения, эти накладные расходы сократятся.
Чтобы задать дополнительные параметры Orchestrator, укажите их через поле environmentVariables
. Например, чтобы использовать clearPackageData
, используйте эту опцию в gcloud:
--environment-variables clearPackageData=true
Включить сегментирование
Разделение тестов делит набор тестов на подгруппы (сегменты), которые выполняются отдельно изолированно. Test Lab автоматически запускает каждый сегмент параллельно с использованием нескольких устройств и выполняет весь набор тестов за меньшее время.
Например, если вы создаете N сегментов, для каждого выбранного вами устройства Test Lab запускает N идентичных устройств и запускает подмножество тестов на каждом устройстве. Это означает, что сегментированные тестовые случаи могут привести к выполнению нескольких тестов на одном устройстве. Однако тестовые случаи без сегментирования приводят к одному выполнению теста на устройство. Чтобы узнать о концепциях Test Lab, см. Ключевые концепции .
Чтобы включить тестовое сегментирование в консоли Firebase, выполните следующие действия:
В настройке инструментального теста щелкните Дополнительные параметры .
В разделе Sharding введите количество сегментов, которые вы хотите запустить.
Выставление счетов за тестовые шарды
Test Lab реализует ваши сегменты, используя встроенный механизм сегментирования AndroidJUnitRunner. Чтобы избежать взимания платы за раскручивание пустых сегментов (осколков без назначенных тестовых наборов), количество создаваемых вами сегментов должно быть меньше общего количества тестовых наборов. В зависимости от того, сколько времени требуется для выполнения каждого тестового примера, обычно рекомендуется назначать от 2 до 10 тестовых случаев на сегмент.
Дополнительные сведения о выставлении счетов см. в статье Использование, квоты и выставление счетов .