Wykonywanie testów na wielu urządzeniach

Na tej stronie dowiesz się, jak używać platformy testowej Trade Federation na wielu urządzeniach podczas testowania.Najpierw zapoznaj się z normalnym sposobem użycia opisanym w przykładzie kompleksowym.

Czym różni się korzystanie z wielu urządzeń?

Konfigurowanie i przeprowadzanie testów na wielu urządzeniach w Trade Federation różni się od standardowego procesu, zwłaszcza w tych kwestiach:

Każda dotychczasowa konfiguracja na 1 urządzenie jest ważna w trybie wielu urządzeń.

<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>

Konfiguracja wielu urządzeń

Zakładamy, że znasz już typową konfigurację testu TF. Typowa konfiguracja testowa z 2 urządzeniami wygląda tak:

<configuration description="A simple multi-devices example in Tradefed">

    <device name="device1">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <option name="log-level" value="verbose" />
    <test class="com.android.tradefed.HelloWorldMultiDevices" />

    <logger class="com.android.tradefed.log.FileLogger" />
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

</configuration>

W związku ze strukturą należy wspomnieć o kilku kwestiach:

  • W przypadku każdego urządzenia, które będzie potrzebne, oczekiwany jest <device>.
  • <build_provider>, <target_preparer>, <device_recovery>, <device_requirements><device_options> (w razie potrzeby) muszą być zawarte w tagu <device>. W przeciwnym razie zostanie zgłoszony wyjątek.
  • atrybut name dla <device> jest obowiązkowy i powinien być unikalny wśród wszystkich urządzeń w konfiguracji. Służy do odwoływania się do konkretnego urządzenia, z którym jest powiązany. Dzięki temu test może być kierowany na konkretne urządzenie.
  • <option> może mieć zakres globalny, gdy znajduje się w katalogu głównym konfiguracji, lub być ograniczony do zakresu urządzenia, gdy jest określony w tagu <device>.

Wszystkie inne reguły dotyczące konfiguracji na jednym urządzeniu nadal obowiązują. Więcej informacji znajdziesz w przykładzie „Hello World” poniżej.

Aktualizacja z wiersza poleceń

Podczas określania opcji w wierszu poleceń TF można też określić zakres urządzenia za pomocą parametru {<device name>}, gdzie <device name> to nazwa określona w konfiguracji XML.

W przykładzie powyżej dozwolone były te opcje:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Możesz kierować reklamy tylko na jeden z obiektów build_provider za pomocą nazwy urządzenia, np.:

--{device2}device-setup:disable

W tym przykładzie device2 pomija konfigurację urządzenia, a device1 nie.

Jak TF wybiera urządzenia?

Trade Federation szuka urządzenia pasującego do device_requirements (zwykle wersji urządzenia, produktu itp.) w kolejności, w jakiej pojawia się ono w konfiguracji. Za każdym razem, gdy urządzenie zostanie przydzielone, TF próbuje przydzielić następne. Jeśli nie można przydzielić wszystkich urządzeń, zostaną one zwolnione, a polecenie zostanie ponowione, gdy wszystkie urządzenia będą pasować.

Jak TF przygotowuje urządzenia?

Krok przygotowania w przypadku wielu urządzeń jest w większości taki sam jak w przypadku jednego urządzenia. Każde urządzenie jest przygotowywane przez wywołanie funkcji <target_preparer> w kolejności, w jakiej pojawiają się w funkcji <device>.

Możesz też użyć elementu <multi_target_preparer> określonego w katalogu głównym konfiguracji, który umożliwia wykonanie czynności przygotowawczych wymagających wielu urządzeń, takich jak parowanie urządzeń. Jest ona wykonywana po kroku target_preparer.

Alternatywą jest <pre_multi_target_preparer>, która jest wykonywana przed krokiem target_preparer.

  • <pre_multi_target_preparer> należy używać w przypadku konfiguracji, którą trzeba przeprowadzić przed skonfigurowaniem poszczególnych urządzeń.
  • <multi_target_preparer> należy używać w przypadku konfiguracji, które muszą być wykonane po konfiguracji poszczególnych urządzeń.

Na przykład:

flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)

Pisanie testu na wielu urządzeniach

Podczas pisania zwykłego testu na jednym urządzeniu implementujesz interfejs IDeviceTest.

Aby testy otrzymywały testowane urządzenia, możesz zaimplementować interfejs IMultiDeviceTest lub IInvocationContextReceiver.

IMultiDeviceTest daje bezpośrednie mapowanie urządzenia na jego IBuildInfo, a IInvocationContextReceiver później daje pełny kontekst (urządzenie, IBuildInfo i metadane).

Będziesz wtedy mieć dostęp do zwykłych interfejsów API ITestDevice, które TF udostępnia do pisania testów.

Nie ma jeszcze interfejsów API, które umożliwiałyby wykonywanie operacji na różnych urządzeniach, np. device1.sync(device2). Jeśli uważasz, że masz ważny przypadek użycia, który powinien być obsługiwany, wyślij swoje uzasadnienie na listę android-platform.

Przykład „Hello world” na wielu urządzeniach

Dodaliśmy przykładową konfigurację podobną do „Hello World”: multi-devices.xml Jest też przykład multi_target_preparer implementacji HelloWorldMultiTargetPreparer , który pokazuje, jak otrzymywać listę urządzeń i ich kompilacji.

Oto pełny przykład, który obejmuje:

  • Przydzielanie 2 urządzeń
  • Dostęp do obu urządzeń za pomocą multi_target_preparer
  • Przeprowadzanie testu z użyciem 2 urządzeń

Po utworzeniu Tradefed możesz użyć tego polecenia w powłoce TF:

run example/multi-devices

Powinny się wyświetlić dane wyjściowe zawierające te informacje:

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'

Aby wykonać powyższe czynności, musisz mieć połączone 2 urządzenia. Możesz to sprawdzić: adb devices

Gdy wywołanie jest w toku, możesz je monitorować tak jak pojedyncze urządzenia za pomocą ikon list ilist d:

tf >list i
Command Id  Exec Time  Device                          State
1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
tf >list d
Serial            State      Product   Variant   Build   Battery
00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
LP5A390056        Allocated  shamu     shamu     NRD90I  100

Powinny być widoczne urządzenia biorące udział w każdym wywołaniu, a także wszystkie dostępne urządzenia i ich stan.

Pamiętaj, że w tym przykładzie nazwaliśmy 2 urządzenia w konfiguracji device1device2. Jeśli to możliwe, nadaj im bardziej opisowe nazwy w zależności od typu urządzenia, które ma być ustawione.