Przeprowadzaj testy z wieloma urządzeniami

Ta strona pomaga w korzystaniu z uprzęży testowej Federacji Handlowej z wieloma urządzeniami podczas testowania. Najpierw powinieneś zapoznać się z normalnym użytkowaniem, jak opisano w kompleksowym przykładzie .

Jaka jest różnica w przypadku wielu urządzeń?

Podczas konfigurowania i uruchamiania testów na wielu urządzeniach w Federacji Handlowej różni się kilka rzeczy, w szczególności:

Każda istniejąca konfiguracja jednego urządzenia obowiązuje w trybie wielu urządzeń.

<! -- DO ZROBIENIA: Wyjaśnij zdanie bezpośrednio powyżej, dodając w drugim zdaniu przykład przypadku użycia jednego urządzenia w odniesieniu do trybu wielu urządzeń. -->>

Konfiguracja wielu urządzeń

W tym dokumencie założono, że znasz już typową konfigurację testową TF. Oto jak wygląda typowa konfiguracja testowa z dwoma urządzeniami:

<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>

O konstrukcji należy wspomnieć o kilku rzeczach:

  • Dla każdego potrzebnego urządzenia oczekiwane jest <device> .
  • <build_provider> , <target_preparer> , <device_recovery> , <device_requirements> i <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ń obecnych w konfiguracji. Służy do odwoływania się do konkretnego, powiązanego z nim urządzenia. Dzięki temu test może być ukierunkowany na określone urządzenie.
  • <option> może mieć zasięg globalny, gdy znajduje się w katalogu głównym konfiguracji, lub być ograniczona do zakresu urządzenia, jeśli jest określona w tagu <device> .

Wszystkie pozostałe zasady dotyczące konfiguracji jednourządzeniowej nadal obowiązują tutaj. Aby uzyskać więcej informacji, zobacz przykład Hello World poniżej.

Aktualizacja wiersza poleceń

Podczas określania opcji w wierszu poleceń TF możliwe jest również określenie zakresu urządzenia przy użyciu {<device name>} , gdzie <device name> to nazwa określona w konfiguracji XML.

W powyższym przykładzie dopuszczone zostały następujące opcje:

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

Możesz kierować reklamy tylko na jeden z obiektów build_provider urządzenia, używając nazwy urządzenia, na przykład:

--{device2}device-setup:disable

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

W jaki sposób TF wybiera urządzenia?

Federacja Handlowa szuka urządzenia odpowiadającego device_requirements (zwykle rodzajowi urządzenia, produktowi itp.) w kolejności występowania urządzenia w konfiguracji. Za każdym razem, gdy urządzenie jest przydzielane, TF próbuje przydzielić następne. Jeśli nie jest możliwe przydzielenie wszystkich urządzeń, wszystkie zostaną zwolnione, a polecenie zostanie ponowione, gdy wszystkie urządzenia zostaną dopasowane.

Jak TF przygotowuje urządzenia?

Etap przygotowania w przypadku wielu urządzeń jest w większości taki sam, jak w przypadku pojedynczych urządzeń. Każde urządzenie jest przygotowywane poprzez wywołanie <target_preparer> w kolejności pojawiania się wewnątrz <device> .

Możesz także użyć <multi_target_preparer> określonego w katalogu głównym konfiguracji, który umożliwia etapy przygotowania wymagające wielu urządzeń, takie jak parowanie urządzeń. Działa po kroku target_preparer .

Alternatywą jest <pre_multi_target_preparer> , który jest uruchamiany przed krokiem target_preparer .

  • <pre_multi_target_preparer> należy używać do konfiguracji, którą należy wykonać przed konfiguracją poszczególnych urządzeń.
  • <multi_target_preparer> należy używać do konfiguracji, która musi zostać wykonana po indywidualnej konfiguracji urządzenia.

Na przykład:

urządzenie flash 1 (target_preparer) urządzenie flash 2 (target_preparer) bluetooth połącz oba urządzenia (multi_target_preparer)

Napisz test na wielu urządzeniach

Pisząc zwykły test na jednym urządzeniu, implementujesz interfejs IDeviceTest .

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

IMultiDeviceTest zapewnia bezpośrednią mapę urządzenia do jego IBuildInfo , podczas gdy IInvocationContextReceiver później zapewnia pełny kontekst (urządzenie, IBuildInfo i metadane).

Będziesz wtedy mógł używać zwykłych interfejsów API ITestDevice , które TF udostępnił do pisania testów.

Nie istnieją jeszcze żadne interfejsy API umożliwiające przeprowadzanie operacji z jednego urządzenia na drugie, takie jak device1.sync(device2) . Jeśli uważasz, że masz przekonujący przypadek użycia, który wymaga wsparcia, wyślij swoje uzasadnienie na listę platform Android .

Przykład powitania świata z wieloma urządzeniami

Dodaliśmy przykładową konfigurację przypominającą Hello World: multi-devices.xml Istnieje również przykład implementacji multi_target_preparer HelloWorldMultiTargetPreparer , który pokazuje, jak otrzymać listę urządzeń i ich kompilacji.

To jest pełny przykład, który obejmuje:

  • Przydzielanie dwóch urządzeń
  • Dostęp do obu urządzeń za pośrednictwem multi_target_preparer
  • Uruchamianie testu z wykorzystaniem dwóch urządzeń

Po zbudowaniu Tradefed możesz użyć następującego polecenia w powłoce TF:

run example/multi-devices

Powinieneś zobaczyć dane wyjściowe zawierające następujące 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 uruchomić powyższe, potrzebne są dwa podłączone urządzenia. Można to sprawdzić za pomocą: adb devices

Gdy wywołanie jest w toku, możesz je monitorować jak pojedyncze urządzenia za pomocą list i i list 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

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

Zauważ, że w tym przykładzie nazwaliśmy dwa urządzenia w konfiguracji device1 i device2 ; powinieneś podać bardziej opisową nazwę, jeśli to możliwe, w zależności od typu urządzenia, którego naprawdę oczekujesz.