Catch up on highlights from Firebase at Google I/O 2023. Learn more

Начните тестирование с помощью интерфейса командной строки gcloud

В этом руководстве описывается, как запустить тест инструментирования, Robo или Game Loop с помощью интерфейса командной строки gcloud .

Полный список команд gcloud , которые вы можете использовать с Android-приложением в Test Lab, см. в справочной документации gcloud firebase test android .

Прежде чем вы начнете

Если вы еще этого не сделали, добавьте Firebase в свой проект Android .

Шаг 1. Настройте интерфейс командной строки gcloud

  1. Загрузите Google Cloud SDK.
  2. Это включает в себя инструмент командной строки gcloud.

  3. Убедитесь, что ваша установка обновлена:
    gcloud components update
    
  4. Войдите в интерфейс командной строки gcloud, используя свою учетную запись Google:
    gcloud auth login
    
  5. Установите свой проект Firebase в gcloud, где PROJECT_ID — это идентификатор вашего проекта Firebase:
    gcloud config set project PROJECT_ID
    

Шаг 2. Проверьте доступные тестовые устройства

Используйте следующие команды gcloud для просмотра тестовых устройств и языков, доступных для вашего теста.

Как вариант, вы также можете загрузить образец приложения «Блокнот» , чтобы сразу же приступить к выполнению команд. Используйте двоичный файл app-debug-unaligned.apk и файл инструментальных тестов app-debug-test-unaligned.apk , которые находятся в NotePad/app/build/outputs/apk/ .

  • models list : получите текущий список устройств Android, доступных для тестирования.

    gcloud firebase test android models list
    

    В выводе команды:

    • Столбец MODEL_ID содержит идентификатор, который впоследствии можно использовать для запуска тестов модели устройства.
    • Столбец OS_VERSION_ID содержит версии операционной системы, поддерживаемые устройством.

    Пример вывода

    gcloud firebase test android models list output

  • models describe : Получите больше информации о конкретном Android MODEL_ID .

    gcloud firebase test android models describe MODEL_ID
    

    Выходные данные содержат марку модели устройства, производителя, версии ОС, поддерживаемые уровни API, поддерживаемые бинарные интерфейсы приложений (ABI), даты выпуска и тип устройства: физическое или виртуальное.

  • versions list : получить список доступных в настоящее время версий ОС для тестирования.

    gcloud firebase test android versions list
    

    Вы можете использовать идентификатор из первых двух столбцов выходных данных команды ( OS_VERSION_ID и VERSION ), чтобы позже запустить тесты для версии ОС Android. Если вы не укажете версии ОС Android для тестирования, будет использоваться значение по умолчанию, указанное в столбце TAGS .

    Пример вывода

    gcloud android versions list

  • locales list : получить текущий список локалей, доступных для тестирования.

    gcloud firebase test android versions list
    

    Первый столбец выходных данных команды, LOCALE , содержит идентификатор, который вы можете использовать позже для запуска тестов для языкового стандарта. Если вы не укажете локали для тестирования, в качестве локали по умолчанию будет использоваться английский язык.

Шаг 3. Запустите тест

Теперь, когда вы знаете диапазон моделей устройств, локалей и версий ОС, доступных для тестирования вашего приложения, вы можете указать устройства с помощью команды gcloud firebase test android run и флага --device для запуска тестов Robo или инструментальных тестов.

Запустите тест робота

Даже если у вас нет инструментальных тестов, вы все равно можете искать ошибки в своем приложении. Используйте тест 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 \
  --client-details matrixLabel="Example matrix label"
  • Параметр --type robo является неявным, если значение --type не указано.
  • Чтобы помочь вам идентифицировать и найти свои тестовые матрицы в консоли Firebase, вы можете использовать дополнительный флаг --client-details matrixLabel="Example matrix label" для маркировки вашей тестовой матрицы.
  • Вы можете увидеть полный набор параметров командной строки для запуска тестов, набрав: gcloud help firebase test android run .

В качестве альтернативы указанию этих аргументов в командной строке вы можете дополнительно указать свои аргументы в файле аргументов в формате YAML. Запустите gcloud topic arg-files , чтобы узнать, как использовать эту функцию.

Чтобы узнать, как исследовать результаты теста Robo test, см. Анализ результатов теста .

Запустите инструментальный тест

Теперь используйте инструмент командной строки gcloud для запуска тестов Espresso приложения «Блокнот» на указанных вами конфигурациях устройств 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
  --client-details matrixLabel="Example matrix label"
  • Параметр инструментария --type является неявным, если тестовый APK указан с --test .
  • Чтобы помочь вам идентифицировать и найти свои тестовые матрицы в консоли Firebase, вы можете использовать дополнительный флаг --client-details matrixLabel="Example matrix label" для маркировки вашей тестовой матрицы.
  • Вы можете увидеть полный набор параметров командной строки для запуска тестов, набрав gcloud help firebase test android run .

В качестве альтернативы указанию этих аргументов в командной строке вы можете дополнительно указать свои аргументы в файле аргументов в формате YAML. Запустите gcloud topic arg-files , чтобы узнать, как использовать эту функцию.

Интерфейс командной строки gcloud поддерживает Android Test Orchestrator . Orchestrator требует AndroidJUnitRunner версии 1.1 или выше. Чтобы включить его, используйте gcloud firebase test android run
--use-orchestrator флаг. Чтобы отключить его, используйте флаг --no-use-orchestrator .

Вы также можете управлять тем, как Test Lab запускает инструментальные тесты, используя дополнительные флаги, не показанные выше. Например, вы можете использовать флаг --test-targets для тестирования одного класса или метода класса, используемого вашим тестовым APK. Вы также можете узнать, был ли ваш тест, который провалился, действительно ненадежным или нет, используя флаг --num-flaky-test-attempts , который указывает количество повторных попыток выполнения теста, если один или несколько его тестовых случаев не удается по какой-либо причине. Чтобы узнать больше, см. статью gcloud firebase test android run .

Отчеты о покрытии кода для инструментальных тестов

Test Lab поддерживает инструменты отчетности о покрытии кода EMMA и JaCoCo . Если у вас есть какой-либо инструмент, интегрированный в сборку вашего приложения, вы можете получить отчет о покрытии кода для тестов Test Lab, запустив gcloud firebase test android run с некоторыми дополнительными аргументами. Если Android Test Orchestrator не включен, используйте следующее:

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/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

Если вы создаете отчеты о покрытии кода, одновременно используя Android Test Orchestrator, измените переменные среды следующим образом:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

Когда Test Lab завершит выполнение ваших тестов, найдите отчеты о покрытии кода в Google Cloud Storage:

  1. Откройте ссылку консоли Firebase, которую инструмент gcloud напечатал над таблицей результатов теста в вашем терминале.
  2. Щелкните выполнение теста из списка по этой ссылке, чтобы открыть страницу сведений об этом выполнении.
  3. Нажмите Результаты теста , чтобы перейти в корзину Cloud Storage с результатами теста этого выполнения.
  4. Откройте artifacts/coverage.ec , чтобы просмотреть отчет о покрытии кода.

Проанализируйте результаты теста

Через несколько минут инструмент gcloud распечатает базовую сводку результатов вашего теста:

Command test results

Выходные данные вашего тестового запуска командной строки также содержат ссылку для просмотра результатов теста. Чтобы узнать больше о том, как интерпретировать эти результаты, см. раздел Анализ результатов Firebase Test Lab для Android .

Пользовательский логин и ввод текста с помощью Robo test

Robo test автоматически завершает экраны входа, которые используют учетную запись Google для аутентификации, если только вы не используете параметр --no-auto-google-login . Он также может заполнять настраиваемые экраны входа в систему, используя предоставленные вами учетные данные тестовой учетной записи. Вы также можете использовать этот параметр для предоставления пользовательского ввода текста для других текстовых полей, используемых вашим приложением.

Чтобы заполнить текстовые поля в приложении, используйте параметр --robo-directives и укажите разделенный запятыми список пар key-value , где key — это имя ресурса Android целевого элемента пользовательского интерфейса, а value — текстовая строка. . Вы также можете использовать этот флаг, чтобы указать Robo игнорировать определенные элементы пользовательского интерфейса (например, кнопку «Выйти»). Поддерживаются поля EditText , но не текстовые поля в элементах пользовательского интерфейса WebView .

Например, вы можете использовать следующий параметр для пользовательского входа в систему:

--robo-directives username_resource=username,password_resource=password

Доступные команды и флаги

В интерфейсе командной строки gcloud Test Lab есть несколько доступных команд и флагов, позволяющих запускать тесты с различными характеристиками:

  • Флаг Android Test Orchestrator : флаг для включения Orchestrator, инструмента, который позволяет запускать каждый из тестов вашего приложения в отдельном вызове Instrumentation . Test Lab всегда использует последнюю версию Orchestrator.

  • Тестовые флаги игрового цикла : набор флагов конфигурации, которые включают и контролируют «демонстрационный режим» для имитации действий игрока в игровых приложениях. Узнайте больше о выполнении тестов Game Loop с помощью Test Lab .

  • Флаг унифицированного сегментирования (в бета-версии) : флаг, указывающий количество сегментов, на которые вы хотите равномерно распределить тестовые наборы. Шарды запускаются параллельно на отдельных устройствах.

  • Флаг ручного разделения (в бета-версии) : флаг, указывающий группу пакетов, классов и/или тестовых наборов для запуска в сегменте (группа тестовых наборов). Шарды запускаются параллельно на отдельных устройствах.

  • Флаг профилей сетевого трафика (в бета-версии) : флаг, указывающий, какой сетевой профиль используется вашими тестами с физическими устройствами. Сетевые профили эмулируют различные сетевые условия, позволяя вам тестировать производительность вашего приложения в ненадежных или непредсказуемых сетях.

Скрипты команд 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 Тестовая среда для выполнения этого теста не поддерживается из-за несовместимых измерений теста. Эта ошибка может возникнуть, если выбранный уровень Android API не поддерживается выбранным типом устройства.
19 Тестовая матрица была отменена пользователем.
20 Произошла ошибка тестовой инфраструктуры.