Тест из командной строки

В этом документе описывается, как запускать тесты непосредственно из командной строки. Предполагается, что вы уже знаете, как создавать приложения для Android и писать для них тесты. Дополнительную информацию о создании тестов для вашего приложения см. в разделе «Тестирование приложений на Android» .

При сборке приложения с использованием системы сборки Gradle плагин Android Gradle позволяет запускать тесты из проекта Gradle через командную строку. Для более точного контроля можно выбрать запуск тестов через оболочку Android Debug Bridge (adb) . Это может быть полезно при запуске тестов в среде непрерывной интеграции .

Чтобы узнать, как запускать автоматизированные инструментальные тесты из командной строки с использованием виртуальных устройств, которыми управляет Gradle, см. раздел «Масштабирование тестов с помощью управляемых устройств Gradle» .

Запуск тестов с помощью Gradle

Плагин Android Gradle позволяет запускать тесты из вашего проекта Gradle с помощью командной строки.

В таблице ниже приведено краткое описание того, как запускать тесты с помощью Gradle:

Таблица 1. Различные способы запуска тестов с помощью Gradle.

Тип модульного теста Команда для выполнения местонахождение результатов теста
Локальный модульный тест Запустите задачу test :

./gradlew test
HTML-файлы с результатами тестирования:
path_to_your_project / module_name /build/reports/tests/ directory.

XML-файлы с результатами тестирования:
path_to_your_project / module_name /build/test-results/ directory.

Инструментальное модульное тестирование Запустите задачу connectedAndroidTest :

./gradlew connectedAndroidTest
HTML-файлы с результатами тестирования:
path_to_your_project / module_name /build/reports/androidTests/connected/ directory.

XML-файлы с результатами тестирования:
path_to_your_project / module_name /build/outputs/androidTest-results/connected/ directory.

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 :

  1. Создайте или пересоберите основное приложение и тестовый пакет.
  2. Установите тестовый пакет и основные файлы пакета Android-приложения (файлы APK) на ваше текущее устройство Android или эмулятор.
  3. В командной строке введите:

    adb shell am instrument -w <test_package_name>/<runner_class>

    Где <test_package_name> — это имя пакета Android вашего тестового приложения, а <runner_class> — имя класса запуска тестов Android, который вы используете. Имя пакета Android — это значение атрибута package элемента manifest в файле манифеста вашего тестового пакета ( AndroidManifest.xml ).

    Класс для запуска тестов в Android обычно называется AndroidJUnitRunner :

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner

Результаты вашего теста отображаются в STDOUT ).

флажки приборов AM

Чтобы получить список всех флагов, используемых с командой 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 или с InstrumentationTestRunner и его подклассами. Использование их с любым другим классом не дает никакого эффекта.
--no-hidden-api-checks (никто) Отключает ограничения на использование скрытых API. Для получения дополнительной информации о том, что такое скрытые API и как это может повлиять на ваше приложение, ознакомьтесь с разделом «Ограничения на интерфейсы, не относящиеся к SDK» .

варианты инструментов AM

Инструмент 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, которую можно сгенерировать с помощью целевого параметра coverage .

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 .

Просмотреть унифицированные отчеты о тестировании

Плагин Android Gradle предоставляет унифицированные задачи для создания отчетов о тестировании, которые генерируют HTML-панели мониторинга, объединяющие результаты модульных и инструментальных тестов.

Предварительные требования

  • Android Gradle Plugin 9.2.0-alpha07 или выше.

Для создания единых отчетов о тестировании выполните одну из следующих задач:

Объем отчета Командование Описание Местонахождение отчета
Текущий модуль ./gradlew : module_name :createTestReport Создает единый отчет о тестировании для текущего модуля, объединяющего блока и результатов инструментального тестирования. path_to_your_project / module_name /build/reports/tests/test-report/
Текущий модуль и зависимости ./gradlew : module_name :createAggregatedTestReport Создает единый отчет о тестировании для текущего модуля приложения и его библиотечных зависимостей. path_to_your_project / module_name /build/reports/tests/aggregated-test-report/