Komplexe Testkonfiguration

Einige Testmodule erfordern möglicherweise eine benutzerdefinierte Einrichtung und Bereinigungsschritte, die nicht im Testlauf selbst durchgeführt werden. Typische Beispiele:

  • andere APK-Dateien installieren (zusätzlich zum Test-APK)
  • einige Dateien auf das Gerät übertragen
  • Befehle ausführen (z.B. adb shell pm ...)

In der Vergangenheit mussten Komponententeams in der Regel einen hostseitigen Test schreiben, um solche Aufgaben auszuführen. Das erfordert ein Verständnis des Trade Federation Harness und erhöht in der Regel die Komplexität eines Testmoduls.

In Anlehnung an CTS haben wir das Konzept der Konfiguration von Testmodulen eingeführt, um diese Aufgaben können Sie die oben aufgeführten allgemeinen Aufgaben mit nur ein paar Zeilen config. Für maximale Flexibilität können Sie sogar Ihr eigenes Ziel Vorbereitende gemäß ITargetPreparer oder ITargetCleaner, und konfigurieren Sie diese so, dass sie in Ihrer eigenen Testmodulkonfiguration verwendet werden.

Eine Testmodulkonfiguration für ein Testmodul ist eine erforderliche XML-Datei, die oben hinzugefügt wird Level-Modul-Quellordner mit dem Namen „AndroidTest.xml“. Die XML-Datei hat das Format einer Konfigurationsdatei, die vom Trade Federation-Harnisch für die Testautomatisierung verwendet wird. Derzeit sind die Haupt-Tags, die über die Konfigurationen des Testmoduls verarbeitet werden, „target_preparer“ und „Test“ Tags.

Zielvorbereitende

Ein „target_preparer“-Tag definiert, wie der Name schon sagt, einen Zielvorbereiter (siehe ITargetPreparer), der eine Einrichtungsmethode bietet, die aufgerufen wird, bevor das Testmodul zum Testen ausgeführt wird. Wenn die im „target_preparer“-Tag referenzierte Klasse auch ITargetCleaner implementiert, wird ihre Deaktivierungsmethode nach Abschluss des Testmoduls aufgerufen.

Um die integrierte allgemeine Modulkonfiguration zu verwenden, fügen Sie eine neue Datei "AndroidTest.xml" unter für Ihr Testmodul auf oberster Ebene und füllen Sie Inhalt:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

Als Beispiel können wir die folgenden Options-Tags hinzufügen (im Kommentarbereich oben) angezeigt wird:

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

Mit den Optionen wird die Testumgebung für Folgendes konfiguriert:

  1. vor dem Aufrufen des Testmoduls den Shell-Befehl „settings put secure“ ausführen. accessibility_enabled 1" auf dem Gerät
  2. Nach Abschluss des Testmoduls den Shell-Befehl „settings put secure“ ausführen accessibility_enabled 0”

In diesem speziellen Beispiel wird die Barrierefreiheit vor und nach der Ausführung des Testmoduls. Anhand eines einfachen Beispiels wird gezeigt, um weitere Informationen zur Verwendung des Tags "option" zu erhalten. Wie oben gezeigt, kann das Tag zwei Attribute haben: Name, Wert. Das Attribut „name“ muss sich auf eine der vom Ersteller angebotenen Optionen beziehen.

Der genaue Zweck des Wertfelds hängt davon ab, wie der Ersteller die Option definiert hat: Es kann sich um einen String, eine Zahl, einen booleschen Wert oder sogar um einen Dateipfad handeln. Hier eine Zusammenfassung der drei gängigen Zielvorbereitungstools:

  • Klassenname: PushFilePreparer

    • Kurzname: push-file
    • Funktion: verschiebt beliebige Dateien im Ordner des Testlaufs in Ziel auf dem Gerät
    • Hinweise:
      • Dieser Vorbereitende kann Daten von Ordner zu Ordner oder von Datei zu Datei übertragen. das können Sie keine Dateien in einen Ordner auf dem Gerät verschieben: Sie müssen geben Sie auch den Zieldateinamen unter diesem Ordner an.
    • Optionen:
      • push-file:Eine Push-Spezifikation, die die lokale Datei im Pfad angibt wo es auf dem Gerät platziert werden soll. Kann wiederholt werden. Wenn mehrere Dateien so konfiguriert sind, dass sie an denselben Remotepfad gepusht werden, wird die neueste Datei gepusht.
      • push: (verworfen) Eine Push-Spezifikation, die wie folgt formatiert ist: „/path/to/srcfile.txt->/path/to/destfile.txt“ oder "/path/to/srcfile.txt->/path/to/destdir/". Kann wiederholt werden. Dieser Pfad kann relativ zum Verzeichnis des Testmoduls oder zum Out Verzeichnis selbst.
      • post-push:Ein Befehl, der auf dem Gerät (mit adb shell <your command>) ausgeführt wird, nachdem alle Push-Vorgänge versucht wurden. Typische Verwendung Fall mit chmod für Berechtigungen
  • Klassenname: InstallApkSetup

    • Kurzname:install-apk
    • Funktion:verschiebt beliebige APK-Dateien in das Ziel bei Gerät
    • Optionen:
      • test-file-name: Der Name der APK, die auf dem Gerät installiert werden soll.
      • install-arg:Zusätzliche Argumente, die an die Installation von „pm“ übergeben werden sollen Befehl einschließlich vorangestelltem Bindestrich, z.B. „-d“. Kann wiederholt werden
  • Klassenname: RunCommandTargetPreparer

    • Kurzname: run-command
    • Funktion:Führt vor oder nach dem Test beliebige Shell-Befehle aus Modulausführung
    • Optionen:
      • run-command:adb-Shell-Befehl ausführen. Kann wiederholt werden
      • teardown-command: adb-Shell-Befehl, der während der Deaktivierungsphase ausgeführt werden soll. Kann wiederholt werden

Testklasse

Eine Testklasse ist die Handelsföderationsklasse, die zum Ausführen des Tests verwendet wird.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

Hier sind drei gängige Testklassen:

  • Klassenname: GTest

    • Kurzname:gtest
    • Funktion:Ein Test, der ein natives Testpaket auf einem bestimmten Gerät ausführt.
    • Optionen:
      • native-test-device-path: Der Pfad auf dem Gerät, unter dem sich native Tests befinden.
  • class name: InstrumentationTest

    • Kurzname:Instrumentierung
    • Funktion:Ein Test, der ein Instrumentierungstestpaket auf einem bestimmten Gerät ausführt
    • Optionen:
      • package: Der Name des Manifestpakets der Android-Testanwendung, die ausgeführt werden soll.
      • class: Der Name der Testklasse, die ausgeführt werden soll.
      • method:Der Name der Testmethode, die ausgeführt werden soll.
  • Klassenname: AndroidJUnitTest

    • function: Ein Test, bei dem ein Instrumentierungstestpaket mit dem android.support.test.runner.AndroidJUnitRunner auf einem bestimmten Gerät ausgeführt wird. Dies ist die Hauptmethode zum Ausführen eines Instrumentierungstests.