Atest ist ein Befehlszeilentool, mit dem Nutzer Android-Tests lokal erstellen, installieren und ausführen können. Dadurch werden Wiederholungen von Tests erheblich beschleunigt, ohne dass Kenntnisse der Befehlszeilenoptionen des Trade Federation Test Harness erforderlich sind. Auf dieser Seite wird erläutert, wie Sie mit Atest Android-Tests ausführen.
Allgemeine Informationen zum Schreiben von Tests für Android finden Sie unter Android-Plattformtests.
Informationen zur allgemeinen Struktur von Atest finden Sie im Atest-Entwicklerleitfaden.
Informationen zum Ausführen von Tests in TEST_MAPPING-Dateien über Atest finden Sie unter Tests in TEST_MAPPING-Dateien ausführen.
Wenn Sie Atest eine Funktion hinzufügen möchten, folgen Sie dem Atest-Entwickler-Workflow.
Umgebung einrichten
Folgen Sie zum Einrichten einer Atest-Umgebung der Anleitung unter Umgebung einrichten, Ziel auswählen und Code erstellen.
Grundlegende Nutzung
Atest-Befehle haben folgende Form:
atest test-to-run [optional-arguments]
Optionale Argumente
In der folgenden Tabelle sind die am häufigsten verwendeten Argumente aufgeführt. Eine vollständige Liste ist über atest --help
verfügbar.
Option | Lange Option | Beschreibung |
---|---|---|
-b |
--build |
Erstellt Testziele. (Standard) |
-i |
--install |
Testartefakte (APKs) werden auf dem Gerät installiert. (Standard) |
-t |
--test |
Führt die Tests aus. (Standard) |
-s |
--serial |
Führt die Tests auf dem angegebenen Gerät aus. Es kann jeweils nur ein Gerät getestet werden. |
-d |
--disable-teardown |
Deaktiviert das Teardown und die Bereinigung. |
|
--dry-run |
Bei einem Trockenlauf werden keine Tests erstellt, installiert oder ausgeführt. |
-m |
--rebuild-module-info |
Erzwingt die Neuerstellung der Datei module-info.json . |
-w |
--wait-for-debugger |
Wartet auf den Abschluss des Debuggers, bevor er ausgeführt wird. |
-v |
--verbose |
Zeigt Protokolle auf DEBUG-Ebene an. |
|
--iterations |
Bei Schleifen werden Tests ausgeführt, bis die maximale Iteration erreicht ist. (Standard: 10) |
|
--rerun-until-failure [COUNT=10] |
Alle Tests werden wiederholt, bis ein Fehler auftritt oder die maximale Iteration erreicht wird. (Standard: 10) |
|
--retry-any-failure [COUNT=10] |
Fehlgeschlagene Tests werden wiederholt, bis sie bestanden sind oder die maximale Iteration erreicht wird. (Standard: 10) |
|
--start-avd |
Erstellt automatisch eine AVD und führt Tests auf dem virtuellen Gerät aus. |
|
--acloud-create |
Erstellt eine AVD mit dem Befehl acloud . |
|
--[CUSTOM_ARGS] |
Hier können Sie benutzerdefinierte Argumente für die Testläufer angeben. |
-a |
--all-abi |
Die Tests werden für alle verfügbaren Gerätearchitekturen ausgeführt. |
|
--host |
Der Test wird vollständig auf dem Host ohne Gerät ausgeführt. Hinweis: Wenn für einen Hosttest ein Gerät mit --host erforderlich ist, schlägt der Test fehl. |
|
--history |
Testergebnisse werden in chronologischer Reihenfolge angezeigt. |
|
--latest-result |
Das neueste Testergebnis wird ausgegeben. |
Weitere Informationen zu -b
, -i
und -t
finden Sie im Abschnitt Schritte festlegen: erstellen, installieren oder ausführen.
Tests angeben
Geben Sie einen oder mehrere Tests mit einer der folgenden IDs an, um sie auszuführen:
- Modulname
- Modul:Klasse
- Kursname
- Tradefed-Integrationstest
- Dateipfad
- Paketname
Trennen Sie Verweise auf mehrere Tests durch Leerzeichen, z. B. so:
atest test-identifier-1 test-identifier-2
Modulname
Wenn Sie ein gesamtes Testmodul ausführen möchten, verwenden Sie den Modulnamen. Geben Sie den Namen so ein, wie er in den Variablen LOCAL_MODULE
oder LOCAL_PACKAGE_NAME
in der Datei Android.mk
oder Android.bp
dieses Tests angezeigt wird.
Beispiele:
atest FrameworksServicesTests
atest CtsVideoTestCases
Modul:Klasse
Um eine einzelne Klasse innerhalb eines Moduls auszuführen, verwenden Sie Module:Class. Modul entspricht der Beschreibung unter Modulname. Klasse ist der Name der Testklasse in der Datei .java
und kann der vollständig qualifizierte Klassenname oder der einfache Name sein.
Beispiele:
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Kursname
Wenn Sie eine einzelne Klasse ausführen möchten, ohne explizit einen Modulnamen anzugeben, verwenden Sie den Klassennamen.
Beispiele:
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
Tradefed-Integrationstest
Wenn Sie Tests ausführen möchten, die direkt in TradeFed integriert sind (keine Module), geben Sie den Namen so ein, wie er in der Ausgabe des Befehls tradefed.sh list configs
angezeigt wird. Beispiel:
So führen Sie den reboot.xml
-Test aus:
atest example/reboot
So führen Sie den native-benchmark.xml
-Test aus:
atest native-benchmark
Dateipfad
Atest unterstützt sowohl modulbasierte als auch integrationsbasierte Tests. Geben Sie dazu den Pfad zur Testdatei oder zum Testverzeichnis ein. Es unterstützt auch das Ausführen einer einzelnen Klasse, indem der Pfad zur Java-Datei der Klasse angegeben wird. Es werden sowohl relative als auch absolute Pfade unterstützt.
Modul ausführen
In den folgenden Beispielen werden zwei Möglichkeiten zum Ausführen des CtsVideoTestCases
-Moduls mit einem Dateipfad gezeigt.
Über Android repo-root
ausführen:
atest cts/tests/video
Unter Android repo-root/cts/tests/video
ausführen:
atest .
Testklasse ausführen
Im folgenden Beispiel wird gezeigt, wie eine bestimmte Klasse innerhalb des CtsVideoTestCases
-Moduls mit einem Dateipfad ausgeführt wird.
Unter Android repo-root
:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Integrationstest ausführen
Das folgende Beispiel zeigt, wie ein Integrationstest mit einem Dateipfad von Android repo-root
ausgeführt wird:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Paketname
Atest unterstützt die Suche nach Tests anhand des Paketnamens.
Beispiele:
atest com.android.server.wm
atest com.android.uibench.janktests
Schritte angeben: Erstellen, installieren oder ausführen
Mit den Optionen -b
, -i
und -t
können Sie angeben, welche Schritte ausgeführt werden sollen. Wenn Sie keine Option angeben, werden alle Schritte ausgeführt.
- Nur Build-Ziele:
atest -b test-to-run
- Nur Tests ausführen:
atest -t test-to-run
- APK installieren und Tests ausführen:
atest -it test-to-run
- Erstellen und ausführen, aber nicht installieren:
atest -bt test-to-run
Atest kann erzwingen, dass bei einem Test der Bereinigungs- oder Bereinigungsschritt übersprungen wird. Bei vielen Tests, z. B. beim CTS, wird das Gerät nach dem Test bereinigt. Wenn Sie also versuchen, den Test mit -t
noch einmal auszuführen, schlägt dies ohne den Parameter --disable-teardown
fehl. Verwenden Sie -d
vor -t
, um den Schritt zur Bereinigung des Tests zu überspringen und den Test iterativ durchzuführen.
atest -d test-to-run
atest -t test-to-run
Bestimmte Methoden ausführen
Atest unterstützt das Ausführen bestimmter Methoden innerhalb einer Testklasse. Obwohl das gesamte Modul erstellt werden muss, reduziert sich dadurch die Zeit, die zum Ausführen der Tests benötigt wird. Wenn Sie bestimmte Methoden ausführen möchten, identifizieren Sie die Klasse mithilfe einer der unterstützten Methoden (Modul:Klasse, Dateipfad usw.) und hängen Sie den Namen der Methode an:
atest reference-to-class#method1
Wenn Sie mehrere Methoden angeben, trennen Sie sie durch Kommas:
atest reference-to-class#method1,method2,method3
Beispiele:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
Die folgenden beiden Beispiele zeigen die bevorzugten Methoden zum Ausführen einer einzelnen Methode, testFlagChange
. Diese Beispiele sind vorzuziehen, da Atest den Test viel schneller finden kann, wenn das Modul oder der Speicherort der Java-Datei angegeben wird.
Verwendung von „Modul:Klasse“:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
Unter Android repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
Es können mehrere Methoden aus verschiedenen Klassen und Modulen ausgeführt werden:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
Mehrere Kurse ausführen
Wenn Sie mehrere Klassen ausführen möchten, trennen Sie sie wie bei mehreren Tests durch Leerzeichen. Atest erstellt und führt Klassen effizient aus. Wenn Sie also eine Teilmenge von Klassen in einem Modul angeben, wird die Leistung im Vergleich zum Ausführen des gesamten Moduls verbessert.
So führen Sie zwei Klassen im selben Modul aus:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
So führen Sie zwei Klassen in verschiedenen Modulen aus:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
GTest-Binärdateien ausführen
Atest kann GTest-Binärdateien ausführen. Mit -a
können Sie diese Tests für alle verfügbaren Gerätearchitekturen ausführen. In diesem Beispiel sind das armeabi-v7a
(ARM 32-Bit) und arm64-v8a
(ARM 64-Bit).
Beispiel für einen Eingabetest:
atest -a libinput_tests inputflinger_tests
Wenn Sie ein bestimmtes GTest-Binary ausführen möchten, geben Sie den Testnamen mit einem Doppelpunkt (:) und eine einzelne Methode mit einem Hashtag (#) an.
Beispiel für die folgende Testdefinition:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Führen Sie folgenden Befehl aus, um den gesamten Test anzugeben:
atest inputflinger_tests:InputDispatcherTest
Sie können auch einen einzelnen Test mit folgendem Befehl ausführen:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
Tests in TEST_MAPPING ausführen
Atest kann Tests in TEST_MAPPING
-Dateien ausführen.
Vorabtests implizit ausführen
Führen Sie Presubmit-Tests in TEST_MAPPING
-Dateien im aktuellen und übergeordneten Verzeichnis aus:
atest
Führen Sie Presubmit-Tests in TEST_MAPPING
-Dateien in /path/to/project und den übergeordneten Verzeichnissen aus:
atest --test-mapping /path/to/project
Eine bestimmte Testgruppe ausführen
Die verfügbaren Testgruppen sind: presubmit
(Standardeinstellung), postsubmit
, mainline-presubmit
und all
.
Führen Sie Post-Submit-Tests in TEST_MAPPING-Dateien im aktuellen und übergeordneten Verzeichnis aus:
atest :postsubmit
Tests aus allen Gruppen in TEST_MAPPING-Dateien ausführen:
atest :all
Führen Sie postsubmit-Tests in TEST_MAPPING-Dateien in /path/to/project und den übergeordneten Verzeichnissen aus:
atest --test-mapping /path/to/project:postsubmit
Führen Sie Haupttests in TEST_MAPPING-Dateien in /path/to/project und den übergeordneten Verzeichnissen aus:
atest --test-mapping /path/to/project:mainline-presubmit
Tests in Unterverzeichnissen ausführen
Standardmäßig sucht Atest nur in TEST_MAPPING-Dateien nach oben (vom aktuellen oder angegebenen Verzeichnis bis zu den übergeordneten Verzeichnissen). Wenn Sie auch Tests in TEST_MAPPING-Dateien in den Unterverzeichnissen ausführen möchten, verwenden Sie --include-subdirs
, um Atest zu zwingen, auch diese Tests einzubeziehen:
atest --include-subdirs /path/to/project
Tests in Iterationen ausführen
Wenn Sie Tests in einer Iteration ausführen möchten, geben Sie das Argument --iterations
an. Unabhängig davon, ob der Test bestanden oder fehlgeschlagen ist, wird er von Atest wiederholt, bis die maximale Iteration erreicht ist.
Beispiele:
Standardmäßig wird Atest zehnmal ausgeführt. Die Anzahl der Iterationen muss eine positive Ganzzahl sein.
atest test-to-run --iterations
atest test-to-run --iterations 5
Mit den folgenden Ansätzen lassen sich fehlerhafte Tests leichter erkennen:
Methode 1: Alle Tests ausführen, bis ein Fehler auftritt oder die maximale Iteration erreicht ist.
- Sie wird beendet, wenn ein Fehler auftritt oder die Iteration (standardmäßig) die 10. Runde erreicht.
atest test-to-run --rerun-until-failure
- Beenden Sie die Iteration, wenn ein Fehler auftritt oder die 100. Runde erreicht wird.
atest test-to-run --rerun-until-failure 100
Ansatz 2: Nur fehlgeschlagene Tests ausführen, bis sie bestanden sind oder die maximale Iteration erreicht ist.
- Angenommen,
test-to-run
hat mehrere Testfälle und einer der Tests schlägt fehl. Führen Sie nur den fehlgeschlagenen Test zehnmal aus (standardmäßig) oder bis der Test bestanden ist.atest test-to-run --retry-any-failure
- Beenden Sie den fehlgeschlagenen Test, wenn er bestanden wird oder die 100. Runde erreicht.
atest test-to-run --retry-any-failure 100
Tests auf AVDs ausführen
Mit Atest können Tests auf einer neu erstellten AVD ausgeführt werden. Führen Sie acloud create
aus, um eine AVD zu erstellen und Artefakte zu erstellen, und verwenden Sie dann die folgenden Beispiele, um Ihre Tests auszuführen.
So starten Sie eine AVD und führen Tests darauf aus:
acloud create --local-instance --local-image && atest test-to-run
So starten Sie eine AVD im Rahmen eines Testlaufs:
atest test-to-run --acloud-create "--local-instance --local-image"
Weitere Informationen erhalten Sie, wenn Sie acloud create --help
ausführen.
Optionen an Modul weitergeben
Atest kann Optionen an Testmodule übergeben. Verwenden Sie die folgende Struktur, um Ihrem Testlauf Befehlszeilenoptionen für TradeFed hinzuzufügen, und achten Sie darauf, dass Ihre benutzerdefinierten Argumente dem Format der Befehlszeilenoptionen von TradeFed entsprechen.
atest test-to-run -- [CUSTOM_ARGS]
Übergeben Sie Testmoduloptionen an Zielvorbereiter oder Testausführer, die in der Testkonfigurationsdatei definiert sind:
atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Optionen an einen Läufertyp oder eine Läuferklasse übergeben:
atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Weitere Informationen zu reinen Testoptionen findest du unter Optionen an die Module weitergeben.