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.