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:
moblyabsl-pyist erforderlich, um die Parametrisierung in Tests zu verwenden.pexpectist für die interaktive Befehlsfunktion erforderlich.ptyprocessist 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.
Kopieren Sie den Inhalt der Vorlage:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
Aktualisieren Sie
{MODULE}mit dem Modulnamen Ihres Tests.Fügen Sie jedem Gerät
com.android.tradefed.targetprep.PushFilePreparerhinzu.
<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.
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
- 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 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.
Richten Sie die Umgebung ein und starten Sie das SDV-Ziel:
. build/envsetup.sh lunch <TARGET>Starten Sie die erste Cloud Virtual Device-Instanz (CVD):
cvd create --config=sdv_core_instance1Starten Sie die zweite Cloud Virtual Device-Instanz (CVD) (für Tests mit mehreren VMs):
cvd create --config=sdv_core_instance2Starten 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.
- 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:
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