如何在特定设备上运行connectedAndroidTest
?
我希望有类似的东西:
./gradlew connectedAndroidTest -DconnectedAndroidTest.device=XXXX
我们的CI服务器中插入了许多设备,似乎无法找到有关如何定位特定连接设备的任何文档。
connectedAndroidTest
目前在所有连接的设备上运行测试。
感谢。
答案 0 :(得分:12)
不支持。 connectedCheck
connectedAndroidTest
的文档,代表{{1}}进行这些类型的设备上非UI自动化测试,明确指出:
运行需要连接设备的检查或 模拟器。它们将并行运行在所有连接的设备上。
有一项功能要求可以选择单个设备;您可以在http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Android-tasks
跟踪其进度答案 1 :(得分:8)
ANDROID_SERIAL
变量您可以通过两种方式执行此操作:
# Set once; all following gradlew commands will use this
export ANDROID_SERIAL=1000AB0123456YZ
./gradlew <...>
ANDROID_SERIAL=1000AB0123456YZ ./gradlew <...>
如果您设置/导出了ANDROID_SERIAL(方法1),则可以使用它替代单个命令。
这也适用于模拟器标识符(例如“ emulator-5554”)。
答案 2 :(得分:5)
我创建了一个“hack”以便能够执行此操作..将此块放在 build.gradle 的android
部分中,然后您必须设置{{ 1}} env变量到sdk文件夹,ANDROID_HOME
env变量和要运行测试的设备的序列号。
UNIT_TESTS_DEVICE_ID
然后使用任务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;
}
})
运行测试。仅在gradle插件版本1.0.0上测试。
答案 3 :(得分:2)
现在应该有可能。只需将ANDROID_SERIAL
环境变量设置为要运行测试的设备ID。
答案 4 :(得分:0)
@MotohawkSF的答案在Android Studio终端中对我不起作用。不过有效的是在运行adb devices
> adb devices
List of devices attached
192.168.22.122:5555 device
emulator-5554 device
然后
set ANDROID_SERIAL=192.168.22.122:5555
gradlew someTask