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

В этом документе описывается, как запускать тесты непосредственно из командной строки. В этом документе предполагается, что вы уже знаете, как создать приложение для 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/ .

Файлы результатов теста XML:
path_to_your_project / module_name /build/test-results/ .

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

./gradlew connectedAndroidTest
Файлы результатов теста HTML:
path_to_your_project / module_name /build/reports/androidTests/connected/ .

Файлы результатов теста XML:
path_to_your_project / module_name /build/outputs/androidTest-results/connected/ .

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 :

  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 элемента манифеста в файле манифеста тестового пакета ( 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, которую можно создать с помощью целевого 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 .