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

Instrumentierungstests

Lesen Sie zuerst Testen Sie Ihre App auf developer.android.com. Beachten Sie, dass es einige Unterschiede gibt, wie Instrumentierungstests beim Plattformtest verwendet werden.

Zusammenfassend bietet ein Instrumentierungstest eine spezielle Testausführungsumgebung, die über den Befehl am instrument gestartet wird, in der der Zielanwendungsprozess neu gestartet und mit dem grundlegenden Anwendungskontext initialisiert wird und ein Instrumentierungsthread innerhalb der Anwendungsprozess-VM gestartet wird. Ihr Testcode startet die Ausführung in diesem Instrumentationsthread und wird mit einer Instrumentation Instanz bereitgestellt, die Zugriff auf den Anwendungskontext und die APIs bietet, um den zu testenden Anwendungsprozess zu bearbeiten.

Schlüssel Konzepte

  • Eine Instrumentierung muss in einem Anwendungspaket deklariert sein, wobei ein <instrumentation> -Tag unter dem <manifest> -Tag des Anwendungspaketmanifests verschachtelt ist.
  • Ein Anwendungspaket-Manifest kann technisch gesehen mehrere <instrumentation> -Tags enthalten, obwohl es auf diese Weise nicht häufig verwendet wird.
  • Jede <instrumentation> muss enthalten:
    • ein android:name Attribut: Es sollte der Name einer Unterklasse von Instrumentation , die in der android.support.test.runner.AndroidJUnitRunner ist normalerweise der verwendete Testläufer, z. B.: android.support.test.runner.AndroidJUnitRunner
    • Es muss ein android:targetPackage Attribut definiert werden. Sein Wert sollte auf das zu testende Anwendungspaket eingestellt werden.

Zusammenfassung der Schritte

  1. Nachfolgend finden Sie gängige Ziele für hermetische Tests gegen Framework-Services:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Wenn Sie ein brandneues Instrumentierungsmodul für Ihre Komponente hinzufügen, lesen Sie

  2. Befolgen Sie die bestehende Konvention, wenn Sie Tests an einer der oben genannten Stellen hinzufügen. Wenn Sie ein neues Testmodul AndroidManifest.xml , folgen Sie bitte den Einstellungen von AndroidManifest.xml und Android.mk an einer der oben genannten Stellen

  3. Ein Beispiel finden Sie unter Frameworks / base / core / tests / coretests / . Beachten Sie, dass diese Zeilen zusätzliche Apps installieren:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Vergessen Sie nicht, Ihren Test als @SmallTest , @MediumTest oder @LargeTest zu markieren

  5. Erstellen Sie das Testmodul mit m, z.

    m FrameworksCoreTests
    
  6. Führen Sie die Tests aus:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Wenn Sie Tradefed nicht verwenden, installieren Sie die Tests manuell und führen Sie sie aus:

    1. Installiere die generierte apk:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    Tipp: Sie verwenden die Instrumentierung der adb shell pm list instrumentation , um die Instrumente in der gerade installierten apk zu finden

    1. Führen Sie die Tests mit verschiedenen Optionen aus:

      1. alle tests in der apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. Alle Tests unter einem bestimmten Java-Paket

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. alle Tests unter einer bestimmten Klasse

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. eine bestimmte Testmethode

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

Ihr Test kann mithilfe von JUnit APIs eine explizite Aussage zum Bestehen oder JUnit . Darüber hinaus führen nicht erfasste Ausnahmen zu einem Funktionsfehler.

Um Leistungsmetriken Instrumentation#sendStatus , kann Ihr Instrumentation#sendStatus , um eine Liste von Schlüssel-Wert-Paaren zu senden. Es ist wichtig zu beachten, dass:

  1. Metriken können Ganzzahlen oder Gleitkommazahlen sein
  2. Nicht numerische Werte werden verworfen
  3. Ihr Test-Apk kann entweder ein Funktionstest oder ein Metriktest sein. Das Mischen beider Tests wird derzeit jedoch nicht unterstützt