Scrivi un test senza dispositivo lato host in TF

Questa pagina spiega come scrivere un test lato host che non richiede una dispositivo, ad esempio un test eseguito su un'istanza GCE Linux. (Per i dettagli su scrivere un test guidato dall'host che richiede un dispositivo, consulta Scrivi un test basato su host nella Trade Federation.

Tipi di test lato host

Puoi eseguire diversi tipi di test lato host tramite la Trade Federation (TF).

Test nativi (gtest)

Creare test nativi (gtest) per testare una piattaforma. Se il test non richiede un dispositivo, eseguilo su host; il test verrà eseguito molto più velocemente in questo modo. Per configurare l'esecuzione di questi test su un host di test, utilizza il runner TF HostGTest.

Ecco un esempio di configurazione di test TradeFed:

<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>

La configurazione di test esegue un test gtest (hello_world_test) su un host. Il test di esempio può essere generata automaticamente. A meno che il test non richieda una configurazione o una pulizia speciale, puoi fare affidamento sulla generazione automatica della configurazione di test per creare un test TF appropriato configurazioni.

Per configurare un test gtest lato host e abilitare la generazione della configurazione di test automatico, imposta Da host_supported a true in Android.bp, come in hello_world_test.

Per ulteriori informazioni sulla scrittura di un test nativo, consulta Aggiunta di un nuovo test nativo Esempio.

Test dell'host JAR

Test dell'host JAR (Java), ad esempio JUnit, sono test che non devono essere eseguiti su un dispositivo e che forniscono codice del tuo progetto Java. Questi test possono essere configurati per essere eseguiti su un test utilizzando runner HostTest.

Esempio di configurazione di test TradeFed

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

La configurazione di test esegue un test JUnit lato host di HelloWorldHostTest. Tieni presente che la configurazione di test riportata sopra possono essere generati automaticamente. A meno che il test non richieda una configurazione o una pulizia speciale, fai affidamento la generazione automatica della configurazione di test per creare il test TradeFed corretto configurazione.

Per maggiori dettagli su come scrivere un test host JAR, fai riferimento Test host JAR (Java).

Test di host Java isolati

I test Java senza dispositivo possono essere eseguiti in un ambiente di isolamento con un leggero costo per le prestazioni. Tuttavia, è necessario fare alcune importanti considerazioni prima di scegliere di utilizzare questa completamente gestito di Google Cloud.

  • Questo è il runner predefinito utilizzato per i test delle unità Robolectric e JUnit
  • Tradefed supporta solo i test JUnit nell'ambiente di isolamento.
  • Sono supportate solo le dipendenze collegate in modo statico. Nessuna dipendenza dichiarata con lib sono incluse nel classpath.
  • Il runner di isolamento posiziona solo lo shim runner e il barattolo di prova sul classpath.
  • È presente un overhead fisso per ogni esecuzione di test eseguita con questo runner.

Esempio di configurazione di test Tradefed (isolata)

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

Esempio di configurazione di Presto per la generazione automatica

Anziché creare manualmente la configurazione di test come sopra, Presto può generarla automaticamente utilizzando una dichiarazione come in questo esempio.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

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

    static_libs: [
        "junit",
    ],
}

Test robotici

I test robotici utilizzano lo stesso runner dei test dell'host isolato, con alcune le opzioni di CPU e memoria disponibili.

  • L'opzione robolectric-resources attiva alcune opzioni della riga di comando specifiche per Robolectric da passare al processo secondario e aggiunge la build ad albero di android-all al classpath su un sottoprocesso. Sebbene le altre due siano best practice, questa opzione è obbligatoria per eseguire test robotici senza successo.
  • L'opzione java-folder consente di modificare il runtime Java utilizzato dal processo secondario. Questo è in quanto Robolectric preferisce versioni Java che potrebbero non essere in linea con JVM preferita del sistema host.
  • L'opzione exclude-paths consente all'esecutore del processo secondario di evitare di caricare moduli specifici il che è utile quando un JAR include classi estranee che potrebbero causare errori di caricamento. java. è un'esclusione comune, per evitare di generare eccezioni di SecurityException.

Configurazione robotica di esempio

<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>

Esempio di configurazione di Presto per la generazione automatica robotica

Anziché creare manualmente la configurazione di test come sopra, presto può generare automaticamente la configurazione utilizzando una dichiarazione come in questo esempio.

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",
}

Test Python

Se la logica di test è scritta in Python, utilizza il tipo di build python_test_host per creare un file par che possa essere gestito da TF PythonBinaryHostTest.

Esempio di configurazione di test TradeFed

<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>

Impostazione della suite di test

Affinché il test lato host sia accessibile da TF per una determinata build, imposta il valore dell'impostazione del modulo di test `test_suites` `general-tests`:

test_suites: ["general-tests"],

Con questa impostazione, il test viene pacchettizzato in general-tests.zip il giorno il target test_suites.