Questa guida descrive come preparare ed eseguire un test della strumentazione utilizzando Firebase Test Lab. Per utilizzare questa guida, avrai bisogno di un test della strumentazione (scritto da te o dal tuo team) che utilizzi i framework di test Android Espresso o UI Automator . I test di strumentazione possono durare fino a 45 minuti su dispositivi fisici e fino a 60 minuti su dispositivi virtuali .
Nei passaggi successivi, caricherai l'APK della tua app e l'APK del tuo test su Firebase.
(Facoltativo) Aggiungi la libreria di screenshot alla tua app
Firebase Test Lab include una libreria (testlab-instr-lib) che puoi utilizzare per elaborare qualsiasi screenshot acquisito con ScreenCapture di AndroidX durante l'esecuzione di test di strumentazione, ad esempio 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.
Una volta eseguito il test della strumentazione, 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à incorporata nel progetto NotePad.
Passaggio 1. Aggiungi la libreria di screenshot al tuo progetto
Nel file Gradle delle impostazioni a livello di root del tuo progetto di test (
settings.gradle.kts
osettings.gradle
), aggiungi il repository Maven di Google a ogni sezionerepositories
: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() } } // ...
Nel file Gradle del tuo modulo (a livello di app) (solitamente
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
), aggiungi una dipendenza per il Test Lab libreria di schermate.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
Nel file
AndroidManifest.xml
del test, registraFirebaseScreenCaptureProcessor
in un tag di metadati all'interno dell'elemento<instrumentation>
. Puoi anche specificare il processore come argomento in AndroidJUnitRunner (vedi la documentazione di riferimento di AndroidJUnitRunner per istruzioni su come).<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> ...
Nel file
AndroidManifest.xml
della tua app, aggiungi le seguenti righe all'interno dell'elemento<manifest>
:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Nel file
AndroidManifest.xml
, specifica le autorizzazioni di sistema per la tua app aggiungendo le seguenti righe all'interno del tag<manifest>
. Se stai eseguendo il test su Android 10 (livello API 29) o versioni successive , ometti l'autorizzazioneWRITE_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. Acquisisci screenshot durante il test
In qualsiasi punto del test in cui desideri acquisire uno screenshot, chiama il metodo Screenshot.capture()
dalla libreria AndroidX. Questo produce un oggetto ScreenCapture
. Quando chiami process()
sull'oggetto ScreenCapture
, questo viene elaborato utilizzando ScreenCaptureProcessor registrato nel tuo AndroidManifest.xml
. Tieni presente che BasicScreenCaptureProcessor
viene utilizzato se non sono registrati processori. Poiché hai registrato FirebaseScreenCaptureProcessor
, i tuoi screenshot verranno elaborati tramite FirebaseScreenCaptureProcessor
e saranno disponibili per te con i risultati quando esegui il test con Firebase Test Lab.
Casi d'uso di esempio per la creazione di ScreenCapture
:
Effettua uno ScreenCapture completo su un'API Build.VERSION_CODES.JELLY_BEAN_MR2 e versioni successive:
Screenshot.capture()
Acquisisci uno
ScreenCapture
dell'attività a qualsiasi livello API. Tieni presente che questa è l'unica opzione per i dispositivi inferiori a Build.VERSION_CODES.JELLY_BEAN_MR2.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
Casi d'uso di esempio per l'elaborazione di ScreenCapture
Elabora uno
ScreenCapture
tramiteFirebaseScreenCaptureProcessor
:Screenshot.capture().process();
Elabora uno
ScreenCapture
tramite unoScreenCaptureProcessor
specificato (questo ti consente di saltare la registrazione del processore):Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);
Imposta il nome e il formato di
ScreenCapture
ed elaboralo utilizzando il processore registrato:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
Passaggio 3. Crea ed esegui il test
Crea la tua app e testa gli APK (vedi Testare la tua app per istruzioni).
Carica i file APK nella dashboard Test Lab della console Firebase.
Infine, esegui il test.
Passaggio 4. Visualizza gli screenshot di prova
Una volta completato il test, puoi visualizzare tutti gli screenshot acquisiti nella console Firebase.
Nella scheda Test , seleziona il test completato, quindi fai clic sulla scheda Risultati .
Seleziona nuovamente il test, quindi fai clic sulla scheda Screenshot visualizzata.
(Facoltativo) Abilita funzionalità di test aggiuntive
Puoi abilitare le seguenti funzionalità nel test prima di eseguirlo con Test Lab:
Abilita orchestratore
Android Test Orchestrator è uno strumento che esegue ciascuno dei test di strumentazione della tua app in modo indipendente. Test Lab utilizza sempre la versione più recente di Orchestrator.
Per abilitare Orchestrator for Test Lab, nella configurazione del test della strumentazione, fare clic su Opzioni aggiuntive > Esegui con Orchestrator .
Quando utilizzi Orchestrator, puoi beneficiare di quanto segue:
- Nessuno stato condiviso. Ogni test viene eseguito nella propria istanza di strumentazione, quindi uno stato condiviso non si accumula tra i test.
- Crash isolati. Se un test si arresta in modo anomalo, solo quella strumentazione viene terminata e gli altri test nella suite possono ancora essere eseguiti.
Tieni presente che quando usi Orchestrator, ogni test esegue la propria istanza di strumentazione, il che significa che il processo dell'app viene riavviato dopo ogni test case. Il conseguente aumento dei tempi di esecuzione potrebbe incidere sull'utilizzo della quota o sul tempo fatturato e potrebbe causare il superamento dei limiti di timeout dei dispositivi. Se riduci il tempo di avvio dell'app, questo sovraccarico si ridurrà.
Per impostare opzioni aggiuntive per Orchestrator, specificarle tramite il campo environmentVariables
. Ad esempio, per utilizzare clearPackageData
, utilizza questa opzione in gcloud:
--environment-variables clearPackageData=true
Abilita il partizionamento orizzontale
Lo sharding dei test divide una serie di test in sottogruppi (shard) che vengono eseguiti separatamente in isolamento. Test Lab esegue automaticamente ogni frammento in parallelo utilizzando più dispositivi e completa l'intera serie 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 i test case suddivisi possono comportare più esecuzioni di test per dispositivo. I casi di test non condivisi, tuttavia, comportano un'esecuzione del test per dispositivo. Per apprendere i concetti di Test Lab, consulta Concetti chiave .
Per abilitare lo sharding di prova nella console Firebase, procedi nel seguente modo:
Nella configurazione del test della strumentazione, fare clic su Opzioni aggiuntive .
Nella sezione Sharding , inserisci il numero di shard che desideri eseguire.
Fatturazione per gli shard di prova
Test Lab implementa i tuoi frammenti sfruttando il meccanismo di partizionamento integrato di AndroidJUnitRunner. Per evitare di ricevere addebiti per l'avvio di shard vuoti (shard senza casi di test assegnati), il numero di shard creati deve essere inferiore al numero totale di casi di test. A seconda del tempo necessario per l'esecuzione di ogni caso di test, in genere è una buona idea assegnare 2-10 casi di test per shard.
Per ulteriori informazioni sulla fatturazione, leggi Utilizzo, quote e fatturazione .