Начните тестирование с помощью Gcloud CLI

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

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

Прежде чем начать

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

Шаг 1. Настройте gcloud CLI

  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 для просмотра тестовых устройств и локалей, доступных для вашего теста.

В качестве опции вы также можете загрузить пример приложения Notepad , чтобы начать выполнять команды прямо сейчас. Используйте двоичный файл 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-тест проверяет приложение, выполняя статический анализ различных путей через пользовательский интерфейс приложения, а затем сканирует приложение, чтобы найти сбои и другие потенциальные проблемы.

Чтобы запустить 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, см. раздел Анализ результатов теста .

Проведите инструментальный тест

Теперь используйте инструмент командной строки 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
  --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 CLI поддерживает Android Test Orchestrator . Orchestrator требует AndroidJUnitRunner v1.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 for Android .

Пользовательский вход в систему и ввод текста с помощью Robo-теста

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

Чтобы заполнить текстовые поля в вашем приложении, используйте параметр --robo-directives и укажите список пар key-value , разделенных запятыми, где key — это имя ресурса Android целевого элемента пользовательского интерфейса, а value — текстовая строка. Вы также можете использовать этот флаг, чтобы указать Robo игнорировать определенные элементы пользовательского интерфейса (например, кнопку «logout»). Поля EditText поддерживаются, но не текстовые поля в элементах пользовательского интерфейса 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 Test Lab не удалось определить, прошла ли тестовая матрица успешно или нет.
18 Тестовая среда для этого тестового выполнения не поддерживается из-за несовместимых тестовых измерений. Эта ошибка может возникнуть, если выбранный уровень API Android не поддерживается выбранным типом устройства.
19 Тестовая матрица была отменена пользователем.
20 Произошла ошибка тестовой инфраструктуры.