Atest — это инструмент командной строки, позволяющий пользователям создавать, устанавливать и запускать тесты Android локально, что значительно ускоряет повторные запуски тестов без необходимости знания параметров командной строки Trade Federation Test Harvest . На этой странице объясняется, как использовать 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 — то же самое, что описано в разделе «Имя модуля» . 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 поддерживает запуск как модульных, так и интеграционных тестов, указав путь к тестовому файлу или каталогу. Atest также поддерживает запуск одного класса, указав путь к файлу Java этого класса. Поддерживаются как относительные, так и абсолютные пути.
Запустить модуль
В следующих примерах показаны два способа запуска модуля CtsVideoTestCases
с использованием пути к файлу.
Запустить из Android repo-root
:
atest cts/tests/video
Запустить из 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 поддерживает запуск определённых методов в тестовом классе. Хотя требуется сборка всего модуля, это сокращает время выполнения тестов. Чтобы запустить определённые методы, укажите класс любым из поддерживаемых способов (Module:Class, путь к файлу и т. д.) и добавьте имя метода:
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
Дополнительную информацию о параметрах, доступных только для тестирования, см. в разделе Передача параметров модулям .