Как тестировать код платформы с помощью atest

Android Studio для платформы (ASfP) интегрирована с atest и тестовыми модулями Soong, поэтому вы можете запускать и отлаживать тесты платформы на хост-компьютере с Linux, подключенном устройстве или виртуальном устройстве Cuttlefish из IDE.

Требования

  • Откройте проект ASfP, настроенный с помощью вашей контрольной точки AOSP и цели lunch.
  • Для тестирования устройств подключите физическое устройство или запустите виртуальное устройство Cuttlefish с соответствующей сборкой.

Запуск и отладка тестов

Запускать тестирование платформы и сеансы отладки можно в нескольких местах в ASfP:

  • Android.bp. Откройте файл Android.bp и нажмите Выполнить на панели рядом с любым тестовым модулем (*_test или *_test_host):
    • Выполнить. Доступно для всех типов тестовых модулей Soong (android_test, java_test_host, cc_test, rust_test, python_test, sh_test и android_robolectric_test).
    • Отладка. Доступно для модулей android_test (подключенных с помощью отладчика Java с использованием atest --wait-for-debugger) и тестовых модулей C++ или Rust (cc_test, cc_test_host, rust_test и rust_test_host, запущенных во встроенном отладчике LLDB ASfP).
  • Значки на полях исходного файла. Нажмите Выполнить рядом с тестовым классом или методом в исходном коде, чтобы запустить или отладить этот тест.@Test
  • Контекстное меню, вызываемое нажатием правой кнопки мыши. Нажмите правой кнопкой мыши на тестовый файл, класс, метод или модуль Android.bp и выберите Выполнить или Отладка.
  • Встроенный агент (ИИ в Android Studio). В окне инструментов Агент встроенный агент может запускать цели atest, чтобы проверять изменения после редактирования кода.
  • Встроенный терминал. Чтобы выполнять команды atest напрямую, откройте Вид > Окна инструментов > Терминал.

Умная настройка тестирования и отладка

Когда вы запускаете тест из желоба или контекстного меню, ASfP создает и настраивает конфигурацию запуска Soong Test, используя граф модуля Android.bp.

Отладка целей android_test Java и Kotlin

Нажмите на значок желоба рядом с модулем android_test в Android.bp или рядом с классом JUnit Java или Kotlin или методом @Test, а затем выберите Отладка "<Название теста>". Из желоба исходного файла ASfP выбирает ближайший модуль android_test, в srcs которого входит файл, и называет конфигурацию <module>, <module>:<SimpleClass> или <module>:<SimpleClass>#<method>.

ASfP запускает atest с --wait-for-debugger, считывает целевой атрибут package из AndroidManifest.xml модуля, ожидает завершения этого процесса на подключенном устройстве и подключает отладчик Java.

Отладка метода android_test из редактора

Отладка целевых объектов cc_test и rust_test в LLDB

Чтобы отладить тестовый модуль C++ или Rust (cc_test, cc_test_host, rust_test или rust_test_host), нажмите на значок Android.bp на полях и выберите Отладка <TestName>. ASfP запустит скомпилированный исполняемый файл теста во встроенном отладчике LLDB вместо того, чтобы запустить его через atest.

Как настроить конфигурацию тестового запуска Soong

Откройте Run > Edit Configurations (Запустить > Изменить конфигурации) и выберите конфигурацию Soong Test (Тест Soong), чтобы настроить сборку, развертывание и запуск тестов:

  • Автозаполнение модуля и навигация с помощью клавиши Android.bp. Поле Модуль автоматически заполняется на основе индексированных тестовых модулей Soong в вашем проекте. Нажмите Go to Android.bp рядом с полем, чтобы перейти к объявлению модуля в файле Android.bp.
  • Выполнить на устройстве или хосте (включая host_supported: true): ASfP оценивает правило модуля и его транзитивную цепочку defaults (host_supported, device_supported, enabled, target.android.enabled и target.host.enabled):
    • Тесты с двумя целями (cc_test и rust_test с host_supported: true). Доступны переключатели Устройство и Хост (по умолчанию выбран вариант Устройство). Устройство и Хост имеют собственные независимые шаблоны отладчика LLDB. Переключаясь между вариантами Устройство и Хост в разделе Запустить на, вы можете переключаться между конфигурацией удаленного устройства lldb-server и конфигурацией локального хоста, сохраняя настройки, заданные для каждого целевого объекта.
    • Тесты с одной целью. Если тест на C++ или Rust предназначен только для одной среды (например, только для устройства cc_test или только для хоста cc_test_host или rust_test_host), ASfP выбирает поддерживаемую цель и отключает неподдерживаемый переключатель с подсказкой: "<module> (<ruleType>) doesn't build for the host or device.".
  • Задачи перед запуском (создание встроенного тестового модуля и развертывание с помощью atest). Каждая конфигурация Soong Test по умолчанию включает две задачи Перед запуском:
    • Создать модуль тестирования нативных приложений – создает <module>-target (для устройства) или <module>-host (для хоста) перед запуском LLDB.
    • Развертывание с помощью atest. При отладке на устройстве запускает atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi>, чтобы Tradefed передал зависимости тестирования и выполнил подготовительные действия перед тем, как LLDB запустит двоичный файл. Наведите указатель на чип Развернуть с помощью atest, чтобы посмотреть точную команду atest. Чтобы ускорить итерацию после того, как зависимости уже будут на устройстве, удалите Deploy with atest, чтобы ASfP отправлял только тестовый двоичный файл. Если вы выберете Выполнить на: хост, ASfP автоматически пропустит Развернуть с помощью atest.
  • Изменение параметров и отладчик (карточки параметров LLDB). Используйте Изменение параметров, чтобы добавить необязательные поля конфигурации:
    • Аргументы программы (только для ОС, C++ и Rust): дополнительные аргументы, передаваемые непосредственно в двоичный файл cc_test или rust_test после фильтра --gtest_filter или libtest при отладке.
    • Аргументы atest (Тест). Дополнительные флаги, передаваемые в atest при запуске теста или при подготовке устройства с помощью Deploy with atest.
    • Отладчик (только для тестов C++ и Rust). Показывается, если Модуль является целью cc_test* или rust_test*. Включите карточки LLDB options (Параметры LLDB), например Stop on entry (Остановить при входе), Cache symbols across sessions (Кэшировать символы между сеансами), Load symbols on demand (Загружать символы по запросу) или With Rust visualizers (С визуализаторами Rust) для тестов Rust, нажмите Reset to defaults (Сбросить настройки по умолчанию), чтобы сбросить активный шаблон Device (Устройство) или Host (Хост), или добавьте Symbol directories (Каталоги символов), Init, Pre-run, Post-run, or Exit commands (Команды инициализации, перед запуском, после запуска или выхода) и Launch JSON (Запустить JSON) (DAP Settings (Настройки DAP)) в разделе Modify options > Debugger (Изменить параметры > Отладчик).

Конфигурация запуска теста Soong, в которой показаны задачи перед запуском, целевые устройства или хосты и параметры LLDB

Просмотр результатов

Ход выполнения тестов, статус (пройден или не пройден), трассировки стека и журналы устройств отображаются в реальном времени в окне инструментов Выполнить или Отладка в ASfP.

Советы по тестированию

  • Проводить целевые тесты. Тестируйте отдельные методы из редактора, не запуская весь набор тестов.
  • Используйте снимки Cuttlefish. При тестировании устройств на виртуальных устройствах Cuttlefish используйте снимки, чтобы восстанавливать чистое состояние устройства между запусками.
  • Проверьте журналы сборки Soong. Если тест не компилируется перед запуском, проверьте окно инструмента Soong на наличие диагностических данных компилятора.