Atest è uno strumento a riga di comando che consente agli utenti di creare, installare ed eseguire test Android in locale, accelerando notevolmente le ripetizioni dei test senza richiedere la conoscenza delle opzioni della riga di comando del framework di test Trade Federation. Questa pagina spiega come utilizzare Atest per eseguire test Android.
Per informazioni generali sulla scrittura di test per Android, vedi Test della piattaforma Android.
Per informazioni sulla struttura generale di Atest, consulta la Guida per gli sviluppatori di Atest.
Per informazioni sull'esecuzione dei test nei file TEST_MAPPING tramite Atest, vedi Eseguire i test nei file TEST_MAPPING.
Per aggiungere una funzionalità ad Atest, segui il flusso di lavoro per gli sviluppatori di Atest.
Configura l'ambiente
Per configurare l'ambiente Atest, segui le istruzioni riportate in Configurare l' ambiente, Scegliere un target e Creare il codice.
Utilizzo di base
I comandi Atest hanno il seguente formato:
atest test-to-run [optional-arguments]
Argomenti facoltativi
La tabella seguente elenca gli argomenti di uso comune. Un elenco completo è disponibile tramite atest --help.
| Opzione | Opzione lunga | Descrizione |
|---|---|---|
-b |
--build |
Crea i target di test. (valore predefinito) |
-i |
--install |
Installa gli artefatti di test (APK) sul dispositivo. (valore predefinito) |
-t |
--test |
Esegue i test. (valore predefinito) |
-s |
--serial |
Esegue i test sul dispositivo specificato. È possibile testare un dispositivo alla volta. |
-d |
--disable-teardown |
Disattiva la rimozione e la pulizia dei test. |
|
--dry-run |
Esegue Atest in modalità dry run senza creare, installare o eseguire effettivamente i test. |
-m |
--rebuild-module-info |
Forza la ricreazione del file module-info.json. |
-w |
--wait-for-debugger |
Attende il completamento del debugger prima dell'esecuzione. |
-v |
--verbose |
Visualizza la registrazione a livello DEBUG. |
|
--iterations |
Esegue i test in loop fino al raggiungimento dell'iterazione massima. (10 per impostazione predefinita) |
|
--rerun-until-failure [COUNT=10] |
Esegue di nuovo tutti i test finché non si verifica un errore o non viene raggiunta l'iterazione massima. (10 per impostazione predefinita) |
|
--retry-any-failure [COUNT=10] |
Esegue di nuovo i test non riusciti finché non vengono superati o non viene raggiunta l'iterazione massima. (10 per impostazione predefinita) |
|
--start-avd |
Crea automaticamente un AVD ed esegue i test sul dispositivo virtuale. |
|
--acloud-create |
Crea un AVD utilizzando il comando acloud. |
|
--[CUSTOM_ARGS] |
Specifica gli argomenti personalizzati per i runner di test. |
-a |
--all-abi |
Esegue i test per tutte le architetture di dispositivi disponibili. |
|
--host |
Esegue il test completamente sull'host senza un dispositivo. Nota: l'esecuzione di un test host che richiede un dispositivo con --host
non andrà a buon fine. |
|
--history |
Mostra i risultati dei test in ordine cronologico. |
|
--latest-result |
Stampa l'ultimo risultato del test. |
Per ulteriori informazioni su -b, -i e -t, vedi la
sezione Specificare i passaggi: creazione, installazione o esecuzione.
Specifica i test
Per eseguire i test, specifica uno o più test utilizzando uno dei seguenti identificatori:
- Nome modulo
- Modulo:Classe
- Nome corso
- Test di integrazione Tradefed
- Percorso file
- Nome pacchetto
Separa i riferimenti a più test con spazi, come indicato di seguito:
atest test-identifier-1 test-identifier-2
Nome modulo
Per eseguire un intero modulo di test, utilizza il nome del modulo. Inserisci il nome così come appare nelle variabili LOCAL_MODULE o LOCAL_PACKAGE_NAME nel file Android.mk o Android.bp del test.
Esempi:
atest FrameworksServicesTestsatest CtsVideoTestCases
Modulo:Classe
Per eseguire una singola classe all'interno di un modulo, utilizza Modulo:Classe. Modulo è lo
stesso descritto in Nome modulo. Classe è il nome della classe di test nel file .java e può essere il nome della classe completo o il nome di base.
Esempi:
atest CtsVideoTestCases:VideoEncoderDecoderTestatest FrameworksServicesTests:ScreenDecorWindowTestsatest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Nome corso
Per eseguire una singola classe senza specificare esplicitamente un nome modulo, utilizza il nome della classe.
Esempi:
atest ScreenDecorWindowTestsatest VideoEncoderDecoderTest
Test di integrazione Tradefed
Per eseguire i test integrati direttamente in TradeFed (non modulari), inserisci il nome così come appare nell'output del comando tradefed.sh list configs. Ad esempio:
Per eseguire il
reboot.xml test:
atest example/reboot
Per eseguire il test
native-benchmark.xml test:
atest native-benchmark
Percorso file
Atest supporta l'esecuzione di test basati su moduli e test basati sull'integrazione inserendo il percorso del file o della directory di test, a seconda dei casi. Supporta anche l'esecuzione di una singola classe specificando il percorso del file Java della classe. Sono supportati sia i percorsi relativi sia quelli assoluti.
Esegui un modulo
Gli esempi seguenti mostrano due modi per eseguire il modulo CtsVideoTestCases utilizzando un percorso file.
Esegui da repo-root di Android:
atest cts/tests/video
Esegui da repo-root/cts/tests/video di Android:
atest .
Esegui una classe di test
L'esempio seguente mostra come eseguire una classe specifica all'interno del modulo CtsVideoTestCases utilizzando un percorso file.
Da repo-root di Android:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Esegui un test di integrazione
L'esempio seguente mostra come eseguire un test di integrazione utilizzando un percorso file da repo-root di Android:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Nome pacchetto
Atest supporta la ricerca di test per nome pacchetto.
Esempi:
atest com.android.server.wm
atest com.android.uibench.janktests
Specifica i passaggi: creazione, installazione o esecuzione
Utilizza le opzioni -b, -i e -t per specificare i passaggi da eseguire. Se non specifichi un'opzione, vengono eseguiti tutti i passaggi.
- Crea solo i target:
atest -b test-to-run - Esegui solo i test:
atest -t test-to-run - Installa l'APK ed esegui i test:
atest -it test-to-run - Crea ed esegui, ma non installare:
atest -bt test-to-run
Atest può forzare un test a saltare il passaggio di pulizia o rimozione. Molti test, come
CTS, liberano spazio sul dispositivo dopo l'esecuzione del test, quindi se provi a eseguire di nuovo il test
con -t l'operazione non andrà a buon fine senza il parametro --disable-teardown. Utilizza -d prima di -t per saltare il passaggio di liberare spazio del test ed eseguire i test in modo iterativo.
atest -d test-to-runatest -t test-to-run
Esegui metodi specifici
Atest supporta l'esecuzione di metodi specifici all'interno di una classe di test. Sebbene sia necessario creare l'intero modulo, questo riduce il tempo necessario per eseguire i test. Per eseguire metodi specifici, identifica la classe utilizzando uno dei modi supportati per identificare una classe (Modulo:Classe, percorso file e così via) e aggiungi il nome del metodo:
atest reference-to-class#method1
Quando specifichi più metodi, separali con virgole:
atest reference-to-class#method1,method2,method3
Esempi:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecorsatest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
I due esempi seguenti mostrano i modi preferiti per eseguire un singolo metodo, testFlagChange. Questi esempi sono preferibili rispetto all'utilizzo del solo nome della classe perché la specifica del modulo o della posizione del file Java consente ad Atest di trovare il test molto più rapidamente.
Utilizzando Modulo:Classe:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
Da Android repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
È possibile eseguire più metodi da classi e moduli diversi:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
Esegui più classi
Per eseguire più classi, separale con spazi nello stesso modo in cui esegui più test. Atest crea ed esegue le classi in modo efficiente, quindi la specifica di un sottoinsieme di classi in un modulo migliora le prestazioni rispetto all'esecuzione dell'intero modulo.
Per eseguire due classi nello stesso modulo:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
Per eseguire due classi in moduli diversi:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
Esegui i file binari GTest
Atest può eseguire file binari GTest. Utilizza -a per eseguire questi test per tutte le architetture di dispositivi disponibili, che in questo esempio sono armeabi-v7a (ARM a 32 bit) e arm64-v8a (ARM a 64 bit).
Test di input di esempio:
atest -a libinput_tests inputflinger_tests
Per selezionare un file binario GTest specifico da eseguire, utilizza i due punti (:) per specificare il nome del test e il cancelletto (#) per specificare ulteriormente un singolo metodo.
Ad esempio, per la seguente definizione di test:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Esegui quanto segue per specificare l'intero test:
atest inputflinger_tests:InputDispatcherTest
In alternativa, esegui un singolo test utilizzando quanto segue:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
Esegui i test in TEST_MAPPING
Atest può eseguire i test nei file TEST_MAPPING.
Esegui i test di pre-invio in modo implicito
Esegui i test di pre-invio nei file TEST_MAPPING nelle directory corrente e principale:
atest
Esegui i test di pre-invio nei file TEST_MAPPING in /path/to/project e
nelle relative directory principali:
atest --test-mapping /path/to/project
Esegui un gruppo di test specificato
I gruppi di test disponibili sono: presubmit(valore predefinito), postsubmit,
mainline-presubmit e all.
Esegui i test di post-invio nei file TEST_MAPPING nelle directory corrente e principale:
atest :postsubmit
Esegui i test di tutti i gruppi nei file TEST_MAPPING:
atest :all
Esegui i test di post-invio nei file TEST_MAPPING in /path/to/project e nelle relative directory principali:
atest --test-mapping /path/to/project:postsubmit
Esegui i test mainline nei file TEST_MAPPING in /path/to/project e nelle relative directory principali:
atest --test-mapping /path/to/project:mainline-presubmit
Esegui i test nelle sottodirectory
Per impostazione predefinita, Atest cerca i test solo nei file TEST_MAPPING verso l'alto (dalla directory corrente o dalla directory specificata alle relative directory principali). Se vuoi eseguire anche i test nei file TEST_MAPPING nelle sottodirectory, utilizza --include-subdirs per forzare Atest a includere anche questi test:
atest --include-subdirs /path/to/projectEsegui i test in iterazione
Esegui i test in iterazione passando l'argomento --iterations. Indipendentemente dal fatto che il test venga superato o meno, Atest lo ripeterà fino al raggiungimento dell'iterazione massima.
Esempi:
Per impostazione predefinita, Atest esegue 10 iterazioni. Il numero di iterazioni deve essere un intero positivo.
atest test-to-run --iterationsatest test-to-run --iterations 5
I seguenti approcci semplificano il rilevamento dei test instabili:
Approccio 1: esegui tutti i test finché non si verifica un errore o non viene raggiunta l'iterazione massima.
- Arresta l'esecuzione quando si verifica un errore o l'iterazione raggiunge il decimo round (per impostazione predefinita).
atest test-to-run --rerun-until-failure - Arresta l'esecuzione quando si verifica un errore o l'iterazione raggiunge il 100° round.
atest test-to-run --rerun-until-failure 100
Approccio 2: esegui solo i test non riusciti finché non vengono superati o non viene raggiunta l'iterazione massima.
- Supponi che
test-to-runabbia più scenari di test e che uno dei test non vada a buon fine. Esegui solo il test non riuscito 10 volte (per impostazione predefinita) o finché il test non viene superato.atest test-to-run --retry-any-failure - Interrompi l'esecuzione del test non riuscito quando viene superato o raggiunge il 100° round.
atest test-to-run --retry-any-failure 100
Esegui i test sugli AVD
Atest è in grado di eseguire i test su un AVD appena creato. Esegui acloud create per creare un AVD e creare artefatti, poi utilizza gli esempi seguenti per eseguire i test.
Avvia un AVD ed esegui i test:
acloud create --local-instance --local-image && atest test-to-run
Avvia un AVD nell'ambito di un'esecuzione di test:
atest test-to-run --acloud-create "--local-instance --local-image"
Per ulteriori informazioni, esegui acloud create --help.
Passa le opzioni al modulo
Atest è in grado di passare le opzioni ai moduli di test. Per aggiungere le opzioni della riga di comando di TradeFed all'esecuzione del test, utilizza la seguente struttura e assicurati che gli argomenti personalizzati seguano il formato delle opzioni della riga di comando di Tradefed.
atest test-to-run -- [CUSTOM_ARGS]
Passa le opzioni del modulo di test ai preparatori di target o ai runner di test definiti nel file di configurazione del test:
atest test-to-run -- --module-arg module-name:option-name:option-valueatest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Passa le opzioni a un tipo o a una classe di runner:
atest test-to-run -- --test-arg test-class:option-name:option-valueatest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Per ulteriori informazioni sulle opzioni solo per i test, vedi Passare le opzioni ai moduli.