В этом документе описывается, как запускать тесты непосредственно из командной строки. В этом документе предполагается, что вы уже знаете, как создать приложение для Android и написать тесты для него. Дополнительную информацию о том, как создавать тесты для вашего приложения, см. в разделе Тестирование приложений на Android .
Когда вы создаете свое приложение с использованием системы сборки 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
Вы также можете запустить check
задач Gradle и 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, который вы используете. Имя пакета Android — это значение атрибута package элемента манифеста в файле манифеста тестового пакета (AndroidManifest.xml
).Класс запуска тестов Android обычно называется
AndroidJUnitRunner
:adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
Результаты вашего теста появятся в STDOUT
.
флаги инструментов
Чтобы найти список всех флагов, которые можно использовать с командой 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 . Эти пары ключ-значение можно использовать только с AndroidJUnitRunner или с InstrumentationTestRunner и его подклассами. Использование их с любым другим классом не имеет никакого эффекта. |
--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 | Полное имя класса тестового примера и один из его методов. Выполняется только этот метод. Обратите внимание на решетку (#) между именем класса и именем метода. | |
func | true | Запускает все тестовые классы, расширяющие InstrumentationTestCase . |
unit | true | Запускает все тестовые классы, которые не расширяют InstrumentationTestCase или PerformanceTestCase . |
size | [ small | medium | large ] | Запускает метод тестирования, аннотированный по размеру. Аннотации: @SmallTest , @MediumTest и @LargeTest . |
perf | true | Запускает все тестовые классы, реализующие PerformanceTestCase . При использовании этой опции укажите флаг -r для am instrument , чтобы выходные данные сохранялись в необработанном формате и не переформатировались как результаты теста. |
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
Дополнительные варианты использования можно найти в справочнике по API AndroidJUnitRunner
.