1. Введение
Последнее обновление: 07.04.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. Вам нужно лишь отправить тесты в Test Lab и дождаться результатов.
Быстро и надежно
Одновременный запуск множества тестовых случаев может занять много времени, блокируя процессы непрерывной интеграции и непрерывной доставки (CI/CD). С помощью Test Lab вы можете легко разделить тесты на сегменты и запускать их на нескольких устройствах параллельно. Вы также можете обнаружить нестабильность — распространённую проблему мобильного тестирования.
Чему вы научитесь
- Как создавать тестовые артефакты
- Как запустить мобильный тест с помощью gcloud CLI
- Как настроить Jenkins CI
- Как запустить мобильные тесты с использованием Jenkins CI
- Как настроить тесты для масштабирования с помощью систем непрерывной интеграции
Эта лабораторная работа посвящена выполнению тестов. Нерелевантные концепции и блоки кода опущены и предоставлены для простого копирования и вставки.
Что вам понадобится
Если вы предпочитаете разрабатывать всё с нуля, вам понадобится Android Studio для запуска тестов Android или XCode для запуска тестов iOS. Или просто приходите сами, и мы предоставим артефакты.
2. Запустите тест с помощью gcloud CLI.
Создание APK-файла приложения для Android и его тестирование
Чтобы запустить тест с помощью Test Lab, начните с создания APK-файла приложения для Android и тестового APK-файла, содержащего инструментированные тесты для запуска на устройствах или эмуляторах. Если у вас уже есть работающая кодовая база, вы можете создать собственные APK-файлы или использовать BasicSample для 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
- Загрузите Google Cloud SDK , который включает в себя инструмент gcloud CLI.
- Убедитесь, что ваша установка обновлена:
gcloud components update
- Войдите в интерфейс командной строки gcloud, используя свою учетную запись Google:
gcloud auth login
- Настройте свой проект 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/...
Подробнее см. в статье Интерпретация результатов одного выполнения теста . - Файл JUnit XML — интерфейс командной строки 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, популярной системы непрерывной интеграции, для запуска тестов с помощью Test Lab. Если вы хотите использовать другую систему непрерывной интеграции, см. статью «Дополнительные рекомендации по запуску больших наборов тестов» и документацию по другим системам непрерывной интеграции, таким как Bitrise и Circle CI . Flank можно использовать в качестве альтернативы gcloud CLI.
Включить интерфейс командной строки gcloud для Jenkins
Прежде чем использовать Test Lab с Jenkins, необходимо включить требуемые API и настроить учетную запись службы, которую Jenkins сможет использовать для аутентификации с помощью интерфейса командной строки gcloud.
Добавьте учетную запись службы Google Cloud для Jenkins
Учётные записи служб — это ограниченные учётные записи, предназначенные для интеграции служб. Эти учётные записи обеспечивают детальный контроль над конкретными службами и не подвергаются проверкам на спам и запросам капчи, которые в противном случае могли бы блокировать ваши сборки непрерывной интеграции.
Чтобы создать учетную запись службы, выполните следующие действия:
- Откройте страницу «Учетные записи служб» в консоли Google Cloud.
- Нажмите «Создать учетную запись службы» , добавьте Имя и Описание , а затем нажмите «Создать и продолжить» .
- В раскрывающемся списке Выберите роль выберите Базовая , а затем выберите Редактор .
- Нажмите «Продолжить» , затем нажмите «Готово» .
Затем вы создаете и загружаете ключ аутентификации, который Jenkins может использовать для аутентификации в качестве созданной вами учетной записи службы.
Чтобы создать и загрузить ключ учетной записи службы, выполните следующие действия:
- На странице «Учетные записи служб» в консоли Google Cloud Console щелкните адрес электронной почты, связанный с созданной вами учетной записью.
- Выберите Ключи , затем нажмите Добавить ключ и Создать новый ключ .
- Выберите JSON , затем нажмите Создать .
- Когда вам будет предложено загрузить файл, нажмите «ОК». Загрузите файл в безопасное место на свой компьютер. Этот файл понадобится вам позже при настройке Jenkins.
Дополнительную информацию о создании учетных записей служб см. в разделе Создание учетной записи службы .
Включить требуемые API Google Cloud
API Cloud Testing позволяет запускать тесты в инфраструктуре Google. Вы включили этот API, когда выполнили задание «Запуск теста с помощью интерфейса командной строки gcloud». API Cloud Tool Results позволяет программно получать доступ к результатам тестирования.
- Откройте библиотеку API консоли разработчика Google .
- В строке поиска в верхней части консоли Firebase введите название каждого необходимого API ( Cloud Testing API и Cloud Tool Results API ). Откроется страница обзора запрошенного API.
- Нажмите «Включить API» на странице обзора каждого API.
Установка и настройка Jenkins
Вы можете установить и настроить Jenkins CI в Linux, macOS, Windows и многих других средах. Некоторые детали этой лабораторной работы относятся к установке и запуску Jenkins CI в Linux, включая использование слешей (/) в путях к файлам.
Чтобы загрузить и установить Jenkins на компьютер под управлением Linux или Windows, следуйте инструкциям по установке Jenkins . После установки Jenkins следуйте тем же инструкциям по установке Jenkins, чтобы завершить настройку и получить доступ к панели управления Jenkins по адресу http://localhost:8080 .
Проверьте установленные плагины
Jenkins поддерживает различные системы контроля версий. В этой лабораторной работе вы используете Git для выполнения предыдущего теста. Для более удобной работы с интерфейсом командной строки gcloud вам необходимо установить плагин GCloud SDK.
- На панели инструментов Jenkins нажмите «Управление Jenkins» , а затем нажмите «Управление плагинами» .
- Найдите плагины Git и GCloud SDK и установите их (если они еще не установлены).
Настройте расположение Android и Google Cloud SDK
Теперь укажите Jenkins, где найти Google Cloud SDK и Android SDK.
Чтобы настроить Google Cloud и Android SDK для Jenkins, выполните следующие действия:
- На панели инструментов Jenkins нажмите Управление Jenkins , а затем нажмите Глобальная конфигурация инструмента .
- в разделе Google Cloud SDK нажмите Добавить Google Cloud SDK .
- В поле Имя введите имя для экземпляра Google Cloud SDK, которое легко запомнить, например, GCloud-SDK.
- Введите домашний каталог Google Cloud SDK, например,
/opt/google-cloud-sdk
. - Нажмите «Сохранить» .
- Настройте общесистемные свойства для Android и Google Cloud SDK, открыв Панель управления > Управление Jenkins > Настроить систему .
- Установите флажок Переменные среды и нажмите Добавить .
- В поле «Имя» введите ANDROID_HOME . В поле «Значение» укажите расположение вашего Android SDK, например,
/opt/Android/Sdk
. - Установите флажок «Расположение инструментов» и нажмите « Добавить» . В раскрывающемся списке «Имя» выберите имя экземпляра Google Cloud SDK, добавленного в Global Tool Configuration.
- В поле «Домашняя страница» введите местоположение вашего Google Cloud SDK, например,
/opt/google-cloud-sdk
. - Нажмите «Сохранить» .
Добавьте данные своей учетной записи службы в Jenkins
Теперь добавьте данные учетной записи службы gcloud CLI в Jenkins, чтобы Jenkins мог выполнять аутентификацию и успешно запускать команды gcloud CLI.
- На панели управления Jenkins нажмите «Управление Jenkins» , а затем нажмите «Управление учетными данными» .
- В разделе «Хранилища, относящиеся к Jenkins» нажмите ссылку (глобальный) домен, затем нажмите «Добавить учетные данные» .
- В раскрывающемся списке Вид выберите Учетная запись службы Google из закрытого ключа .
- В поле «Название проекта» введите название вашего проекта Firebase.
- Выберите JSON-ключ , затем нажмите «Обзор» и перейдите к месту, где вы сохранили ключ своей учетной записи службы.
- Нажмите «Создать» .
Теперь вы готовы настроить автоматизированную сборку Jenkins для Test Lab.
4. Запуск тестов Test Lab с помощью Jenkins CI
Теперь, когда вы настроили Jenkins, давайте соберем все вместе и запустим тот же тест, используя Jenkins.
Вы можете настроить Jenkins для запуска автоматических сборок и тестирования при каждой проверке обновлений приложения. Вы также можете настроить Jenkins для периодического запуска сборок. Подробнее о настройке сборок в Jenkins см. в статье «Настройка автоматических сборок» .
Создайте и настройте свой проект Jenkins
Создайте проект для запуска непрерывного интеграционного тестирования вашего приложения с помощью Test Lab.
Создать проект Jenkins
- Откройте панель управления Jenkins, перейдя по адресу http://localhost:8080 .
- На панели инструментов Jenkins нажмите кнопку «Новый элемент» .
- Введите имя вашего проекта в поле Имя элемента и нажмите Проект Freestyle, чтобы создать проект, использующий единую конфигурацию сборки.
- Нажмите «ОК» . Чтобы завершить настройку проекта, заполните оставшиеся разделы по порядку.
Настроить управление исходным кодом
- На вкладке «Управление исходным кодом» выберите Git .
- Введите https://github.com/android/testing-samples.git в поле URL-адрес репозитория .
Настройте среду сборки
Раздел «Среда сборки» позволяет настроить характеристики сборки. Чтобы включить аутентификацию Google Cloud, выполните следующие действия:
- На вкладке «Среда сборки» установите флажок «Аутентификация GCloud SDK» и выберите имя установки, которое вы выбрали при добавлении информации об установке Google Cloud.
- В раскрывающемся списке «Учетные данные Google» выберите настроенные вами учетные данные учетной записи службы.
Добавить шаги сборки Gradle для пересборки пакетов APK
- Прокрутите вниз до раздела Сборка , нажмите Добавить шаг сборки , а затем выберите Выполнить оболочку .
- Добавьте шаг сборки для запуска следующих команд в основном каталоге вашего приложения:
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, добавьте новый шаг сборки Execute shell и введите следующую команду:
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 CLI.
Чтобы запустить тест с помощью Jenkins, выполните следующие действия:
- Чтобы запустить сборку вручную, нажмите кнопку «Собрать сейчас» .
- Проверьте ход выполнения и результаты, нажав на новую сборку > Вывод консоли .
Если ошибок нет, поздравляем! Вы только что настроили проект и запустили тест на устройстве Pixel 2 одним щелчком мыши. Если возникли ошибки, см. раздел «Устранение неполадок» .
5. Передовые методы запуска больших наборов тестов
Если вы хотите запустить много одновременных тестов, следуйте этим рекомендациям, чтобы гарантировать, что ваши тесты будут выполняться быстро и надежно.
Расширение охвата нескольких конфигураций устройств
Вы можете легко добавить несколько устройств на этап сборки gcloud CLI. Вы также можете проверить и выбрать доступные устройства, версии, локали и ориентации. Например, следующая команда запускает тесты на двух устройствах:
- Виртуальный 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
Используйте файл конфигурации gcloud CLI YAML
Если вы предпочитаете управлять аргументами централизованно или с помощью системы управления версиями, вы можете указать их в файле аргументов в формате YAML. Чтобы узнать, как использовать эту функцию, выполните команду gcloud topic arg-files
.
Тесты Shard будут выполняться параллельно
Шардинг тестов разделяет набор тестов на подгруппы (шарды), которые выполняются отдельно и изолированно. 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
Включить обнаружение неровностей
Мобильные тесты часто могут быть нестабильными. Иногда тесты проходят успешно, а иногда могут дать сбой, даже при одинаковых настройках. Вы можете определить, был ли проваленный тест нестабильным, используя флаг командной строки gcloud –num-flaky-test-attempts . Этот флаг определяет количество повторных попыток выполнения теста, если один или несколько тестовых случаев по какой-либо причине не пройдены.
Например, чтобы повторно запустить неудавшиеся тестовые случаи еще три раза после первоначального неудачного запуска, укажите следующее:
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 с использованием системы непрерывной интеграции!
Вы создали APK-файлы приложения и тестирования, а также провели инструментальный тест в Test Lab с использованием интерфейса командной строки gcloud. Вы также настроили проект Jenkins для автоматизации того же теста.
Теперь вы знаете основные этапы интеграции Test Lab в вашу систему CI/CD.
Что дальше?
Узнайте , как настроить CI с помощью Firebase Emulator Suite.
Дальнейшее чтение
- Начало тестирования с помощью систем непрерывной интеграции | Документация Firebase
- Начните тестирование с помощью gcloud CLI | Документация Firebase