Google 致力于为黑人社区推动种族平等。查看具体举措
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Ein Test

Atest ist ein Befehlszeilentool, mit dem Benutzer Android-Tests lokal erstellen, installieren und ausführen können, wodurch Testwiederholungen erheblich beschleunigt werden, ohne dass Kenntnisse über die 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 Testen der Android-Plattform .

Informationen zur Gesamtstruktur von Atest finden Sie im Atest Developer Guide .

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

Befolgen Sie den Atest Developer Workflow , um Atest eine Funktion hinzuzufügen.

Einrichten Ihrer Umgebung

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

Umgebungsvariable festlegen

Legen Sie test_suite für Soong oder LOCAL_COMPATIBILITY_SUITE für Make per Packaging-Build- Skriptregeln fest.

Führen Sie envsetup.sh aus

Führen Sie im Stammverzeichnis der Android-Quellkasse Folgendes aus:

source build/envsetup.sh

Führen Sie das Mittagessen aus

Führen Sie den Befehl lunch , um ein Menü mit unterstützten Geräten aufzurufen. 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

Dadurch werden verschiedene Umgebungsvariablen festgelegt, die zum Ausführen von Atest erforderlich sind, und der Befehl Atest wird zu Ihrem $PATH hinzugefügt.

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 finden Sie unter atest --help .

Möglichkeit Lange Option Beschreibung
-b --build Erstellt Testziele. (Standard)
-i --install Installiert Testartefakte (APKs) auf dem Gerät. (Standard)
-t --test Führt die Tests aus. (Standard)
-s --serial Führt die Tests auf dem angegebenen Gerät aus. Es kann jeweils ein Gerät getestet werden.
-d --disable-teardown Deaktiviert den Testabbau und die Bereinigung.
--info Zeigt die relevanten Informationen zu den angegebenen Zielen und Ausgängen an.
--dry-run Trockenläufe mindestens ohne Bau, Installation und Durchführung von Tests in der Realität
-m --rebuild-module-info module-info.json eine module-info.json Datei module-info.json .
-w --wait-for-debugger Wartet vor der Ausführung auf den Debugger. Nur für Instrumentierungstests.
-v --verbose Zeigt die Protokollierung auf DEBUG-Ebene an.
--iterations Loop-Runs testen, bis die maximale Iteration erreicht ist. (Standardmäßig 10)
--rerun-until-failure Führt alle Tests erneut aus, bis ein Fehler auftritt oder die maximale Iteration erreicht ist. (Standardmäßig 10)
--retry-any-failure Führt fehlgeschlagene Tests erneut aus, bis sie bestanden wurden oder die maximale Iteration erreicht ist. (Standardmäßig 10)
--start-avd Erstellt automatisch eine AVD und führt Tests auf dem virtuellen Gerät aus.
--acloud-create Erstellt AVDs mit dem 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: Das Ausführen eines --host , für den ein Gerät mit --host erforderlich ist, --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 finden Sie unter Festlegen von Schritten: Erstellen, Installieren oder Ausführen.

Tests zum Ausführen

Sie können einen oder mehrere Tests mit test-to-run . Um mehrere Tests auszuführen, trennen Sie die 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 zum Referenzieren eines Tests finden Sie unter Identifizieren von Tests.

Tests identifizieren

Sie können das test-to-run Argument mit dem Modulnamen des Moduls, Modul: Klasse, Klassenname, TF-Integrationstest, Dateipfad oder Paketname angeben.

Modulname

Verwenden Sie den Modulnamen, um ein gesamtes Testmodul auszuführen. LOCAL_MODULE Sie den Namen so ein, wie er in den Variablen Android.mk oder Android.bp Datei LOCAL_MODULE oder LOCAL_PACKAGE_NAME dieses Tests Android.bp wird.

Beispiele:

atest FrameworksServicesTests
atest CtsVideoTestCases

Modul: Klasse

Verwenden Sie Modul: Klasse, um eine einzelne Klasse innerhalb eines Moduls auszuführen. Das Modul ist das gleiche wie unter Modulname beschrieben. Klasse ist der Name der .java in der .java Datei und kann der vollständig qualifizierte Klassenname oder der .java sein.

Beispiele:

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

Klassenname

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

Beispiele:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Verwenden des Moduls: Klassenreferenz wird nach Möglichkeit empfohlen, da Atest mehr Zeit benötigt, um den vollständigen Quellbaum nach möglichen Übereinstimmungen zu durchsuchen, wenn kein Modul angegeben ist.

Beispiele (vom schnellsten zum langsamsten geordnet):

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

TF-Integrationstest

Um Tests auszuführen, die direkt in TradeFed integriert sind (keine Module), geben Sie den Namen so ein, wie er in der Ausgabe des tradefed.sh list configs . Zum 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

Sie können sowohl modulbasierte als auch integrationsbasierte Tests ausführen, indem Sie den Pfad zu der entsprechenden Testdatei oder dem 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 CtsVideoTestCases Modul über den Pfad CtsVideoTestCases

  1. Führen Sie das Modul von Android repo-root :

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

    atest .
    

Beispiel: Führen Sie eine bestimmte Klasse im CtsVideoTestCases Modul über den Pfad aus. 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 android.jank.cts

Angeben von Schritten: 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 Ziele atest -b test-to-run : atest -b test-to-run
  • Führen Sie nur Tests aus: atest -t test-to-run
  • Installiere apk und atest -it test-to-run tests aus: atest -it test-to-run
  • Erstellen und ausführen, aber nicht installieren: atest -bt test-to-run

Atest kann einen Test erzwingen, um den Bereinigungs- / Abbauschritt zu überspringen. Bei vielen Tests, z. B. CTS, wird das Gerät nach dem Ausführen des Tests bereinigt. Der Versuch, den Test mit -t --disable-teardown ohne den Parameter --disable-teardown . Verwenden Sie -d vor -t , um den -t zu überspringen und iterativ zu testen.

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 erstellt werden muss, reduziert dies die Zeit, die zum Ausführen der Tests benötigt wird. Um bestimmte Methoden auszuführen, identifizieren Sie die Klasse auf eine der zur Identifizierung einer Klasse unterstützten Methoden (Modul: Klasse, Dateipfad usw.) und fügen Sie den Namen der Methode hinzu.

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 folgenden zwei Beispiele zeigen die bevorzugten Möglichkeiten zum Ausführen einer einzelnen Methode, testFlagChange . Diese Beispiele werden der Verwendung des Klassennamens vorgezogen, da Atest durch Angabe des Moduls oder des Speicherorts der Java-Datei den Test viel schneller finden kann:

  1. Modul verwenden: Klasse

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. 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 Klassen ausführen

Um mehrere Klassen auszuführen, trennen Sie sie wie Leerzeichen durch Leerzeichen. Atest erstellt und führt Klassen effizient aus. Wenn Sie also eine Teilmenge von Klassen in einem Modul angeben, wird 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 Sie -a , um die Tests für alle verfügbaren Gerätearchitekturen auszuführen, in diesem Beispiel armeabi-v7a (ARM 32-Bit) und arm64-v8a (ARM 64-Bit).

Beispiele:

  • Eingabetests:

    atest -a libinput_tests inputflinger_tests
    

Um einen bestimmten nativen Test auszuwählen, der ausgeführt werden soll, verwenden Sie Doppelpunkt (:), um den Testnamen anzugeben, und 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 mit

atest inputflinger_tests:InputDispatcherTest
ausführen

oder eine individuelle Testmethode unter Verwendung von

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Ausführen von Tests in Iteration

Um Tests in Iteration auszuführen, übergeben Sie einfach das Argument --iterations . Unabhängig davon, ob es erfolgreich ist oder nicht, hört atest nicht auf zu testen, bis die maximale Iteration erreicht ist.

Beispiele:

Standardmäßig iteriert atest zehnmal und gibt eine Ganzzahl an, um die Iterationsrunde zu ändern.

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

Zwei Ansätze, die Benutzer beim Erkennen von Flockentests unterstützen:

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

  • Stoppen Sie, wenn ein Fehler auftritt oder die Iteration die 10. (standardmäßig) Runde 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 wurden oder die maximale Iteration erreicht ist.

  • Angenommen, test-to-run hat fünf Testfälle und einer der Tests schlägt fehl. Führen Sie nur den fehlgeschlagenen Test 10 Mal oder bis zum Bestehen des Tests aus.
    atest test-to-run --retry-any-failure
    
  • Stoppen Sie den fehlgeschlagenen Test, wenn er die 100. Runde besteht oder erreicht.
    atest test-to-run --retry-any-failure 100
    

Ausführen von Tests auf AVDs

Atest kann Tests mit der neu erstellten AVD ausführen. Atest kann Artefakte zusammen mit der Ausführung von acloud create und Tests ausführen, nachdem die AVD erfolgreich erstellt wurde.

Beispiele:

  • Starten Sie eine AVD, bevor Sie Tests auf diesem neu erstellten Gerät ausführen:

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

  • Starten Sie acloud create indem Sie acloud create Argumente acloud create und Tests auf diesem neu erstellten Gerät ausführen.

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

Führen Sie acloud create --help um Details zur Verwendung des Arguments zu acloud create --help .