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