Inizia a utilizzare i test di strumentazione

Questa guida descrive come preparare ed eseguire un test di misurazione utilizzando Firebase Test Lab. Per utilizzare questa guida, devi disporre di un test di strumentazione (scritto da te o dal tuo team) che utilizzi i framework di test Android Espresso o UI Automator. I test di misurazione possono essere eseguiti per un massimo di 45 minuti sui dispositivi fisici e per un massimo di 60 minuti sui dispositivi virtuali.

Nei passaggi successivi, caricherai su Firebase l'APK della tua app e l'APK del tuo test.

(Facoltativo) Aggiungi la raccolta di screenshot all'app

Firebase Test Lab include una libreria (testlab-instr-lib) che puoi utilizzare per elaborare gli screenshot acquisiti con ScreenCapture di AndroidX quando esegui test di misurazione, ad esempio i test scritti utilizzando il framework di test Espresso. Questa sezione descrive come creare oggetti ScreenCapture con la libreria AndroidX e come elaborarli utilizzando testlab-instr-lib.

Dopo aver eseguito il test di misurazione, puoi visualizzare gli screenshot acquisiti nella console Firebase.

Prova un'app di esempio

Scarica l'app di esempio NotePad per provare questa funzionalità. La possibilità di acquisire screenshot è già integrata nel progetto Notepad.

Passaggio 1: Aggiungere la libreria di screenshot al progetto

  1. Nel file Gradle delle impostazioni a livello di radice del progetto di test (settings.gradle.kts o settings.gradle), aggiungi il repository Maven di Google a ogni sezione repositories:

    pluginManagement {
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
            gradlePluginPortal()
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
        }
    }
    // ...
  2. Nel file Gradle del modulo (a livello di app) (di solito <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), aggiungi una dipendenza per la libreria di screenshot Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2")
      // ...
  3. Nel file AndroidManifest.xml del test, registra FirebaseScreenCaptureProcessor in un tag metadati all'interno dell'elemento <instrumentation>. In alternativa, puoi specificare il processore come argomento in AndroidJUnitRunner (consulta la documentazione di riferimento di AndroidJUnitRunner per istruzioni su come procedere).

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. Nel file AndroidManifest.xml dell'app, aggiungi le seguenti righe all'interno dell'elemento <manifest>:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. Nel file AndroidManifest.xml, specifica le autorizzazioni di sistema per la tua app aggiungendo le seguenti righe all'interno del tag <manifest>. Se esegui il test su Android 10 (livello API 29) o versioni successive, ometti l'autorizzazione WRITE_EXTERNAL_STORAGE (la tua app non richiede questa autorizzazione per leggere e scrivere screenshot sul dispositivo).

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

Passaggio 2: Acquisire screenshot durante il test

In qualsiasi momento del test in cui vuoi acquisire uno screenshot, chiama il metodo Screenshot.capture() dalla libreria AndroidX. Viene prodotto un oggetto ScreenCapture. Quando chiami process() sull'oggetto ScreenCapture, viene elaborato utilizzando ScreenCaptureProcessor registrato in AndroidManifest.xml. Tieni presente cheBasicScreenCaptureProcessor viene utilizzato se non sono registrati elaboratori. Poiché hai registrato FirebaseScreenCaptureProcessor, i tuoi screenshot verranno elaborati tramite FirebaseScreenCaptureProcessor e saranno disponibili insieme ai risultati quando esegui il test con Firebase Test Lab.

Esempi di casi d'uso per la creazione di un ScreenCapture:

  • Acquisisci uno ScreenCapture completo su un'API Build.VERSION_CODES.JELLY_BEAN_MR2 e superiore:

    Screenshot.capture()
    
  • Scatta un ScreenCapture dell'attività a qualsiasi livello dell'API. Tieni presente che questa è l'unica opzione per i dispositivi precedenti a Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Esempi di casi d'uso per l'elaborazione di una schermata acquisita

  • Elabora un ScreenCapture tramite il FirebaseScreenCaptureProcessor:

    Screenshot.capture().process();
    
  • Elabora un ScreenCapture tramite un ScreenCaptureProcessor specificato (in questo modo puoi saltare la registrazione del processore):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Imposta il nome e il formato del ScreenCapture ed elaboralo utilizzando il processore registrato:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Passaggio 3: Crea ed esegui il test

  1. Crea l'app e testa gli APK (consulta Testare l'app per istruzioni).

  2. Carica i file APK nella dashboard di Test Lab della console Firebase.

  3. Infine, esegui il test.

Passaggio 4: Visualizzare gli screenshot del test

Al termine del test, puoi visualizzare gli screenshot acquisiti nella console Firebase.

  1. Nella scheda Test, seleziona il test completato, poi fai clic sulla scheda Risultati.

  2. Seleziona di nuovo il test e poi fai clic sulla scheda Screenshot visualizzata.

(Facoltativo) Attivare funzionalità di test aggiuntive

Puoi attivare le seguenti funzionalità nel test prima di eseguirlo con Test Lab:

Attiva Orchestrator

Android Test Orchestrator è uno strumento che esegue in modo indipendente ogni test di misurazione della tua app. Test Lab utilizza sempre la versione più recente di Orchestrator.

Per attivare Orchestrator per Test Lab, nella configurazione del test di strumentazione,fai clic su Opzioni aggiuntive > Esegui con Orchestrator.

Quando utilizzi Orchestrator, puoi usufruire di quanto segue:

  • Nessuno stato condiviso. Ogni test viene eseguito nella propria istanza di instrumentazione, pertanto uno stato condiviso non si accumula nei test.
  • Arresti anomali isolati. Se un test si arresta in modo anomalo, viene terminata solo la relativa instrumentation e gli altri test della suite possono essere eseguiti.

Tieni presente che quando utilizzi Orchestrator, ogni test esegue la propria istanza di instrumentazione, il che significa che il processo dell'app viene riavviato dopo ogni scenario di test. I tempi di esecuzione più lunghi che ne derivano potrebbero influire sul tuo utilizzo della quota o sul tempo fatturato e potrebbero farti superare i limiti di timeout dei tuoi dispositivi. Se riduci il tempo di avvio dell'app, questo overhead verrà ridotto.

Per impostare opzioni aggiuntive per Orchestrator, specificale tramite il campo environmentVariables. Ad esempio, per utilizzare clearPackageData, utilizza questa opzione in gcloud:

--environment-variables clearPackageData=true

Attivare lo sharding

La suddivisione in blocchi dei test suddivide un insieme di test in sottogruppi (shard) che vengono eseguiti singolarmente in modo isolato. Test Lab esegue automaticamente ogni frammento in parallelo utilizzando più dispositivi e completa l'intero insieme di test in meno tempo.

Ad esempio, se crei N shard, per ogni dispositivo selezionato, Test Lab avvia N dispositivi identici ed esegue un sottoinsieme di test su ciascun dispositivo. Ciò significa che gli scenari di test suddivisi in parti possono comportare più esecuzioni di test per dispositivo. Gli scenari di test non suddivisi in parti, invece, generano un'esecuzione del test per dispositivo. Per informazioni sui concetti di Test Lab, consulta Concetti chiave.

Per attivare lo sharding dei test nella console Firebase:

  1. Nella configurazione del test di strumentazione,fai clic su Opzioni aggiuntive.

  2. Nella sezione Sharding, inserisci il numero di shard che vuoi eseguire.

Fatturazione per i frammenti di test

Test Lab implementa i frammenti sfruttando il meccanismo di frammentazione integrato di AndroidJUnitRunner. Per evitare che ti vengano addebitati gli shard vuoti (shard senza scenari di test assegnati), il numero di shard che crei deve essere inferiore al numero totale di scenari di test. A seconda del tempo di esecuzione di ogni scenario di test, in genere è buona norma assegnare 2-10 scenari di test per shard.

Per ulteriori informazioni sulla fatturazione, leggi Utilizzo, quote e fatturazione.