Test dalla riga di comando

Questo documento descrive come eseguire i test direttamente dalla riga di comando. Questo documento presuppone che tu sappia già come creare un'app per Android e scrivere test per la tua app. Per ulteriori informazioni su come creare test vedi Testare le app su Android.

Quando crei la tua app utilizzando il sistema di creazione di Gradle, il riquadro Android Gradle consente di eseguire test dal tuo Gradle un progetto utilizzando la riga di comando. Per un controllo più granulare, scegli di eseguire i test tramite un Android Debug Bridge (adb). Questo può essere utile quando si eseguono test in una di integrazione continua.

Per scoprire come eseguire test con strumenti automatizzati dalla riga di comando utilizzando dispositivi virtuali gestiti da Gradle, vedi Scalare i test con Gradle Dispositivi gestiti.

Esegui test con Gradle

Il plug-in Android per Gradle consente di eseguire test dal progetto Gradle utilizzando dall'interfaccia a riga di comando.

La tabella seguente riassume come eseguire i test con Gradle:

Tabella 1. Diversi modi per eseguire i test con Gradle

Tipo di test delle unità Comando da eseguire Località del risultato del test
Test delle unità locali Esegui l'attività test:

./gradlew test
File dei risultati del test HTML:
path_to_your_project/module_name/build/reports/tests/ .

File dei risultati del test XML:
path_to_your_project/module_name/build/test-results/ .

Test delle unità strumentate Esegui l'attività connectedAndroidTest:

./gradlew connectedAndroidTest
File dei risultati del test HTML:
path_to_your_project/module_name/build/reports/androidTests/connected/ .

File dei risultati del test XML:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ .

Supporti Gradle abbreviazioni dei nomi delle attività. Ad esempio, puoi avviare l'attività connectedAndroidTest tramite inserendo il seguente comando:

./gradlew cAT

Puoi anche scegliere di eseguire le attività Gradle check e connectedCheck. Questi per le attività eseguono rispettivamente i test locali o strumentati, includere altri controlli aggiunti da altri plug-in Gradle.

Eseguire test su un modulo

Le attività test e connectedAndroidTest eseguono test su ciascun modulo nel tuo progetto. Puoi eseguire test su un modulo specifico far precedere l'attività test o connectedAndroidTest con il nome del modulo e un I due punti (:). Ad esempio, il seguente comando esegue test instrumentati solo il modulo mylibrary:

./gradlew mylibrary:connectedAndroidTest

Eseguire test su una variante di build

Le attività test e connectedAndroidTest eseguono test su ciascuna crea una variante nel tuo progetto. Puoi scegliere come target una variante di build specifica utilizzando la seguente sintassi:

  • Per i test delle unità locali:
    ./gradlew testVariantNameUnitTest
  • Per i test instrumentati:
    ./gradlew connectedVariantNameAndroidTest
di Gemini Advanced.

Eseguire classi o metodi di test specifici

Quando esegui test delle unità locali, Gradle ti consente di scegliere come target test specifici utilizzando il flag --tests. Ad esempio, il comando seguente esegue solo sampleTestMethod test per la variante di build specificata. Per scoprire di più su usando il flag --tests, leggi la documentazione di Gradle filtro di verifica.


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

Esegui test con ADB

Quando esegui test dalla riga di comando con Android Debug Bridge (adb), sono disponibili altre opzioni per scegliere i test da eseguire rispetto a qualsiasi altro metodo. Puoi selezionare singole metodi di test, filtrare i test in base a un'annotazione personalizzata o specificare le opzioni di CPU e memoria disponibili. Poiché l'esecuzione del test è interamente controllata dalla riga di comando, puoi personalizzare i test con gli script shell in vari modi.

Per eseguire un test dalla riga di comando, esegui adb shell per avviare una riga di comando shell sul tuo dispositivo o nell'emulatore. All'interno della shell puoi interagire gestione attività usando il comando am e il suo sottocomando instrument per eseguire i test.

Come scorciatoia, puoi avviare una shell adb, chiamare am instrument e specificare tutti i flag della riga di comando su un'unica riga di input. La shell si apre sul dispositivo oppure un emulatore, esegue i test, produce un output, quindi torna alla riga di comando sul computer.

Per eseguire un test con am instrument:

  1. Crea o ricrea l'applicazione principale e un pacchetto di test.
  2. Installa il pacchetto di test e la piattaforma principale file del pacchetto Android (file APK) per il tuo dispositivo Android corrente oppure un emulatore.
  3. Nella riga di comando, inserisci:

    adb shell am instrument -w <test_package_name>/<runner_class>
    

    Dove <test_package_name> è il nome del pacchetto Android del tuo test e <runner_class> è il nome della classe Android Test Runner che stai utilizzando. Il nome del pacchetto Android è il valore del campo attributo pacchetto nel file manifest del pacchetto di test (AndroidManifest.xml).

    Il corso Android Test Runner è solitamente AndroidJUnitRunner:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
    

I risultati del test vengono visualizzati in STDOUT.

bandiere strumentali

Per trovare un elenco di tutti i flag da usare con il comando am instrument: esegui adb shell am help. Alcune segnalazioni importanti sono descritte nel tabella seguente:

Tabella 2. am instrument importante flag

Segnala Valore Descrizione
-w (nessuno) Obbliga am instrument ad attendere fino alla strumentazione termina prima di terminare se stesso. In questo modo si aprirà fino al termine dei test. Questo flag è obbligatorio per vedere i risultati dei test.
-r (nessuno) Restituisce i risultati in formato non elaborato. Usa questo flag quando vuoi raccolgono misurazioni delle prestazioni in modo che non siano formattati come i risultati del test. Questo flag è progettato per essere utilizzato insieme al flag -e perf true (documento am instrument options (opzioni am instrument options).
-e <test_options> Fornisce opzioni di test come coppie chiave-valore. La Lo strumento am instrument li trasmette all'elemento specificato strumentazione di classe utilizzando onCreate() . Puoi specificare più occorrenze di -e <test_options>. Le chiavi e i valori sono descritti nei am instrument options (Opzioni strumentali). Puoi usa solo queste coppie chiave-valore AndroidJUnitRunner o con InstrumentationTestRunner e le relative sottoclassi. L'utilizzo con qualsiasi altro corso non ha alcun effetto.
--no-hidden-api-checks (nessuno) Disabilita le limitazioni relative all'uso di API nascoste. Per ulteriori informazioni informazioni su cosa sono le API nascoste e su come questo può influire sulla tua app, leggere Restrizioni relative alle interfacce non SDK.

opzioni am instrument

Lo strumento am instrument passa le opzioni di test AndroidJUnitRunner o InstrumentationTestRunner sotto forma di coppie chiave-valore, utilizzando il flag -e, con la seguente sintassi:

-e <key> <value>

Alcune chiavi accettano più valori. Devi specificare più valori in un elenco separato da virgole. Ad esempio, questa chiamata AndroidJUnitRunner fornisce più valori per la chiave package:

adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunner

La tabella seguente elenca le coppie chiave-valore che puoi utilizzare con il runner del test:

Tabella 3. le coppie chiave-valore -e da utilizzare con il tuo test runner

Chiave Valore Descrizione
package <Java_package_name> Il nome completo del pacchetto Java per uno dei pacchetti nell'applicazione di test. Qualsiasi classe di scenario di test che utilizza questo eseguito il nome del pacchetto. Tieni presente che non si tratta di una Nome del pacchetto Android; un pacchetto di test include Il nome del pacchetto Android, ma potrebbe contenere diversi pacchetti Java.
class <class_name> Il nome completo della classe Java per uno degli scenari di test . Viene eseguita solo questa classe dello scenario di test.
<class_name>#method name Un nome completo della classe dello scenario di test e uno dei suoi metodi. Solo questo metodo viene eseguito. Osserva il marcatore hash (#) tra la classe e il nome del metodo.
func true Esegue tutte le classi di test che estendono InstrumentationTestCase.
unit true Esegue tutte le classi di test che non estendono InstrumentationTestCase o PerformanceTestCase.
size [small | medium | large] Esegue un metodo di test annotato per dimensione. Le annotazioni sono @SmallTest, @MediumTest e @LargeTest.
perf true Esegue tutte le classi di test che implementano PerformanceTestCase. Quando utilizzi questa opzione, specifica il flag -r per am instrument per mantenere l'output in formato non elaborato e non riformattati come risultati del test.
debug true Esegue test in modalità di debug.
log true Carica e registra tutti i test specificati, ma non li esegue. Il test vengono visualizzate in STDOUT. Utilizza questo pulsante per verificare combinazioni di altri filtri e specifiche di test.
emma true Esegue un'analisi della copertura del codice EMMA e scrive l'output in /data/<app_package>/coverage.ec sul dispositivo. A sostituisci la posizione del file, usa la chiave coverageFile descritto nella voce seguente.

Nota: questa opzione richiede uno strumento EMMA dell'applicazione di test, che puoi generare coverage obiettivo.

coverageFile <filename> Sostituisce la posizione predefinita del file di copertura EMMA sulla dispositivo. Specifica questo valore come percorso e nome file in formato UNIX. Il nome file predefinito è descritto nella voce relativa al parametro emma chiave.

Quando utilizzi il flag -e, tieni presente quanto segue:

  • am instrument di chiamate onCreate(Bundle) con una Bundle contenente la coppia chiave-valore in coppia.
  • Il tasto package ha la precedenza sulla chiave class. Se specifichi e specificare separatamente una classe all'interno del pacchetto, Android esegue tutti i test nel pacchetto e ignora la chiave della classe.
  • La chiave func e la chiave unit si escludono a vicenda.

Esempi di utilizzo

Le sezioni seguenti forniscono esempi di utilizzo di am instrument per l'esecuzione di test. Si basano sulla seguente struttura:

  • Il pacchetto di test ha il nome del pacchetto Android com.android.demo.app.tests.
  • Due classi di test con strumentazione:
    • TestClass1, che contiene il metodo di test testMethod1.
    • TestClass2, che contiene i metodi di test testMethod2 e testMethod3.
  • L'esecutore del test è AndroidJUnitRunner

Esegui l'intero pacchetto di test

Per eseguire tutte le classi di test nel pacchetto di test, inserisci:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Esegui tutti i test in una classe di scenario di test

Per eseguire tutti i test nella classe TestClass1, inserisci:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Seleziona un sottoinsieme di test

Per eseguire tutti i test nella classe TestClass1 e nel metodo testMethod3 in TestClass2, inserisci:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Puoi trovare altri casi d'uso nel AndroidJUnitRunner Riferimento API.