Запуск gradle connectedAndroidTest на определенном устройстве

Как запустить connectedAndroidTest на конкретном устройстве?

Я бы ожидал чего-то вроде:

./gradlew connectedAndroidTest -DconnectedAndroidTest.device=XXXX

У нас есть несколько устройств, подключенных к нашему CI-серверу, и я не могу найти никакой документации о том, как настроить таргетинг на определенное подключенное устройство.

connectedAndroidTest выполняет тесты на всех подключенных устройствах в настоящее время.

Спасибо.

Ответ 1

Не поддерживается. Документация для connectedCheck на http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Android-tasks, которая делегирует connectedAndroidTest для этих видов автоматизированных тестов, не связанных с UI, явно заявляет:

Выполняет проверки, для которых требуется подключенное устройство или эмулятор. Они будут работать на всех подключенных устройствах параллельно.

Существует запрос функции для выбора отдельных устройств; вы можете отслеживать его прогресс на https://code.google.com/p/android/issues/detail?id=66129

Ответ 2

Я создал "хак", чтобы это сделать. Поместите этот блок в раздел android вашего build.gradle, а затем вы должны установить переменную ANDROID_HOME env в папку sdk и переменную UNIT_TESTS_DEVICE_ID env с серийным номером устройства, на которое вы хотите запустить тесты.

deviceProvider(new com.android.builder.testing.ConnectedDeviceProvider(file(System.getenv("ANDROID_HOME") + File.separator + "platform-tools" + File.separator + "adb")) {
    public String getName() {
        return "singleDevice"
    }

    public List<? extends com.android.builder.testing.api.DeviceConnector> getDevices() {
        List<com.android.builder.testing.api.DeviceConnector> devices = super.devices;
        List<com.android.builder.testing.api.DeviceConnector> toReturn = new ArrayList<>();
        String deviceSerialNum = System.getenv("UNIT_TESTS_DEVICE_ID");
        devices.each {
            if (it.getSerialNumber().equals(deviceSerialNum)) toReturn.add(it);
        }
        if (toReturn.isEmpty()) {
            throw new RuntimeException("Device for unit tests not found!");
        }
        return toReturn;
    }
})

Затем вы используете задачу singleDeviceAndroidTest{Variant} для запуска тестов. Проверено только на gradle плагине версии 1.0.0.

Ответ 4

Это должно быть возможно сейчас. Просто установите переменную среды ANDROID_SERIAL на идентификатор устройства, в котором вы хотите, чтобы ваши тесты выполнялись.

Ответ 5

Используйте переменную ANDROID_SERIAL

Вы можете сделать это двумя способами:

1. Установите переменную окружения

# Set once; all following gradlew commands will use this
export ANDROID_SERIAL=1000AB0123456YZ

./gradlew <...>

2. "Установить" только для команды

ANDROID_SERIAL=1000AB0123456YZ ./gradlew <...>

Если вы установили/экспортировали ANDROID_SERIAL (метод # 1), вы можете использовать это, чтобы переопределить это для одной команды.

Заметка

Это работает с идентификаторами эмулятора (например, "эмулятор-5554").