На этой странице вы найдете помощь в устранении неполадок и ответы на часто задаваемые вопросы о запуске тестов с помощью Firebase Test Lab . Также задокументированы известные проблемы. Если вы не можете найти то, что ищете, или вам нужна дополнительная помощь, присоединитесь к каналу #test-lab в Firebase Slack или обратитесь в службу поддержки Firebase .
Поиск неисправностей
При выборе устройства с высоким уровнем производительности в каталоге Test Lab тесты могут запускаться быстрее. При низком уровне производительности выполнение тестов может занять больше времени. Если количество запускаемых тестов значительно превышает производительность выбранных устройств, выполнение тестов может занять больше времени.
Тестирование на любом уровне производительности устройства может занять больше времени по следующим причинам:
- Трафик, влияющий на доступность устройства и скорость тестирования.
- Сбои в работе устройств или инфраструктуры могут произойти в любое время. Чтобы проверить наличие сообщений о проблемах с инфраструктурой для Test Lab , см. панель состояния Firebase .
Чтобы узнать больше о емкости устройства в Test Lab , см. информацию о емкости устройства для Android и iOS .
Неоднозначные результаты тестирования часто возникают либо из-за отмены тестовых запусков, либо из-за ошибок в инфраструктуре.
Ошибки инфраструктуры возникают из-за внутренних проблем Test Lab , таких как ошибки сети или неожиданное поведение устройств. Test Lab внутренне прерывает выполнение тестов, которые приводят к ошибкам инфраструктуры несколько раз, прежде чем сообщить о неубедительном результате; однако вы можете отключить эти повторные попытки с помощью failFast .
Чтобы определить причину ошибки, выполните следующие действия:
- Проверьте наличие известных сбоев на панели мониторинга состояния Firebase .
Повторите тест в Test Lab , чтобы убедиться в его воспроизводимости.
Попробуйте запустить тест на другом устройстве или на другом типе устройства, если это применимо.
Если проблема сохраняется, свяжитесь с командой Test Lab в канале #test-lab в Firebase Slack.
Использование сегментирования может увеличить время выполнения тестов, если указанное вами количество сегментов превышает количество устройств, доступных для использования в Test Lab . Чтобы избежать этой ситуации, попробуйте переключиться на другое устройство. Дополнительную информацию о выборе другого устройства см. в разделеЕмкость устройства .
После отправки запроса на тестирование ваше приложение сначала проходит проверку, переподпись и т.д., в рамках подготовки к запуску тестов на устройстве. Обычно этот процесс занимает менее нескольких секунд, но на него могут влиять такие факторы, как размер вашего приложения.
После подготовки вашего приложения планируется выполнение тестов, которые остаются в очереди до тех пор, пока устройство не будет готово его запустить. До завершения всех тестовых запусков статус матрицы будет «Ожидание» (независимо от того, находятся ли тестовые запуски в очереди или активно выполняются).
После завершения выполнения теста тестовые артефакты загружаются с устройства, обрабатываются и выгружаются в Cloud Storage . Длительность этого этапа может зависеть от количества и размера артефактов.
Устранение неполадок, специфичных для Android.
Артефакты выполнения тестов (такие как снимки экрана и файлы журналов) хранятся в Google Cloud Storage и напрямую отображаются в консоли Firebase . Если ваши тесты выполнялись в течение последних 90 дней, убедитесь, что вам назначены роли на уровне проекта (владелец проекта, редактор проекта или пользователь, просматривающий проект). Также убедитесь, что для вашего проекта или организации не включена функция Cloud Audit Logging.
Если выполнение теста было произведено более 90 дней назад, скорее всего, тестовые артефакты были автоматически удалены. Вы можете проверить конфигурацию хранилища результатов, перейдя на вкладку «Результаты теста» на панели управления Test Lab . По умолчанию хранилище результатов настроено на хранение объектов в течение 90 дней.
Чтобы дольше сохранять результаты тестирования, выполните команду gcloud firebase test android run с флагом --results-bucket и укажите имя хранилища результатов. Для получения дополнительной информации посетите справочную документацию по команде gcloud firebase test android run .
При запуске инструментальных тестов вы можете увидеть ошибки, указывающие на неполные результаты, содержащие сообщения типа Test run failed to complete. Expected x tests, received y (где y меньше x )». Эта ошибка означает, что Test Lab не смог проанализировать logcat на наличие маркеров начала или конца тестовых случаев, которые обычно генерируются AndroidJUnitRunner .
Ниже перечислены распространенные причины этой проблемы:
| Описание проблемы | Возможное решение |
|---|---|
| Тестовый случай не был выполнен из-за превышения времени ожидания. Если общая продолжительность тестов превышает указанное вами время ожидания или превышает максимальное время ожидания , Test Lab отменяет остальные тестовые случаи. |
|
| Тестовый случай не завершился из-за преждевременного завершения или зависания. Преждевременное завершение может быть вызвано необработанным исключением или ошибкой утверждения. Тестовые случаи могут застрять в бесконечном цикле или не иметь возможности продолжить выполнение, например, если приложение не отображает правильное представление, и тестовый случай не может выполнить действие в пользовательском интерфейсе. | Просмотрите видео и logcat , чтобы выяснить, на каком этапе остановился тест. |
Пользовательский средство запуска тестов (включая расширение AndroidJUnitRunner) неожиданно завершился с ошибкой или записал в logcat неожиданные маркеры начала или конца тестового случая. | Проверьте код вашего средства запуска тестов. |
В logcat записывалось чрезмерное количество логов, что приводило к переполнению буфера или сбою процесса logcat . | Сократите количество записей в logcat . |
| Тестируемое приложение выдало ошибку. | Отладьте ваше приложение. |
Часто задаваемые вопросы (FAQ)
Firebase Test Lab предлагает бесплатные квоты для тестирования на устройствах и для использования облачных API. Обратите внимание, что квота на тестирование использует стандартный тарифный план Firebase, в то время как квоты на облачные API — нет.
квота тестирования
Квоты на тестирование определяются количеством устройств, используемых для запуска тестов. План Firebase Spark имеет фиксированную квоту на тестирование, предоставляемую пользователям бесплатно. Для плана Blaze ваши квоты могут увеличиться, если использование Google Cloud со временем возрастет. Если вы достигли своей квоты на тестирование, подождите до следующего дня или перейдите на план Blaze, если вы в настоящее время используете план Spark. Если вы уже используете план Blaze, вы можете запросить увеличение квоты. Для получения дополнительной информации см. раздел «Квота на тестирование» .
Вы можете отслеживать использование квоты на тестирование в консоли Google Cloud .
квота API для облачного тестирования
API Cloud Testing имеет два лимита квот: количество запросов в день на проект и количество запросов каждые 100 секунд на проект. Вы можете отслеживать использование в консоли Google Cloud .
квота API результатов облачных инструментов
API результатов Cloud Tool имеет два ограничения по количеству запросов в день на проект и по количеству запросов каждые 100 секунд на проект. Вы можете отслеживать использование в консоли Google Cloud .
Для получения дополнительной информации об ограничениях API обратитесь к разделу «Квоты Cloud API для Test Lab . Если вы достигли квоты API:
Запрос на увеличение квот можно отправить, отредактировав квоты непосредственно в консоли Google Cloud (обратите внимание, что большинство лимитов по умолчанию установлены на максимальное значение), или
Чтобы запросить увеличение квот на использование API, заполните форму запроса в консоли Google Cloud или свяжитесь со службой поддержки Firebase .
Из бэкэнда вы можете определить, поступает ли трафик с тестовых устройств, размещенных в Firebase, сравнив исходный IP-адрес с нашими диапазонами IP-адресов .
Test Lab не работает с VPC-SC, который блокирует копирование приложений и других тестовых артефактов между внутренним хранилищем Test Lab и хранилищами результатов пользователей.
Для выявления нестабильного поведения в ваших тестах мы рекомендуем использовать--num-flaky-test-attemptsопция. Повторные запуски Deflake оплачиваются или учитываются в вашей ежедневной квоте так же, как и обычные тестовые запуски.
Учитывайте следующее:
- При обнаружении ошибки весь процесс выполнения теста запускается заново. Повторная попытка только неудачно завершившихся тестов не предусмотрена.
- Повторные попытки Deflake планируются на одновременное выполнение, но параллельное выполнение не гарантируется, например, когда трафик превышает количество доступных устройств.
Часто задаваемые вопросы, относящиеся к iOS
Хотя некоторые из этих пунктов включены в наши планы, в настоящее время мы не можем гарантировать поддержку этих платформ для тестирования и разработки приложений.
Подробная информация об устройстве доступна через API и может быть получена из клиента gcloud с помощью команды describe :
gcloud firebase test ios models describe MODEL
В Test Lab для iOS функция сегментирования тестов изначально не поддерживается. Однако для сегментирования тестовых случаев iOS можно использовать клиент Flank .
Это работает путем установки ключа и значений OnlyTestIdentifiers в файле .xctestrun . Дополнительные сведения см. в man странице xcodebuild.xctestrun .
В iOS 18 и более поздних версиях мы не можем поддерживать отображение видео в результатах поиска.
Часто задаваемые вопросы, относящиеся к Android.
Да! Test Lab поддерживает Google Pixel Watch. Теперь вы можете запускать тесты своего автономного приложения Wear на часах Google Pixel Watch. Чтобы узнать больше об устройствах Test Lab , см. раздел «Тестирование на доступных устройствах» .
Да! Test Lab поддерживает планшеты Google Pixel и Google Pixel Fold. Вы можете запускать тесты на своих автономных физических устройствах. Чтобы узнать больше об устройствах Test Lab , см. раздел «Тестирование на доступных устройствах» .
Если вы тестируете свое приложение в Firebase или запускаете тесты для отчета перед запуском в Play Console, вы можете определить, выполняется ли тест на устройстве, размещенном в Firebase, проверив системное свойство firebase.test.lab в файле MainActivity . Затем вы можете выполнить дополнительные операторы на основе логического значения параметра testLabSetting . Для получения дополнительной информации см. раздел «Измененное поведение тестов» .
Хотя некоторые из этих пунктов есть в наших планах, в настоящее время мы не можем гарантировать поддержку этих платформ тестирования и разработки приложений. Однако, если вы создали свое приложение с помощью фреймворка, поддерживающего Espresso (например, Flutter), вы можете написать инструментальный тест с использованием Espresso , а затем запустить его в Test Lab .
Test Lab не поддерживает явное обфускацию или деобфускацию. Хотя приложение, скорее всего, будет работать, любые обфусцированные данные приложения, такие как трассировка стека, будут отображаться в логах как обфусцированные.
Да! Вы можете протестировать свое складное устройство в сложенном состоянии и положениях .
Складные устройства могут находиться в различных сложенных состояниях, например, в полностью открытом ( FLAT ) или HALF_OPENED ) (промежуточное состояние между полностью открытым и полностью закрытым).
Положения, с другой стороны, определяются конкретной ориентацией устройства и его состоянием в сложенном виде. Например, положение на столешнице, которое представляет собой HALF_OPENED состояние в горизонтальной ориентации, или положение в виде книги, которое представляет собой HALF_OPENED состояние в вертикальной ориентации.
Если вы проводите инструментальные тесты, вы можете использовать библиотеку Jetpack WindowManager и следовать документации по тестированию вашего приложения на складных устройствах, чтобы проверить его в различных состояниях и положениях.
В качестве альтернативы, доступные состояния являются специфичными для устройства и могут быть изменены с помощью adb shell command cmd device_state .
- Чтобы вывести текущее состояние, выполните команду
adb shell cmd device_state state. - Чтобы установить или изменить текущее состояние, выполните команду
adb shell cmd device_state state <IDENTIFIER>. - Для сброса состояния выполните команду
adb shell cmd device_state state reset.` - Чтобы проверить доступные состояния, выполните команду
adb shell cmd device_state print-statesна складном устройстве.
Google Pixel Fold (идентификатор модели felix )
$ adb shell cmd device_state print-states Supported states: [ DeviceState{identifier=0, name='CLOSED', app_accessible=true}, DeviceState{identifier=1, name='HALF_OPENED', app_accessible=true}, DeviceState{identifier=2, name='OPENED', app_accessible=true}, DeviceState{identifier=3, name='REAR_DISPLAY_STATE', app_accessible=true}, ]
Samsung Galaxy Z Fold4 (идентификатор модели q4q )
$ adb shell cmd device_state print-states Supported states: [ DeviceState{identifier=0, name='CLOSE', app_accessible=true}, DeviceState{identifier=1, name='TENT', app_accessible=true}, DeviceState{identifier=2, name='HALF_FOLDED', app_accessible=true}, DeviceState{identifier=3, name='OPEN', app_accessible=true}, ]
В отличие от других продуктов Firebase, для использования Test Lab не требуется добавлять Firebase SDK. Если у вас еще нет приложения, вы можете загрузить APK-файл онлайн или собрать приложение и тестовый APK-файл из одного из примеров в репозитории AndroidX на GitHub . Обратите внимание, что для запуска роботизированного теста вам нужен только APK-файл вашего приложения, в то время как для инструментального теста требуется как приложение, так и тестовый APK-файл, собранные из исходного кода. Для получения дополнительной информации ознакомьтесь с информацией об инструментальных тестах .
Чтобы узнать больше о возможностях Test Lab , см. раздел «Начало тестирования Android с помощью Firebase Test Lab .
Тестирование на основе сравнения скриншотов (Screenshot-diff testing ) — это тестирование, в котором утверждения теста основаны на сравнении изображений экрана, полученных во время выполнения теста, с эталонными изображениями, представляющими ожидаемое поведение. Такие тесты могут быть менее надежными на некоторых типах устройств, чем на других. Мы рекомендуем использовать для таких тестов эмуляторы Arm ( *.arm ). Эмуляторы Arm используют образы, очень похожие или идентичные образам «универсальных» эмуляторов Android Studio.
Мы также рекомендуем изучить тестовые библиотеки, которые помогут сделать тесты скриншотов более надежными при наличии ожидаемых изменений.
Да! Виртуальные устройства обновляются при внесении следующих изменений:
- Обновление существующих изображений
- Прекращение поддержки более ранних уровней API
- Добавлены новые уровни API Android.
Чтобы включить отчеты о покрытии кода, добавьте coverage=true в поле environmentVariables . Если вы используете Android Test Orchestrator, вам потребуется указать каталог для хранения результатов покрытия кода:
--environment-variables coverage=true,coverageFilePath=/sdcard/Download/
Если вы не используете Orchestrator, вы можете указать путь к файлу:
--environment-variables coverage=true,coverageFile=/sdcard/Download/coverage.ec
Подробная информация об устройстве доступна через API и может быть получена из клиента gcloud с помощью команды describe :
gcloud firebase test android models describe MODEL
Известные проблемы
Роботизированное тестирование не может обойти экраны входа в систему, требующие от пользователя дополнительных действий помимо ввода учетных данных для авторизации, например, прохождения проверки CAPTCHA.
Известные проблемы, специфичные для iOS
Автоматический вход в систему с помощью учетной записи Google не поддерживается в тестах Robo для iOS+ (бета-версия).
Известные проблемы, специфичные для Android.
Robo test лучше всего работает с приложениями, использующими элементы пользовательского интерфейса из фреймворка Android UI (включая объекты View , ViewGroup и WebView ). Если вы используете Robo test для проверки приложений, использующих другие фреймворки пользовательского интерфейса, включая приложения, использующие игровой движок Unity, тест может завершиться, не пройдя дальше первого экрана.