Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Test di strumentazione

Prima leggi Prova la tua app su developer.android.com. Tieni presente che ci sono alcune differenze nel modo in cui i test di strumentazione vengono utilizzati nei test della piattaforma.

In sintesi, un test di strumentazione fornisce uno speciale ambiente di esecuzione del test avviato tramite il comando am instrument , in cui il processo dell'applicazione mirato viene riavviato e inizializzato con il contesto dell'applicazione di base e un thread di strumentazione viene avviato all'interno della VM del processo dell'applicazione. Il codice di test avvia l'esecuzione su questo thread di strumentazione e viene fornito con un'istanza di Instrumentation che fornisce l'accesso al contesto dell'applicazione e alle API per manipolare il processo dell'applicazione sotto test.

Concetti chiave

  • una strumentazione deve essere dichiarata in un pacchetto dell'applicazione, con un tag <instrumentation> annidato sotto il tag <manifest> del manifesto del pacchetto dell'applicazione.
  • un manifesto del pacchetto dell'applicazione può tecnicamente contenere più tag <instrumentation> , sebbene non sia comunemente usato in questo modo.
  • ogni <instrumentation> deve contenere:
    • un attributo android:name : dovrebbe essere il nome di una sottoclasse di Instrumentation inclusa nell'applicazione di test, che in genere è il test runner utilizzato, ad esempio: android.support.test.runner.AndroidJUnitRunner
    • deve essere definito un attributo android:targetPackage . Il suo valore dovrebbe essere impostato sul pacchetto dell'applicazione in prova.

Riepilogo dei passaggi

  1. Di seguito sono elencate le destinazioni comuni per i test ermetici rispetto ai servizi quadro:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Se stai aggiungendo un nuovo modulo di strumentazione per il tuo componente, vedi

  2. Seguire la convenzione esistente se si aggiungono test in una delle posizioni sopra. Se stai configurando un nuovo modulo di test, segui la configurazione di AndroidManifest.xml e Android.mk in una delle posizioni sopra

  3. Vedi frameworks / base / core / tests / coretests / per un esempio. Nota che queste righe installano app extra:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Non dimenticare di contrassegnare il tuo test come @SmallTest , @MediumTest o @LargeTest

  5. Costruisci il modulo di test con make, ad esempio:

    make FrameworksCoreTests -j
    
  6. Esegui i test:

    make tradefed-all -j
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Se non si utilizza Tradefed, installare manualmente ed eseguire i test:

    1. Installa l'apk generato:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    Suggerimento: usi la strumentazione adb shell pm list instrumentation per trovare la strumentazione all'interno dell'apk appena installato

    1. Esegui i test con varie opzioni:

      1. tutti i test nell'apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. tutti i test in uno specifico pacchetto Java

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. tutti i test in una classe specifica

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. un metodo di prova specifico

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

Il tuo test può fare un'asserzione esplicita su superamento o fallimento utilizzando le API JUnit ; inoltre, eventuali eccezioni non rilevate causeranno anche un guasto funzionale.

Per generare metriche sulle prestazioni, il codice del test può chiamare Instrumentation#sendStatus per inviare un elenco di coppie chiave-valore. È importante notare che:

  1. le metriche possono essere numeri interi o virgola mobile
  2. eventuali valori non numerici verranno eliminati
  3. l'apk di test può essere sia test funzionali che test metrici, tuttavia la combinazione di entrambi non è attualmente supportata