Как протестировать с помощью Google Cloud CLI

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

Шаг 1. Настройте локальную среду Google Cloud SDK

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

  3. Убедитесь, что у вас установлена последняя версия и в ней есть команда gcloud firebase:
          gcloud components update
  4. Войдите в gcloud CLI, используя аккаунт Google:
          gcloud auth login
  5. Укажите проект Firebase в gcloud, где PROJECT_ID – это идентификатор проекта Firebase:
         gcloud config set project PROJECT_ID

Шаг 2. Запустите тестирование

Как запустить XCTest

  1. Загрузите ZIP-файл теста, выполнив следующую команду (если вы ещё не упаковали приложение, ознакомьтесь с разделом Упаковка XCTest):

    cd FOLDER_WITH_TEST_OUTPUT/Build/Products ; \
    zip -r MyTests.zip Debug-iphoneos YOUR_SCHEME_iphoneosDEPLOYMENT_TARGET-arm64.xctestrun
  2. Выберите параметры тестирования.

    Test Lab позволяет тестировать приложения на устройствах с разными версиями iOS, размерами экрана, ориентациями и региональными настройками. Эти конфигурации называются параметрами тестирования. Чтобы посмотреть варианты для каждого параметра (например, поддерживаемые версии Xcode для версии iOS на устройстве), замените models, versions или locales на dimension в следующей команде:

    gcloud firebase test ios dimension list

    С ориентацией экрана все проще: она может быть только portrait или landscape.

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

  3. Выбрав набор параметров тестирования, вы можете запустить тесты в Test Lab с помощью команды firebase test ios run. Для каждой комбинации параметров тестирования, которую вы хотите проверить, добавьте отдельный флаг --device:

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --device model=MODEL_ID_2,version=VERSION_ID_2,locale=LOCALE_2,orientation=ORIENTATION_2 \
     etc...

    Тест может завершиться неудачно из-за несовместимости между версией Xcode, с помощью которой он был создан, и версией Xcode, используемой по умолчанию в Test Lab. Чтобы указать поддерживаемую версию Xcode для теста, используйте флаг --xcode-version:

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --xcode-version=15

    Чтобы вам было проще находить матрицы тестов в консоли Firebase, вы можете присваивать им ярлыки с помощью флага --client-details matrixLabel="<label>", как показано в примере ниже.

    gcloud beta firebase test ios run --test PATH/TO/MyTests.zip \
      --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
      --client-details matrixLabel="my label"

Тестирование специальных прав доступа

Чтобы протестировать разрешения, для которых требуется явный идентификатор приложения, установите флаг --test-special-entitlements. Test Lab переподписывает приложение с новым идентификатором пакета, чтобы поддерживать специальные права. Убедитесь, что в ZIP-файле нет ресурсов, содержащих прямые ссылки на идентификатор пакета приложения.

Поддерживаемые лицензии:
  1. Push-уведомления apns-environment
  2. Личная VPN com.apple.developer.networking.vpn.api
Push-уведомления

Чтобы авторизовать запросы на отправку push-уведомлений, пользователи могут создавать веб-токены JSON, используя закрытый ключ подписи, а также идентификатор ключа C7FD9DJAA8 и идентификатор команды 9CKCGNNUQN. Сгенерированные токены действительны в течение часа, и их нужно обновлять каждые 60 минут. Подробнее о том, как установить подключение к APNs на основе токена…

Группы приложений

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

Как запустить тест с игровым циклом

Выполните команду gcloud beta firebase test ios run и используйте следующие флаги, чтобы настроить запуск:

Пометки для тестов с игровым циклом
--type

Обязательный параметр. Указывает тип тестирования iOS, которое вы хотите запустить. Вы можете указать типы тестирования xctest (по умолчанию) или game-loop.

--app

Обязательно. Абсолютный путь (GCS или файловая система) к IPA-файлу приложения. Этот флаг действителен только при запуске тестов игрового цикла.

--scenario-numbers

Циклы (сценарии), которые вы хотите запустить в приложении. Можно указать один цикл, список циклов или диапазон циклов. По умолчанию используется значение 1.

Например, --scenario-numbers=1-3,5 выполняет циклы 1, 2, 3 и 5.

--device-model

Физическое устройство, на котором вы хотите запустить тест. Ознакомьтесь со списком доступных устройств.

--timeout

Максимальная продолжительность тестирования. Вы можете указать целое число, обозначающее продолжительность в секундах, или целое число и перечисление, обозначающее продолжительность в более крупных единицах времени.

Пример:

  • --timeout=200 принудительно завершает тест, если он выполняется дольше 200 секунд.
  • --timeout=1h принудительно завершает тест, если он выполняется дольше часа.

Например, следующая команда запускает тест игрового цикла, который выполняет циклы 1, 4, 6, 7 и 8 на iPhone 8 Plus:

gcloud beta firebase test ios run
 --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8
 --device-model=iphone8plus

Дополнительную информацию о gcloud CLI можно найти в справочной документации.

Шаг 3 (необязательно). Автоматизируйте будущие тесты

Скрипты команд gcloud с Test Lab

Вы можете использовать сценарии командной строки или пакетные файлы, чтобы автоматизировать команды тестирования мобильных приложений, которые в противном случае вы бы запускали с помощью командной строки gcloud. Этот пример скрипта bash запускает XCTest с двухминутным тайм-аутом и сообщает, успешно ли завершился тестовый запуск:

if gcloud firebase test ios run --test MyTest.zip --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

Коды выхода скрипта

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

Код выхода Примечания
0 Все тесты пройдены.
1 Произошла общая ошибка. Возможные причины: файл с таким названием не существует или произошла ошибка HTTP/сети.
2 Тестирование завершено, так как были указаны неизвестные команды или аргументы.
10 Один или несколько тестовых сценариев (протестированных классов или методов классов) в рамках выполнения теста не пройдены.
15 Firebase Test Lab не удалось определить, была ли матрица тестов пройдена, из-за непредвиденной ошибки.
19 Матрица тестов была отменена пользователем.
20 Произошла ошибка инфраструктуры тестирования.

Шаг 4. Изучите результаты тестирования

После запуска теста вы получите ссылку на страницу Результаты тестирования. Тестирование может занять несколько минут в зависимости от количества выбранных конфигураций и установленного времени ожидания. После выполнения тестов вы можете посмотреть их результаты. Подробнее о том, как интерпретировать результаты тестирования, читайте в статье Анализ результатов Firebase Test Lab.

Следующий шаг

Прочитайте документацию по Google Cloud SDK, чтобы узнать о вариантах тестирования, которые общедоступны или находятся на стадии бета-тестирования.