Как протестировать с помощью 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 устройства), замените dimension в следующей команде на models, versions или locales:

    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 минут. Подробнее…

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

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