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 FrameworksServicesTestsatest CtsVideoTestCases
Модуль:Класс
Для запуска отдельного класса внутри модуля используйте Module:Class . Module аналогичен описанному в разделе «Имя модуля» . Class — это имя тестового класса в файле .java , которое может быть как полным именем класса, так и базовым именем.
Примеры:
atest CtsVideoTestCases:VideoEncoderDecoderTestatest FrameworksServicesTests:ScreenDecorWindowTestsatest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Название класса
Чтобы запустить отдельный класс без явного указания имени модуля, используйте имя класса.
Примеры:
atest ScreenDecorWindowTestsatest 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-runatest -t test-to-run
Запуск определенных методов
Atest поддерживает запуск определенных методов внутри тестового класса. Хотя для этого необходимо скомпилировать весь модуль, это сокращает время, необходимое для запуска тестов. Для запуска определенных методов укажите класс, используя любой из поддерживаемых способов идентификации класса (модуль:класс, путь к файлу и т. д.), и добавьте имя метода:
atest reference-to-class#method1
При указании нескольких методов разделяйте их запятыми:
atest reference-to-class#method1,method2,method3
Примеры:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecorsatest 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 --iterationsatest 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-valueatest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Варианты передачи данных для определенного типа или класса бегуна:
atest test-to-run -- --test-arg test-class:option-name:option-valueatest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Для получения дополнительной информации о параметрах, предназначенных только для тестирования, см. раздел «Передача параметров модулям» .