Testare il codice della piattaforma con atest

Android Studio for Platform (ASfP) si integra con atest e con i moduli di test Soong per consentirti di eseguire il debug dei test della piattaforma sulla macchina host Linux, sul dispositivo connesso o sul dispositivo virtuale Cuttlefish dall'IDE.

Prerequisiti

  • Apri un progetto ASfP configurato con il checkout AOSP e la destinazione lunch.
  • Per i test del dispositivo, connetti un dispositivo fisico o avvia un dispositivo virtuale Cuttlefish che esegue una build corrispondente.

Eseguire test ed eseguire il debug

Puoi avviare test della piattaforma e sessioni di debug da diverse posizioni in ASfP:

  • Target di test Android.bp: apri un file Android.bp e fai clic su Esegui nel margine accanto a qualsiasi modulo di test (*_test o *_test_host):
    • Esegui: disponibile per tutti i tipi di moduli di test Soong (android_test, java_test_host, cc_test, rust_test, python_test, sh_test e android_robolectric_test).
    • Debug: disponibile per i moduli android_test (collegati al debugger Java utilizzando atest --wait-for-debugger) e per i moduli di test C++ o Rust (cc_test, cc_test_host, rust_test e rust_test_host, avviati con il debugger LLDB integrato di ASfP).
  • Icone della barra laterale del file sorgente: fai clic su Esegui accanto a una classe di test o a un @Test metodo nel codice sorgente per eseguire o eseguire il debug di quel test specifico.
  • Menu contestuale: fai clic con il tasto destro del mouse su un file di test, una classe, un metodo o un modulo Android.bp e seleziona Esegui o Debug.
  • Agente integrato (AI in Android Studio): nella finestra degli strumenti Agente, l'agente integrato può eseguire target atest per verificare le modifiche dopo la modifica del codice.
  • Terminale integrato: apri Visualizza > Finestre degli strumenti > Terminale per eseguire direttamente i comandi atest.

Configurazione e debug dei test intelligenti

Quando avvii un test dal margine o dal menu contestuale, ASfP crea e configura una configurazione di esecuzione Soong Test utilizzando il grafico dei moduli Android.bp.

Eseguire il debug dei target Java e Kotlin android_test

Fai clic sull'icona della barra laterale accanto a un modulo android_test in Android.bp o accanto a una classe JUnit Java o Kotlin o a un metodo @Test, quindi seleziona Debug "<TestName>". Dalla barra laterale di un file sorgente, ASfP sceglie il modulo android_test più vicino il cui srcs include il file e denomina la configurazione <module>, <module>:<SimpleClass> o <module>:<SimpleClass>#<method>.

ASfP esegue atest con --wait-for-debugger, legge l'attributo package di destinazione da AndroidManifest.xml del modulo, attende il completamento del processo sul dispositivo connesso e collega il debugger Java.

Eseguire il debug di un metodo android_test dal margine dell'editor

Esegui il debug dei target cc_test e rust_test in LLDB

Per eseguire il debug di un modulo di test C++ o Rust (cc_test, cc_test_host, rust_test o rust_test_host), fai clic sull'icona della barra laterale Android.bp e seleziona Debug '<TestName>'. ASfP avvia il binario di test compilato nel debugger LLDB integrato anziché eseguirlo tramite atest.

Configura la configurazione di esecuzione del test Soong

Apri Esegui > Modifica configurazioni e seleziona una configurazione Soong Test per personalizzare la modalità di compilazione, deployment e avvio dei test:

  • Completamento automatico del modulo e Android.bpnavigazione: il campo Modulo si completa automaticamente con i moduli di test Soong indicizzati nel progetto. Fai clic su Vai ad Android.bp accanto al campo per passare alla dichiarazione del modulo in Android.bp.
  • Esegui su: dispositivo o host (incluso host_supported: true): ASfP valuta la regola del modulo e la relativa catena defaults transitiva (host_supported, device_supported, enabled, target.android.enabled, e target.host.enabled):
    • Test con doppio target (cc_test e rust_test con host_supported: true): sono disponibili entrambi i pulsanti di opzione Dispositivo e Host (l'impostazione predefinita è Dispositivo). Device e Host mantengono ciascuno il proprio modello di debugger LLDB indipendente. Il passaggio da Esegui su tra Dispositivo e Host alterna la configurazione del dispositivo remoto lldb-server e la configurazione binaria dell'host locale preservando le personalizzazioni apportate a ogni target.
    • Test con un solo target: se un test C++ o Rust viene compilato solo per un ambiente (ad esempio un cc_test solo dispositivo o un cc_test_host o rust_test_host solo host), ASfP seleziona il target supportato e disattiva il pulsante di opzione non supportato con una descrizione comando esplicativa: "<module> (<ruleType>) doesn't build for the host or device.".
  • Attività pre-lancio (crea modulo di test nativo ed esegui il deployment con atest): ogni configurazione di Soong Test include due attività Pre-lancio per impostazione predefinita:
    • Build Native Test Module: crea <module>-target (per Device) o <module>-host (per Host) prima di avviare LLDB.
    • Esegui il deployment con atest: durante il debug su Dispositivo, esegue atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi> in modo che Tradefed inserisca le dipendenze di test ed esegua i preparatori di destinazione prima che LLDB avvii il binario. Tieni premuto il puntatore sopra il chip Esegui il deployment con atest per visualizzare l'esatto comando atest. Per un'iterazione più rapida una volta che le dipendenze sono già sul dispositivo, rimuovi Deploy with atest in modo che ASfP invii direttamente solo il binario di test. Quando selezioni Esegui su: Host, ASfP salta automaticamente Esegui il deployment con l'ultima versione.
  • Modifica opzioni e debugger (schede delle opzioni LLDB): utilizza Modifica opzioni per aggiungere campi di configurazione facoltativi:
    • Argomenti del programma (solo test di sistema operativo, C++ e Rust): Argomenti aggiuntivi passati direttamente al binario cc_test o rust_test dopo il filtro --gtest_filter o libtest durante il debug.
    • atest arguments (Test): flag aggiuntivi passati a atest durante l'esecuzione del test o durante la preparazione di un dispositivo con Deploy with atest.
    • Debugger (solo test C++ e Rust): visualizzato quando Modulo è una destinazione cc_test* o rust_test*. Attiva/disattiva le schede Opzioni LLDB (ad esempio Interrompi all'ingresso, Memorizza simboli nella cache tra le sessioni, Carica simboli su richiesta o Con visualizzatori Rust per i test Rust), fai clic su Reimposta su impostazioni predefinite per reimpostare il modello Dispositivo o Host attivo oppure aggiungi Directory dei simboli, Comandi di inizializzazione, pre-esecuzione, post-esecuzione o uscita e JSON di avvio (Impostazioni DAP) da Modifica opzioni > Debugger.

Configurazione dell'esecuzione del test Soong che mostra le attività pre-lancio, le destinazioni del dispositivo o dell'host e le opzioni LLDB

Visualizzare i risultati dei test

L'avanzamento dell'esecuzione del test, lo stato di superamento o errore, le analisi dello stack e i log del dispositivo vengono visualizzati in tempo reale all'interno della finestra degli strumenti Esegui o Debug in ASfP.

Suggerimenti per i test

  • Esegui test mirati: testa singoli metodi dal margine dell'editor senza eseguire un'intera suite di test.
  • Utilizza gli snapshot di Cuttlefish: quando esegui test del dispositivo su dispositivi virtuali Cuttlefish, utilizza gli snapshot per ripristinare uno stato pulito del dispositivo tra le esecuzioni.
  • Ispeziona i log di build di Soong: se un test non viene compilato prima dell'esecuzione, controlla la finestra degli strumenti Soong per la diagnostica del compilatore.