1. Introduzione
Ultimo aggiornamento: 07/04/2022
Come eseguire test mobile con sistemi CI/CD
L'esecuzione di test per il mobile può essere difficile: molte app vengono eseguite su piattaforme, dispositivi e versioni API diversi. Gli sviluppatori di app vogliono eseguire test su quante più configurazioni possibili per rilevare i problemi prima che lo facciano i loro utenti. Tuttavia, i limiti di costi e risorse limitano il numero di dispositivi di test e la quantità di manutenzione manuale in cui i singoli sviluppatori possono investire. Quando il processo di sviluppo viene scalato, soprattutto per i sistemi di integrazione continua/sviluppo continuo (CI/CD), il processo di test deve essere automatizzato riducendo al minimo i costi e l'impegno di manutenzione.
Per aiutarti a capire il rendimento delle tue app sui dispositivi degli utenti, Firebase Test Lab ospita una gamma di dispositivi mobili fisici e virtuali nei nostri data center. Forniamo anche Google Cloud CLI, uno strumento da riga di comando indipendente dalla piattaforma che orchestra l'esecuzione dei test sui dispositivi nei nostri data center. L'interfaccia a riga di comando gcloud semplifica l'integrazione della soluzione di test basata sul cloud di Test Lab nei flussi di lavoro CI/CD esistenti.
Supporto su più piattaforme
Test Lab fornisce soluzioni di test per app Android e iOS e supporto specializzato per giochi mobile come Unity. Le opzioni di test coprono i framework di test più diffusi, come Android Espresso, UI Automator e iOS XCTest. Utilizzando il nostro crawler automatico, Robo, Test Lab può eseguire test anche senza codice di test.
Nessun requisito hardware
Test Lab ospita dispositivi fisici nei data center Google e dispositivi virtuali in Google Cloud. Non devi fare altro che inviare i test a Test Lab e attendere i risultati.
Veloci e affidabili
L'esecuzione di molti scenari di test simultanei può richiedere molto tempo, bloccando i processi CI/CD. Con Test Lab, puoi suddividere facilmente i test ed eseguirli in parallelo su più dispositivi. Puoi anche rilevare l'instabilità, un problema comune dei test mobile.
Obiettivi didattici
- Come creare artefatti di test
- Come eseguire un test mobile utilizzando gcloud CLI
- Come configurare Jenkins CI
- Come eseguire test mobile utilizzando Jenkins CI
- Come configurare i test per scalare con i sistemi CI
Questo codelab è incentrato sull'esecuzione dei test. Concetti e blocchi di codice non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla.
Che cosa ti serve
Se preferisci creare tutto da zero, hai bisogno di Android Studio per eseguire un test Android o di Xcode per eseguire un test iOS. Oppure porta solo te stesso e ti forniremo gli artefatti.
2. Esegui un test con gcloud CLI
Crea un APK dell'app per Android e un APK di test
Per eseguire un test con Test Lab, inizia creando un APK dell'app per Android e un APK di test, che contiene test strumentati da eseguire su emulatori o dispositivi hardware. Se hai già un codebase funzionante, puoi creare i tuoi APK o utilizzare BasicSample per Espresso.
Per creare APK utilizzando i comandi Gradle, devi installare l'SDK Android. Se Android Studio non è installato sul tuo computer, installa Android Studio e l'SDK Android e imposta l'ambiente ANDROID_HOME
con la directory dell'SDK Android. Ad esempio, nel file ~/.bash_profile
, aggiungi la seguente riga:
export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk # For MacOS
Quindi, esegui questi comandi per clonare il codice e creare gli APK:
git clone https://github.com/android/testing-samples.git cd testing-samples/ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Dopo aver eseguito i comandi di clonazione e creazione, puoi trovare l'APK dell'app e l'APK di test nelle seguenti posizioni:
app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
In alternativa, puoi utilizzare le seguenti opzioni per ottenere gli APK di test e dell'app:
- Per creare APK in Android Studio, segui le istruzioni riportate in Test in Android Studio.
- Scarica l'app Blocco note di esempio. Utilizza il file binario
app-debug-unaligned.apk
e il file dei test di strumentazioneapp-debug-test-unaligned.apk
, che si trovano inNotePad/app/build/outputs/apk/
.
Se hai il codice sorgente funzionante di un'app per iOS, puoi scrivere un XCTest e creare un file zip dall'app e dai test.
Utilizza gcloud CLI per eseguire un test con Test Lab
In questa sezione, devi creare un progetto Firebase e configurare l'ambiente Google Cloud SDK locale. Per saperne di più, consulta Inizia a eseguire test con gcloud CLI .
Configura gcloud CLI
- Scarica Google Cloud SDK, che include lo strumento gcloud CLI.
- Verifica che l'installazione sia aggiornata:
gcloud components update
- Accedi a gcloud CLI utilizzando il tuo Account Google:
gcloud auth login
- Imposta il progetto Firebase nella CLI gcloud, dove
PROJECT_ID
è l'ID progetto Firebase. Puoi trovare l'ID progetto nell'URL della console Firebase, che segue questa convenzione di denominazione:https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID
Se non hai un progetto Firebase, creane uno nella console Firebase.
Eseguire un test utilizzando gli APK creati
In questa sezione, esegui un test di strumentazione sul dispositivo predefinito di Test Lab, ovvero un Pixel 3 con livello API 28. Se vuoi utilizzare un altro dispositivo, controlla i dispositivi disponibili.
Utilizzando l'app e gli APK di test che hai creato in Crea un APK Android e un APK di test, esegui un test di instrumentazione Android utilizzando il seguente comando:
gcloud firebase test android run \ --type instrumentation \ --app app/build/outputs/apk/debug/app-debug.apk \ --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Analizzare i risultati del test
Puoi analizzare i risultati del test utilizzando una delle seguenti opzioni:
gcloud
summary: al termine del test, gcloud CLI stampa un riepilogo di base dei risultati.gcloud
codice di uscita: al termine del test, il comando esce con 0 se il test è stato superato. Se il test non va a buon fine, il comando viene chiuso con un codice di uscita diverso da zero.- Console Firebase: gcloud CLI stampa un link alla Console Firebase. Il link segue la convenzione di denominazione
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
. Per saperne di più, consulta Interpretare i risultati di una singola esecuzione del test. - File XML JUnit: gcloud CLI stampa quanto segue:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]
test-lab-xxxxx/xxxxx
è il bucket Cloud Storage che archivia gli artefatti e i risultati dei test. Per individuare il file XML JUnit che contiene i risultati del test, apri il link e vai a blueline-28-en-portrait/test_result_1.xml
.
3. Configurazione con Jenkins CI
In questa sezione utilizzerai Jenkins CI, un sistema CI popolare, per eseguire test con Test Lab. Se vuoi utilizzare un altro sistema CI, consulta Best practice avanzate per l'esecuzione di suite di test di grandi dimensioni e la documentazione di altri sistemi CI come Bitrise e Circle CI. Puoi utilizzare Flank come alternativa a gcloud CLI.
Abilita gcloud CLI per Jenkins
Prima di poter utilizzare Test Lab con Jenkins, devi attivare le API richieste e configurare un service account che Jenkins possa utilizzare per l'autenticazione con gcloud CLI.
Aggiungere un service account Google Cloud per Jenkins
I service account sono account limitati destinati alle integrazioni di servizi. Questi account offrono un controllo granulare per servizi specifici e non sono soggetti a controlli antispam o richieste di captcha, che altrimenti potrebbero bloccare le build di integrazione continua.
Per creare un service account:
- Apri la pagina Service Accounts nella console Google Cloud.
- Fai clic su Crea service account, aggiungi un Nome e una Descrizione, quindi fai clic su Crea e continua.
- Nel menu a discesa Seleziona un ruolo, seleziona Basic e poi Editor.
- Fai clic su Continua, poi su Fine.
Successivamente, crea e scarica una chiave di autenticazione che Jenkins può utilizzare per autenticarsi come service account che hai creato.
Per creare e scaricare la chiave dell'account di servizio:
- Nella pagina Service account della console Google Cloud, fai clic sull'email associata all'account che hai creato.
- Seleziona Chiavi, poi fai clic su Aggiungi chiave e Crea nuova chiave.
- Seleziona JSON, quindi fai clic su Crea.
- Quando ti viene chiesto di scaricare il file, fai clic su Ok. Scarica il file in un luogo sicuro sul computer. Ti servirà in un secondo momento durante la configurazione di Jenkins.
Per scoprire di più sulla creazione dei service account, vedi Creare un service account.
Abilita le API Google Cloud richieste
L'API Cloud Testing consente di eseguire test sull'infrastruttura Google. Hai abilitato questa API quando hai completato Eseguire un test con gcloud CLI. L'API Cloud Tool Results ti consente di accedere in modo programmatico ai risultati dei test.
- Apri la libreria API di Google Developers Console.
- Nella barra di ricerca nella parte superiore della console Firebase, inserisci il nome di ogni API richiesta ( API Cloud Testing e API Cloud Tool Results). Viene visualizzata la pagina di panoramica dell'API richiesta.
- Fai clic su Abilita API nella pagina di panoramica di ciascuna API.
Installa e configura Jenkins
Puoi installare e configurare Jenkins CI su Linux, macOS, Windows e molti altri ambienti. Alcuni dettagli di questo codelab sono specifici per l'installazione e l'esecuzione di Jenkins CI su Linux, incluso l'utilizzo di barre (/) nei percorsi dei file.
Per scaricare e installare Jenkins su un computer con Linux o Windows, segui le istruzioni per installare Jenkins. Dopo aver installato Jenkins, segui le stesse istruzioni di installazione per completare la configurazione e accedere alla dashboard di Jenkins utilizzando http://localhost:8080.
Verificare i plug-in installati
Jenkins supporta diversi sistemi di controllo della versione. In questo codelab, utilizzi Git per eseguire il test precedente. Per un'esperienza migliore con l'esecuzione di gcloud CLI, devi installare il plug-in GCloud SDK.
- Nella dashboard di Jenkins, fai clic su Manage Jenkins (Gestisci Jenkins) e poi su Manage Plugins (Gestisci plug-in).
- Cerca i plug-in Git e GCloud SDK e installali (se non sono ancora installati).
Configura la posizione degli SDK Android e Google Cloud
Ora devi indicare a Jenkins dove trovare Google Cloud SDK e Android SDK.
Per configurare gli SDK Google Cloud e Android per Jenkins:
- Nella dashboard di Jenkins, fai clic su Manage Jenkins (Gestisci Jenkins), quindi su Global Tool Configuration (Configurazione globale degli strumenti).
- Nella sezione Google Cloud SDK, fai clic su Aggiungi Google Cloud SDK.
- Nel campo Nome, inserisci un nome facile da ricordare per l'istanza di Google Cloud SDK, ad esempio GCloud-SDK.
- Inserisci la directory principale di Google Cloud SDK, ad esempio
/opt/google-cloud-sdk
. - Fai clic su Salva.
- Configura le proprietà a livello di sistema per gli SDK Android e Google Cloud aprendo Dashboard > Gestisci Jenkins > Configura sistema.
- Seleziona la casella di controllo Variabili di ambiente e fai clic su Aggiungi.
- Nel campo Nome, inserisci ANDROID_HOME. Nel campo Valore, inserisci la posizione dell'SDK Android, ad esempio
/opt/Android/Sdk
. - Fai clic sulla casella di controllo Posizioni degli strumenti e poi su Aggiungi. Dal menu a discesa Nome, seleziona il nome dell'istanza dell'SDK Google Cloud che hai aggiunto in Configurazione globale dello strumento.
- Nel campo Home, inserisci la posizione di Google Cloud SDK, ad esempio
/opt/google-cloud-sdk
. - Fai clic su Salva.
Aggiungi le credenziali del service account a Jenkins
Ora aggiungi le credenziali del service account gcloud CLI a Jenkins in modo che Jenkins possa autenticarsi ed eseguire correttamente i comandi gcloud CLI.
- Nella dashboard di Jenkins, fai clic su Manage Jenkins (Gestisci Jenkins) e poi su Manage Credentials (Gestisci credenziali).
- Nella sezione Archivi con ambito limitato a Jenkins, fai clic sul link del dominio (globale), quindi fai clic su Aggiungi credenziali.
- Dal menu a discesa Tipo, seleziona Service account Google da chiave privata.
- Nel campo Nome progetto, inserisci il nome del tuo progetto Firebase.
- Seleziona JSON key (Chiave JSON), quindi fai clic su Browse (Sfoglia) e vai alla posizione in cui hai salvato la chiave del service account.
- Fai clic su Crea.
Ora puoi configurare la build automatica di Jenkins per Test Lab.
4. Esegui test Test Lab con Jenkins CI
Ora che hai configurato Jenkins, mettiamo tutto insieme ed eseguiamo lo stesso test utilizzando Jenkins.
Puoi configurare Jenkins per eseguire build automatizzate e test ogni volta che vengono archiviati gli aggiornamenti dell'app. Puoi anche configurare Jenkins per eseguire le build periodicamente. Per saperne di più sulla configurazione delle build in Jenkins, consulta Configurazione delle build automatiche.
Crea e configura il progetto Jenkins
Crea un progetto per eseguire test di integrazione continua della tua app con Test Lab.
Crea un progetto Jenkins
- Apri la dashboard di Jenkins andando alla pagina http://localhost:8080.
- Nella dashboard di Jenkins, fai clic su New Item.
- Inserisci un nome per il progetto nel campo Nome elemento e fai clic su Progetto freestyle per creare un progetto che utilizza una singola configurazione di build.
- Fai clic su OK. Per completare le configurazioni del progetto, completa le sezioni rimanenti in sequenza.
Configurare la gestione del codice sorgente
- Nella scheda Source Code Management (Gestione del codice sorgente), seleziona Git.
- Inserisci https://github.com/android/testing-samples.git nel campo Repository URL (URL repository).
Configura l'ambiente di build
La sezione Ambiente di compilazione consente di configurare le caratteristiche di compilazione. Attiva l'autenticazione Google Cloud seguendo questi passaggi:
- Nella scheda Ambiente di build, seleziona la casella di controllo Autenticazione SDK GCloud e il nome dell'installazione che hai scelto quando hai aggiunto le informazioni di installazione di Google Cloud.
- Dal menu a discesa Credenziali Google, seleziona le credenziali del service account che hai configurato.
Aggiungi passaggi di build Gradle per ricompilare i pacchetti APK
- Scorri verso il basso fino alla sezione Build, fai clic su Add build step (Aggiungi passaggio build) e poi seleziona Execute shell (Esegui shell).
- Aggiungi un passaggio di build per eseguire i seguenti comandi nella directory principale della tua applicazione:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Aggiungi un passaggio di build di gcloud CLI a Jenkins
Ora puoi aggiungere un passaggio di build a Jenkins per eseguire Test Lab utilizzando la riga di comando gcloud CLI.
Per aggiungere il passaggio di build di gcloud CLI, aggiungi un nuovo passaggio di build Esegui shell ed esegui questo comando:
gcloud config set project PROJECT_ID gcloud firebase test android run \ --app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk --test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Dopo aver completato la configurazione del progetto, scorri verso il basso fino alla fine della pagina e salva la configurazione. Viene visualizzata la home page del nuovo progetto.
Eseguire test con Jenkins
Ora puoi creare il progetto Jenkins ed eseguire un test come quello manuale che hai eseguito con gcloud CLI.
Per eseguire il test con Jenkins, segui questi passaggi:
- Per attivare la build manualmente, fai clic su Crea ora.
- Controlla l'avanzamento e i risultati facendo clic sulla nuova build > Output della console.
Se non vedi errori, complimenti. Hai appena configurato un progetto ed eseguito un test su un dispositivo Pixel 2 con un solo clic. Se si verificano errori, vedi Risoluzione dei problemi.
5. Best practice avanzate per l'esecuzione di grandi suite di test
Quando vuoi eseguire molti test contemporaneamente, segui queste best practice per assicurarti che vengano eseguiti in modo rapido e affidabile.
Aumentare la copertura su più configurazioni di dispositivi
Puoi aggiungere facilmente più dispositivi al passaggio di build di gcloud CLI. Puoi controllare e scegliere dispositivi, versioni, impostazioni internazionali e orientamenti disponibili. Ad esempio, il seguente comando esegue test su due dispositivi:
- Un Google Pixel 2 virtuale con livello API 30 in orientamento verticale e impostazioni internazionali in inglese
- Uno smartphone Samsung Galaxy S20 fisico con livello API 29 in orientamento orizzontale e impostazioni internazionali francesi
gcloud firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --device model=Pixel2,version=30,locale=en,orientation=portrait \ --device model=x1q,version=29,locale=fr,orientation=landscape
Utilizzare un file di configurazione YAML di gcloud CLI
Se preferisci gestire gli argomenti in un unico posto o con il sistema di controllo del codice sorgente, puoi specificarli in un file di argomenti in formato YAML. Per scoprire come utilizzare questa funzionalità, esegui gcloud topic arg-files
.
Test di shard da eseguire in parallelo
Lo sharding dei test divide un insieme di test in sottogruppi (shard) che vengono eseguiti separatamente in isolamento. Test Lab esegue automaticamente ogni shard in parallelo utilizzando più dispositivi, il che consente di completare l'intero set di test più rapidamente. Per ulteriori informazioni, vedi Attivare lo sharding.
Per attivare lo sharding, utilizza il canale gcloud beta
e aggiungi il flag –num-uniform-shards o –test-targets-for-shard al passaggio di build di gcloud CLI. Ad esempio, per suddividere i test in cinque esecuzioni ed eseguirli in parallelo, esegui i seguenti comandi:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-uniform-shards 5
Attivare il rilevamento di test instabili
I test per dispositivi mobili spesso possono essere irregolari. A volte i test vengono superati, altre volte potrebbero non riuscire, anche con la stessa configurazione. Puoi rilevare se un test non riuscito è instabile utilizzando il flag –num-flaky-test-attempts di gcloud CLI. Questo flag specifica il numero di volte in cui deve essere ripetuta l'esecuzione di un test se uno o più scenari di test non riescono per qualsiasi motivo.
Ad esempio, per eseguire nuovamente i casi di test non riusciti altre tre volte dopo l'esecuzione iniziale non riuscita, specifica quanto segue:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-flaky-test-attempts 3
6. Complimenti
Congratulazioni, hai eseguito correttamente il primo test Test Lab con un sistema CI.
Hai creato APK di test e dell'app ed eseguito un test di strumentazione con Test Lab utilizzando gcloud CLI. Hai anche configurato un progetto Jenkins per automatizzare lo stesso test.
Ora conosci i passaggi chiave per integrare Test Lab nel tuo sistema CI/CD.
Passaggi successivi
Consulta Come configurare l'integrazione continua utilizzando Firebase Emulator Suite
Per approfondire
- Inizia a eseguire i test con i sistemi CI | Documentazione di Firebase
- Inizia a eseguire i test con gcloud CLI | Documentazione di Firebase