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

В этом руководстве описано, как запустить инструментальный тест, тест робота или игровой цикл с помощью интерфейса командной строки 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 (Application Binary Interfaces), даты выпуска, а также информация о том, является ли устройство физическим или виртуальным.

  • 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 для запуска тестов Robo или инструментальных тестов.

Проведите тестирование робота

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

Для запуска теста робота выполните следующую команду (пример):

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 приложения «Блокнот» на указанных вами конфигурациях 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 автоматически завершает экраны входа в систему, использующие учетную запись 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.

  • Флаги тестов игрового цикла : набор конфигурационных флагов, которые включают и управляют «демонстрационным режимом» для имитации действий игрока в игровых приложениях. Узнайте больше о запуске тестов игрового цикла с помощью 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 Test Lab не удалось определить, прошла ли матрица тестов или нет.
18 Данная тестовая среда не поддерживается из-за несовместимых параметров теста. Эта ошибка может возникнуть, если выбранный уровень API Android не поддерживается выбранным типом устройства.
19 Пользователь отменил тестовую матрицу.
20 Произошла ошибка в тестовой инфраструктуре.