特定のデバイスでconnectedAndroidTest
をどのように実行しますか?
私は次のようなものを期待します:
./gradlew connectedAndroidTest -DconnectedAndroidTest.device=XXXX
CIサーバーに多数のデバイスが接続されていますが、接続されている特定のデバイスをターゲットにする方法に関するドキュメントが見つからないようです。
connectedAndroidTest
は、現在接続されているすべてのデバイスでテストを実行します。
ありがとう。
Android_SERIAL
変数これは2つの方法で実行できます。
# Set once; all following gradlew commands will use this
export Android_SERIAL=1000AB0123456YZ
./gradlew <...>
Android_SERIAL=1000AB0123456YZ ./gradlew <...>
Android_SERIAL(メソッド#1)を設定/エクスポートした場合、これを使用して1つのコマンドのオーバーライドを行うことができます。
これは、エミュレーター識別子(「emulator-5554」など)でも機能します。
サポートされていません。 http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Android-tasks のconnectedCheck
のドキュメント。 connectedAndroidTest
は、これらの種類のデバイス上の非UI自動テストについて、明示的に次のように述べています。
接続されたデバイスまたはエミュレーターを必要とするチェックを実行します。これらは、接続されているすべてのデバイスで並行して実行されます。
個々のデバイスを選択する機能に対する機能要求があります。進行状況は https://code.google.com/p/Android/issues/detail?id=66129 で追跡できます。
それを実行できるように「ハック」を作成しました。このブロックをbuild.gradleのAndroid
セクションに配置し、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でのみテストされています。
これで可能になるはずです。 Android_SERIAL
環境変数をテストを実行するデバイスIDに設定するだけです。