Запуск тестов (Атест)

Atest — это инструмент командной строки, позволяющий пользователям создавать, устанавливать и запускать тесты Android локально, значительно ускоряя повторный запуск тестов без необходимости знания параметров командной строки тестовой среды Trade Federation . На этой странице объясняется, как использовать Atest для запуска тестов Android.

Общую информацию о написании тестов для Android см. в разделе «Тестирование платформы Android» .

Для получения информации об общей структуре Atest обратитесь к Руководству разработчика Atest .

Для получения информации о запуске тестов в файлах TEST_MAPPING с помощью Atest см. раздел «Запуск тестов в файлах TEST_MAPPING» .

Чтобы добавить функцию в Atest, следуйте рабочему процессу разработчика Atest .

Настройте свою среду

Для настройки среды Atest следуйте инструкциям в разделах «Настройка среды» , «Выбор целевого объекта» и «Сборка кода» .

Основное использование

Команды тестирования имеют следующий вид:

atest test-to-run [optional-arguments]

Необязательные аргументы

В таблице ниже перечислены наиболее часто используемые аргументы. Полный список доступен по atest --help .

Вариант Длинный вариант Описание
-b --build Создает тестовые цели. (по умолчанию)
-i --install Устанавливает тестовые файлы (APK) на устройство. (по умолчанию)
-t --test Запускает тесты. (по умолчанию)
-s --serial Выполняет тесты на указанном устройстве. За один раз можно протестировать только одно устройство.
-d --disable-teardown Отключает разборку и очистку тестов.
--dry-run Имитация запуска тестов без фактической сборки, установки или выполнения тестов.
-m --rebuild-module-info Принудительно пересобирает файл module-info.json .
-w --wait-for-debugger Ожидает завершения работы отладчика перед выполнением.
-v --verbose Отображает лог уровня отладки (DEBUG).
--iterations Цикл выполняет тесты до достижения максимального количества итераций (по умолчанию 10).
--rerun-until-failure [COUNT=10] Повторно запускает все тесты до тех пор, пока не произойдет ошибка или не будет достигнуто максимальное количество итераций (по умолчанию 10).
--retry-any-failure [COUNT=10] Повторно запускает неудачные тесты до тех пор, пока они не пройдут успешно или не будет достигнуто максимальное количество итераций (по умолчанию 10).
--start-avd Автоматически создает AVD и запускает тесты на виртуальном устройстве.
--acloud-create Создает виртуальный виртуальный сервер (AVD) с помощью команды acloud .
--[CUSTOM_ARGS] Задает пользовательские аргументы для средств запуска тестов.
-a --all-abi Выполняет тесты для всех доступных архитектур устройств.
--host Выполняет тест полностью на хосте без подключения к устройству.
Примечание: Запуск теста хоста, требующего устройства с --host , завершится ошибкой.
--history Отображает результаты тестов в хронологическом порядке.
--latest-result Выводит на экран последний результат теста.

Для получения дополнительной информации о параметрах -b , -i и -t см. раздел «Укажите шаги: сборка, установка или запуск» .

Укажите тесты

Для запуска тестов укажите один или несколько тестов, используя один из следующих идентификаторов:

  • Название модуля
  • Модуль:Класс
  • Название класса
  • Интеграционный тест Tradefed
  • Путь к файлу
  • Название пакета

Разделяйте ссылки на несколько тестов пробелами, например, так:

atest test-identifier-1 test-identifier-2

Название модуля

Для запуска всего тестового модуля используйте его имя. Введите имя так, как оно указано в переменных LOCAL_MODULE или LOCAL_PACKAGE_NAME в файле Android.mk или Android.bp этого теста.

Примеры:

atest FrameworksServicesTests
atest CtsVideoTestCases

Модуль:Класс

Для запуска отдельного класса внутри модуля используйте Module:Class . Module аналогичен описанному в разделе «Имя модуля» . Class — это имя тестового класса в файле .java , которое может быть как полным именем класса, так и базовым именем.

Примеры:

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

Название класса

Чтобы запустить отдельный класс без явного указания имени модуля, используйте имя класса.

Примеры:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Интеграционный тест Tradefed

Для запуска тестов, интегрированных непосредственно в TradeFed (не являющихся модулями), введите имя так, как оно отображается в выводе команды ` tradefed.sh list configs . Например:

Для запуска теста reboot.xml :

atest example/reboot

Для запуска теста native-benchmark.xml :

atest native-benchmark

Путь к файлу

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

Запустить модуль

В следующих примерах показаны два способа запуска модуля CtsVideoTestCases с использованием пути к файлу.

Запуск из repo-root :

atest cts/tests/video

Запуск из repo-root/cts/tests/video :

    atest .

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

В следующем примере показано, как запустить определенный класс в модуле CtsVideoTestCases , используя путь к файлу.

Из repo-root :

    atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

Запустите интеграционный тест

В следующем примере показано, как запустить интеграционный тест, используя путь к файлу из repo-root Android:

    atest tools/tradefederation/contrib/res/config/example/reboot.xml

Название пакета

Atest поддерживает поиск тестов по имени пакета.

Примеры:

    atest com.android.server.wm
    atest com.android.uibench.janktests

Укажите шаги: Сборка, установка или запуск.

Используйте параметры -b , -i и -t чтобы указать, какие шаги следует выполнить. Если параметр не указан, будут выполнены все шаги.

  • Только цели сборки: atest -b test-to-run
  • Запускайте только тесты: atest -t test-to-run
  • Установите APK-файл и запустите тесты: atest -it test-to-run
  • Соберите и запустите, но не устанавливайте: atest -bt test-to-run

Atest может принудительно пропустить этап очистки или завершения работы теста. Многие тесты, такие как CTS, очищают устройство после выполнения теста, поэтому попытка повторного запуска теста с -t завершится неудачей без параметра --disable-teardown . Используйте -d перед -t чтобы пропустить этап очистки теста и выполнить итеративное тестирование.

atest -d test-to-run
atest -t test-to-run

Запуск определенных методов

Atest поддерживает запуск определенных методов внутри тестового класса. Хотя для этого необходимо скомпилировать весь модуль, это сокращает время, необходимое для запуска тестов. Для запуска определенных методов укажите класс, используя любой из поддерживаемых способов идентификации класса (модуль:класс, путь к файлу и т. д.), и добавьте имя метода:

atest reference-to-class#method1

При указании нескольких методов разделяйте их запятыми:

atest reference-to-class#method1,method2,method3

Примеры:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

Следующие два примера демонстрируют предпочтительные способы запуска одного метода, testFlagChange . Эти примеры предпочтительнее, чем использование только имени класса, поскольку указание модуля или местоположения Java-файла позволяет Atest гораздо быстрее найти тест.

Использование модуля:класса:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Из repo-root :

atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange

Из разных классов и модулей можно запускать несколько методов:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Запуск нескольких классов

Для запуска нескольких классов разделяйте их пробелами так же, как и при запуске нескольких тестов. Atest эффективно компилирует и запускает классы, поэтому указание подмножества классов в модуле повышает производительность по сравнению с запуском всего модуля.

Для запуска двух классов в одном модуле:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

Для запуска двух классов в разных модулях:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

Запуск исполняемых файлов GTest

Atest может запускать бинарные файлы GTest. Используйте -a для запуска этих тестов для всех доступных архитектур устройств, которые в этом примере — armeabi-v7a (ARM 32-бит) и arm64-v8a (ARM 64-бит).

Пример входного теста:

atest -a libinput_tests inputflinger_tests

Чтобы выбрать конкретный исполняемый файл GTest для запуска, используйте двоеточие (:) для указания имени теста и решетку (#) для уточнения отдельного метода.

Например, для следующего определения теста:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Выполните следующую команду, чтобы указать весь тест:

atest inputflinger_tests:InputDispatcherTest

Или проведите индивидуальный тест, используя следующий способ:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Запускайте тесты в TEST_MAPPING

Atest может запускать тесты из файлов TEST_MAPPING .

Неявно запускайте тесты перед отправкой.

Запустите предварительные тесты в файлах TEST_MAPPING в текущем и родительском каталогах:

atest

Запускайте предварительные тесты в файлах TEST_MAPPING расположенных в каталоге /path/to/project и его родительских директориях:

atest --test-mapping /path/to/project

Запустить указанную группу тестов

Доступные тестовые группы: presubmit (по умолчанию), postsubmit , mainline-presubmit и all .

Запускайте тесты после отправки формы в файлах TEST_MAPPING в текущем и родительском каталогах:

atest :postsubmit

Запустите тесты из всех групп, указанных в файлах TEST_MAPPING:

atest :all

Запускайте тесты после отправки формы в файлах TEST_MAPPING, расположенных в каталоге /path/to/project и его родительских директориях:

atest --test-mapping /path/to/project:postsubmit

Запускайте основные тесты в файлах TEST_MAPPING, расположенных в каталоге /path/to/project и его родительских директориях:

atest --test-mapping /path/to/project:mainline-presubmit

Запускайте тесты в подкаталогах.

По умолчанию Atest ищет тесты только в файлах TEST_MAPPING (начиная с текущего или указанного каталога и заканчивая его родительскими каталогами). Если вы также хотите запускать тесты из файлов TEST_MAPPING в подкаталогах, используйте --include-subdirs , чтобы заставить Atest включить и эти тесты:

atest --include-subdirs /path/to/project

Выполняйте тесты итеративно.

Запускайте тесты в итерациях, передавая аргумент --iterations . Независимо от того, пройден тест или нет, Atest будет повторять его до достижения максимального количества итераций.

Примеры:

По умолчанию Atest выполняет 10 итераций. Количество итераций должно быть положительным целым числом.

atest test-to-run --iterations
atest test-to-run --iterations 5

Следующие подходы упрощают обнаружение нестабильных тестов:

Подход 1: Запускать все тесты до тех пор, пока не произойдет ошибка или не будет достигнуто максимальное количество итераций.

  • Остановить выполнение при возникновении ошибки или достижении 10-го (по умолчанию) раунда итерации.
    atest test-to-run --rerun-until-failure
    
  • Остановить выполнение при возникновении ошибки или достижении 100-го раунда итерации.
    atest test-to-run --rerun-until-failure 100
    

Подход 2: Запускать только неудачные тесты до тех пор, пока они не пройдут успешно или не будет достигнуто максимальное количество итераций.

  • Предположим, что test-to-run есть несколько тестовых случаев, и один из тестов не пройден. Запустите только тот тест, который не пройден, 10 раз (по умолчанию) или до тех пор, пока тест не будет пройден успешно.
    atest test-to-run --retry-any-failure
    
  • Прекратите выполнение неудачного теста, когда он пройдет успешно или достигнет 100-го раунда.
    atest test-to-run --retry-any-failure 100
    

Запустите тесты на AVD.

Atest может запускать тесты на только что созданном AVD. Запустите acloud create , чтобы создать AVD и собрать артефакты, а затем используйте следующие примеры для запуска тестов.

Запустите виртуальный виртуальный сервер (AVD) и выполните на нём тесты:

acloud create --local-instance --local-image && atest test-to-run

Запустите AVD в рамках тестового запуска:

atest test-to-run --acloud-create "--local-instance --local-image"

Для получения более подробной информации выполните acloud create --help .`.

Передайте параметры модулю.

Atest позволяет передавать параметры тестовым модулям. Чтобы добавить параметры командной строки TradeFed в ваш тестовый запуск, используйте следующую структуру и убедитесь, что ваши пользовательские аргументы соответствуют формату параметров командной строки TradeFed.

atest test-to-run -- [CUSTOM_ARGS]

Передайте параметры тестового модуля целевым подготовителям или средствам запуска тестов, определенным в файле конфигурации теста:

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

Варианты передачи данных для определенного типа или класса бегуна:

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

Для получения дополнительной информации о параметрах, предназначенных только для тестирования, см. раздел «Передача параметров модулям» .