Einen hostseitigen gerätelosen Test in TF schreiben

Auf dieser Seite erfahren Sie, wie Sie einen hostseitigen Test schreiben, für den kein Gerät, z. B. ein Test, der auf einer Linux GCE-Instanz ausgeführt wird. (Weitere Informationen über Schreiben eines hostgesteuerten Tests, für den ein Gerät erforderlich ist, siehe Schreiben Sie einen hostgesteuerten Test in der Trade Federation.

Hostseitige Testtypen

Über Trade Federation können Sie verschiedene Arten von hostseitigen Tests durchführen. (TF).

Native Tests (gtest)

Native Tests erstellen (gtests) zum Testen einer Plattform. Falls für den Test kein Gerät erforderlich ist, führen Sie ihn auf einem host; läuft der Test auf diese Weise viel schneller. Um solche Tests für die Ausführung auf einen Testhost verwenden, verwenden Sie den TF-Runner HostGTest.

Dies ist ein Beispiel für eine TradeFed-Testkonfiguration:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

Mit der Testkonfiguration wird ein gtest-Test (hello_world_test) auf einem Host ausgeführt. Beispieltest config kann automatisch generiert werden. Sofern Ihr Test keine spezielle Einrichtung oder Bereinigung erfordert, können Sie sich auf die automatische Generierung von Testkonfigurationen verlassen, Konfigurationen.

Zum Konfigurieren eines hostseitigen gtest und zum Aktivieren der automatischen Generierung von Testkonfigurationen legen Sie Folgendes fest: host_supported bis true Zoll Android.bp, z. B. hello_world_test.

Weitere Informationen zum Schreiben eines nativen Tests finden Sie unter Neuen nativen Test hinzufügen Beispiel:

JAR-Hosttests

JAR-Host-Tests (Java) wie JUnit sind Tests, die nicht auf einem Gerät ausgeführt werden müssen und Code liefern. Ihres Java-Projekts abzudecken. Solche Tests können so konfiguriert werden, dass sie in einem Test ausgeführt werden. mithilfe des Runners HostTest enthalten.

TradeFed-Testkonfigurationsbeispiel

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Die Testkonfiguration führt einen JUnit-Test auf Hostseite von HelloWorldHostTest aus. Beachten Sie, dass die obige Testkonfiguration automatisch generiert werden. Wenn Ihr Test keine spezielle Einrichtung oder Bereinigung erfordert, Automatische Generierung von Testkonfigurationen, um einen geeigneten TradeFed-Test zu erstellen Konfiguration.

Weitere Informationen zum Schreiben eines JAR-Hosttests finden Sie in der Seite JAR-Hosttests (Java)

Isolierte Java-Hosttests

Gerätelose Java-Tests können in einer isolierten Umgebung mit geringen Leistungskosten ausgeführt werden. Es gibt jedoch einige wichtige Überlegungen, bevor Sie sich für diese Option entscheiden. zu verbessern.

  • Dies ist der Standard-Runner, der für Robolectric- und JUnit-Einheitentests verwendet wird
  • Tradefed unterstützt nur JUnit-Tests in der Isolationsumgebung.
  • Es werden nur statisch verknüpfte Abhängigkeiten unterstützt. Keine Abhängigkeiten deklariert mit lib sind in den Klassenpfad eingeschlossen.
  • Der Isolations-Runner platziert nur den Shim-Runner und die Test-JAR-Datei im Klassenpfad.
  • Pro Testlauf, der mit diesem Runner ausgeführt wird, gibt es einen gewissen festen Overhead.

Beispiel für Tradefed-Testkonfiguration (isoliert)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Beispiel für eine Soong-Konfiguration für die automatische Generierung

Anstatt die Testkonfiguration wie oben manuell zu erstellen, kann Soong die Konfiguration automatisch generieren: eine Deklaration wie in diesem Beispiel.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Robolektrische Tests

Robolectric-Tests verwenden den gleichen Runner wie die Tests für isolierte Hosts, mit einigen speziellen Optionen.

  • Die Option robolectric-resources aktiviert einige Robolectric-spezifische Befehlszeilenoptionen wird an den Unterprozess übergeben. Außerdem wird der Baum-Build von android-all zum Unterprozess-Klassenpfad. Während die anderen beiden Best Practices sind, ist diese Option erforderlich für Robolectric-Tests mit Erfolg.
  • Die Option java-folder ermöglicht das Ändern der vom Unterprozess verwendeten Java-Laufzeit. Dies ist weil Robolectric bestimmte Java-Versionen bevorzugt, die möglicherweise nicht die bevorzugte JVM des Hostsystems.
  • Mit der Option exclude-paths kann der Unterprozess-Runner das Laden bestimmter Module vermeiden was nützlich ist, wenn eine JAR-Datei überflüssige Klassen enthält, die Ladefehler verursachen können. java. ist ein häufiger Ausschluss, um zu vermeiden, dass SecurityException-Ausnahmen ausgelöst werden.

Robolectric-Beispielkonfiguration

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

Beispielkonfiguration für die automatische Generierung von Robolectric

Anstatt die Testkonfiguration wie oben manuell zu erstellen, kann die Konfiguration mit einer Deklaration wie diesem Beispiel automatisch generieren.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Python-Test

Wenn die Testlogik in Python geschrieben ist, verwenden Sie den Build-Typ python_test_host, um eine par-Datei zu erstellen, die durchgeführt von TF PythonBinaryHostTest.

TradeFed-Testkonfigurationsbeispiel

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

Test-Suite-Einstellung

Damit der hostseitige Test für einen bestimmten Build für TF zugänglich ist, legen Sie den Parameter Einstellung des Testmoduls `test_suites` zu `general-tests`:

test_suites: ["general-tests"],

Mit dieser Einstellung wird der Test general-tests.zip auf das Ziel test_suites.