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:
moblyabsl-pyErforderlich, um die Parametrisierung in Tests zu verwenden.pexpectErforderlich für die Funktion „Interaktive Befehle“.ptyprocessErforderlich 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.
Kopieren Sie den Inhalt der Vorlage:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
Ersetzen Sie
{MODULE}durch den Modulnamen Ihres Tests.Füge
com.android.tradefed.targetprep.PushFilePreparerzu 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.
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
- Beispieltest:
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.
Richten Sie die Umgebung ein und starten Sie das SDV-Ziel:
. build/envsetup.sh lunch <TARGET>Starten Sie die erste CVD-Instanz:
cvd create --config=sdv_core_instance1Starten Sie die zweite CVD-Instanz (für Tests mit mehreren VMs):
cvd create --config=sdv_core_instance2Starten 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.
- CATBox erstellen:
m catbox - (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:6520Test 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:6521Test 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