Test della strumentazione

Prima leggi prova la vostra applicazione su developer.android.com. Tieni presente che ci sono 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 test come avviato dalla am instrument comando, dove il processo di applicazione mirata viene riavviato e inizializzato con contesto applicativo di base, ed una filettatura strumentazione è avviato all'interno del processo di applicazione VM. Tuo codice di prova inizia l'esecuzione su questo thread strumentazione ed è provvisto di un Instrumentation istanza che fornisce l'accesso al contesto applicativo e API per manipolare il processo di applicazione in prova.

Concetti chiave

  • una strumentazione deve essere dichiarato in un pacchetto di applicazioni, con una <instrumentation> tag annidati sotto la <manifest> tag del manifesto pacchetto dell'applicazione.
  • un manifesto pacchetto applicativo può contenere più tecnicamente <instrumentation> tag, anche se non è comunemente usato in questo modo.
  • ogni <instrumentation> deve contenere:
    • un android:name attributo: dovrebbe essere il nome di una sottoclasse di Instrumentation che è incluso nella domanda di prova, che è in genere il test runner che viene utilizzato, ad esempio: android.support.test.runner.AndroidJUnitRunner
    • un android:targetPackage attributo deve essere definito. 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 contro i servizi framework:

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

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

  2. Seguendo la convenzione esistente se si aggiungono test in una delle posizioni sopra. Se si sta configurando un nuovo modulo di test, si prega di seguire la messa a punto di AndroidManifest.xml e Android.mk in una delle posizioni di cui sopra

  3. Vedere framework / basamento / nucleo / test / 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 dimenticate di segnare 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 si utilizza Tradefed, installare ed eseguire manualmente i test:

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

    Suggerimento: si usa adb shell pm list instrumentation per trovare le strumentazioni all'interno del 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 un pacchetto Java specifico

        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 test può fare un'affermazione esplicita sul passaggio o non utilizzando JUnit API; inoltre, qualsiasi eccezione non rilevata causerà anche un guasto funzionale.

Per emettere i parametri di rendimento, il tuo codice di prova può chiamare Instrumentation#sendStatus per l'invio di 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. il tuo apk di test può essere test funzionali o test di metriche, tuttavia la miscelazione di entrambi non è attualmente supportata