Wykonywanie testów na wielu urządzeniach

Ta strona pomoże Ci używać platformy testowej Trade Federation na wielu urządzeniach podczas testowania.Najpierw zapoznaj się z normalnym użytkowaniem opisanym w przykładzie kompleksowym.

Czym się różni testowanie na wielu urządzeniach?

Konfigurowanie i przeprowadzanie testów na wielu urządzeniach w Trade Federation różni się od testowania na jednym urządzeniu pod kilkoma względami, w szczególności:

Każda dotychczasowa konfiguracja dla jednego urządzenia jest prawidłowa w trybie na wiele 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ń

W tym dokumencie zakładamy, że znasz już typową konfigurację testu TF. Oto jak wygląda typowa konfiguracja testu 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>

Warto wspomnieć o kilku kwestiach związanych ze strukturą:

  • Dla każdego urządzenia, które będzie potrzebne, oczekiwany jest element <device>.
  • W razie potrzeby elementy <build_provider>, <target_preparer>, <device_recovery>, <device_requirements> i <device_options> muszą być zawarte w tagu <device>. W przeciwnym razie zostanie zgłoszony wyjątek.
  • Atrybut name elementu <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ć przeprowadzany na konkretnym urządzeniu.
  • <option> może mieć zakres globalny, gdy znajduje się w głównym katalogu konfiguracji, lub być ograniczony do zakresu urządzenia, gdy jest określony w tagu <device>.

Wszystkie inne reguły dotyczące konfiguracji dla jednego urządzenia nadal obowiązują. Więcej informacji znajdziesz w przykładzie Hello World poniżej.

Aktualizacja wiersza poleceń

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

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

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

Możesz kierować tylko na jeden z obiektów build_provider urządzenia, używając nazwy urządzenia, w ten sposób:

--{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 urządzenia pojawiają się w konfiguracji. Za każdym razem, gdy urządzenie jest przydzielane, 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?

Etap przygotowania do obsługi wielu urządzeń jest w większości taki sam jak w przypadku pojedynczych urządzeń. Każde urządzenie jest przygotowywane przez wywołanie elementu <target_preparer> w kolejności jego występowania w elemencie <device>.

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

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

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

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.

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

Następnie możesz używać zwykłych interfejsów API ITestDevice , które TF udostępnia do pisania testów.

Nie ma jeszcze interfejsów API do wykonywania operacji z jednego urządzenia na drugie, takich jak device1.sync(device2). Jeśli uważasz, że masz ważny przypadek użycia, który wymaga obsługi, 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 implementacji multi_target_preparer HelloWorldMultiTargetPreparer , który pokazuje, jak otrzymywać listę urządzeń i ich kompilacji.

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

  • przydzielanie 2 urządzeń,
  • dostęp do obu urządzeń za pomocą multi_target_preparer,
  • przeprowadzanie testu, który korzysta z 2 urządzeń.

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

run example/multi-devices

Powinien się wyświetlić wynik zawierający 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 uruchomić powyższe polecenie, musisz mieć podłączone 2 urządzenia. Możesz to sprawdzić za pomocą polecenia adb devices.

Gdy trwa wywołanie, możesz je monitorować tak jak w przypadku pojedynczych urządzeń za pomocą poleceń 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

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 device1 i device2. Jeśli to możliwe, nadaj bardziej opisową nazwę w zależności od typu urządzenia, które ma być skonfigurowane.