Tests ausführen (Atest)

Atest ist ein Befehlszeilentool, mit dem Nutzer Android testet lokal, wodurch sich Testwiederholungen erheblich beschleunigen lassen, ohne dass Wissen über das Trade Federation Test-Harnisch Befehlszeilenoptionen. Auf dieser Seite wird erläutert, wie Android mit Atest ausgeführt wird. Tests durchführen.

Allgemeine Informationen zum Schreiben von Tests für Android finden Sie unter Android-Plattformtests.

Informationen zur Gesamtstruktur von Atest finden Sie unter Atest-Entwicklerleitfaden

Informationen zum Ausführen von Tests in TEST_MAPPING-Dateien über Atest finden Sie unter Tests in TEST_MAPPING-Dateien ausführen

Um Atest eine Funktion hinzuzufügen, folgen Sie der Atest-Entwickler-Workflow

Umgebung einrichten

Folgen Sie zum Einrichten Ihrer Atest-Umgebung der Anleitung unter Einrichtung der Umgebung, Ziel auswählen und Code erstellen.

Grundlegende Nutzung

Atest-Befehle haben das folgende Format:

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 verfügbar bis atest --help.

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 Führt einen Probelauf für Atest aus, ohne tatsächlich Tests zu erstellen, zu installieren oder auszuführen.
-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 die Protokollierung auf DEBUG-Ebene an.
--iterations Tests werden in einer Schleife ausgeführt, bis die maximale Wiederholung erreicht ist. (Standardwert 10)
--rerun-until-failure [COUNT=10] Führt alle Tests erneut aus, bis ein Fehler auftritt oder die maximale Wiederholung erreicht haben. (Standardwert 10)
--retry-any-failure [COUNT=10] Fehlgeschlagene Tests werden so lange wiederholt, bis sie bestanden wurden oder die maximale Wiederholung erreicht ist. (10 standardmäßig)
--start-avd Erstellt automatisch ein AVD und führt Tests auf dem virtuellen Gerät aus.
--acloud-create Erstellt mit dem Befehl acloud ein AVD.
--[CUSTOM_ARGS] Gibt benutzerdefinierte Argumente für die Test-Runner an.
-a --all-abi Führt die Tests für alle verfügbaren Gerätearchitekturen aus.
--host Der Test wird vollständig auf dem Host ohne Gerät ausgeführt.
Hinweis: Hosttest ausführen, für den ein Gerät mit --host erforderlich ist schlägt fehl.
--history Testergebnisse in chronologischer Reihenfolge anzeigen.
--latest-result Druckt das letzte Testergebnis aus.

Weitere Informationen zu -b, -i und -t finden Sie in der Schritte angeben: erstellen, installieren oder ausführen

Tests angeben

Geben Sie zum Ausführen von Tests einen oder mehrere Tests mit einer der folgenden Optionen an: Kennzeichnungen:

  • Modulname
  • Modul:Klasse
  • Kursname
  • Tradefed-Integrationstest
  • Dateipfad
  • Paketname

Trennen Sie Verweise auf mehrere Tests durch Leerzeichen. Beispiel:

atest test-identifier-1 test-identifier-2

Modulname

Wenn du ein ganzes Testmodul ausführen möchtest, verwende den Modulnamen. Geben Sie den Namen so ein, wie er angezeigt wird. die Variablen LOCAL_MODULE oder LOCAL_PACKAGE_NAME in diesem Test Android.mk- oder Android.bp-Datei.

Beispiele:

atest FrameworksServicesTests
atest CtsVideoTestCases

Modul:Klasse

Um eine einzelne Klasse innerhalb eines Moduls auszuführen, verwenden Sie Module:Class. Modul ist das wie unter Modulname beschrieben. Class ist der Name der Klasse Testklasse in der Datei .java und kann der voll qualifizierte Klassenname oder die grundlegenden Namen verwenden.

Beispiele:

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

Kursname

Um eine einzelne Klasse auszuführen, ohne explizit einen Modulnamen anzugeben, verwenden Sie die Klasse Namen.

Beispiele:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Tradefed-Integrationstest

Um Tests durchzuführen, die direkt in TradeFed (nicht Module) integriert sind, geben Sie die wie er in der Ausgabe des Befehls tradefed.sh list configs angezeigt wird. Für Beispiel:

Um den reboot.xml-Test:

atest example/reboot

Um den native-benchmark.xml-Test:

atest native-benchmark

Dateipfad

Atest unterstützt die Ausführung von modul- und integrationsbasierten Tests durch und geben den Pfad zu ihrer Testdatei bzw. zum Testverzeichnis nach Bedarf ein. Außerdem unterstützt die Ausführung einer einzelnen Klasse, indem der Pfad zur Java-Datei der Klasse angegeben wird. Sowohl relative als auch absolute Pfade werden unterstützt.

Modul ausführen

Die folgenden Beispiele zeigen zwei Möglichkeiten, das Modul CtsVideoTestCases mit einen Dateipfad.

Unter Android repo-root ausführen:

atest cts/tests/video

Unter Android repo-root/cts/tests/video ausführen:

    atest .

Testklasse ausführen

Das folgende Beispiel zeigt, wie Sie eine bestimmte Klasse innerhalb der CtsVideoTestCases-Modul mithilfe eines Dateipfads.

Von 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 ausgeführt wird von Android repo-root:

    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

Verwenden Sie die Optionen -b, -i und -t, um anzugeben, welche Schritte ausgeführt werden sollen. Wenn 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
  • Installiere das APK und führe Tests aus: atest -it test-to-run
  • atest -bt test-to-run erstellen und ausführen, aber nicht installieren

Atest kann erzwingen, dass bei einem Test der Bereinigungs- oder Bereinigungsschritt übersprungen wird. Viele Tests, wie z. B. CTS, bereinigen Sie das Gerät nach Abschluss des Tests, versuchen Sie also, den Test zu wiederholen. mit -t schlägt ohne den Parameter --disable-teardown fehl. Verwende -d vor dem -t, um den Schritt zur Testbereinigung zu überspringen und einen iterativen Test durchzuführen.

atest -d test-to-run
atest -t test-to-run

Bestimmte Methoden ausführen

Atest unterstützt die Ausführung bestimmter Methoden innerhalb einer Testklasse. Obwohl die gesamte -Modul erstellt werden muss, reduziert sich die Zeit, die zum Ausführen der Tests benötigt wird. Zum Ausführen Methoden finden, identifizieren Sie die Klasse mithilfe einer der Methoden, die für eine Klasse identifizieren (Modul:Klasse, Dateipfad usw.) und fügen Sie den Namen der :

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 zur Ausführung einer einzelnen Methode. testFlagChange Diese Beispiele werden gegenüber der ausschließlichen Verwendung des Klassennamens bevorzugt. da Atest das Modul oder den Speicherort der Java-Datei angeben kann, viel schneller testen können.

Mit Modul:Klasse:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Von 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 Kurse ausführen möchten, trennen Sie sie wie bei der Ausführung durch Leerzeichen. mehrere Tests durchführen. Atest erstellt und führt Klassen effizient aus. eine Untergruppe von Klassen in einem Modul verbessert die Leistung gegenüber der Ausführung des gesamten -Modul.

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ärprogramme ausführen

Atest kann GTest-Binärdateien ausführen. Verwenden Sie -a, um diese Tests für alle verfügbaren Gerätearchitekturen, in diesem Beispiel armeabi-v7a (ARM 32-Bit) und arm64-v8a (ARM 64-Bit).

Beispiel für einen Eingabetest:

atest -a libinput_tests inputflinger_tests

Verwenden Sie einen Doppelpunkt (:), um den Test anzugeben, um eine bestimmte GTest-Binärdatei auszuwählen, die ausgeführt werden soll Name und eine Raute (#) enthalten, um eine individuelle Methode zu spezifizieren.

Zum 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

Oder führen Sie einen individuellen Test mit folgendem Code durch:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Tests in TEST_MAPPING ausführen

Atest kann Tests in TEST_MAPPING-Dateien ausführen.

Tests vor dem Senden implizit ausführen

Führe Tests zum Vorabsenden in TEST_MAPPING-Dateien im aktuellen und übergeordneten Verzeichnis aus:

atest

Führe Tests zum Vorabsenden in TEST_MAPPING Dateien in /path/to/project durch und zugehörigen übergeordneten Verzeichnissen:

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 postsubmit-Tests in TEST_MAPPING-Dateien im aktuellen und übergeordneten Verzeichnis aus:

atest :postsubmit

Führen Sie Tests für alle Gruppen in TEST_MAPPING-Dateien aus:

atest :all

Nach dem Senden durchgeführte Tests in TEST_MAPPING-Dateien in /path/to/project und zugehörigen übergeordneten Verzeichnissen:

atest --test-mapping /path/to/project:postsubmit

Haupttests in TEST_MAPPING-Dateien in /path/to/project ausführen und zugehörigen übergeordneten Verzeichnissen:

atest --test-mapping /path/to/project:mainline-presubmit

Tests in Unterverzeichnissen ausführen

Standardmäßig sucht Atest nur nach Tests in TEST_MAPPING-Dateien ab der das aktuelle oder das angegebene Verzeichnis in seine übergeordneten Verzeichnisse). Wenn Sie auch Um Tests in TEST_MAPPING-Dateien in den Unterverzeichnissen auszuführen, verwenden Sie --include-subdirs. um zu erzwingen, dass Atest diese Tests ebenfalls berücksichtigt:

atest --include-subdirs /path/to/project

Tests in Iteration ausführen

Führen Sie Tests in Iterationen durch, indem Sie das Argument --iterations übergeben. Bestanden oder schlägt er fehl, wiederholt Atest den Test, bis die maximale Iteration erreicht ist.

Beispiele:

Standardmäßig wird Atest zehnmal iteriert. Die Anzahl der Iterationen muss positiv sein Integer

atest test-to-run --iterations
atest test-to-run --iterations 5

Die folgenden Ansätze erleichtern die Erkennung instabiler Tests:

Ansatz 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
    
  • Sie wird beendet, wenn ein Fehler auftritt oder die Iteration die 100. Runde erreicht.
    atest test-to-run --rerun-until-failure 100
    

Methode 2: Führen Sie nur fehlgeschlagene Tests aus, bis sie bestanden wurden oder die maximale Wiederholung erreicht ist.

  • Angenommen, test-to-run hat mehrere Testläufe und einen der folgenden: die Tests scheitern. Führen Sie standardmäßig nur den fehlgeschlagenen Test 10 Mal bzw. bis zum Test bestanden.
    atest test-to-run --retry-any-failure
    
  • Beenden Sie die Ausführung des nicht bestandenen Tests, wenn er bestanden wird oder die 100. Runde erreicht ist.
    atest test-to-run --retry-any-failure 100
    

AVDs testen

Atest kann Tests für eine neu erstellte AVD ausführen. Zum Erstellen acloud create ausführen und Build-Artefakte erstellen, dann führen Sie Ihre Tests anhand der folgenden Beispiele aus.

Starten Sie ein AVD und führen Sie Tests dafür aus:

acloud create --local-instance --local-image && atest test-to-run

Starten Sie ein 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. TradeFed-Befehlszeile hinzufügen Optionen hinzufügen möchten, verwenden Sie die folgende Struktur und stellen Sie sicher, dass Ihre benutzerdefinierten -Argumenten folgen dem Format für Tradefed-Befehlszeilenoptionen.

atest test-to-run -- [CUSTOM_ARGS]

die Optionen für Testmodul, die auf Vorbereitungen oder Testläufer ausgerichtet sind, wie in den Testkonfigurationsdatei:

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

Übergeben Sie Optionen an einen Runner-Typ oder eine Runner-Klasse:

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 finden Sie unter Übergeben Sie Optionen an die Module.