SDV-Testframework

Dieses Dokument bietet einen Überblick über das SDV-Testframework und eine Anleitung zum Einrichten, Konfigurieren und Ausführen von Tests. Verwenden Sie das SDV-Testframework für End-to-End-Tests. Das Tool basiert auf Mobly. Sie schreiben Tests in Python.

Umgebung einrichten

In diesem Dokument wird davon ausgegangen, dass Sie Ihre Workstation bereits für SDV eingerichtet haben. Installieren Sie virtualenv, um Framework-Tests auszuführen.

Python-Abhängigkeiten

Der empfohlene Ansatz zum Verwalten von Abhängigkeiten in Android besteht darin, Tests, Python und ihre Abhängigkeiten mithilfe der Build-Konfiguration als ausführbare Datei zu verpacken. Sie müssen diesen Ansatz im SDV-Testrepository verwenden.

Die SDV Test Framework-Bibliothek stellt diese Abhängigkeiten standardmäßig bereit:

  • mobly
  • absl-py ist erforderlich, um die Parametrisierung in Tests zu verwenden.
  • pexpect ist für die interaktive Befehlsfunktion erforderlich.
  • ptyprocess ist für die interaktive Befehlsfunktion erforderlich.

Wenn Sie testspezifische Abhängigkeiten benötigen, fügen Sie sie der Android.bp-Datei des Tests hinzu.

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

Systemtesttypen

Sie erstellen Systemtests mit dem SDV-Testframework. Das Framework unterscheidet zwischen den folgenden Typen. Kategorisieren Sie die Tests richtig:

  • Beispieltests:Führen Sie SDV-Beispieldienste aus und prüfen Sie, ob das Ergebnis mit der erwarteten Ausgabe übereinstimmt.
  • E2E-Tests:Verwenden Sie keine SDV-Beispieldienste.
  • Tests mit langer Laufzeit:Für längere Ausführungszeiten konzipiert.
  • Leistungstests:Verwenden Sie die perfetto-Bibliothek.
  • Hardwaretests:Nur auf einem physischen Gerät und nicht in einem Cuttlefish (CF) ausführbar.

Test erstellen

Alle mit dem Framework geschriebenen Tests müssen sich im Testrepository befinden. Der genaue Speicherort des Tests hängt von seinem Typ ab.

Test konfigurieren

Konfigurieren Sie alle Tests so, dass sie sowohl mit atest als auch mit CATBox ausgeführt werden.

atest konfigurieren

Das Framework bietet Vorlagen für Tests mit einer, zwei und drei virtuellen Maschinen (VMs). Fügen Sie Ihrer Android.bp-Datei Folgendes hinzu:

Eine VM

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

Zwei VMs

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

Drei VMs

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

Die Standardvorlage reicht für die meisten Tests aus. Erstellen Sie nur dann benutzerdefinierte Konfigurationen, wenn es einen zwingenden Grund dafür gibt.

Standard-Timeout aktualisieren

Das Standard-Timeout sollte ausreichen, um die Tests lokal auszuführen.

Wenn Ihr Test lokal aufgrund eines Timeouts fehlschlägt, sollten Sie ihn in verschiedene Tests aufteilen. Sehr lange Tests mit vielen Testfällen können zu einem Engpass bei der Ausführung führen.

Wenn Sie ein höheres Timeout als das Standard-Timeout festlegen müssen, lesen Sie weiter.

Standard-Timeout überschreiben

Das Framework unterstützt keine Erweiterung der Vorlage für die atest-Ausführung. Verwenden Sie daher die bereitgestellten Vorlagen mit einem längeren Timeout.

Langer Test mit einer VM

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

Langer Test mit zwei VMs

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

Fügen Sie einen Kommentar hinzu, der den Zweck der Verwendung dieser Vorlage klar angibt und erklärt, warum die längere Zeit erforderlich ist (z. B. wenn für den Test ein Artefakt heruntergeladen werden muss, was eine bestimmte Zeit dauert).

Dateien auf ein Gerät übertragen

In den folgenden Schritten wird beschrieben, wie Sie Dateien für atest-Konfigurationen auf ein Gerät übertragen.

Dateien auf ein Gerät übertragen

Das Framework unterstützt keine Erweiterung der Vorlage für die atest-Ausführung. Daher müssen Sie eine AndroidTest.xml-Datei erstellen, die die Standardvorlage vollständig ersetzt und die entsprechenden target_preparer-Optionen für die Geräte enthält.

  1. Kopieren Sie den Inhalt der Vorlage:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Aktualisieren Sie {MODULE} mit dem Modulnamen Ihres Tests.

  3. Fügen Sie jedem Gerät com.android.tradefed.targetprep.PushFilePreparer hinzu.

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

CATBox konfigurieren

Um den Test als Suite auszuführen, ist eine CATBox-Konfiguration erforderlich.

  1. Erstellen Sie eine neue Konfigurationsdatei in libraries/sdv/sdv_catbox/res/config/ und folgen Sie diesen Namenskonventionen:

    • Beispieltest: sdv-sample-<NAME>-test.xml
    • E2E-Test sdv-e2e-<NAME>-test.xml
    • Test mit langer Laufzeit: sdv-long-running-<NAME>-test.xml
    • Leistungstest: sdv-performance-<NAME>-test.xml
    • Hardware test: sdv-hw-<NAME>-test.xml
  2. Fügen Sie die entsprechenden Informationen basierend auf dem Testtyp hinzu:

Testkonfiguration für eine VM

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

Testkonfiguration für zwei VMs

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

Testkonfiguration für drei VMs

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

Die Standardvorlage reicht für die meisten Tests aus. Erstellen Sie nur dann benutzerdefinierte Konfigurationen, wenn es einen zwingenden Grund dafür gibt.

Standard-Timeout aktualisieren

Wenn das Standard-Timeout für Ihren Test nicht ausreicht, können Sie es überschreiben.

Standard-Timeout überschreiben

Fügen Sie zum Überschreiben des Standard-Timeouts das Folgende am Ende Ihrer Konfigurationsdatei hinzu. Lange Tests sollten ein maximales Timeout von 10 Minuten haben.

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

Dateien auf ein Gerät übertragen

Im folgenden Abschnitt wird beschrieben, wie Sie Dateien auf ein Gerät übertragen, wenn Sie CATBox konfigurieren.

Dateien auf ein Gerät übertragen

Fügen Sie die folgende Konfiguration nach der Option plan hinzu, um Dateien auf das entsprechende Gerät zu übertragen:

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

Wenn Sie die Dateien auf jedem Gerät benötigen, fügen Sie die Konfiguration für jedes Gerät hinzu (z. B. name=device1, name=device2).

Testausführung

In dieser Anleitung wird davon ausgegangen, dass Sie die Einrichtung einer funktionierenden SDV-Umgebung abgeschlossen haben.

Umgebung einrichten

Das Framework startet keine Cloud Virtual Device-Instanzen (CVD), daher müssen Sie sie starten, bevor Sie die Tests ausführen.

  1. Richten Sie die Umgebung ein und starten Sie das SDV-Ziel:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Starten Sie die erste Cloud Virtual Device-Instanz (CVD):

    cvd create --config=sdv_core_instance1
    
  3. Starten Sie die zweite Cloud Virtual Device-Instanz (CVD) (für Tests mit mehreren VMs):

    cvd create --config=sdv_core_instance2
    
  4. Starten Sie die dritte Cloud Virtual Device-Instanz (CVD) (für Tests mit mehreren VMs):

    cvd create --config=sdv_core_instance3
    

atest ausführen

atest <TestModuleName>

CATBox ausführen

Bei diesen Befehlen wird davon ausgegangen, dass Sie sich im Stammverzeichnis des Repositorys befinden.

  1. CATBox erstellen: m catbox
  2. (Optional) Alle verfügbaren SDV-Testpläne in CATBox ansehen:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Test ausführen:

Test mit einer VM ausführen

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

Test mit zwei VMs ausführen

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

Test mit drei VMs ausführen

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