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

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 . Модуль такой же, как описано в разделе «Имя модуля» . Класс — это имя тестового класса в файле .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

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

    atest .

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

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

Из repo-root Android:

    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 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 (32-разрядная версия ARM) и arm64-v8a (64-разрядная версия ARM).

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

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

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