Instrumentierungstests

Lesen Sie zuerst den Artikel App testen auf developer.android.com. Beachten Sie, dass es einige Unterschiede bei der Verwendung von Instrumentierungstests bei Plattformtests gibt.

Zusammenfassend lässt sich sagen, dass ein Instrumentierungstest eine spezielle Testausführung wie über den Befehl am instrument gestartet, wobei die Zielumgebung wird der Anwendungsprozess neu gestartet und mit dem grundlegenden Anwendungskontext initialisiert. In der VM des Anwendungsprozesses wird ein Instrumentierungs-Thread gestartet. Der Testcode wird in diesem Instrumentierungs-Thread ausgeführt und erhält eine Instrumentation-Instanz, die Zugriff auf den Anwendungskontext und APIs zur Manipulation des zu testenden Anwendungsprozesses bietet.

Schlüsselkonzepte

  • In einem Anwendungspaket muss eine Instrumentierung mit einem <instrumentation> Tag, das unter dem <manifest>-Tag des Manifests des Anwendungspakets verschachtelt ist.
  • kann das Manifest eines Anwendungspakets technisch gesehen mehrere <instrumentation>-Tags, auch wenn diese im Allgemeinen nicht auf diese Weise verwendet werden.
  • Jede <instrumentation> muss Folgendes enthalten:
    • android:name-Attribut: Dies sollte der Name einer abgeleiteten Klasse von Instrumentation die in der Testanwendung enthalten ist. Runner, der verwendet wird. Beispiel: android.support.test.runner.AndroidJUnitRunner
    • muss ein android:targetPackage-Attribut definiert werden. Sein Wert sollte auf das zu testende Anwendungspaket festgelegt.

Zusammenfassung der Schritte

  1. Im Folgenden sind gängige Ziele für hermetische Tests für Framework-Dienste aufgeführt:

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

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

  2. Halten Sie sich an die bestehende Konvention, wenn Sie einem der oben. Wenn Sie ein neues Testmodul einrichten, folgen Sie der Einrichtung von AndroidManifest.xml und Android.mk an einem der Standorte über

  3. Weitere Informationen finden Sie unter frameworks/base/core/tests/coretests/ finden Sie ein Beispiel. Mit diesen Zeilen werden zusätzliche Apps installiert:

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

  5. Erstellen Sie das Testmodul mit „m“, z. B.:

    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 und führen Sie die Tests manuell aus:

    1. Installieren Sie die generierte APK-Datei:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Führen Sie die Tests mit verschiedenen Optionen aus:

      1. alle Tests in der APK-Datei

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. alle Tests in 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 einer bestimmten Klasse

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. mit einer bestimmten 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 Assertion erstellen, wenn die Prüfung bestanden wurde oder nicht. in Außerdem führen alle nicht abgefangenen Ausnahmen ebenfalls zu einem Funktionsfehler.

Zur Ausgabe von Leistungsmesswerten kann Ihr Testcode Folgendes aufrufen: Instrumentation#sendStatus um eine Liste von Schlüssel/Wert-Paaren zu versenden. Beachten Sie dabei Folgendes:

  1. Metriken können eine Ganzzahl oder eine Gleitkommazahl sein
  2. werden alle nicht numerischen Werte verworfen,
  3. Ihre Test-APK kann entweder Funktionstests oder Messwerttests enthalten. Eine Kombination aus beiden wird derzeit nicht unterstützt.