Запуск 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").
