В этом документе описывается, как запускать тесты непосредственно из командной строки. В этом документе предполагается, что вы уже знаете, как создавать приложения для Android и писать тесты для них. Подробнее о том, как создавать тесты для приложений…
Инструменты командной строки и задачи Gradle, описанные на этой странице, не зависят от набора инструментов интерфейса. Если вы хотите написать тесты интерфейса для Compose, ознакомьтесь со статьей Как тестировать макеты Compose. После того как вы напишете тесты, следуйте инструкциям в этом руководстве, чтобы запустить их из терминала или удаленной среды непрерывной интеграции.
Если вы создаете приложение с помощью системы сборки Gradle, плагин Android Gradle позволяет запускать тесты из проекта Gradle с помощью командной строки. Для более точного контроля вы можете запустить тесты через оболочку Android Debug Bridge (adb). Это может быть полезно при тестировании в среде непрерывной интеграции.
Чтобы узнать, как запускать автоматизированные инструментальные тесты из командной строки с помощью виртуальных устройств под управлением Gradle, прочитайте статью Масштабирование тестов с помощью устройств под управлением Gradle.
Как запускать тесты с помощью Gradle
Плагин Android Gradle позволяет запускать тесты из проекта Gradle с помощью командной строки.
В таблице ниже показано, как запускать тесты с помощью Gradle.
Таблица 1. Разные способы запуска тестов с помощью Gradle
| Тип модульного тестирования | Команда для выполнения | Место проведения тестирования |
|---|---|---|
| Локальное модульное тестирование |
Запустите задачу test:
|
Файлы результатов тестирования HTML:path_to_your_project/module_name/build/reports/tests/
каталог.
XML-файлы с результатами тестирования: |
| Инструментированное модульное тестирование |
Выполните задачу connectedAndroidTest:
|
Файлы результатов тестирования HTML:path_to_your_project/module_name/build/reports/androidTests/connected/
каталог.
XML-файлы с результатами тестирования: |
Gradle поддерживает сокращения названий задач.
Например, вы можете запустить задачу connectedAndroidTest, введя следующую команду:
./gradlew cATВы также можете запустить задачи Gradle check и connectedCheck. Эти задачи запускают локальные или инструментальные тесты, но включают другие проверки, добавленные другими плагинами Gradle.
Как запустить тесты для модуля
Задачи test и connectedAndroidTest выполняют тестирование каждого модуля в вашем проекте. Чтобы запустить тесты для определенного модуля, добавьте перед задачей test или connectedAndroidTest название модуля и двоеточие (:). Например, следующая команда запускает инструментальные тесты только для модуля mylibrary:
./gradlew mylibrary:connectedAndroidTestКак запустить тесты для варианта сборки
Задачи test и connectedAndroidTest выполняют тесты для каждого варианта сборки в вашем проекте. Вы можете настроить таргетинг на определенный вариант сборки, используя следующий синтаксис:
- Для локальных модульных тестов:
./gradlew testVariantNameUnitTest - Для инструментальных тестов:
./gradlew connectedVariantNameAndroidTest
Запуск определенных методов или классов тестирования
При запуске локального модульного тестирования Gradle позволяет выбирать определенные тесты с помощью флага --tests. Например, следующая команда запускает только тесты sampleTestMethod для указанного варианта сборки. Чтобы узнать больше о том, как использовать флаг --tests, ознакомьтесь с документацией Gradle по фильтрации тестов.
./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'
Как запускать тесты с помощью adb
При запуске тестов из командной строки с помощью Android Debug Bridge (adb) доступно больше вариантов выбора тестов, чем при использовании любого другого метода. Вы можете выбрать отдельные методы тестирования, отфильтровать тесты по специальной аннотации или задать параметры тестирования. Поскольку тестовый запуск полностью контролируется из командной строки, вы можете настраивать тестирование с помощью сценариев командной оболочки различными способами.
Чтобы запустить тест из командной строки, выполните команду adb shell. На устройстве или в эмуляторе откроется командная строка. В этой оболочке можно взаимодействовать с менеджером действий с помощью команды am и использовать ее подкоманду instrument для запуска тестов.
Чтобы сэкономить время, вы можете запустить оболочку adb, вызвать am instrument и указать флаги командной строки в одной строке ввода. Оболочка открывается на устройстве или эмуляторе, запускает тесты, выводит результаты и возвращается к командной строке на компьютере.
Чтобы запустить тест с помощью am instrument:
- Скомпилируйте или перекомпилируйте основное приложение и тестовый пакет.
- Установите тестовый пакет и основные файлы пакета Android (APK) на текущее устройство Android или эмулятор.
В командной строке введите:
adb shell am instrument -w <test_package_name>/<runner_class>где
<test_package_name>– название пакета Android вашего тестового приложения, а<runner_class>– название используемого вами класса Android Test Runner. Название пакета Android – это значение атрибута package элемента manifest в файле манифеста тестового пакета (AndroidManifest.xml).Класс Android Test Runner обычно выглядит так:
AndroidJUnitRunner.adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
Результаты тестирования появятся в STDOUT.
Флаги am instrument
Чтобы посмотреть список всех параметров, которые можно использовать с командой am instrument, выполните команду adb shell am help. Некоторые важные флаги описаны в таблице ниже.
Таблица 2. am instrument важных
пометок
| Флаг | Значение | Описание |
|---|---|---|
-w
|
(нет) |
Заставляет am instrument ждать завершения инструментирования, прежде чем завершить работу. Это позволит оставить оболочку открытой до завершения тестов. Этот параметр необходим для просмотра результатов тестирования.
|
-r
|
(нет) |
Выводит результаты в необработанном формате. Используйте этот флаг, если хотите собирать данные об эффективности, чтобы они не форматировались как результаты тестирования. Этот флаг предназначен для использования с флагом -e perf true (описан в разделе Параметры инструмента am).
|
-e
|
<test_options>
|
Предоставляет параметры тестирования в виде пар "ключ-значение". Инструмент am instrument передает их указанному классу инструментовки с помощью метода onCreate(). Вы можете указать несколько элементов -e <test_options>. Ключи и значения описаны в разделе Параметры am instrument. Эти пары "ключ-значение" можно использовать только с AndroidJUnitRunner.
При использовании с другими классами они не будут работать.
|
--no-hidden-api-checks
|
(нет) | Отключает ограничения на использование скрытых API. Подробнее о том, что такое скрытые API и как они могут повлиять на ваше приложение, читайте в статье Ограничения на интерфейсы, не относящиеся к SDK. |
Список инструментов
Инструмент am instrument передает параметры тестирования в AndroidJUnitRunner или InstrumentationTestRunner в виде пар "ключ-значение" с помощью флага -e. Синтаксис:
-e <key> <value>
Некоторые ключи могут принимать несколько значений. Несколько значений можно указать в виде списка, разделенного запятыми. Например, в этом вызове AndroidJUnitRunner для ключа package указано несколько значений:
adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunnerВ таблице ниже перечислены пары "ключ-значение", которые можно использовать с инструментом тестирования.
Таблица 3. Пары "ключ-значение" флага -e для использования с исполнителем тестов
| Ключ | Значение | Описание |
|---|---|---|
package
|
<Java_package_name>
|
Полное название пакета Java для одного из пакетов в тестовом приложении. Будет выполнен любой класс тестового сценария, использующий это название пакета. Обратите внимание, что это не название пакета Android. Тестовый пакет имеет одно название пакета Android, но может содержать несколько пакетов Java. |
class |
<class_name> |
Полное имя класса Java для одного из классов тестовых сценариев. Будет выполнен только этот класс тестовых случаев. |
<class_name>#method name |
Полное имя класса тестового сценария и один из его методов. Выполняется только этот метод. Обратите внимание на символ решетки (#) между названием класса и названием метода. | |
size |
[small | medium | large]
|
Запускает метод тестирования, аннотированный по размеру. Аннотации: @SmallTest, @MediumTest и @LargeTest.
|
debug |
true |
Запускает тесты в режиме отладки. |
log |
true |
Загружает и регистрирует все указанные тесты, но не запускает их. Информация о тесте появится в STDOUT. Используйте этот фильтр, чтобы проверить сочетания других фильтров и спецификаций тестирования.
|
emma |
true |
Выполняет анализ покрытия кода EMMA и записывает выходные данные в /data/<app_package>/coverage.ec на устройстве. Чтобы переопределить местоположение файла, используйте ключ coverageFile, описанный в следующей записи.
Примечание. Для этого варианта требуется сборка тестового приложения с инструментами EMMA, которую можно создать с помощью цели |
coverageFile |
<filename> |
Переопределяет местоположение файла покрытия EMMA на устройстве, заданное по умолчанию. Укажите значение в виде пути и имени файла в формате UNIX.
Название файла по умолчанию описано в записи для ключа emma.
|
При использовании флага -e учитывайте следующее:
am instrumentвызываетonCreate(Bundle)сBundle, содержащим пары "ключ-значение".- Ключ
packageимеет приоритет над ключомclass. Если вы укажете пакет, а затем отдельно укажете класс в этом пакете, Android выполнит все тесты в пакете и проигнорирует ключ класса. - Ключи
funcиunitявляются взаимоисключающими.
Примеры использования
В разделах ниже приведены примеры использования am instrument для тестирования.
Они имеют следующую структуру:
- Название пакета Android тестового пакета –
com.android.demo.app.tests. - Два класса инструментальных тестов:
TestClass1, в котором содержится метод тестированияtestMethod1.TestClass2, который содержит методы тестированияtestMethod2иtestMethod3.
- Тестирование выполняет
AndroidJUnitRunner.
Запустите весь пакет тестов.
Чтобы запустить все тестовые классы в тестовом пакете, введите:
adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerКак запустить все тесты в классе тестового случая
Чтобы запустить все тесты в классе TestClass1, введите:
adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerВыберите подгруппу тестов
Чтобы запустить все тесты в классе TestClass1 и методе testMethod3 в TestClass2, введите:
adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerДругие примеры использования можно найти в AndroidJUnitRunner
справочной документации по API.
Как посмотреть унифицированные отчеты о тестировании
Плагин Android Gradle предоставляет унифицированные задачи тестирования, которые генерируют HTML-панели, объединяющие результаты модульных и инструментальных тестов.
Требования
- Плагин Android Gradle версии 9.5.0-alpha05 или более поздней.
Чтобы запустить все наборы тестов, выполните одну из следующих задач:
| Область действия отчета | Команда | Описание | Местоположение ошибки |
|---|---|---|---|
| Текущий модуль | ./gradlew :module_name:testAllSuites --continue |
Создает единый отчет о тестировании для текущего модуля, объединяя результаты модульного и инструментального тестирования. | path_to_your_project/module_name/build/reports/testAllSuites/test-report/ |
| Текущий модуль и зависимости | ./gradlew :module_name:testAllSuitesWithDependencies --continue |
Создает единый отчет о тестировании для текущего модуля и его зависимостей библиотеки, объединяя результаты модульного и инструментального тестирования. | path_to_your_project/module_name/build/reports/testAllSuitesWithDependencies/test-report/ |