1. Введение
Последнее обновление: 2022-04-07
Как запускать мобильные тесты с системами 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
- Как настроить Дженкинс CI
- Как запускать мобильные тесты с помощью Jenkins CI
- Как настроить тесты для масштабирования с системами CI
Эта лаборатория кода посвящена запуску тестов. Нерелевантные концепции и блоки кода замалчиваются и предоставляются для простого копирования и вставки.
Что вам понадобится
Если вы предпочитаете создавать что-то с нуля, вам понадобится Android Studio для запуска теста Android или XCode для запуска теста iOS. Или просто приходите сами, а мы предоставим артефакты.
2. Запустите тест с помощью интерфейса командной строки gcloud.
Создайте APK приложения для Android и протестируйте APK
Чтобы запустить тест с помощью 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
После выполнения команд clone и build вы можете найти 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.
- Убедитесь, что ваша установка обновлена:
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/...
Дополнительные сведения см. в разделе Интерпретация результатов одного выполнения теста . - 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, популярную систему непрерывной интеграции, для запуска тестов с помощью Test Lab. Если вы хотите использовать другую систему непрерывной интеграции, см. раздел Дополнительные рекомендации по запуску больших наборов тестов и документацию для других систем непрерывной интеграции, таких как Bitrise и Circle CI . Вы можете использовать Flank в качестве альтернативы gcloud CLI.
Включить интерфейс командной строки gcloud для Jenkins
Прежде чем вы сможете использовать Test Lab с Jenkins, вы должны включить необходимые API и настроить учетную запись службы, которую Jenkins сможет использовать для аутентификации с помощью интерфейса командной строки gcloud.
Добавьте учетную запись службы Google Cloud для Jenkins
Учетные записи служб — это ограниченные учетные записи, предназначенные для интеграции служб. Эти учетные записи обеспечивают детальный контроль для определенных служб и не подлежат проверке на спам или запросам по капче, которые в противном случае могли бы заблокировать ваши сборки CI.
Чтобы создать учетную запись службы, выполните следующие действия:
- Откройте страницу сервисных аккаунтов в Google Cloud Console.
- Нажмите «Создать учетную запись службы» , добавьте имя и описание , а затем нажмите «Создать и продолжить» .
- В раскрывающемся списке Выберите роль выберите Базовый , а затем выберите Редактор .
- Нажмите «Продолжить» , затем нажмите «Готово» .
Затем вы создаете и загружаете ключ аутентификации, который Jenkins может использовать для аутентификации в качестве созданной вами учетной записи службы.
Чтобы создать и загрузить ключ служебной учетной записи, выполните следующие действия.
- На странице «Учетные записи служб» в Google Cloud Console щелкните адрес электронной почты, связанный с созданной вами учетной записью.
- Выберите «Ключи» , затем нажмите «Добавить ключ» и «Создать новый ключ» .
- Выберите JSON и нажмите «Создать» .
- Когда вам будет предложено загрузить файл, нажмите OK. Загрузите файл в безопасное место на вашем компьютере. Этот файл понадобится вам позже при настройке Jenkins.
Дополнительные сведения о создании учетных записей служб см. в разделе Создание учетной записи службы .
Включите необходимые Google Cloud API
Cloud Testing API позволяет запускать тесты в инфраструктуре Google. Вы включили этот API, когда завершили выполнение теста с помощью интерфейса командной строки gcloud. API результатов Cloud Tool позволяет программно получать доступ к результатам тестирования.
- Откройте библиотеку API консоли разработчиков Google .
- В строке поиска в верхней части консоли Firebase введите название каждого требуемого API ( API облачного тестирования и API результатов облачного инструмента ). Появится обзорная страница запрошенного API.
- Щелкните Включить 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.
- На панели инструментов Jenkins нажмите «Управление Jenkins» , а затем нажмите «Управление плагинами» .
- Найдите плагины Git и GCloud SDK и установите их (если они еще не установлены).
Настройте расположение вашего Android и Google Cloud SDK.
Теперь вы указываете Дженкинсу, где найти 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, открыв Dashboard > Manage Jenkins > Configure System .
- Установите флажок «Переменные среды» и нажмите «Добавить» .
- В поле Имя введите 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, перейдя по адресу http://localhost:8080 .
- На панели инструментов Jenkins щелкните New Item .
- Введите имя своего проекта в поле Имя элемента и щелкните Проект Freestyle , чтобы создать проект, использующий единую конфигурацию сборки.
- Нажмите ОК . Чтобы завершить настройку проекта, последовательно заполните оставшиеся разделы.
Настройка управления исходным кодом
- На вкладке «Управление исходным кодом» выберите Git .
- Введите https://github.com/android/testing-samples.git в поле URL-адрес репозитория .
Настроить среду сборки
Раздел Build Environment позволяет настроить характеристики сборки. Включите аутентификацию 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 и запустить тест, подобный ручному тесту, который вы запускали с помощью интерфейса командной строки gcloud.
Чтобы запустить тест с 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
.
Шард-тесты для параллельного запуска
Разделение тестов делит набор тестов на подгруппы (сегменты), которые выполняются отдельно изолированно. 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 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 с системой CI!
Вы создали приложение и тестировали APK, а также провели инструментальное тестирование с помощью Test Lab, используя интерфейс командной строки gcloud. Вы также настроили проект Jenkins для автоматизации того же теста.
Теперь вы знаете ключевые шаги по интеграции Test Lab в вашу систему CI/CD.
Что дальше?
Узнайте , как настроить непрерывную интеграцию с помощью Firebase Emulator Suite.
дальнейшее чтение
- Начать тестирование с системами CI | Документация Firebase
- Начните тестирование с помощью интерфейса командной строки gcloud | Документация Firebase