Ein Test

Atest ist ein Kommandozeilen - Tool, mit dem Benutzer erstellen können, installieren und laufen lokal Android Tests, stark ohne Testwiederholungsläufen , die Beschleunigung , die Kenntnisse über Trade Federation Prüfkabelbaum Befehlszeilenoptionen. Auf dieser Seite wird erläutert, wie Sie mit Atest Android-Tests ausführen.

Allgemeine Informationen über die Tests für Android schreiben, siehe Android Platform Testing .

Für Informationen über die Gesamtstruktur Atest finden Atest Developer Guide .

Weitere Informationen zu Tests in TEST_MAPPING Dateien durch Atest ausgeführt wird , finden Tests in TEST_MAPPING Dateien laufen .

Und ein Feature Atest hinzuzufügen, folgen Atest Entwickler - Workflow .

Einrichten Ihrer Umgebung

Führen Sie zum Ausführen von Atest die Schritte in den folgenden Abschnitten aus, um Ihre Umgebung einzurichten.

Umgebungsvariable setzen

Set test_suite für Soong oder LOCAL_COMPATIBILITY_SUITE für Make pro Verpackung Build - Skript Regeln .

Führen Sie envsetup.sh aus

Führen Sie im Stammverzeichnis des Android-Quellcheckouts Folgendes aus:

source build/envsetup.sh

Mittagessen ausführen

Führen Sie das lunch Befehl bringt ein Menü der unterstützten Geräte. Suchen Sie das Gerät und führen Sie diesen Befehl aus.

Wenn Sie beispielsweise ein ARM-Gerät angeschlossen haben, führen Sie den folgenden Befehl aus:

lunch aosp_arm64-eng

Dies setzt verschiedene Umgebungsvariablen , die für Atest ausgeführt und fügt den Atest Befehl zu Ihrem $PATH .

Grundlegende Verwendung

Atest-Befehle haben die folgende Form:

atest test-to-run [optional-arguments]

Optionale Argumente

Nachfolgend sind die am häufigsten verwendeten Argumente aufgeführt. Eine vollständige Liste ist durch die verfügbare atest --help .

Möglichkeit Lange Option Beschreibung
-b --build Erstellt Testziele. (Ursprünglich)
-i --install Installiert Testartefakte (APKs) auf dem Gerät. (Ursprünglich)
-t --test Führt die Tests aus. (Ursprünglich)
-s --serial Führt die Tests auf dem angegebenen Gerät aus. Es kann jeweils ein Gerät getestet werden.
-d --disable-teardown Deaktiviert Test-Teardown und -Bereinigung.
--info Zeigt die relevanten Informationen der angegebenen Ziele und Exits an.
--dry-run Testläufe ohne Testaufbau, Installation und Durchführung von Tests in der Realität
-m --rebuild-module-info Erzwingt eine der Wiederaufbau module-info.json Datei.
-w --wait-for-debugger Wartet auf den Debugger vor der Ausführung. Nur für Gerätetests.
-v --verbose Zeigt die Protokollierung auf DEBUG-Ebene an.
--iterations Schleife führt Tests durch, bis die maximale Iteration erreicht ist. (10 standardmäßig)
--rerun-until-failure [COUNT=10] Führt alle Tests erneut aus, bis ein Fehler auftritt oder die maximale Iteration erreicht ist. (10 standardmäßig)
--retry-any-failure [COUNT=10] Führt fehlgeschlagene Tests erneut aus, bis sie bestanden oder die maximale Iteration erreicht ist. (10 standardmäßig)
--start-avd Erstellt automatisch ein AVD und führt Tests auf dem virtuellen Gerät aus.
--acloud-create Erzeugt AVDS die Verwendung acloud command.
--[CUSTOM_ARGS] Gibt benutzerdefinierte Argumente für die Testläufer an.
-a --all-abi Führt die Tests für alle verfügbaren Gerätearchitekturen aus.
--host Führt den Test vollständig auf dem Host ohne Gerät aus.
(Hinweis: Der Betrieb des Host - Test, ein Gerät mit erfordert --host fehl.)
--flakes-info Zeigt das Testergebnis mit Flockeninfo an.
--history Zeigt das Testergebnis in chronologischer Reihenfolge an.
--latest-result Druckt das neueste Testergebnis.

Weitere Informationen zu -b , -i und -t , siehe Festlegen Schritte: Build, installieren oder laufen.

Tests zum Ausführen

Sie können einen oder mehrere Tests durchgeführt unter Verwendung von test-to-run . Um mehrere Tests auszuführen, trennen Sie Testreferenzen durch Leerzeichen. Zum Beispiel:

atest test-to-run-1 test-to-run-2

Hier sind einige Beispiele:

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsVideoTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

Weitere Informationen darüber , wie ein Test empfohlen , siehe Identifizierung Tests.

Identifizieren von Tests

Sie können das angeben test-to-run - Argument mit dem Modulnamen-Test, Modul: Klasse, Klassennamen, TF Integrationstest, den Dateipfad oder Paketnamen.

Modulname

Um ein ganzes Testmodul auszuführen, verwenden Sie seinen Modulnamen. Geben Sie den Namen , wie es in dem erscheint LOCAL_MODULE oder LOCAL_PACKAGE_NAME Variablen in diesem Test des 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: Klasse. Modul ist das gleiche wie in den Modulnamen . Klasse ist der Name der Testklasse in der .java - Datei und kann die vollständig qualifizierten Klassennamen oder der Grund Name sein.

Beispiele:

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

Klassenname

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

Beispiele:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Verwenden der Moduls: Klasse Referenz wird empfohlen , wann immer möglich , da Atest mehr Zeit erfordert die komplette Source - Tree für mögliche Übereinstimmungen zu suchen , wenn kein Modul angegeben ist.

Beispiele (von der schnellsten zur langsamsten geordnet):

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

TF-Integrationstest

Laufen Tests , die direkt in TradeFed (non-Module), geben Sie den Namen integriert sind , wie es in dem Ausgang des erscheint tradefed.sh list configs Befehl. Zum Beispiel:

Um den Lauf reboot.xml Test :

atest example/reboot

So führen Sie das native-benchmark.xml Test :

atest native-benchmark

Dateipfad

Sie können sowohl modulbasierte Tests als auch integrationsbasierte Tests ausführen, indem Sie den Pfad zu ihrer Testdatei oder ihrem entsprechenden Verzeichnis eingeben. Sie können auch eine einzelne Klasse ausführen, indem Sie den Pfad zur Java-Datei der Klasse angeben. Es werden sowohl relative als auch absolute Pfade unterstützt.

Beispiel: Zwei Möglichkeiten , das laufen CtsVideoTestCases Modul über den Pfad

  1. Run - Modul von Android repo-root :

    atest cts/tests/video
    
  2. Von Android repo-root / cts / Tests / Video:

    atest .
    

Beispiel: Führen Sie eine spezielle Klasse innerhalb CtsVideoTestCases Modul über den Weg. Von Android - repo-root :

atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

Beispiel: Führen Sie einen Integrationstest über den Pfad aus. Von Android - repo-root :

atest tools/tradefederation/contrib/res/config/example/reboot.xml

Paketnamen

Atest unterstützt die Suche nach Tests nach Paketnamen.

Beispiele:

atest com.android.server.wm
atest com.android.uibench.janktests

Schritte angeben: Erstellen, installieren oder ausführen

Sie können festlegen , welche unter Verwendung des ausführen Schritt -b , -i und -t - Optionen. Wenn Sie keine Option angeben, werden alle Schritte ausgeführt.

  • Build - Ziele nur: atest -b test-to-run
  • Führen Sie Tests nur: atest -t test-to-run
  • Installieren Sie apk und führten Tests: atest -it test-to-run
  • Aufbau und Betrieb, aber nicht installieren: atest -bt test-to-run

Atest kann erzwingen, dass ein Test den Bereinigungs-/Teardown-Schritt überspringt. Viele Tests, wie CTS, sauber bis das Gerät nach dem Test durchgeführt wird, so versuchen , Ihren Test erneut ausführen mit -t ohne fehl --disable-teardown - Parameter. Verwenden Sie -d vor -t den Test aufzuräumen Schritt und Test iterativ zu überspringen.

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

Ausführen bestimmter Methoden

Sie können bestimmte Methoden innerhalb einer Testklasse ausführen. Obwohl das gesamte Modul gebaut werden muss, reduziert dies die Zeit, die für die Durchführung der Tests benötigt wird. Um bestimmte Methoden auszuführen, identifizieren Sie die Klasse mit einer der unterstützten Methoden zum Identifizieren einer Klasse (Modul:Klasse, Dateipfad usw.) und hängen Sie den Namen der Methode an.

atest reference-to-class#method1

Sie können mehrere Methoden mit Kommas angeben.

atest reference-to-class#method1,method2,method3

Beispiele:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

Die beiden folgenden Beispiele zeigen die bevorzugte Art und Weise eine einzige Methode, laufen testFlagChange . Diese Beispiele werden der bloßen Verwendung des Klassennamens vorgezogen, da die Angabe des Moduls oder des Speicherorts der Java-Datei es Atest ermöglicht, den Test viel schneller zu finden:

  1. Verwenden des Moduls:Klasse

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. Von Android repo-root

    atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
    

Mehrere Methoden können von verschiedenen Klassen und Modulen ausgeführt werden:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Mehrere Klassen ausführen

Um mehrere Klassen auszuführen, trennen Sie sie durch Leerzeichen auf dieselbe Weise wie beim Ausführen mehrerer Tests. Atest erstellt und führt Klassen effizient aus, sodass die Angabe einer Teilmenge von Klassen in einem Modul die Leistung gegenüber der Ausführung des gesamten Moduls verbessert.

Beispiele:

  • Zwei Klassen im selben Modul:

    atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
    
  • Zwei Klassen in verschiedenen Modulen:

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
    

Ausführen nativer Tests

Atest kann native Tests ausführen. Verwenden -a , die Tests für alle verfügbaren Gerätearchitekturen ausgeführt werden , die in diesem Beispiel sind armeabi-V7A (ARM 32-bit) und arm64-V8A (ARM 64-bit).

Beispiele:

  • Eingabetests:

    atest -a libinput_tests inputflinger_tests
    

Um einen bestimmten nativen Test zum Ausführen auszuwählen, verwenden Sie den Doppelpunkt (:), um den Testnamen anzugeben, und den Hashtag (#), um eine einzelne Methode weiter anzugeben. Zum Beispiel für die folgende Testdefinition:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Sie können den gesamten Test laufen

atest inputflinger_tests:InputDispatcherTest

oder ein individuelles Testmethode unter Verwendung von

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Ausführen von Tests in TEST_MAPPING

Atest kann Tests in TEST_MAPPING-Dateien ausführen.

  1. Führen Sie Pre-Submit-Tests implizit in TEST_MAPPING-Dateien in aktuellen, übergeordneten oder spezifischen Verzeichnissen aus.

    Führen Sie preSubmit Tests in TEST_MAPPING Dateien in aktuellen und übergeordneten Verzeichnissen:

    atest
    

    Führen Sie preSubmit Tests in TEST_MAPPING Dateien in /path/to/project und seine übergeordnete Verzeichnisse:

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

  2. Führen Sie eine bestimmte Testgruppe in TEST_MAPPING - Dateien; verfügbare Testgruppen sind: presubmit (Standard), postsubmit , mainline-presubmit und all .

    • Führen Sie postsubmit Tests in TEST_MAPPING Dateien in aktuellen und übergeordneten Verzeichnissen:

      atest :postsubmit
      

    • Führen Sie Tests aus allen Gruppen in TEST_MAPPING Dateien:

      atest :all
      

    • Führen Sie postsubmit Tests in TEST_MAPPING Dateien in /path/to/project und seine übergeordnete Verzeichnisse

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

    • Führen Sie Ferntests in TEST_MAPPING Dateien in /path/to/project und seine übergeordnete Verzeichnisse

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

  3. Führen Sie Tests in TEST_MAPPING-Dateien einschließlich Unterverzeichnissen aus.

Standardmäßig sucht atest nur nach Tests in TEST_MAPPING-Dateien aufwärts (von den aktuellen oder den angegebenen zu den übergeordneten Verzeichnissen). Wenn Sie auch in TEST_MAPPING Dateien in den Unterverzeichnissen laufen Tests möchten, können Sie Option --include-subdirs zu atest zwingen, diese Tests auch enthalten.

Führen Sie preSubmit Tests in TEST_MAPPING Dateien im aktuellen, Eltern und Unterverzeichnisse:

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

Ausführen von Tests in Iteration

Zum Ausführen von Tests in Iteration, übergeben Sie einfach das --iterations Argument. Unabhängig davon, ob es erfolgreich ist oder fehlschlägt, wird atest das Testen nicht beenden, bis die maximale Iteration erreicht ist.

Beispiele:

Standardmäßig iteriert atest 10 Mal und gibt eine ganze Zahl an, um die Iterationsrunde zu ändern.

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

Zwei Ansätze, die Benutzern helfen, flockige Tests zu erkennen:

Ansatz 1: Führen Sie alle Tests durch, bis ein Fehler auftritt oder die maximale Iteration erreicht ist.

  • Stoppen Sie, wenn ein Fehler auftritt oder die Iteration die 10. Runde (standardmäßig) erreicht.
    atest test-to-run --rerun-until-failure
    
  • Stoppen Sie, wenn ein Fehler auftritt oder die Iteration die 100. Runde erreicht.
    atest test-to-run --rerun-until-failure 100
    

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

  • Es sei angenommen , test-to-run hat fünf Testfälle und einer der Tests fehlschlägt. Führen Sie nur den fehlgeschlagenen Test 10 Mal durch oder bis der Test erfolgreich ist.
    atest test-to-run --retry-any-failure
    
  • Beenden Sie die Ausführung des fehlgeschlagenen Tests, wenn er die 100. Runde besteht oder erreicht hat.
    atest test-to-run --retry-any-failure 100
    

Ausführen von Tests auf AVDs

Atest kann Tests mit dem neu erstellten AVD ausführen. Atest können Artefakte bauen zusammen mit Laufen acloud create und Lauftests nach dem AVD erfolgreich erstellt wurde.

Beispiele:

  • Starten Sie eine AVD vor Tests an diesem neu geschaffenen Gerät ausgeführt wird :

    acloud create && atest test-to-run
    
    : Jetzt kann es durch vereinfacht werden
    atest test-to-run --start-avd
    

  • Starten Sie AVDS von specifing acloud create Argumente und führen Tests auf dieser neu geschaffenen Gerät.

    atest test-to-run --acloud-create "--build-id 6509363 --build-target aosp_cf_x86_phone-userdebug --branch aosp_master"
    

Verbrauch Detail über das Argument zu bekommen, laufen acloud create --help .

Optionen an Modul übergeben

Atest kann Optionen an die Module übergeben. Das kurze Format in Atest Befehlszeilen TradeFed Befehlszeilenoption hinzuzufügen , ist

atest test-to-run -- [CUSTOM_ARGS]
Die [CUSTOM_ARGS] den Tradefed Befehlszeilenoption Formaten folgen sollte.

Beispiele für das Bestehen von Testmoduloptionen an Zielvorbereiter oder Testläufer, 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

Beispiele für Passoptionen an den Läufertyp oder die 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 dem Test nur Optionen finden Pässe Optionen zu den Modulen