Prove di strumentazione

Per prima cosa leggi Prova la tua app su Developer.android.com. Tieni presente che esistono alcune differenze nel modo in cui i test della 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 mirata viene riavviato e inizializzato con il contesto dell'applicazione di base e un thread di strumentazione viene avviato all'interno della VM del processo di applicazione. Il codice di test inizia l'esecuzione su questo thread di strumentazione e viene fornito con un'istanza Instrumentation che fornisce l'accesso al contesto dell'applicazione e alle API per manipolare il processo dell'applicazione in fase di test.

Concetti chiave

  • una strumentazione deve essere dichiarata in un pacchetto dell'applicazione, con un tag <instrumentation> nidificato sotto il tag <manifest> del manifesto del pacchetto dell'applicazione.
  • il manifesto di un pacchetto dell'applicazione può tecnicamente contenere più tag <instrumentation> , sebbene non sia comunemente utilizzato in questo modo.
  • ciascuna <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
    • è necessario definire un attributo android:targetPackage . Il suo valore deve essere impostato sul pacchetto dell'applicazione in fase di test.

Riepilogo dei passaggi

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

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

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

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

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

    <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 m, ad esempio:

    m FrameworksCoreTests
    
  6. Esegui i test:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Se non utilizzi Tradefed, installa ed esegui manualmente i test:

    1. Installa l'apk generato:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    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 sul superamento o sul fallimento utilizzando le API JUnit ; inoltre, eventuali eccezioni non rilevate causeranno anche un errore funzionale.

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

  1. le metriche possono essere intere o in virgola mobile
  2. eventuali valori non numerici verranno scartati
  3. l'apk di prova può essere test funzionali o test di metrica, tuttavia la combinazione di entrambi non è attualmente supportata