Atest — это инструмент командной строки, который позволяет пользователям создавать, устанавливать и запускать тесты Android локально, что значительно ускоряет повторные запуски тестов, не требуя знания параметров командной строки тестового набора Trade Federation . На этой странице объясняется, как использовать Atest для запуска тестов Android.
Общие сведения о написании тестов для Android см. в разделе Тестирование платформы Android .
Для получения информации об общей структуре Atest обратитесь к Руководству разработчика Atest .
Информацию о выполнении тестов в файлах TEST_MAPPING с помощью Atest см. в разделе Запуск тестов в файлах TEST_MAPPING .
Чтобы добавить функцию в Atest, следуйте рабочему процессу Atest Developer Workflow .
Настройка вашей среды
Выполните шаги, описанные в следующих разделах, чтобы настроить среду Atest.
Установить переменную среды
Установите test_suite
для Soong или LOCAL_COMPATIBILITY_SUITE
для Make, следуя правилам сценария сборки упаковки .
Запустите envsetup.sh
Из корня проверки исходного кода Android запустите:
source build/envsetup.sh
Беги lunch
Запустите команду lunch
, чтобы вызвать меню поддерживаемых устройств. Найдите устройство и выполните эту команду.
Например, если у вас подключено устройство ARM, выполните следующую команду:
lunch aosp_arm64-eng
Это устанавливает различные переменные среды, необходимые для запуска Atest, и добавляет команду Atest в ваш $PATH
.
Основное использование
Команды Atest имеют следующий вид:
atest test-to-run [optional-arguments]
Необязательные аргументы
В следующей таблице перечислены наиболее часто используемые аргументы. Полный список доступен через atest --help
.
Вариант | Длинный вариант | Описание |
---|---|---|
-b | --build | Создает тестовые мишени. (дефолт) |
-i | --install | Устанавливает тестовые артефакты (APK) на устройство. (дефолт) |
-t | --test | Запускает тесты. (дефолт) |
-s | --serial | Запускает тесты на указанном устройстве. Одновременно можно тестировать одно устройство. |
-d | --disable-teardown | Отключает демонтаж и очистку теста. |
<c> | --info | Показывает соответствующую информацию об указанных целях, а затем завершает работу. |
<c> | --dry-run | Пробный запуск Atest без фактической сборки, установки или запуска тестов. |
-m | --rebuild-module-info | Принудительно перестраивает файл module-info.json . |
-w | --wait-for-debugger | Ожидает завершения отладчика перед выполнением. |
-v | --verbose | Отображает журнал уровня DEBUG. |
<c> | --iterations | Цикл запускает тесты до тех пор, пока не будет достигнута максимальная итерация. (10 по умолчанию) |
<c> | --rerun-until-failure [COUNT=10] | Повторно запускает все тесты до тех пор, пока не произойдет сбой или не будет достигнута максимальная итерация. (10 по умолчанию) |
<c> | --retry-any-failure [COUNT=10] | Повторно запускает неудачные тесты до тех пор, пока они не будут пройдены или не будет достигнута максимальная итерация. (10 по умолчанию) |
<c> | --start-avd | Автоматически создает AVD и запускает тесты на виртуальном устройстве. |
<c> | --acloud-create | Создает AVD с помощью команды acloud . |
<c> | --[CUSTOM_ARGS] | Указывает настраиваемые аргументы для запуска тестов. |
-a | --all-abi | Запускает тесты для всех доступных архитектур устройств. |
<c> | --host | Полностью запускает тест на хосте без устройства. Примечание. Запуск теста хоста, для которого требуется устройство с --host , завершится ошибкой. |
<c> | --flakes-info | Показывает результат теста с информацией о хлопьях. |
<c> | --history | Показывает результаты теста в хронологическом порядке. |
<c> | --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
с использованием пути к файлу.
Запускаем из Android repo-root
:
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
Запустите интеграционный тест
В следующем примере показано, как запустить интеграционный тест, используя путь к файлу из 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
.
Запустите тесты postsubmit в файлах 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 --include-subdirs
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
Дополнительные сведения о параметрах только для тестирования см. в разделе Параметры передачи модулям .