Przeprowadzanie testów na wielu urządzeniach

Na tej stronie dowiesz się, jak używać jarzma testowego federacji handlowej z wieloma urządzeniami podczas testowania.Najpierw zapoznaj się ze zwykłym użytkowaniem, jak opisano w pełnym przykładzie.

Co się różni w przypadku wielu urządzeń?

Konfigurowanie i uruchamianie testów na wielu urządzeniach w Federacji handlowej różni się pod pewnymi względami. W szczególności:

W trybie wielu urządzeń można używać dowolnej konfiguracji dla jednego urządzenia.

<! -- TODO: doprecyzuj zdanie bezpośrednio powyżej, dodając w drugim zdaniu przykład zastosowania na jednym urządzeniu, który odnosi się do trybu wielu urządzeń. -->>

Konfiguracja wielu urządzeń

W tym dokumencie zakładamy, że znasz już typową konfigurację testu TF. Tak wygląda typowa konfiguracja testowa na 2 urządzeniach:

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

Należy pamiętać o kilku kwestiach związanych ze strukturą:

  • Dla każdego urządzenia, które będzie potrzebne, wymagana jest <device>.
  • Tag <device> musi zawierać tagi <build_provider>, <target_preparer>, <device_recovery>, <device_requirements><device_options> (jeśli są potrzebne). W przeciwnym razie zostanie wygenerowany wyjątek.
  • Atrybut name dla <device> jest wymagany i powinien być unikalny w stosunku do wszystkich urządzeń w konfiguracji. Wykorzystywany jest w odniesieniu do konkretnego urządzenia, które jest z nim powiązane. Dzięki temu test może być kierowany na konkretne urządzenie.
  • <option> może mieć zakres globalny, gdy znajduje się w korzenia konfiguracji, lub ograniczony do zakresu urządzenia, gdy jest określony w tagu <device>.

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

Aktualizacja za pomocą wiersza poleceń

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

W powyższym przykładzie są dozwolone te opcje:

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

Kierowanie na urządzenia możesz ograniczyć do jednego obiektu build_provider, używając nazwy urządzenia, np. w ten sposób:

--{device2}device-setup:disable

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

W jaki sposób TF wybiera urządzenia?

Trade Federation szuka urządzenia dopasowanego do device_requirements(zazwyczaj wersji urządzenia, produktu itp.) w kolejności występowania urządzeń w konfiguracji. Za każdym razem, gdy przydziela urządzenie, próbuje przydzielić następne. Jeśli nie można przypisać wszystkich urządzeń, wszystkie zostaną zwolnione, a polecenie zostanie powtórzone, gdy wszystkie urządzenia zostaną dopasowane.

Jak TF przygotowuje urządzenia?

Etap przygotowań w przypadku wielu urządzeń jest zwykle taki sam jak w przypadku pojedynczych urządzeń. Każde urządzenie jest przygotowywane przez wywołanie <target_preparer> w kolejności wyświetlania w <device>.

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

Alternatywą jest <pre_multi_target_preparer>, który jest wykonywany 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ń.
  • Do konfiguracji, która musi być przeprowadzana po poszczególnych konfiguracjach urządzeń, należy używać narzędzia <multi_target_preparer>.

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 mogły odbierać urządzenia testowe, możesz zaimplementować interfejs IMultiDeviceTest lub IInvocationContextReceiver.

IMultiDeviceTest umożliwia bezpośrednie mapowanie urządzenia na IBuildInfo, a IInvocationContextReceiver umożliwia później uzyskanie pełnego kontekstu (urządzenie, IBuildInfo i metadane).

Następnie możesz używać zwykłych interfejsów ITestDevice udostępnionych przez TF do testowania zapisu.

Nie ma jeszcze interfejsów API umożliwiających przenoszenie operacji z jednego urządzenia na inne, takich jak device1.sync(device2). Jeśli uważasz, że masz przekonujący przypadek użycia, który powinien zostać obsługiwany, prześ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 Dodaliśmy też przykładową implementację multi_target_preparer HelloWorldMultiTargetPreparer, która pokazuje, jak pobrać listę urządzeń i ich kompilacji.

Poniżej znajdziesz pełny przykład, który obejmuje:

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

Po skompilowaniu narzędzia Tradefed możesz użyć tego polecenia w powłoce TF:

run example/multi-devices

Powinny pojawić się 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 połączyć 2 urządzenia. Możesz to sprawdzić: adb devices

Podczas wywoływania możesz monitorować go jak pojedyncze urządzenia za pomocą funkcji 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 powiązane z każdym wywołaniem, a także wszystkie dostępne urządzenia i ich stan.

Zwróć uwagę, że w tym przykładzie 2 urządzenia w konfiguracji mają nazwy device1device2. W miarę możliwości nadaj bardziej opisowe nazwy, zależnie od typu urządzenia, które chcesz skonfigurować.