Firebase Test Lab предоставляет облачную инфраструктуру для тестирования приложений Android, включая полную интеграцию с интерфейсом командной строки (CLI) gcloud. Этот документ описывает установку и настройку, необходимые для начала работы с Test Lab из интерфейса командной строки gcloud.
Полный список команд gcloud
вы можете использовать с вашим приложением Android в Test Lab, см. В справочной документации по gcloud firebase test android
.
Если у вас нет проекта Firebase для вашего приложения, перейдите в консоль Firebase и нажмите « Создать новый проект», чтобы создать его сейчас. Вам потребуются права владения или редактирования в вашем проекте.
Настройте интерфейс командной строки gcloud
- Загрузите Google Cloud SDK.
- Убедитесь, что у вас установлена последняя версия:
gcloud components update
- Войдите в интерфейс командной строки gcloud, используя свою учетную запись Google:
gcloud auth login
- Установите свой проект Firebase в gcloud, где PROJECT_ID - это идентификатор вашего проекта Firebase:
gcloud config set project PROJECT_ID
Сюда входит инструмент командной строки gcloud.
Настройте свой тест
В этом примере вы запустите несколько тестов в простом приложении для Android для создания заметок, которое называется Блокнот.
Загрузите двоичный файл APK для приложения «Блокнот» ( app-debug-unaligned.apk ) и соответствующие ему инструментальные тесты ( app-debug-test-unaligned.apk ) из каталога NotePad / app / build / output / apk / блокнота. .zip .
Получите текущий список устройств Android, доступных для тестирования, следующим образом:
$ gcloud firebase test android models list
Первый столбец выходных данных команды,
MODEL_ID
, содержит идентификатор, который вы можете использовать позже для запуска тестов на конкретной модели. В столбцеOS_VERSION_ID
перечислены версии операционной системы, поддерживаемые этим устройством. Если вы не укажете, какиеMODEL_ID
проверять, используется значение по умолчанию, указанное в столбцеTAGS
.Узнайте больше о конкретном Android
MODEL_ID
с помощью командыfirebase test android models describe
, как показано ниже:
Пример команды, показанный выше, предоставляет подробную информацию о модели$ gcloud firebase test android models describe Nexus5
Nexus5
, включая бренд, производителя и поддерживаемые уровни API, а также является ли модель физической или виртуальный.Получите текущий список версий ОС Android, доступных для тестирования:
$ gcloud firebase test android versions list
Вы можете использовать идентификатор из любого из первых двух столбцов вывода команды (
OS_VERSION_ID
иVERSION
) для последующего запуска тестов для версии ОС Android. Если вы не укажете версии ОС Android для тестирования, будет использоваться значение по умолчанию, указанное в столбцеTAGS
.Получите текущий список языковых стандартов, доступных для тестирования:
Первый столбец выходных данных команды,$ gcloud firebase test android locales list
LOCALE
, содержит идентификатор, который вы можете использовать позже для запуска тестов для языкового стандарта. Если вы не укажете языковые стандарты для тестирования, по умолчанию будет использоваться английский язык. Вывод команды здесь не показан, поскольку доступны сотни языков.
Запуск тестов
Теперь, когда вы знаете диапазон моделей устройств, версий ОС и локалей, доступных для использования при тестировании приложения, вы можете использовать эту информацию для указания тестовых устройств с помощью команды gcloud firebase test android run
и флага --device
. Эта команда и флаг используются независимо от того, используете ли вы Robo-тест для автоматического тестирования вашего приложения или запускаете инструментальные тесты, написанные специально для тестирования вашего приложения.
Запуск робо-теста
Даже если у вас нет инструментальных тестов, вы все равно можете искать ошибки в своем приложении. Используйте Robo-тест для автоматической проверки пользовательского интерфейса вашего приложения. Роботест проверяет приложение, выполняя статический анализ различных путей через пользовательский интерфейс приложения, а затем просматривая приложение в поисках сбоев и других потенциальных проблем.
Начнем с выполнения примера команды:
gcloud firebase test android run \ --type robo \ --app app-debug-unaligned.apk \ --device model=Nexus6,version=21,locale=en,orientation=portrait \ --device model=Nexus7,version=19,locale=fr,orientation=landscape \ --timeout 90s
Параметр --type robo
является неявным, если не --type
значение --type
. Вы можете увидеть полный набор параметров командной строки для запуска тестов, набрав: gcloud help firebase test android run
. В качестве альтернативы указанию всех этих аргументов в командной строке вы можете дополнительно указать свои аргументы в файле аргументов в формате YAML. Запустите gcloud topic arg-files
чтобы узнать, как использовать эту функцию.
См. Раздел Анализируйте результаты теста, чтобы узнать, как исследовать результаты теста Робо.
Проведение ваших инструментальных тестов
Теперь используйте gcloud
командной строки gcloud
для запуска тестов Espresso приложения Notepad на указанных вами конфигурациях устройства Android, используя тип instrumentation
теста для запуска тестов в app-debug-test-unaligned.apk
следующим образом:
gcloud firebase test android run \ --type instrumentation \ --app app-debug-unaligned.apk \ --test app-debug-test-unaligned.apk \ --device model=Nexus6,version=21,locale=en,orientation=portrait \ --device model=Nexus7,version=19,locale=fr,orientation=landscape
--type instrumentation
если тестовый APK был указан с параметром --test
. В качестве альтернативы указанию всех этих аргументов в командной строке вы можете дополнительно указать свои аргументы в файле аргументов в формате YAML. Запустите gcloud topic arg-files
чтобы узнать, как использовать эту функцию.
Интерфейс командной строки gcloud поддерживает Android Test Orchestrator . Для Orchestrator требуется AndroidJUnitRunner v1.0 или выше. Чтобы включить его, используйте gcloud firebase test android run
с
--use-orchestrator
флаг --use-orchestrator
. Чтобы отключить его, используйте флаг --no-use-orchestrator
.
Примечание. Вы также можете контролировать, как Test Lab запускает ваши инструментальные тесты, используя дополнительные флаги, которые не показаны выше. Например, вы можете использовать флаг --test-targets
для тестирования одного класса или метода класса, используемого вашим тестовым APK. Вы также можете узнать, действительно ли ваш тест, который не прошел, был нестабильным или нет, используя флаг --num-flaky-test-plays ', который указывает, сколько раз следует повторить попытку выполнения теста, если один или несколько из его тестовые примеры терпят неудачу по любой причине. Чтобы узнать больше, см. Gcloud firebase test android run .
Отчеты о покрытии кода для инструментальных тестов
Test Lab поддерживает инструменты отчетности о покрытии кода EMMA и JaCoCo . Если у вас есть какой-либо инструмент, интегрированный в сборку для вашего приложения, вы можете получить отчет о покрытии кода для тестов Test Lab, запустив команду gcloud firebase test android run
со следующими аргументами:
gcloud firebase test android run \ --type instrumentation \ --app your-app.apk \ --test your-app-test.apk \ --device model=TestDevice,version=AndroidVersion \ --environment-variables coverage=true,coverageFile="/sdcard/coverage.ec" \ --directories-to-pull /sdcard
Когда Test Lab завершит выполнение тестов, найдите отчеты о покрытии кода в Google Cloud Storage:
- Откройте ссылку консоли Firebase,
gcloud
инструментgcloud
напечатал над таблицей результатов теста в вашем терминале. - Щелкните выполнение теста из списка по этой ссылке, чтобы открыть страницу сведений о выполнении.
- Нажмите « Результаты тестирования», чтобы перейти к сегменту Google Cloud Storage с результатами тестирования этого выполнения.
- Откройте
artifacts/coverage.ec
чтобы увидеть отчет о покрытии кода.
Проанализируйте результаты ваших тестов
Через несколько минут инструмент gcloud распечатает базовую сводку результатов вашего теста:
Выходные данные вашего тестового запуска командной строки также включают ссылку для просмотра результатов теста. Чтобы узнать больше о том, как интерпретировать эти результаты, см. Анализ лаборатории тестирования Firebase для результатов Android .
Пользовательский логин и ввод текста с помощью Robo Test
Роботест автоматически завершает экраны входа, которые используют учетную запись Google для аутентификации, если вы не используете параметр --no-auto-google-login
. Он также может заполнять настраиваемые экраны входа с использованием предоставленных вами учетных данных тестовой учетной записи. Вы также можете использовать этот параметр для предоставления настраиваемого текста ввода для других текстовых полей, используемых вашим приложением.
Чтобы заполнить текстовые поля в вашем приложении, используйте параметр --robo-directives
и --robo-directives
разделенный запятыми список пар key-value
, где key
- это имя ресурса Android целевого элемента пользовательского интерфейса, а value
- текстовая строка. . Вы также можете использовать этот флаг, чтобы указать Robo игнорировать определенные элементы пользовательского интерфейса (например, кнопку «выйти из системы»). Поддерживаются поля EditText
, но не текстовые поля в WebView
пользовательского интерфейса WebView
.
Например, вы можете использовать следующий параметр для пользовательского входа в систему:
--robo-directives username_resource=username,password_resource=password
Доступные команды и флаги
В интерфейсе командной строки Test Lab gcloud есть несколько доступных команд и флагов, которые позволяют запускать тесты с различными спецификациями:
Флаг Android Test Orchestrator : флаг для включения Orchestrator, инструмента, который позволяет запускать каждый из тестов вашего приложения при его собственном вызове
Instrumentation
. Test Lab всегда запускает последнюю версию Orchestrator.Флаги теста Game Loop : набор флагов конфигурации, которые включают и управляют «демонстрационным режимом» для имитации действий игрока в игровых приложениях. Узнайте больше о запуске тестов Game Loop с помощью Test Lab .
Флаг Uniform Sharding (в бета-версии) : флаг, указывающий количество сегментов, по которым вы хотите равномерно распределить тестовые наборы. Шарды запускаются параллельно на разных устройствах.
Флаг ручного сегментирования (в бета-версии) : флаг, указывающий группу пакетов, классов и / или тестовых примеров для запуска в сегменте (группе тестовых примеров). Шарды запускаются параллельно на разных устройствах.
Флаг профилей сетевого трафика (в бета-версии) : флаг, указывающий, какой профиль сети используют ваши тесты с физическими устройствами. Сетевые профили имитируют различные сетевые условия, позволяя тестировать производительность вашего приложения в ненадежных или непредсказуемых сетях.
Создание сценариев команд gcloud с помощью Test Lab
Вы можете использовать сценарии оболочки или пакетные файлы для автоматизации команд тестирования мобильных приложений, которые в противном случае вы бы запускали с помощью командной строки gcloud. Следующий пример сценария bash запускает инструментальный тест с двухминутным таймаутом и сообщает, успешно ли завершился тест:
if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m then echo "Test matrix successfully finished" else echo "Test matrix exited abnormally with non-zero exit code: " $? fi
Коды выхода скрипта
Test Lab предоставляет несколько кодов выхода, которые можно использовать для лучшего понимания результатов тестов, запускаемых с использованием сценариев или пакетных файлов.
Коды выхода сценариев для Test Lab
Код выхода | Заметки |
---|---|
0 | Все тестовые исполнения пройдены. |
1 | Произошел общий сбой. Возможные причины: несуществующее имя файла или ошибка HTTP / сети. |
2 | Тестирование завершено, поскольку были предоставлены неизвестные команды или аргументы. |
10 | Один или несколько тестовых примеров (проверенные классы или методы классов) в ходе выполнения теста не прошли. |
15 | Лаборатория тестирования Firebase не смогла определить, пройдена ли матрица тестирования или нет, из-за непредвиденной ошибки. |
18 | Тестовая среда для выполнения этого теста не поддерживается из-за несовместимых размеров теста. Эта ошибка может возникнуть, если выбранный уровень API Android не поддерживается выбранным типом устройства. |
19 | Тестовая матрица была отменена пользователем. |
20 | Произошла ошибка тестовой инфраструктуры. |