Platforma testowa SDV

Ten dokument zawiera omówienie platformy testowej SDV oraz instrukcje dotyczące konfigurowania i przeprowadzania testów. Do testowania kompleksowego używaj platformy testowej SDV. Narzędzie jest oparte na Mobly, a testy piszesz w Pythonie.

Konfigurowanie środowiska

W tym dokumencie zakładamy, że masz już skonfigurowaną stację roboczą do pracy z SDV. Aby uruchomić testy platformy, zainstaluj virtualenv.

Zależności Pythona

Zalecanym sposobem zarządzania zależnościami w Androidzie jest spakowanie testów, Pythona i ich zależności jako pliku wykonywalnego za pomocą konfiguracji kompilacji. Musisz postępować zgodnie z tą metodą w repozytorium testowym SDV.

Biblioteka platformy testowej SDV domyślnie udostępnia te zależności:

  • mobly
  • absl-py – wymagana do używania parametryzacji w testach.
  • pexpect – wymagana do obsługi poleceń interaktywnych.
  • ptyprocess – wymagana do obsługi poleceń interaktywnych.

Jeśli potrzebujesz zależności specyficznych dla testu, uwzględnij je w pliku Android.bp testu.

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

Typy testów systemu

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

  • Testy przykładowe: uruchamiają przykładowe usługi SDV i sprawdzają, czy wynik jest zgodny z oczekiwanym.
  • Testy kompleksowe: nie używają przykładowych usług SDV.
  • Testy długotrwałe: przeznaczone do długotrwałego wykonywania.
  • Testy wydajności: używają biblioteki perfetto.
  • Testy sprzętu: przeznaczone do wykonywania wyłącznie na urządzeniu fizycznym, a nie w Cuttlefish (CF).

Tworzenie testu

Wszystkie testy napisane za pomocą platformy muszą znajdować się w repozytorium testowym. Dokładna lokalizacja testu zależy od jego typu.

Konfigurowanie testu

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

Konfigurowanie atest

Platforma udostępnia szablony testów na 1, 2 i 3 maszyny wirtualne. Dodaj te informacje do pliku Android.bp:

Jedna maszyna wirtualna

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

Dwie maszyny wirtualne

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

Trzy 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 niestandardowych konfiguracji, chyba że masz ku temu ważny powód.

Aktualizowanie domyślnego limitu czasu

Domyślny limit czasu powinien wystarczyć do lokalnego wykonania testów.

Jeśli test nie powiedzie się lokalnie z powodu przekroczenia limitu czasu, rozważ podzielenie go na kilka testów. Bardzo długie testy z wieloma przypadkami testowymi mogą powodować wąskie gardło w wykonywaniu.

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

Zastępowanie domyślnego limitu czasu

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

Długotrwały test na 1 maszynie wirtualnej

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

Długotrwały test na 2 maszynach wirtualnych

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

Dodaj komentarz, który wyraźnie wskazuje cel użycia tego szablonu i wyjaśnia, dlaczego potrzebny jest dłuższy czas (np. jeśli test wymaga pobrania artefaktu, co zajmuje określony czas).

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 com.android.tradefed.targetprep.PushFilePreparer do każdego urządzenia.

<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 postępuj zgodnie z tymi konwencjami nazewnictwa:

    • Test przykładowy: sdv-sample-<NAME>-test.xml
    • Test kompleksowy: sdv-e2e-<NAME>-test.xml
    • Test długotrwały: 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 testu na 1 maszynie wirtualnej

<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 testu na 2 maszynach wirtualnych

<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 testu na 3 maszynach wirtualnych

<!-- Copyright 2025 Google LLC -->
<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 niestandardowych konfiguracji, chyba że masz ku temu ważny powód.

Aktualizowanie domyślnego limitu czasu

Jeśli domyślny limit czasu nie wystarcza na potrzeby testu, możesz go zastąpić.

Zastępowanie domyślnego limitu czasu

Aby zastąpić domyślny limit czasu, dodaj te informacje na końcu pliku konfiguracji. Długotrwałe 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 tej sekcji opisujemy, 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 pliki są potrzebne na każdym urządzeniu, dodaj konfigurację dla każdego urządzenia (np. name=device1, name=device2).

Wykonanie testu

W tych instrukcjach zakładamy, ż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ę Cloud Virtual Device (CVD):

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

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

    cvd create --config=sdv_core_instance3
    

Uruchamianie atest

atest <TestModuleName>

Uruchamianie CATBox

Te polecenia zakładają, że jesteś w katalogu głównym repozytorium.

  1. Kompilowanie 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-

Uruchom test:

Uruchamianie testu na 1 maszynie 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

Uruchamianie testu na 2 maszynach wirtualnych

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

Uruchamianie testu na 3 maszynach wirtualnych

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