Test di strumentazione

Come prima cosa, leggi Testare l'app su developer.android.com. Tieni presente che ci sono alcune differenze come vengono usati i test di strumentazione nei test della piattaforma.

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

Concetti principali

  • una strumentazione deve essere dichiarata nel pacchetto di un'applicazione, con un <instrumentation> nidificato sotto il tag <manifest> del manifest del pacchetto dell'applicazione.
  • Il file manifest di un pacchetto dell'applicazione può tecnicamente contenere più <instrumentation>, sebbene non sia comunemente utilizzato in questo modo.
  • ogni <instrumentation> deve contenere:
    • un attributo android:name: deve essere il nome di una sottoclasse di Instrumentation incluso nell'applicazione di test, che in genere è la runner utilizzato, ad es.: android.support.test.runner.AndroidJUnitRunner
    • è necessario definire un attributo android:targetPackage. Il suo valore dovrebbe essere impostata sul pacchetto dell'applicazione sottoposta a test.

Riepilogo dei passaggi

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

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

    Se aggiungi un nuovo modulo di misurazione per il componente, consulta

  2. Attenendoti alla convenzione esistente se aggiungi test in uno dei posizioni sopra. Se stai configurando un nuovo modulo di test, segui le configurazione di AndroidManifest.xml e Android.mk in una delle località superiori a

  3. Per un esempio, consulta frameworks/base/core/tests/coretests/. Tieni presente 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 test come @SmallTest, @MediumTest o @LargeTest

  5. Crea il modulo di test con m, ad es.:

    m FrameworksCoreTests
    
  6. Esegui i test:

    • La soluzione più semplice consiste nell'utilizzare Conferma in questo modo:

      atest FrameworksCoreTests
      
    • Oppure, per test più complessi, utilizza la classe Trade Federation test Harness:

    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 di un determinato pacchetto Java

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. tutti i test di un corso specifico

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. un metodo di test 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 su pass o fail utilizzando le API JUnit; inoltre, eventuali eccezioni non rilevate causeranno anche un errore funzionale.

Per emettere metriche delle prestazioni, il codice di test può chiamare Instrumentation#sendStatus per inviare un elenco di coppie chiave/valore. È importante notare che:

  1. le metriche possono essere numeri interi o rappresentazione in virgola mobile
  2. i valori non numerici verranno ignorati
  3. l'APK di test può essere sia test funzionali che test di metriche, la combinazione di entrambi non è attualmente supportata