SDV Test Framework-Bibliothek

Diese Seite bietet einen Überblick über die SDV Test Framework-Bibliothek und führt Sie durch die Einrichtung, Konfiguration und Ausführung von Tests. Verwenden Sie das SDV-Test-Framework für End-to-End-Tests. Das Tool basiert auf Mobly. Sie schreiben Tests in Python.

Testansatz auswählen

Wählen Sie vor dem Schreiben eines Tests den Test-Runner aus, der Ihrem Prüfumfang entspricht:

Testumfang Soong-Modultyp Ausführungstool Anwendung
Unittests für Dienst-Bundles rust_test, rust_test_host oder cc_test atest Isolierte Rust- oder C++-Geschäftslogik, Datentransformationen oder Hilfs-Crates auf dem Host oder einer einzelnen virtuellen Cuttlefish-Maschine (VM) prüfen.
End-to-End- und Multi-VM-Systemtests python_test_host (SDV-Test-Framework) atest oder CATBox Prüfen Sie die Lebenszyklus-Orchestrierung von Dienst-Bundles, die Kommunikation zwischen VMs, SOME/IP-Bridging oder Hardwareziele auf einer bis drei VMs.

Umgebung einrichten

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

Python-Abhängigkeiten

Die empfohlene Methode 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-Test-Repository verfolgen.

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

  • mobly
  • absl-py Erforderlich, um die Parametrisierung in Tests zu verwenden.
  • pexpect Erforderlich für die Funktion „Interaktive Befehle“.
  • ptyprocess Erforderlich für die Funktion „Interaktive Befehle“.

Wenn Sie testspezifische Abhängigkeiten benötigen, fügen Sie sie in die Android.bp-Datei des Tests ein:

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

Systemtesttypen

Sie erstellen Systemtests mit dem SDV-Test-Framework. Das Framework unterscheidet zwischen den folgenden Typen. Tests richtig kategorisieren:

  • Beispieltests: Führen Sie SDV-Beispieldienste aus und prüfen Sie, ob das Ergebnis der erwarteten Ausgabe entspricht.
  • E2E-Tests: Verwenden Sie keine SDV-Beispieldienste.
  • Tests mit langer Ausführungszeit: Für längere Ausführungszeiträume konzipiert.
  • Leistungstests: Verwenden Sie die perfetto-Bibliothek.
  • Hardwaretests: Diese Tests sind ausschließlich für die Ausführung auf einem physischen Gerät vorgesehen, nicht in einem Cuttlefish (CF).

Test erstellen

Alle Tests, die mit dem Framework geschrieben wurden, müssen sich im Test-Repository befinden. Die genaue Position des Tests hängt von seinem Typ ab. Informationen zu Verzeichnispfaden, Python-Testklassenvorlagen, Android.bp-Regeln und Mobly-Codierungsrichtlinien finden Sie unter SDV-Systemtest erstellen.

Test konfigurieren

Konfiguriere 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 VMs. Fügen Sie der Datei Android.bp 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 ist für die meisten Tests ausreichend. Erstellen Sie benutzerdefinierte Konfigurationen nur, wenn es einen zwingenden Grund dafür gibt.

Standardzeitlimit aktualisieren

Das Standardzeitlimit sollte ausreichen, um die Tests lokal auszuführen.

Wenn Ihr Test lokal aufgrund einer Zeitüberschreitung 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 Zeitlimit als das Standardzeitlimit festlegen müssen, lesen Sie weiter.

Standardzeitlimit überschreiben

Das Framework unterstützt nicht die Erweiterung der Vorlage für die atest-Ausführung. Verwenden Sie daher die bereitgestellten Vorlagen, die ein erweitertes Zeitlimit bieten.

  • 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 verlängerte Zeit erforderlich ist (z. B. wenn für den Test ein Artefakt heruntergeladen werden muss, was eine bestimmte Zeit in Anspruch nimmt).

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 nicht die 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. Ersetzen Sie {MODULE} durch den Modulnamen Ihres Tests.

  3. Füge com.android.tradefed.targetprep.PushFilePreparer zu jedem Gerät 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

Wenn Sie den Test als Suite ausführen möchten, ist eine CATBox-Konfiguration erforderlich.

  1. Erstellen Sie eine neue Konfigurationsdatei in libraries/sdv/sdv_catbox/res/config/ und beachten Sie die folgenden Namenskonventionen:

    • Beispieltest: sdv-sample-<NAME>-test.xml
    • E2E-Test: sdv-e2e-<NAME>-test.xml
    • Langzeittest: 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 mit 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 mit drei VMs:

    <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 ist für die meisten Tests ausreichend. Erstellen Sie benutzerdefinierte Konfigurationen nur, wenn es einen zwingenden Grund dafür gibt.

Standardzeitlimit aktualisieren

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

Standardzeitlimit überschreiben

Wenn Sie das Standardzeitlimit überschreiben möchten, fügen Sie am Ende der Konfigurationsdatei Folgendes hinzu. Lange Tests sollten ein maximales Zeitlimit 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 beim Konfigurieren von CATBox auf ein Gerät übertragen.

Dateien auf ein Gerät übertragen

Wenn Sie Dateien auf das entsprechende Gerät übertragen möchten, fügen Sie nach der Option plan die folgende Konfiguration hinzu:

<!-- 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 eine funktionierende SDV-Umgebung eingerichtet haben.

Umgebung einrichten

Das Framework startet keine CVD-Instanzen (Cloud Virtual Device). Sie müssen sie daher vor dem Ausführen der Tests starten.

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

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Starten Sie die erste CVD-Instanz:

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

    cvd create --config=sdv_core_instance2
    
  4. Starten Sie die dritte CVD-Instanz (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:

  • Einen VM-Test 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