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

как вы запустите connectedAndroidTest на определенном устройстве?

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

./gradlew connectedAndroidTest -DconnectedAndroidTest.device=XXXX

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

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

спасибо.

5 ответов


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

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

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


Я создал "хак", чтобы иметь возможность это сделать.. поместите этот блок в вашего построить.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.


похоже на будущих версиях ПО этот фрагмент кода https://android-review.googlesource.com/#/c/160929/


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


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

Примечание

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