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
Дополнительную информацию о параметрах, доступных только для тестирования, см. в разделе Передача параметров модулям .