Questa guida descrive come preparare ed eseguire un test di strumentazione utilizzando Firebase Test Lab. Per utilizzare questa guida, avrai bisogno 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 strumentazione possono essere eseguiti fino a 45 minuti sui dispositivi fisici e fino a 60 minuti sui dispositivi virtuali.
Nei passaggi successivi, caricherai l'APK dell'app e l'APK del test su Firebase.
(Facoltativo) Aggiungere la libreria 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
durante l'esecuzione di test di strumentazione
ad esempio i test scritti utilizzando il
framework di test Espresso.
In questa sezione viene descritto come creare oggetti ScreenCapture con la libreria AndroidX e come elaborarli utilizzando testlab-instr-lib.
Dopo aver eseguito il test di strumentazione, puoi visualizzare gli screenshot acquisiti nella Firebase console.
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: aggiungere la libreria di screenshot al progetto
Nel file Gradle delle impostazioni a livello di root del progetto di test (
settings.gradle.ktsosettings.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 modulo (a livello di app) (in genere
<project>/<app-module>/build.gradle.ktso<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") // ...
Nel file
AndroidManifest.xmldel test, registraFirebaseScreenCaptureProcessorin un tag meta-data all'interno dell'elemento<instrumentation>. Puoi anche specificare il processore come un argomento in AndroidJUnitRunner (per istruzioni, consulta la documentazione di riferimento di AndroidJUnitRunner ).<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.xmldell'app, aggiungi le seguenti righe all'interno delle}<manifest>elemento:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Nel file
AndroidManifest.xml, specifica le autorizzazioni di sistema per l'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'autorizzazioneWRITE_EXTERNAL_STORAGE(l'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 punto del test in cui vuoi acquisire uno screenshot, chiama il metodo Screenshot.capture() dalla libreria AndroidX. Viene generato un
ScreenCapture oggetto.
Quando chiami process() sull'oggetto ScreenCapture, questo viene elaborato
utilizzando il ScreenCaptureProcessor
registrato in AndroidManifest.xml. Tieni presente che se non sono registrati processori, viene utilizzato BasicScreenCaptureProcessor.
Poiché hai registrato FirebaseScreenCaptureProcessor, gli screenshot verranno
elaborati tramite FirebaseScreenCaptureProcessor e saranno disponibili
con i risultati quando esegui il test con Firebase Test Lab.
Esempi di casi d'uso per la creazione di un oggetto ScreenCapture:
Acquisisci un oggetto ScreenCapture completo su un livello API Build.VERSION_CODES.JELLY_BEAN_MR2 e versioni successive:
Screenshot.capture()Acquisisci un oggetto
ScreenCapturedell'attività su qualsiasi livello API. Tieni presente che questa è l'unica opzione per i dispositivi con versioni 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 un oggetto ScreenCapture
Elabora un oggetto
ScreenCapturetramiteFirebaseScreenCaptureProcessor:Screenshot.capture().process();Elabora un oggetto
ScreenCapturetramite un oggettoScreenCaptureProcessor(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 dell'oggetto
ScreenCaptureed elaboralo utilizzando il processore registrato:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
Passaggio 3: creare ed eseguire il test
Crea gli APK dell'app e del test (per istruzioni, vedi Testare l'app ).
Nella console Firebase, vai a DevOps e coinvolgimento > Test Lab, quindi carica i file APK.
Infine, esegui il test.
Passaggio 4: visualizzare gli screenshot del test
Al termine del test, puoi visualizzare gli screenshot acquisiti:
Nella console Firebase, vai a DevOps e coinvolgimento > Test Lab.
Nella scheda Test, seleziona il test completato, quindi fai clic sulla scheda Risultati.
Seleziona di nuovo il test, quindi 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
Attivare Orchestrator
Android Test Orchestrator è uno strumento che esegue ogni test di strumentazione dell'app in modo indipendente. Test Lab utilizza sempre l'ultima versione di Orchestrator.
Quando utilizzi Orchestrator, usufruisci dei seguenti vantaggi:
- Nessuno stato condiviso. Ogni test viene eseguito nella propria istanza di strumentazione, quindi uno stato condiviso non si accumula tra i test.
- Arresti anomali isolati. Se un test si arresta in modo anomalo, viene terminata solo la strumentazione e gli altri test della suite possono comunque essere eseguiti.
Tieni presente che quando utilizzi Orchestrator, ogni test esegue la propria istanza di strumentazione, il che significa che il processo dell'app viene riavviato dopo ogni scenario di test. L'aumento dei tempi di esecuzione risultante potrebbe influire 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 overhead si ridurrà.
Per impostare opzioni aggiuntive per Orchestrator, specificale tramite il
environmentVariables campo. Ad esempio, per utilizzare clearPackageData, usa questa opzione in gcloud:
--environment-variables clearPackageData=true
Attivare lo sharding
Lo sharding dei test divide un insieme di test in sottogruppi (shard) che vengono eseguiti separatamente in modo isolato. Test Lab esegue automaticamente ogni shard 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 ogni dispositivo. Ciò significa che gli scenari di test con sharding possono comportare più esecuzioni di test per dispositivo. Gli scenari di test senza sharding, invece, comportano un'esecuzione del test per dispositivo. Per scoprire i concetti di Test Lab, vedi Concetti chiave.
Per attivare lo sharding dei test nella console Firebase:
Nella configurazione del test di strumentazione,fai clic su **Opzioni aggiuntive**.
Nella sezione Sharding, inserisci il numero di shard che vuoi eseguire.
Fatturazione per gli shard di test
Test Lab implementa gli shard sfruttando il meccanismo di sharding integrato di AndroidJUnitRunner's built-in. Per evitare di ricevere addebiti per l'avvio di shard vuoti (shard senza scenari di test assegnati), il numero di shard creati deve essere inferiore al numero totale di scenari di test. A seconda del tempo necessario per l'esecuzione di ogni scenario di test, in genere è consigliabile assegnare 2-10 scenari di test per shard.
Per ulteriori informazioni sulla fatturazione, consulta Utilizzo, quote e fatturazione.