Integra Test Lab nel tuo sistema CI/CD

1. Introduzione

Ultimo aggiornamento: 2022-04-07

Come eseguire test mobili con sistemi CI/CD

L'esecuzione di test mobili può essere difficile: molte app vengono eseguite su piattaforme, dispositivi e versioni API diversi. Gli sviluppatori di app desiderano testare quante più configurazioni possibili per individuare i problemi prima che lo facciano gli utenti. Tuttavia, i vincoli in termini 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 aumenta, in particolare per i sistemi di integrazione continua/sviluppo continuo (CI/CD), il processo di test necessita essere automatizzato riducendo al minimo i costi e gli sforzi di manutenzione.

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

Supporto multipiattaforma

Test Lab fornisce soluzioni di test per app Android e iOS e supporto specializzato per giochi mobili 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 ospita dispositivi virtuali in Google Cloud. Tutto quello che devi fare è inviare i tuoi test a Test Lab e attendere i risultati.

Veloce e affidabile

L'esecuzione di numerosi casi di test simultanei può richiedere molto tempo, bloccando i processi CI/CD. Con Test Lab puoi facilmente suddividere i test ed eseguirli su più dispositivi in ​​parallelo. Puoi anche rilevare la fragilità, un punto critico comune dei test mobili.

Cosa imparerai

  • Come costruire artefatti di test
  • Come eseguire un test mobile utilizzando la CLI gcloud
  • Come configurare l'IC Jenkins
  • Come eseguire test mobili utilizzando Jenkins CI
  • Come configurare i test per ampliarli con i sistemi CI

Questo codelab si concentra sull'esecuzione di test. I concetti e i blocchi di codice non rilevanti vengono ignorati e possono essere semplicemente copiati e incollati.

Di cosa avrai bisogno

Se preferisci creare cose da zero, hai bisogno di Android Studio per eseguire un test Android o XCode per eseguire un test iOS. Oppure portati semplicemente e noi forniremo i manufatti.

2. Esegui un test con la CLI gcloud

Crea un APK per app Android e testa l'APK

Per eseguire un test con Test Lab, inizia creando un APK dell'app Android e un APK di test, che contiene test strumentati da eseguire su dispositivi hardware o emulatori. Se disponi già di una codebase funzionante, puoi creare i tuoi APK oppure utilizzare BasicSample for Espresso .

Per creare APK utilizzando i comandi Gradle, è necessario installare l'SDK Android. Se Android Studio non è installato sul tuo computer, installa Android Studio e Android SDK e imposta l'ambiente ANDROID_HOME con la directory Android SDK. Ad esempio, nel tuo file ~/.bash_profile , aggiungi la seguente riga:

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

Quindi, esegui i seguenti 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 nei seguenti percorsi:

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 i test e gli APK delle app:

  • Per creare APK in Android Studio, segui le istruzioni in Test in Android Studio .
  • Scarica l' app Blocco note di esempio. Utilizzare il file binario app-debug-unaligned.apk e il file dei test di strumentazione app-debug-test-unaligned.apk , che si trovano in NotePad/app/build/outputs/apk/ .

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

Utilizza la CLI gcloud per eseguire un test con Test Lab

In questa sezione creerai un progetto Firebase e configurerai il tuo ambiente Google Cloud SDK locale. Per ulteriori informazioni, consulta Iniziare il test con la CLI gcloud .

Configura la CLI gcloud

  1. Scarica Google Cloud SDK , che include lo strumento CLI gcloud.
  2. Verifica che l'installazione sia aggiornata:
gcloud components update
  1. Accedi alla CLI gcloud utilizzando il tuo Account Google:
gcloud auth login
  1. Imposta il tuo progetto Firebase nella CLI gcloud, dove PROJECT_ID è l'ID del tuo 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 disponi di un progetto Firebase, creane uno nella Console Firebase .

Esegui un test utilizzando gli APK creati

In questa sezione esegui un test della strumentazione sul dispositivo predefinito di Test Lab, che è un Pixel 3 con livello API 28. Se desideri utilizzare un dispositivo diverso, controlla i dispositivi disponibili .

Utilizzando l'APK dell'app e il test che hai creato in Crea un APK dell'app Android e l'APK di test, esegui un test della strumentazione Android utilizzando il comando seguente:

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

È possibile analizzare i risultati del test utilizzando una delle seguenti opzioni:

  • Riepilogo gcloud : al termine del test, la CLI gcloud stampa un riepilogo di base dei risultati del test.
  • Codice di uscita gcloud : al termine del test, il comando termina con 0 se il test è stato superato. Se il test fallisce, il comando termina con un codice di uscita diverso da zero.
  • Console Firebase : la CLI gcloud stampa un collegamento alla console Firebase. Il collegamento segue la convenzione di denominazione https://console.firebase.google.com/project/PROJECT_ID/testlab/... Per ulteriori informazioni, vedi Interpretare i risultati di una singola esecuzione di test .
  • File XML JUnit : la CLI gcloud 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, aprire il collegamento e accedere a blueline-28-en-portrait/test_result_1.xml .

3. Configurazione con Jenkins CI

In questa sezione utilizzerai Jenkins CI, un popolare sistema CI, per eseguire test con Test Lab. Se desideri 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 alla CLI gcloud.

Abilita la CLI 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 autenticarsi con la CLI gcloud.

Aggiungi un account del servizio Google Cloud per Jenkins

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

Per creare un account di servizio, procedi nel seguente modo:

  1. Apri la pagina Account di servizio in Google Cloud Console.
  2. Fare clic su Crea account di servizio , aggiungere un Nome e una Descrizione , quindi fare clic su Crea e continua .
  3. Dal menu a discesa Seleziona un ruolo , seleziona Di base , quindi seleziona Editor .
  4. Fare clic su Continua , quindi su Fine .

Successivamente, crei e scarichi 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, attenersi alla seguente procedura:

  1. Dalla pagina Account di servizio in Google Cloud Console, fai clic sull'e-mail associata all'account che hai creato.
  2. Selezionare Chiavi , quindi fare clic su Aggiungi chiave e Crea nuova chiave .
  3. Seleziona JSON , quindi fai clic su Crea .
  4. Quando ti viene richiesto di scaricare il file, fai clic su OK. Scarica il file in un posto sicuro sul tuo computer. Questo file sarà necessario in seguito durante la configurazione di Jenkins.

Per ulteriori informazioni sulla creazione di account di servizio, consulta Creazione di un account di servizio .

Abilita le API Google Cloud richieste

L'API Cloud Testing ti consente di eseguire test sull'infrastruttura di Google. Hai abilitato questa API quando hai completato Esegui un test con la CLI gcloud. 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 nella parte superiore della console Firebase, inserisci il nome di ciascuna 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 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'uso di barre (/) nei percorsi dei file.

Per scaricare e installare Jenkins su un computer che esegue Linux o Windows, seguire le istruzioni per l'installazione di Jenkins . Dopo aver installato Jenkins, seguire le stesse istruzioni di installazione di Jenkins per completare la configurazione e accedere al dashboard Jenkins utilizzando http://localhost:8080 .

Verifica i plugin installati

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

  1. Nella dashboard di Jenkins, fai clic su Gestisci Jenkins e quindi su Gestisci plugin .
  2. Cerca i plugin Git e GCloud SDK e installali (se non sono ancora installati).

Configura la posizione dei tuoi SDK Android e Google Cloud

Ora indica a Jenkins dove trovare Google Cloud SDK e Android SDK.

Per configurare gli SDK Google Cloud e Android per Jenkins, procedi nel seguente modo:

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

Aggiungi le credenziali del tuo account di servizio a Jenkins

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

  1. Nel dashboard Jenkins, fai clic su Gestisci Jenkins e quindi su Gestisci credenziali .
  2. Nella sezione Negozi con ambito Jenkins , fai clic sul collegamento del dominio (globale) , quindi fai clic su 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 Chiave JSON , quindi fai clic su Sfoglia e individua il percorso in cui hai salvato la chiave dell'account di servizio.
  6. Fare clic su Crea .

Ora sei pronto per configurare la tua build automatizzata Jenkins per Test Lab.

4. Eseguire i test Test Lab con Jenkins CI

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

Puoi configurare Jenkins per eseguire build automatizzate ed eseguire test ogni volta che vengono archiviati gli aggiornamenti alla tua app. Puoi anche configurare Jenkins per eseguire build periodicamente. Per ulteriori informazioni sulla configurazione delle build in Jenkins, consulta Configurazione delle build automatiche .

Crea e configura il tuo progetto Jenkins

Crea un progetto per eseguire test di integrazione continua della tua app con Test Lab.

Crea un progetto Jenkins

  1. Apri il dashboard Jenkins accedendo a http://localhost:8080 .
  2. Nel dashboard Jenkins, fai clic su Nuovo elemento .
  3. Inserisci un nome per il tuo progetto nel campo Nome elemento e fai clic su Progetto Freestyle per creare un progetto che utilizzi un'unica configurazione di build.
  4. Fare clic su OK . Per completare le configurazioni del progetto completare le restanti sezioni in sequenza.

Configurare la gestione del codice sorgente

  1. Dalla 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. Abilita l'autenticazione Google Cloud seguendo questi passaggi:

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

Aggiungi passaggi di creazione Gradle per ricostruire i pacchetti APK

  1. Scorri verso il basso fino alla sezione Compila , fai clic su Aggiungi passaggio di compilazione e quindi seleziona Esegui shell .
  2. Aggiungi un passaggio di compilazione 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 creazione della CLI gcloud a Jenkins

Ora sei pronto per aggiungere una fase di compilazione a Jenkins per eseguire Test Lab utilizzando la riga di comando della CLI gcloud.

Per aggiungere il passaggio di creazione della CLI gcloud, aggiungi un nuovo passaggio di creazione della shell Esegui e immetti il ​​seguente 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 terminato la configurazione del progetto, scorri fino alla fine della pagina e salva la configurazione. Verrai reindirizzato alla home page del nuovo progetto.

Esegui dei test con Jenkins

Ora sei pronto per creare il progetto Jenkins ed eseguire un test come il test manuale eseguito con la CLI gcloud.

Per eseguire il test con Jenkins, attenersi alla seguente procedura:

  1. Per attivare manualmente la compilazione, fare clic su Crea ora .
  2. Controlla l'avanzamento e i risultati facendo clic sulla nuova build > Output della console .

Se non vedi errori, congratulazioni! Hai appena impostato un progetto ed eseguito un test su un dispositivo Pixel 2 con un clic. Se riscontri errori, consulta Risoluzione dei problemi .

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

Quando desideri eseguire numerosi test simultanei, segui queste best practice per garantire che i test vengano eseguiti in modo rapido e affidabile.

Aumenta la copertura su più configurazioni di dispositivi

Puoi aggiungere facilmente più dispositivi alla fase di creazione della CLI gcloud. Inoltre puoi controllare e selezionare i dispositivi, le versioni, le impostazioni locali e gli orientamenti disponibili. Ad esempio, il comando seguente esegue i test su due dispositivi:

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

Utilizza un file di configurazione YAML della CLI gcloud

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

Test shard da eseguire in parallelo

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, consentendo a Test Lab di completare l'intera serie di test più rapidamente. Per ulteriori informazioni, consulta Abilitare lo sharding .

Per abilitare lo sharding, utilizza il canale gcloud beta e aggiungi il flag –num-uniform-shards o –test-targets-for-shard al passaggio di creazione della CLI gcloud. 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

Abilita il rilevamento delle debolezze

I test mobili possono spesso essere instabili. A volte i test passano e altre volte potrebbero fallire, anche con la stessa configurazione. Puoi rilevare se un test fallito era instabile utilizzando il flag della CLI gcloud –num-flaky-test-attempts . Questo flag specifica il numero di volte in cui è necessario ritentare l'esecuzione del test se uno o più test case falliscono per qualsiasi motivo.

Ad esempio, per eseguire nuovamente i test case non riusciti altre tre volte dopo l'esecuzione iniziale non riuscita, specificare 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. Congratulazioni

Congratulazioni, hai eseguito con successo il tuo primo test Test Lab con un sistema CI!

Hai creato app e APK di test e hai eseguito un test della strumentazione con Test Lab utilizzando la CLI gcloud. Hai anche impostato un progetto Jenkins per automatizzare lo stesso test.

Ora conosci i passaggi chiave per integrare Test Lab nel tuo sistema CI/CD.

Qual è il prossimo?

Scopri Come configurare la CI utilizzando Firebase Emulator Suite

Ulteriori letture

Documenti di riferimento