Atest è uno strumento a riga di comando che consente agli utenti di compilare, installare ed eseguire i test Android localmente, accelerando notevolmente le ripetizioni dei test senza richiedere la conoscenza delle opzioni a riga di comando del test harness Trade Federation. Questa pagina spiega come utilizzare Atest per eseguire i test Android.
Per informazioni generali sulla scrittura di test per Android, consulta la pagina relativa ai test della piattaforma Android.
Per informazioni sulla struttura complessiva di Atest, consulta la Guida per gli sviluppatori di Atest.
Per informazioni sull'esecuzione di test nei file TEST_MAPPING tramite Atest, consulta Eseguire 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 Configurazione dell'ambiente, Scelta di un target e Compilazione del codice.
Utilizzo di base
I comandi Atest hanno il seguente formato:
atest test-to-run [optional-arguments]
Argomenti facoltativi
Nella tabella seguente sono elencati gli argomenti più utilizzati. Un elenco completo
è disponibile tramite atest --help
.
Opzione | Opzione lunga | Descrizione |
---|---|---|
-b |
--build |
Crea target di test. (predefinita) |
-i |
--install |
Installa gli elementi di test (APK) sul dispositivo. (predefinita) |
-t |
--test |
Esegue i test. (predefinita) |
-s |
--serial |
Esegue i test sul dispositivo specificato. È possibile testare un dispositivo alla volta. |
-d |
--disable-teardown |
Disattiva lo smontaggio e la pulizia del test. |
|
--dry-run |
Esegue prove Atest senza eseguire effettivamente la compilazione, l'installazione o l'esecuzione dei test. |
-m |
--rebuild-module-info |
Forza la ricostruzione del file module-info.json . |
-w |
--wait-for-debugger |
Attende il completamento del debugger prima dell'esecuzione. |
-v |
--verbose |
Mostra la registrazione a livello di DEBUG. |
|
--iterations |
Esegue i test in loop fino a raggiungere l'iterazione massima. (10 per impostazione predefinita) |
|
--rerun-until-failure [COUNT=10] |
Esegue di nuovo tutti i test finché non si verifica un errore o 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 viene raggiunta l'iterazione massima. (10 per impostazione predefinita) |
|
--start-avd |
Crea automaticamente una durata di visualizzazione media 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 dei test. |
-a |
--all-abi |
Esegue i test per tutte le architetture dei 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
, consulta la sezione
Specifica i passaggi: compila, installa o esegui.
Specificare i test
Per eseguire i test, specifica uno o più test utilizzando uno dei seguenti identificatori:
- Nome modulo
- Modulo:Corso
- Nome del corso
- Test di integrazione di TradeFed
- Percorso del file
- Nome pacchetto
Separa i riferimenti a più test con spazi, ad esempio:
atest test-identifier-1 test-identifier-2
Nome modulo
Per eseguire un intero modulo di test, utilizza il nome del modulo corrispondente. 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 FrameworksServicesTests
atest CtsVideoTestCases
Modulo:Classe
Per eseguire un singolo corso all'interno di un modulo, utilizza Module:Class. Modulo è lo stesso descritto in Nome modulo. Class è il nome della classe di test nel file .java
e può essere il nome completo della classe o il nome di base.
Esempi:
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Nome del corso
Per eseguire una singola classe senza indicare esplicitamente il nome di un modulo, utilizza il nome della classe.
Esempi:
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
Test di integrazione scambiato
Per eseguire test integrati direttamente in TradeFed (non moduli), inserisci il nome come appare nell'output del comando tradefed.sh list configs
. Per
esempio:
Per eseguire il
test reboot.xml
:
atest example/reboot
Per eseguire il
test native-benchmark.xml
:
atest native-benchmark
Percorso del file
Atest supporta l'esecuzione sia di test basati su moduli sia di 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 che quelli assoluti.
Eseguire un modulo
Gli esempi riportati di seguito mostrano due modi per eseguire il modulo CtsVideoTestCases
utilizzando un percorso file.
Esegui da Android repo-root
:
atest cts/tests/video
Esegui da Android repo-root/cts/tests/video
:
atest .
Esegui un test di classe
L'esempio seguente mostra come eseguire una classe specifica all'interno del
modulo CtsVideoTestCases
utilizzando un percorso file.
Da Android repo-root
:
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 Android repo-root
:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Nome pacchetto
Atest supporta la ricerca di test per nome del pacchetto.
Esempi:
atest com.android.server.wm
atest com.android.uibench.janktests
Specifica i passaggi: compila, installa o esegui
Utilizza le opzioni -b
, -i
e -t
per specificare quali passaggi eseguire. Se non specifichi un'opzione, vengono eseguiti tutti i passaggi.
- Solo target della build:
atest -b test-to-run
- Esegui solo test:
atest -t test-to-run
- Installa l'APK ed esegui i test:
atest -it test-to-run
- Crea ed esegui, ma non installa:
atest -bt test-to-run
Atest può forzare un test a saltare il passaggio di pulizia o smantellamento. Molti test, come CTS, puliscono il dispositivo dopo l'esecuzione del test, quindi il tentativo di eseguire nuovamente il test con -t
non andrà a buon fine senza il parametro --disable-teardown
. Utilizza -d
prima di
-t
per saltare il passaggio di pulizia del test ed eseguire il test in modo iterativo.
atest -d test-to-run
atest -t test-to-run
Esegui metodi specifici
Atest supporta l'esecuzione di metodi specifici all'interno di una classe di test. Sebbene sia necessario compilare l'intero modulo, questo riduce il tempo necessario per eseguire i test. Per eseguire metodi specifici, identifica la classe utilizzando uno dei metodi supportati per identificare una classe (Module:Class, percorso del file e così via) e aggiungi il nome del metodo:
atest reference-to-class#method1
Quando specifichi più metodi, separali con una virgola:
atest reference-to-class#method1,method2,method3
Esempi:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
I due esempi seguenti mostrano i modi preferiti per eseguire un singolo metodo,
testFlagChange
. Questi esempi sono preferiti rispetto all'utilizzo solo del nome della classe
perché la specifica del modulo o della posizione del file Java consente ad Atest di trovare il
test molto più rapidamente.
Utilizzo di Module:Class:
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ù corsi
Per eseguire più classi, separale con spazi nello stesso modo in cui esegui più test. Atest compila ed esegue le classi in modo efficiente, pertanto 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 corsi in moduli diversi:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
Esegui i binari GTest
Atest può eseguire i binari GTest. Utilizza -a
per eseguire questi test per tutte le architetture dei 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 uno specifico programma binario GTest da eseguire, utilizza i due punti (:) per specificare il nome del test e un hashtag (#) per specificare ulteriormente un singolo metodo.
Ad esempio, per la seguente definizione di test:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Esegui il seguente comando 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 test in TEST_MAPPING
Atest può eseguire test in file TEST_MAPPING
.
Eseguire test pre-invio in modo implicito
Esegui i test di preinvio nei file TEST_MAPPING
nelle directory corrente e principale:
atest
Esegui i test di preinvio nei file TEST_MAPPING
in /path/to/project e nelle sue directory principali:
atest --test-mapping /path/to/project
Eseguire un gruppo di test specificato
I gruppi di test disponibili sono: presubmit
(valore predefinito), postsubmit
,
mainline-presubmit
e all
.
Esegui i test 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 post-invio nei file TEST_MAPPING in /path/to/project e nelle sue directory principali:
atest --test-mapping /path/to/project:postsubmit
Esegui i test principali nei file TEST_MAPPING in /path/to/project e nelle sue directory principali:
atest --test-mapping /path/to/project:mainline-presubmit
Esecuzione di test nelle sottodirectory
Per impostazione predefinita, Atest cerca i test solo nei file TEST_MAPPING verso l'alto (dalla directory corrente o da quella specificata alle relative directory principali). Se vuoi anche eseguire test nei file TEST_MAPPING nelle sottodirectory, utilizza --include-subdirs
per forzare Atest a includere anche questi test:
atest --include-subdirs /path/to/project
Eseguire i test nell'iterazione
Esegui i test in un'iterazione passando l'argomento --iterations
. Indipendentemente dal fatto che il test sia superato o meno, Atest lo ripeterà fino a quando non verrà raggiunta l'iterazione massima.
Esempi:
Per impostazione predefinita, Atest esegue 10 iterazioni. Il numero di iterazioni deve essere un numero intero positivo.
atest test-to-run --iterations
atest test-to-run --iterations 5
I seguenti approcci semplificano il rilevamento dei test inaffidabili:
Approccio 1: esegui tutti i test finché non si verifica un errore o non viene raggiunta l'iterazione massima.
- Interrompi quando si verifica un errore o l'iterazione raggiunge il decimo ciclo (per impostazione predefinita).
atest test-to-run --rerun-until-failure
- Interrompi quando si verifica un errore o l'iterazione raggiunge il centesimo 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.
- Supponiamo che
test-to-run
abbia più scenari di test e uno dei test non riesca. Esegui solo il test non riuscito 10 volte (per impostazione predefinita) o fino a quando non viene superato.atest test-to-run --retry-any-failure
- Interrompi l'esecuzione del test non riuscito quando passa o raggiunge il centesimo round.
atest test-to-run --retry-any-failure 100
Esegui test sulla durata di visualizzazione media
Atest è in grado di eseguire test su una durata di visualizzazione media appena creata. Esegui acloud create
per creare un AVD e compilare gli elementi, quindi utilizza i seguenti esempi 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 opzioni ai moduli di test. Per aggiungere opzioni di riga di comando di TradeFed alla corsa di test, utilizza la seguente struttura e assicurati che gli argomenti personalizzati rispettino il formato dell'opzione della riga di comando di TradeFed.
atest test-to-run -- [CUSTOM_ARGS]
Passa le opzioni del modulo di test ai preparatori o agli esecuzioni di test di destinazione definiti nel file di configurazione del test:
atest test-to-run -- --module-arg module-name:option-name:option-value
atest 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-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Per ulteriori informazioni sulle opzioni solo per il test, consulta Passare le opzioni ai moduli.