Atest – это инструмент командной строки, который позволяет пользователям создавать, устанавливать и запускать тесты Android локально, значительно ускоряя повторные запуски тестов без необходимости знать параметры командной строки тестовой программы Trade Federation. На этой странице рассказывается, как использовать Atest для запуска тестов Android.
Общую информацию о написании тестов для Android можно найти в разделе Тестирование платформы Android.
Общую информацию о структуре Atest можно найти в руководстве для разработчиков.
Информацию о том, как запускать тесты в файлах TEST_MAPPING с помощью Atest, можно найти в разделе Запуск тестов в файлах TEST_MAPPING.
Чтобы добавить функцию в Atest, следуйте рабочему процессу разработчика Atest.
Как настроить среду
Чтобы настроить среду Atest, следуйте инструкциям в разделах Настройка среды, Выбор цели и Сборка кода.
Как пользоваться отчетом
Команды Atest имеют следующий формат:
atest test-to-run [optional-arguments]
Необязательные аргументы
В таблице ниже перечислены наиболее часто используемые аргументы. Полный список доступен на странице atest --help.
| Option | Длинный вариант | Описание |
|---|---|---|
-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 FrameworksServicesTestsatest CtsVideoTestCases
Модуль:Класс
Чтобы запустить отдельный класс в модуле, используйте формат Module:Class. Модуль – то же, что и Название модуля. 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 с использованием пути к файлу.
Запуск с устройства Android repo-root:
atest cts/tests/video
Запуск из Android repo-root/cts/tests/video:
atest .
Как запустить тестовый класс
В примере ниже показано, как запустить определенный класс в модуле CtsVideoTestCases, используя путь к файлу.
На устройстве Android repo-root:
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-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 находить тест намного быстрее.
Использование Module:Class:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
На устройстве Android 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-bit) и arm64-v8a (ARM 64-bit).
Пример входных данных:
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.
Запустите тесты postsubmit в файлах TEST_MAPPING в текущем и родительском каталогах:
atest :postsubmit
Запустите тесты из всех групп в файлах TEST_MAPPING:
atest :all
Запустите тесты postsubmit в файлах 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
Как запускать тесты на виртуальных устройствах Android
Atest может запускать тесты на недавно созданном AVD. Выполните команду acloud create, чтобы создать AVD и артефакты сборки, а затем используйте приведенные ниже примеры для запуска тестов.
Запустите виртуальное устройство Android и проведите на нем тестирование.
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
Подробнее о параметрах, предназначенных только для тестирования, рассказывается в разделе Передача параметров модулям.