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

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

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

Информацию об общей структуре Atest см. в Руководстве разработчика Atest .

Информацию о запуске тестов в файлах TEST_MAPPING через Atest см. в разделе Запуск тестов в файлах TEST_MAPPING .

Чтобы добавить функцию в Atest, следуйте рабочему процессу разработчика 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 Пробный запуск Atest без фактического создания, установки или запуска тестов.
-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 — то же самое, что описано в Module name . 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 Android:

atest cts/tests/video

Запустить из Android repo-root/cts/tests/video :

    atest .

Провести тестовый класс

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

Из repo-root Android:

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

Проведите интеграционный тест

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

    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 Android:

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

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