SDV Test Framework-Bibliothek

Auf dieser Seite finden Sie einen Überblick über die SDV Test Framework-Bibliothek 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 und Sie schreiben Tests in Python.

Umgebung einrichten

Auf dieser Seite wird davon ausgegangen, dass Sie Ihre Workstation bereits für die Software-Defined-Verifizierung eingerichtet haben. Wenn Sie Framework-Tests ausführen möchten, installieren Sie virtualenv.

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-Testrepository verwenden.

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

  • mobly
  • absl-py Erforderlich, um die Parametrisierung in Tests zu verwenden.
  • pexpect Erforderlich für interaktive Befehle.
  • ptyprocess Erforderlich für 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 und nicht in einem Cuttlefish (CF) vorgesehen.

Test erstellen

Alle Tests, die mit dem Framework geschrieben wurden, müssen sich im Test-Repository befinden. Der genaue Speicherort des Tests hängt vom 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 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 nur dann benutzerdefinierte Konfigurationen, wenn es dafür einen zwingenden Grund gibt.

Standardzeitüberschreitung aktualisieren

Das Standard-Zeitlimit sollte für die lokale Ausführung der Tests ausreichen.

Wenn Ihr Test lokal aufgrund eines Zeitlimits fehlschlägt, sollten Sie ihn in mehrere Tests aufteilen. Sehr lange Tests mit vielen Testläufen 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 keine Erweiterung der Vorlage für die Ausführung von atest. Verwenden Sie daher die bereitgestellten Vorlagen, die ein längeres Zeitlimit bieten.

Langzeittest 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 deutlich 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 keine Erweiterung der Vorlage für die Ausführung von atest. 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ügen Sie com.android.tradefed.targetprep.PushFilePreparer 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

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 halten Sie sich an die folgenden Namenskonventionen:

    • Beispieltest:sdv-sample-<NAME>-test.xml
    • E2E-Test:sdv-e2e-<NAME>-test.xml
    • Lang andauernder Test:sdv-long-running-<NAME>-test.xml
    • Leistungstest:sdv-performance-<NAME>-test.xml
    • Hardwaretest: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 mit 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 ist für die meisten Tests ausreichend. Erstellen Sie nur dann benutzerdefinierte Konfigurationen, wenn es dafür einen zwingenden Grund gibt.

Standardzeitüberschreitung aktualisieren

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

Standardzeitlimit überschreiben

Wenn Sie das Standard-Zeitlimit überschreiben möchten, fügen Sie am Ende Ihrer Konfigurationsdatei Folgendes hinzu. Lange Tests sollten eine maximale Zeitüberschreitung 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

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

Bei dieser Anleitung wird davon ausgegangen, dass Sie eine funktionierende SDV-Umgebung eingerichtet haben.

Umgebung einrichten

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

  1. Umgebung einrichten und SDV-Ziel starten:

    . 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