Интегрируйте тестовую лабораторию в вашу систему CI/CD

1. Введение

Последнее обновление: 7 апреля 2022 г.

Как запускать мобильные тесты с помощью систем CI/CD

Проведение мобильных тестов может быть затруднено: многие приложения работают на разных платформах, устройствах и версиях API. Разработчики приложений хотят протестировать как можно больше конфигураций, чтобы выявить проблемы раньше, чем это сделают их пользователи. Однако ограничения по стоимости и ресурсам ограничивают количество тестовых устройств и объем ручного обслуживания, в которое могут инвестировать отдельные разработчики. Когда процесс разработки расширяется, особенно для систем непрерывной интеграции/непрерывной разработки (CI/CD), процесс тестирования требует быть автоматизированным при минимизации затрат и усилий на техническое обслуживание.

Чтобы помочь вам понять, как ваши приложения работают на устройствах ваших пользователей, Firebase Test Lab размещает ряд мобильных физических и виртуальных устройств в наших центрах обработки данных. Мы также предоставляем Google Cloud CLI — независимый от платформы инструмент командной строки, который организует выполнение тестов на устройствах в наших центрах обработки данных. Интерфейс командной строки gcloud упрощает интеграцию облачного решения Test Lab для тестирования в существующие рабочие процессы CI/CD.

Кроссплатформенная поддержка

Test Lab предоставляет решения для тестирования приложений Android и iOS, а также специальную поддержку мобильных игр, таких как Unity. Варианты тестирования охватывают популярные платформы тестирования, такие как Android Espresso, UI Automator и iOS XCTest. Используя наш автоматизированный сканер Robo , Test Lab может даже запускать тесты без какого-либо тестового кода.

Никаких требований к оборудованию

Test Lab размещает физические устройства в центрах обработки данных Google, а виртуальные устройства — в Google Cloud. Все, что вам нужно сделать, это отправить свои тесты в тестовую лабораторию и дождаться результатов.

Быстро и надежно

Выполнение большого количества одновременных тестовых случаев может занять много времени, блокируя процессы CI/CD. С помощью Test Lab вы можете легко сегментировать тесты и запускать их на нескольких устройствах параллельно. Вы также можете обнаружить нестабильность — распространенную проблему мобильного тестирования.

Что вы узнаете

  • Как создавать тестовые артефакты
  • Как запустить мобильный тест с помощью интерфейса командной строки gcloud
  • Как настроить Jenkins CI
  • Как запускать мобильные тесты с помощью Jenkins CI
  • Как настроить тесты для масштабирования с системами CI

Эта лаборатория кода посвящена запуску тестов. Нерелевантные концепции и блоки кода замалчиваются и предоставляются для простого копирования и вставки.

Что вам понадобится

Если вы предпочитаете создавать что-то с нуля, вам понадобится Android Studio для запуска теста Android или XCode для запуска теста iOS. Или просто приходите сами и мы предоставим артефакты.

2. Запустите тест с помощью интерфейса командной строки gcloud.

Создайте APK-файл Android-приложения и протестируйте APK

Чтобы запустить тест с помощью Test Lab, начните с создания APK-файла приложения Android и тестового APK, который содержит инструментальные тесты для запуска на аппаратных устройствах или эмуляторах. Если у вас уже есть рабочая база кода, вы можете создать свои собственные APK-файлы или использовать BasicSample for Espresso .

Чтобы создавать APK-файлы с помощью команд Gradle, необходимо установить Android SDK. Если ваша Android Studio не установлена ​​на вашем компьютере, установите Android Studio и Android SDK и настройте среду ANDROID_HOME в каталоге Android SDK. Например, в файл ~/.bash_profile добавьте следующую строку:

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

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

git clone https://github.com/android/testing-samples.git
cd testing-samples/ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

После запуска команд клонирования и сборки вы можете найти APK приложения и тестовый APK в следующих местах:

app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Кроме того, вы можете использовать следующие варианты для получения APK-файлов тестирования и приложений:

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

Если у вас есть рабочий исходный код приложения для iOS, вы можете написать XCTest и создать zip-файл из приложения и тестов.

Используйте интерфейс командной строки gcloud для запуска теста с помощью Test Lab.

В этом разделе вы создадите проект Firebase и настроите локальную среду Google Cloud SDK. Дополнительные сведения см. в разделе Начало тестирования с помощью интерфейса командной строки gcloud .

Настройте интерфейс командной строки gcloud

  1. Загрузите Google Cloud SDK , который включает в себя инструмент gcloud CLI.
  2. Убедитесь, что ваша установка обновлена:
gcloud components update
  1. Войдите в интерфейс командной строки gcloud, используя свою учетную запись Google:
gcloud auth login
  1. Настройте свой проект Firebase в интерфейсе командной строки gcloud, где PROJECT_ID — это идентификатор вашего проекта Firebase. Вы можете найти идентификатор проекта в URL-адресе консоли Firebase, который соответствует этому соглашению об именах: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Если у вас нет проекта Firebase, создайте его в консоли Firebase .

Запустите тест, используя встроенные APK

В этом разделе вы запустите инструментальный тест на устройстве Test Lab по умолчанию — Pixel 3 с уровнем API 28. Если вы хотите использовать другое устройство, проверьте доступные устройства .

Используя приложение и тестовые APK-файлы, созданные вами в разделе «Создание APK-приложения для Android и тестирующий APK», запустите тест Android Instrumentation, используя следующую команду:

gcloud firebase test android run \
  --type instrumentation \
  --app app/build/outputs/apk/debug/app-debug.apk \
  --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

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

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

  • Сводка gcloud — после завершения теста интерфейс командной строки gcloud печатает базовую сводку результатов теста.
  • Код выхода gcloud — после завершения теста команда завершает работу с 0, если тест пройден. Если тест не пройден, команда завершается с ненулевым кодом выхода.
  • Консоль Firebase — интерфейс командной строки gcloud печатает ссылку на консоль Firebase. Ссылка соответствует соглашению об именах https://console.firebase.google.com/project/PROJECT_ID/testlab/... Дополнительные сведения см. в разделе Интерпретация результатов выполнения одного теста .
  • XML-файл JUnit — интерфейс командной строки gcloud печатает следующее:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]

test-lab-xxxxx/xxxxx — это сегмент облачного хранилища, в котором хранятся артефакты и результаты тестов. Чтобы найти XML-файл JUnit, содержащий результаты теста, откройте ссылку и перейдите к blueline-28-en-portrait/test_result_1.xml .

3. Настройка с помощью Jenkins CI

В этом разделе вы используете Jenkins CI, популярную систему CI, для запуска тестов с помощью Test Lab. Если вы хотите использовать другую систему CI, ознакомьтесь с передовыми рекомендациями по запуску больших наборов тестов и документацией для других систем CI, таких как Bitrise и Circle CI . Вы можете использовать Flank в качестве альтернативы gcloud CLI.

Включите интерфейс командной строки gcloud для Jenkins.

Прежде чем вы сможете использовать Test Lab с Jenkins, вы должны включить необходимые API и настроить учетную запись службы, которую Jenkins сможет использовать для аутентификации с помощью CLI gcloud.

Добавьте учетную запись службы Google Cloud для Jenkins.

Учетные записи служб — это ограниченные учетные записи, предназначенные для интеграции служб. Эти учетные записи обеспечивают детальный контроль над конкретными службами и не подвергаются проверкам на спам или запросам на ввод кода, которые в противном случае могли бы заблокировать ваши сборки CI.

Чтобы создать учетную запись службы, выполните следующие действия:

  1. Откройте страницу учетных записей служб в Google Cloud Console.
  2. Нажмите «Создать учетную запись службы» , добавьте имя и описание , а затем нажмите « Создать и продолжить» .
  3. В раскрывающемся списке «Выберите роль» выберите «Основной» , а затем — «Редактор» .
  4. Нажмите «Продолжить» , затем нажмите «Готово» .

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

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

  1. На странице «Учетные записи служб» в Google Cloud Console щелкните адрес электронной почты, связанный с созданной вами учетной записью.
  2. Выберите «Ключи» , затем нажмите «Добавить ключ» и «Создать новый ключ» .
  3. Выберите JSON , затем нажмите «Создать» .
  4. Когда вам будет предложено загрузить файл, нажмите «ОК». Загрузите файл в безопасное место на своем компьютере. Этот файл понадобится вам позже при настройке Jenkins.

Дополнительные сведения о создании учетных записей служб см. в разделе Создание учетной записи службы .

Включите необходимые API Google Cloud.

API облачного тестирования позволяет запускать тесты в инфраструктуре Google. Вы включили этот API после выполнения теста с помощью интерфейса командной строки gcloud. API результатов Cloud Tool позволяет программно получать доступ к результатам тестов.

  1. Откройте библиотеку API консоли разработчиков Google .
  2. В строке поиска в верхней части консоли Firebase введите имя каждого требуемого API ( API Cloud Testing API и API результатов облачного инструмента ). Появится страница обзора запрошенного API.
  3. Нажмите «Включить API» на странице обзора каждого API.

Установите и настройте Дженкинс

Вы можете установить и настроить Jenkins CI в Linux, macOS, Windows и многих других средах. Некоторые детали этой лаборатории кода относятся только к установке и запуску Jenkins CI в Linux, включая использование косой черты (/) в путях к файлам.

Чтобы загрузить и установить Jenkins на компьютер под управлением Linux или Windows, следуйте инструкциям по установке Jenkins . После установки Jenkins следуйте тем же инструкциям по установке Jenkins, чтобы завершить настройку и получить доступ к панели мониторинга Jenkins, используя http://localhost:8080 .

Проверьте установленные плагины

Jenkins поддерживает различные системы контроля версий. В этой лаборатории кода вы используете Git для запуска предыдущего теста. А чтобы получить больше удовольствия от работы с интерфейсом командной строки gcloud, вам необходимо установить плагин GCloud SDK.

  1. На панели управления Jenkins нажмите «Управление Jenkins» , а затем нажмите «Управление плагинами» .
  2. Найдите плагины Git и GCloud SDK и установите их (если они еще не установлены).

Настройте местоположение Android и Google Cloud SDK.

Теперь вы указываете Дженкинсу, где найти Google Cloud SDK и Android SDK.

Чтобы настроить Google Cloud и Android SDK для Jenkins, выполните следующие действия:

  1. На панели мониторинга Jenkins нажмите «Управление Jenkins» , а затем нажмите «Глобальная конфигурация инструмента» .
  2. в разделе Google Cloud SDK нажмите «Добавить Google Cloud SDK» .
  3. В поле «Имя» введите легко запоминающееся имя экземпляра Google Cloud SDK, например GCloud-SDK.
  4. Введите домашний каталог Google Cloud SDK, например /opt/google-cloud-sdk .
  5. Нажмите Сохранить .
  6. Настройте общесистемные свойства для Android и Google Cloud SDK, открыв Панель управления > Управление Jenkins > Настроить систему .
  7. Установите флажок «Переменные среды» и нажмите « Добавить» .
  8. В поле Имя введите ANDROID_HOME . В поле «Значение» введите местоположение вашего Android SDK, например /opt/Android/Sdk .
  9. Установите флажок «Местоположения инструментов» и нажмите « Добавить» . В раскрывающемся списке «Имя» выберите имя экземпляра Google Cloud SDK, который вы добавили в глобальной конфигурации инструмента.
  10. В поле «Главная» введите местоположение вашего Google Cloud SDK, например /opt/google-cloud-sdk .
  11. Нажмите Сохранить .

Добавьте учетные данные своей сервисной учетной записи в Jenkins.

Теперь вы добавляете учетные данные своей учетной записи службы CLI gcloud в Jenkins, чтобы Jenkins мог аутентифицироваться и успешно выполнять команды CLI gcloud.

  1. На панели управления Jenkins нажмите «Управление Jenkins» , а затем нажмите «Управление учетными данными» .
  2. В разделе «Хранилища, ограниченные Jenkins» щелкните ссылку (глобального) домена, затем нажмите « Добавить учетные данные» .
  3. В раскрывающемся списке «Тип» выберите «Аккаунт службы Google из закрытого ключа» .
  4. В поле «Имя проекта» введите имя проекта Firebase.
  5. Выберите ключ JSON , затем нажмите «Обзор» и перейдите к месту, где вы сохранили ключ своей учетной записи службы.
  6. Нажмите Создать .

Теперь вы готовы настроить автоматическую сборку Jenkins для Test Lab.

4. Запустите тесты Test Lab с помощью Jenkins CI.

Теперь, когда вы настроили Jenkins, давайте соберем все вместе и проведем тот же тест, используя Jenkins.

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

Создайте и настройте свой проект Jenkins.

Создайте проект для проведения непрерывного интеграционного тестирования вашего приложения с помощью Test Lab.

Создать проект Дженкинса

  1. Откройте панель управления Jenkins, перейдя по адресу http://localhost:8080 .
  2. На панели управления Jenkins нажмите «Новый элемент» .
  3. Введите имя своего проекта в поле «Имя элемента» и нажмите «Проект Freestyle» , чтобы создать проект, использующий единую конфигурацию сборки.
  4. Нажмите ОК . Чтобы завершить настройку проекта, последовательно заполните остальные разделы.

Настройка управления исходным кодом

  1. На вкладке «Управление исходным кодом» выберите Git .
  2. Введите https://github.com/android/testing-samples.git в поле URL-адрес репозитория .

Настройте среду сборки

Раздел «Среда сборки» позволяет настроить характеристики сборки. Включите аутентификацию Google Cloud, выполнив следующие действия:

  1. На вкладке «Среда сборки» установите флажок «Аутентификация GCloud SDK» и выберите имя установки, которое вы выбрали при добавлении информации об установке Google Cloud.
  2. В раскрывающемся списке «Учетные данные Google» выберите настроенные вами учетные данные сервисной учетной записи.

Добавьте шаги сборки Gradle для пересборки пакетов APK.

  1. Прокрутите вниз до раздела «Сборка» , нажмите « Добавить шаг сборки» , а затем выберите « Выполнить оболочку» .
  2. Добавьте шаг сборки для запуска следующих команд в главном каталоге вашего приложения:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Добавьте этап сборки Gcloud CLI в Jenkins.

Теперь вы готовы добавить в Jenkins этап сборки для запуска Test Lab с помощью командной строки gcloud CLI.

Чтобы добавить шаг сборки gcloud CLI, добавьте новый шаг сборки оболочки «Выполнение» и введите следующую команду:

gcloud config set project PROJECT_ID
gcloud firebase test android run \
--app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk
--test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

После завершения настройки проекта прокрутите страницу вниз и сохраните конфигурацию. Вы будете перенаправлены на домашнюю страницу нового проекта.

Запустите тесты с Jenkins

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

Чтобы запустить тест с Jenkins, выполните следующие действия:

  1. Чтобы запустить сборку вручную, нажмите «Построить сейчас» .
  2. Проверьте ход выполнения и результаты, щелкнув новую сборку > Вывод консоли .

Если вы не видите ошибок, поздравляем! Вы просто настроили проект и запустили тест на устройстве Pixel 2 одним щелчком мыши. Если вы столкнулись с ошибками, см. Устранение неполадок .

5. Передовые рекомендации по запуску больших наборов тестов

Если вы хотите выполнить множество одновременных тестов, следуйте этим рекомендациям, чтобы ваши тесты выполнялись быстро и надежно.

Увеличение охвата нескольких конфигураций устройств

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

  • Виртуальный Google Pixel 2 с уровнем API 30 в портретной ориентации и английской языковой версией.
  • Физический Samsung Galaxy S20 с уровнем API 29 в альбомной ориентации и французской локалью.
gcloud firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --device model=Pixel2,version=30,locale=en,orientation=portrait  \
  --device model=x1q,version=29,locale=fr,orientation=landscape

Используйте файл конфигурации YAML gcloud CLI.

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

Шард-тесты для параллельного выполнения

Сегментирование тестов делит набор тестов на подгруппы (осколки), которые выполняются отдельно и изолированно. Test Lab автоматически запускает каждый сегмент параллельно с использованием нескольких устройств, что позволяет Test Lab быстрее выполнять весь набор тестов. Дополнительные сведения см. в разделе Включение сегментирования .

Чтобы включить сегментирование, используйте gcloud beta и добавьте флаг –num-uniform-shards или –test-targets-for-shard к шагу сборки gcloud CLI. Например, чтобы разделить тесты на пять выполнения и запускать их параллельно, выполните следующие команды:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

Включить обнаружение нестабильности

Мобильные тесты часто могут быть нестабильными. Иногда тесты проходят успешно, а иногда могут не получиться, даже при одной и той же настройке. Вы можете определить, был ли неудачный тест нестабильным, используя флаг CLI –num-flaky-test-attempts gcloud. Этот флаг указывает, сколько раз следует повторить попытку выполнения теста, если один или несколько тестовых случаев по какой-либо причине не удались.

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

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-flaky-test-attempts 3

6. Поздравления

Поздравляем, вы успешно провели свой первый тест Test Lab с системой CI!

Вы создали приложение и протестировали APK-файлы, а также провели инструментальное тестирование с помощью Test Lab с использованием интерфейса командной строки gcloud. Вы также настраиваете проект Jenkins для автоматизации того же теста.

Теперь вы знаете ключевые шаги по интеграции Test Lab в вашу систему CI/CD.

Что дальше?

Узнайте , как настроить CI с помощью Firebase Emulator Suite.

Дальнейшее чтение

Справочная документация