Biblioteka SDV Test Framework

Na tej stronie znajdziesz omówienie biblioteki SDV Test Framework oraz instrukcje konfigurowania i przeprowadzania testów. Używaj platformy testowej SDV do kompleksowego testowania. Narzędzie jest oparte na Mobly, a testy pisze się w Pythonie.

Wybór metody testowania

Zanim napiszesz test, wybierz moduł uruchamiający testy, który pasuje do zakresu weryfikacji:

Zakres testu Typ modułu Soong Narzędzie do wykonywania Kiedy używać
Testy jednostkowe pakietu usług rust_test, rust_test_host lub cc_test atest Weryfikuj odizolowaną logikę biznesową, przekształcenia danych lub skrzynki pomocnicze w języku Rust lub C++ na hoście lub pojedynczej maszynie wirtualnej Cuttlefish.
Kompleksowe testy systemu i testy systemu z wieloma maszynami wirtualnymi python_test_host (platforma testowa SDV) atest lub CATBox Weryfikuj orkiestrację cyklu życia pakietu usług, komunikację między maszynami wirtualnymi, mostkowanie SOME/IP lub cele sprzętowe na 1–3 maszynach wirtualnych.

Konfigurowanie środowiska

Na tej stronie zakładamy, że masz już skonfigurowaną stację roboczą na potrzeby SDV. Aby uruchomić testy platformy, zainstaluj virtualenv.

Zależności Pythona

Zalecanym podejściem do zarządzania zależnościami w Androidzie jest spakowanie testów, Pythona i ich zależności jako pliku wykonywalnego przy użyciu konfiguracji kompilacji. Musisz stosować to podejście w repozytorium testowym SDV.

Biblioteka SDV Test Framework domyślnie udostępnia te zależności:

  • mobly
  • absl-py Wymagane do używania parametryzacji w testach.
  • pexpect Wymagane do działania poleceń interaktywnych.
  • ptyprocess Wymagane do działania poleceń interaktywnych.

Jeśli potrzebujesz zależności związanych z testem, uwzględnij je w pliku Android.bp testu:

python_test_host {
    …
    libs: [
        "<DEPENDENCY1>",
        "<DEPENDENCY2>",
        …
    ],
    …
}

Typy testów systemu

Testy systemu tworzy się za pomocą platformy testowej SDV. Platforma rozróżnia te typy: Prawidłowo kategoryzuj testy:

  • Przykładowe testy: uruchom przykładowe usługi SDV i sprawdź, czy wynik jest zgodny z oczekiwanym.
  • Testy E2E: nie używaj przykładowych usług SDV.
  • Długotrwałe testy: przeznaczone do długich okresów wykonywania.
  • Testy wydajności: użyj biblioteki perfetto.
  • Testy sprzętu: przeznaczone do wykonywania wyłącznie na urządzeniu fizycznym, a nie w Cuttlefish (CF).

Tworzenie testu

Wszystkie testy napisane przy użyciu platformy muszą znajdować się w repozytorium testowym. Dokładna lokalizacja testu zależy od jego typu. Ścieżki katalogów, szablony klas testowych Pythona, reguły Android.bp i wytyczne dotyczące kodowania Mobly znajdziesz w artykule Tworzenie testu systemu SDV.

Konfigurowanie testu

Skonfiguruj wszystkie testy tak, aby były uruchamiane za pomocą atest i CATBox.

Konfigurowanie atestu

Platforma udostępnia szablony testów z 1, 2 i 3 maszynami wirtualnymi. Dodaj do pliku Android.bp te informacje:

  • Jedna maszyna wirtualna:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • 2 maszyny wirtualne:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • 3 maszyny wirtualne:

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

Domyślny szablon jest wystarczający w przypadku większości testów. Unikaj tworzenia konfiguracji niestandardowych, chyba że istnieje ku temu ważny powód.

Aktualizowanie domyślnego limitu czasu

Domyślny limit czasu powinien wystarczyć do przeprowadzenia testów lokalnie.

Jeśli test nie powiedzie się lokalnie z powodu przekroczenia limitu czasu, rozważ podzielenie go na różne testy. Bardzo długie testy z wieloma elementami testowania mogą powodować wąskie gardło podczas wykonywania.

Jeśli musisz ustawić limit czasu wyższy niż domyślny, czytaj dalej.

Zastępowanie domyślnego limitu czasu

Platforma nie obsługuje rozszerzania szablonu na potrzeby wykonywania atest. Dlatego używaj podanych szablonów, które oferują dłuższy czas oczekiwania.

  • Długi test na jednej maszynie wirtualnej:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • Długi test z użyciem 2 maszyn wirtualnych:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices_long_test",
    }
    

Dodaj komentarz, który jasno wskazuje cel użycia tego szablonu i wyjaśnia, dlaczego wydłużony czas jest konieczny (np. jeśli test wymaga pobrania artefaktu, co zajmuje określoną ilość czasu).

Przesyłanie plików na urządzenie

Poniżej znajdziesz opis przesyłania plików na urządzenie w przypadku konfiguracji atest.

Przesyłanie plików na urządzenie

Platforma nie obsługuje rozszerzania szablonu na potrzeby wykonywania atest. Dlatego musisz utworzyć plik AndroidTest.xml, który całkowicie zastąpi domyślny szablon i będzie zawierać odpowiednie opcje target_preparer dla urządzeń.

  1. Skopiuj zawartość szablonu:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Zastąp {MODULE} nazwą modułu testu.

  3. Dodaj użytkownika com.android.tradefed.targetprep.PushFilePreparer na każdym urządzeniu.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

Konfigurowanie CATBox

Aby uruchomić test jako pakiet, wymagana jest konfiguracja CATBox.

  1. Utwórz nowy plik konfiguracji w libraries/sdv/sdv_catbox/res/config/ i zastosuj te konwencje nazewnictwa:

    • Przykładowy test: sdv-sample-<NAME>-test.xml
    • Test E2E: sdv-e2e-<NAME>-test.xml
    • Długotrwały test: sdv-long-running-<NAME>-test.xml
    • Test wydajności: sdv-performance-<NAME>-test.xml
    • Test sprzętu: sdv-hw-<NAME>-test.xml
  2. Dodaj odpowiednie informacje na podstawie typu testu:

  • Konfiguracja testowa z 1 maszyną wirtualną:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/one-device" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Konfiguracja testowa z 2 maszynami wirtualnymi:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/two-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Konfiguracja testowa z 3 maszynami wirtualnymi:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/three-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    

Domyślny szablon jest wystarczający w przypadku większości testów. Unikaj tworzenia konfiguracji niestandardowych, chyba że istnieje ku temu ważny powód.

Aktualizowanie domyślnego limitu czasu

Jeśli domyślny limit czasu nie jest wystarczający dla Twojego testu, możesz go zastąpić.

Zastępowanie domyślnego limitu czasu

Aby zastąpić domyślny limit czasu, dodaj na końcu pliku konfiguracji ten kod. Długie testy powinny mieć maksymalny limit czasu wynoszący 10 minut.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

Przesyłanie plików na urządzenie

W następnej sekcji opisano, jak przesyłać pliki na urządzenie podczas konfigurowania CATBox.

Przesyłanie plików na urządzenie

Aby przesłać pliki na odpowiednie urządzenie, dodaj tę konfigurację po opcji plan:

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

Jeśli potrzebujesz plików na każdym urządzeniu, dodaj konfigurację dla każdego urządzenia (np. name=device1, name=device2).

Wykonanie testu

W tych instrukcjach założono, że masz już skonfigurowane działające środowisko SDV.

Konfigurowanie środowiska

Platforma nie uruchamia instancji Cloud Virtual Device (CVD), więc musisz je uruchomić przed przeprowadzeniem testów.

  1. Skonfiguruj środowisko i uruchom cel SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Uruchom pierwszą instancję CVD:

    cvd create --config=sdv_core_instance1
    
  3. Uruchom drugą instancję CVD (w przypadku testów na wielu maszynach wirtualnych):

    cvd create --config=sdv_core_instance2
    
  4. Uruchom trzecią instancję CVD (na potrzeby testów na wielu maszynach wirtualnych):

    cvd create --config=sdv_core_instance3
    

Uruchom atest

atest <TestModuleName>

Uruchamianie CATBox

Te polecenia zakładają, że znajdujesz się w katalogu głównym repozytorium.

  1. Skompiluj CATBox: m catbox
  2. (Opcjonalnie) Wyświetl wszystkie dostępne plany testów SDV w CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Przeprowadź test:

  • Uruchamianie jednego testu maszyny wirtualnej:

    NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
    
  • Uruchom test z 2 maszynami wirtualnymi:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
    
  • Uruchom test z 3 maszynami wirtualnymi:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522