Как начать тестирование с помощью gcloud CLI

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

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

Подготовка

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

1. Как настроить gcloud CLI

  1. Скачайте Google Cloud SDK.
  2. в том числе инструмент gcloud CLI.

  3. Убедитесь, что у вас установлена последняя версия:
    gcloud components update
    
  4. Войдите в gcloud CLI, используя аккаунт 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 указаны версии операционных систем, поддерживаемые устройством.

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

    Вывод списка моделей Android для тестирования в gcloud firebase

  • models describe – получить дополнительную информацию об определенном устройстве Android MODEL_ID.

    gcloud firebase test android models describe MODEL_ID

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

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

    gcloud firebase test android versions list

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

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

    gcloud android versions list

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

    gcloud firebase test android locales list

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

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

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

Запуск автоматизированного тестирования

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

Чтобы запустить автоматизированное тестирование, выполните следующую команду:

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

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

Подробнее о том, как анализировать результаты автоматизированного тестирования…

Как запустить инструментальный тест

Теперь используйте инструмент командной строки gcloud, чтобы запустить тесты Espresso приложения Notepad на указанных конфигурациях устройств Android. Чтобы запустить тесты в app-debug-test-unaligned.apk, используйте тип теста instrumentation:

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. Для работы 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 не включен, используйте следующий код:

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, измените переменные среды следующим образом:

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 выведет на экран краткую сводку результатов тестирования:

Результаты тестирования команд

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

Собственные учетные данные и ввод текста при автоматизированном тестировании

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

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

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

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

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

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

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

  • Тестовые флаги игрового цикла. Набор флагов конфигурации, которые включают деморежим и управляют им, чтобы имитировать действия игрока в мобильных играх. Подробнее о том, как проводить тестирование игрового цикла с помощью Test Lab…

  • Uniform Sharding flag (бета-версия). Флаг, который указывает, на сколько сегментов нужно равномерно распределить отчеты о тестировании. Фрагменты выполняются параллельно на разных устройствах.

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