Integrare Test Lab nel sistema CI/CD

1. Introduzione

Ultimo aggiornamento: 2022-04-07

Come eseguire test mobile con sistemi CI/CD

L'esecuzione di test sui dispositivi mobili può essere difficile, in quanto molte app vengono eseguite su piattaforme, dispositivi e versioni API diversi. Gli sviluppatori di app vogliono testare il maggior numero possibile di configurazioni per individuare i problemi prima che lo facciano gli 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 fa lo scale up, soprattutto per i sistemi di integrazione continua/sviluppo continuo (CI/CD), il processo di test deve essere automatizzato, riducendo al minimo i costi e lo sforzo di manutenzione.

Per aiutarti a comprendere le prestazioni delle tue app sui dispositivi degli utenti, Firebase Test Lab ospita una serie di dispositivi mobili fisici e virtuali nei nostri data center. Forniamo inoltre Google Cloud CLI, uno strumento a riga di comando indipendente dalla piattaforma che orchestra i test in esecuzione sui dispositivi dei nostri data center. L'interfaccia a riga di comando gcloud semplifica l'integrazione della soluzione di test basata su cloud di Test Lab nei flussi di lavoro CI/CD esistenti.

Supporto su più piattaforme

Test Lab offre soluzioni di test per le app per Android e iOS e assistenza specializzata per i giochi mobile come Unity. Le opzioni di test coprono framework di test popolari come Android Espresso, UI Automator e iOS XCTest. Utilizzando il nostro crawler automatizzato Robo, Test Lab può anche eseguire test senza alcun codice di test.

Nessun requisito hardware

Test Lab ospita dispositivi fisici nei data center di 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 contemporaneamente può richiedere molto tempo, bloccando i processi CI/CD. Con Test Lab puoi suddividere facilmente i test ed eseguirli su più dispositivi in parallelo. Puoi anche rilevare la variabilità, un problema comune dei test mobile.

Obiettivi didattici

  • Creazione di artefatti di test
  • Come eseguire un test mobile utilizzando gcloud CLI
  • Come configurare CI con Jenkins
  • Come eseguire test mobile utilizzando Jenkins CI
  • Come configurare i test per l'aumento di scalabilità con i sistemi CI

Questo codelab è incentrato sull'esecuzione di 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 i file partendo da zero, devi avere Android Studio per eseguire un test Android o XCode per eseguire un test su iOS. In alternativa, basta che tu ti presenti e noi forniremo gli elementi.

2. Esegui un test con gcloud CLI

Creare un APK dell'app Android e un APK di test

Per eseguire un test con Test Lab, inizia creando un APK per app Android e un APK di test che contenga test instrumentati da eseguire su dispositivi hardware o emulatori. Se hai già una base di codice 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 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

A questo punto, esegui questi comandi per clonare il codice e creare 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 clone e build, 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 compilare gli APK in Android Studio, segui le istruzioni riportate in Eseguire 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 misurazione app-debug-test-unaligned.apk, che si trovano in NotePad/app/build/outputs/apk/.

Se disponi di un codice sorgente funzionante per un'app per iOS, puoi scrivere un file XCTest e creare un file ZIP dall'app e dai test.

Utilizzare gcloud CLI per eseguire un test con Test Lab

In questa sezione creerai un progetto Firebase e configurerai l'ambiente locale di Google Cloud SDK. Per saperne di più, consulta Avviare i test con gcloud CLI .

Configurare l'interfaccia a riga di comando gcloud

  1. Scarica Google Cloud SDK, che include lo strumento gcloud CLI.
  2. Verifica che l'installazione sia aggiornata:
gcloud components update
  1. Accedi a gcloud CLI utilizzando il tuo Account Google:
gcloud auth login
  1. Imposta il progetto Firebase nell'interfaccia a riga di comando 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.

Esegui un test utilizzando gli APK compilati

In questa sezione, eseguirai 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.

Con l'app e gli APK di test che hai creato in Crea un APK di app Android e un APK di test, esegui un test Android Instrumentation usando 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, l'interfaccia a riga di comando gcloud stampa un riepilogo di base dei risultati del test.
  • Codice di uscita gcloud: al termine del test, il comando esce con 0 se il test è stato superato. Se il test non va a buon fine, il comando esce 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 di 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. Configura con Jenkins CI

In questa sezione utilizzerai Jenkins CI, un popolare sistema CI, per eseguire test con Test Lab. Se vuoi utilizzare un sistema CI diverso, consulta le best practice avanzate per l'esecuzione di suite di test di grandi dimensioni e la documentazione per altri sistemi CI come Bitrise e Circle CI. Puoi utilizzare Flank come alternativa all'interfaccia a riga di comando gcloud.

Attivare l'interfaccia a riga di comando gcloud per Jenkins

Prima di poter utilizzare Test Lab con Jenkins, devi abilitare le API richieste e configurare un account di servizio che Jenkins possa utilizzare per l'autenticazione con gcloud CLI.

Aggiungi un account di servizio Google Cloud per Jenkins

Gli account di servizio sono account con limitazioni destinati alle integrazioni di servizi. Questi account offrono un controllo granulare per servizi specifici e non sono soggetti a controlli di spam o richieste captcha, che potrebbero altrimenti bloccare le build di CI.

Per creare un account di servizio, segui questi passaggi:

  1. Apri la pagina Account di servizio nella console Google Cloud.
  2. Fai clic su Crea account di servizio, aggiungi un Nome e una Descrizione, quindi fai clic su Crea e continua.
  3. Nel menu a discesa Seleziona un ruolo, seleziona Base e poi Editor.
  4. Fai clic su Continua, quindi su Fine.

Successivamente, crea e scarica una chiave di autenticazione che Jenkins può utilizzare per autenticarsi come account di servizio che hai creato.

Per creare e scaricare la chiave dell'account di servizio:

  1. Nella pagina Account di servizio della console Google Cloud, fai clic sull'email associata all'account che hai creato.
  2. Seleziona Chiavi, quindi fai clic su Aggiungi chiave e Crea nuova chiave.
  3. Seleziona JSON, quindi fai clic su Crea.
  4. Quando ti viene chiesto di scaricare il file, fai clic su OK. Scarica il file in un luogo sicuro sul computer. Questo file ti servirà in un secondo momento durante la configurazione di Jenkins.

Per scoprire di più sulla creazione di account di servizio, consulta Creare un account di servizio.

Abilita le API Google Cloud richieste

L'API Cloud Testing ti consente di eseguire test sull'infrastruttura di Google. Hai attivato questa API quando hai completato l'esecuzione di un test con gcloud CLI. L'API Cloud Tool Results ti consente di accedere in modo programmatico ai risultati dei test.

  1. Apri la libreria API di Google Developers Console.
  2. Nella barra di ricerca in alto nella 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.
  3. Fai clic su Abilita API nella pagina di panoramica di ogni API.

Installa e configura Jenkins

Puoi installare e configurare CI di Jenkins su Linux, macOS, Windows e molti altri ambienti. Alcuni dettagli di questo codelab sono specifici per l'installazione e l'esecuzione di CI con Jenkins su Linux, incluso l'utilizzo delle barre (/) nei percorsi dei file.

Per scaricare e installare Jenkins su un computer con sistema operativo Linux o Windows, segui le istruzioni per l'installazione di Jenkins. Dopo aver installato Jenkins, segui le stesse istruzioni di installazione di Jenkins per completare la configurazione e accedere alla dashboard di Jenkins utilizzando http://localhost:8080.

Verifica i plug-in installati

Jenkins supporta diversi sistemi di controllo della versione. In questo codelab, utilizzerai Git per il test precedente. Per un'esperienza migliore con l'esecuzione di gcloud CLI, devi installare il plug-in SDK GCloud.

  1. Nella dashboard di Jenkins, fai clic su Gestisci Jenkins e quindi su Gestisci plug-in.
  2. Cerca i plug-in Git e SDK Google Cloud 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, segui questi passaggi:

  1. Nella dashboard di Jenkins, fai clic su Gestisci Jenkins, quindi su Configurazione globale dello strumento.
  2. Nella sezione Google Cloud SDK, fai clic su Aggiungi Google Cloud SDK.
  3. Nel campo Nome, inserisci un nome per l'istanza Google Cloud SDK facile da ricordare, ad esempio GCloud-SDK.
  4. Inserisci la home directory di Google Cloud SDK, ad esempio /opt/google-cloud-sdk.
  5. Fai clic su Salva.
  6. Configura le proprietà a livello di sistema per gli SDK Android e Google Cloud aprendo Dashboard > Gestisci Jenkins > Configura sistema.
  7. Seleziona la casella di controllo Voci di ambiente e fai clic su Aggiungi.
  8. Nel campo Nome, inserisci ANDROID_HOME. Nel campo Valore, inserisci la posizione dell'SDK Android, ad esempio /opt/Android/Sdk.
  9. Fai clic sulla casella di controllo Località degli strumenti e poi su Aggiungi. Dal menu a discesa Nome, seleziona il nome dell'istanza dell'SDK Google Cloud che hai aggiunto nella Configurazione degli strumenti a livello globale.
  10. Nel campo Home, inserisci il percorso del tuo Google Cloud SDK, ad esempio /opt/google-cloud-sdk.
  11. Fai clic su Salva.

Aggiungi le credenziali dell'account di servizio a Jenkins

Ora aggiungi le credenziali dell'account di servizio gcloud CLI a Jenkins in modo che Jenkins possa autenticarsi ed eseguire correttamente i comandi gcloud CLI.

  1. Nella dashboard di Jenkins, fai clic su Gestisci Jenkins, quindi su Gestisci credenziali.
  2. Nella sezione Store con ambito Jenkins, fai clic sul link del dominio (global), quindi su Add Credentials (Aggiungi credenziali).
  3. Dal menu a discesa Tipo, seleziona Account di servizio Google dalla chiave privata.
  4. Nel campo Nome progetto, inserisci il nome del tuo progetto Firebase.
  5. Seleziona JSON key (Chiave JSON), poi fai clic su Browse (Sfoglia) e vai alla posizione in cui hai salvato la chiave dell'account di servizio.
  6. Fai clic su Crea.

Ora puoi configurare la build automatica di Jenkins per Test Lab.

4. Eseguire i test di Test Lab con Jenkins CI

Ora che hai configurato Jenkins, mettiamo tutto insieme ed eseguiamo lo stesso test con Jenkins.

Puoi configurare Jenkins in modo che esegua build automatiche e test ogni volta che vengono registrati gli aggiornamenti della tua app. Puoi anche configurare Jenkins in modo che esegua le build periodicamente. Per scoprire 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.

Creare un progetto Jenkins

  1. Apri la dashboard di Jenkins visitando la pagina http://localhost:8080.
  2. Nella dashboard di Jenkins, fai clic su New Item (Nuovo elemento).
  3. Inserisci un nome per il progetto nel campo Nome elemento e fai clic su Progetto freestyle per creare un progetto che utilizzi una singola configurazione di build.
  4. Fai clic su OK. Per completare le configurazioni del progetto, completa le restanti sezioni in sequenza.

Configura la gestione del codice sorgente

  1. Nella scheda Gestione del codice sorgente, seleziona Git.
  2. Inserisci https://github.com/android/testing-samples.git nel campo URL del repository.

Configura l'ambiente di compilazione

La sezione Ambiente di compilazione ti consente di configurare le caratteristiche di compilazione. Attiva l'autenticazione Google Cloud seguendo questa procedura:

  1. Nella scheda Ambiente di compilazione, seleziona la casella di controllo Autenticazione SDK GCloud e il nome dell'installazione che hai scelto quando hai aggiunto i dati di installazione di Google Cloud.
  2. Dal menu a discesa Credenziali Google, seleziona le credenziali dell'account di servizio che hai configurato.

Aggiungi i passaggi di compilazione di Gradle per ricostruire i pacchetti APK

  1. Scorri verso il basso fino alla sezione Build, fai clic su Aggiungi passaggio di compilazione e seleziona Esegui shell.
  2. Aggiungi un passaggio di compilazione per eseguire i seguenti comandi nella directory principale dell'applicazione:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Aggiungi un passaggio di build dell'interfaccia a riga di comando gcloud a Jenkins

Ora è tutto pronto per aggiungere un passaggio di compilazione a Jenkins per eseguire Test Lab utilizzando la riga di comando gcloud CLI.

Per aggiungere il passaggio di build dell'interfaccia a riga di comando gcloud, aggiungi un nuovo passaggio di build Esegui shell e inserisci il comando seguente:

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

Una volta terminata la configurazione del progetto, scorri fino in fondo alla pagina e salva la configurazione. Si aprirà la home page del nuovo progetto.

Eseguire test con Jenkins

Ora puoi compilare il progetto Jenkins ed eseguire un test come quello manuale eseguito con la CLI gcloud.

Per eseguire un test con Jenkins, segui questi passaggi:

  1. Per attivare la compilazione manualmente, fai clic su Compila ora.
  2. Verifica lo stato di avanzamento e i risultati facendo clic su Nuova build > Output console.

Se non vedi errori, congratulazioni. Hai appena configurato un progetto ed eseguito un test su un dispositivo Pixel 2 con un solo clic. In caso di errori, consulta la sezione Risoluzione dei problemi.

5. Best practice avanzate per l'esecuzione di suite di test di grandi dimensioni

Se vuoi eseguire molti test simultanei, segui queste best practice per assicurarti che i test vengano eseguiti in modo rapido e affidabile.

Aumentare la copertura su più configurazioni del dispositivo

Puoi aggiungere facilmente più dispositivi al passaggio di creazione dell'interfaccia a riga di comando gcloud. Puoi anche controllare e scegliere i dispositivi, le versioni, le impostazioni internazionali e gli orientamenti disponibili. Ad esempio, il seguente comando esegue i test su due dispositivi:

  • Un Google Pixel 2 virtuale con livello API 30 in orientamento verticale e la lingua inglese
  • Un Samsung Galaxy S20 fisico con livello API 29 in orientamento orizzontale e la locale francese
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 della CLI gcloud

Se preferisci gestire gli argomenti in un unico posto o con il tuo sistema di controllo del codice sorgente, puoi specificare questi argomenti in un file di argomento in formato YAML. Per scoprire come utilizzare questa funzionalità, esegui gcloud topic arg-files.

Test di shard da eseguire in parallelo

Lo sharding di test suddivide un insieme di test in sottogruppi (sharding) che vengono eseguiti separatamente in modo isolato. Test Lab esegue automaticamente ogni shard in parallelo utilizzando più dispositivi, il che consente a Test Lab di completare l'intero set di test più rapidamente. Per ulteriori informazioni, consulta 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 compilazione dell'interfaccia a riga di comando gcloud. Ad esempio, per eseguire lo sharding dei test in cinque esecuzioni ed eseguirli in parallelo, esegui questi comandi:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

Attiva rilevamento instabilità

I test sui dispositivi mobili possono spesso essere irregolari. A volte i test vengono superati, altre volte potrebbero non essere superati, anche con la stessa configurazione. Puoi rilevare se un test non riuscito è stato irregolare utilizzando il flag dell'interfaccia a riga di comando –num-flaky-test-attempts. Questo flag specifica il numero di volte in cui deve essere riprovato l'esecuzione di un test se uno o più scenari di test non vanno a buon fine per qualsiasi motivo.

Ad esempio, per ripetere gli scenari 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 il tuo primo test Test Lab con un sistema CI.

Hai creato APK di app e di test 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.

Quali sono i passaggi successivi?

Consulta Come configurare CI utilizzando Firebase Emulator Suite

Per approfondire

Documenti di riferimento