1. Introduzione
Ultimo aggiornamento: 07-04-2022
Come eseguire test mobili con sistemi CI/CD
L'esecuzione di test su dispositivi mobili può essere difficile: molte app vengono eseguite su piattaforme, dispositivi e versioni API diverse. Gli sviluppatori di app vogliono testare il maggior numero possibile di configurazioni per rilevare i problemi prima che lo facciano i loro utenti. Tuttavia, i vincoli di costo 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, soprattutto per i sistemi di integrazione continua/sviluppo continuo (CI/CD), il processo di test richiede essere automatizzati riducendo al minimo i costi e gli sforzi di manutenzione.
Per aiutarti a capire come si comportano le tue app sui dispositivi dei tuoi utenti, Firebase Test Lab ospita una serie di dispositivi mobili fisici e virtuali nei nostri data center. Forniamo anche l'interfaccia a riga di comando di Google Cloud, uno strumento a riga di comando indipendente dalla piattaforma che orchestra l'esecuzione di test sui dispositivi nei nostri data center. L'interfaccia a riga di comando di 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 speciale per giochi per dispositivi 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ò persino 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 simultanea di molti casi di test può richiedere molto tempo, bloccando i processi CI/CD. Con Test Lab, puoi facilmente condividere i test ed eseguirli su più dispositivi in parallelo. Puoi anche rilevare la desquamazione, un comune punto dolente del test mobile.
Cosa imparerai
- Come costruire artefatti di test
- Come eseguire un test su dispositivo mobile utilizzando l'interfaccia a riga di comando di gcloud
- Come configurare Jenkins CI
- Come eseguire test mobili utilizzando Jenkins CI
- Come configurare i test per aumentare la scalabilità con i sistemi CI
Questo codelab si concentra sull'esecuzione di test. I concetti e i blocchi di codice non pertinenti vengono sorvolati e vengono forniti per 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. O semplicemente porta te stesso e ti forniremo i manufatti.
2. Esegui un test con l'interfaccia a riga di comando di 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 base di codice funzionante, puoi creare i tuoi APK oppure puoi utilizzare BasicSample for Espresso .
Per creare APK utilizzando i comandi Gradle, devi installare Android SDK. Se il tuo Android Studio non è installato sul tuo computer, installa Android Studio e Android SDK e imposta l'ambiente ANDROID_HOME
con la tua 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 testare l'APK 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 i test e gli APK dell'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 strumentazioneapp-debug-test-unaligned.apk
, che si trovano inNotePad/app/build/outputs/apk/
.
Se disponi di un codice sorgente funzionante per un'app iOS, puoi scrivere un XCTest e creare un file zip dall'app e dai test.
Utilizza l'interfaccia a riga di comando di gcloud per eseguire un test con Test Lab
In questa sezione crei un progetto Firebase e configuri il tuo ambiente Google Cloud SDK locale. Per ulteriori informazioni, consulta Avviare i test con l'interfaccia a riga di comando di gcloud .
Configura l'interfaccia a riga di comando di gcloud
- Scarica Google Cloud SDK , che include lo strumento CLI gcloud.
- Verifica che l'installazione sia aggiornata:
gcloud components update
- Accedi all'interfaccia a riga di comando di gcloud utilizzando il tuo account Google:
gcloud auth login
- Imposta il tuo progetto Firebase nell'interfaccia a riga di comando di 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 di 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 .
Usando l'app e testando gli APK creati in Crea un APK di un'app Android e testando l'APK, esegui un test di Strumentazione 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
È possibile analizzare i risultati del test utilizzando una delle seguenti opzioni:
- Riepilogo
gcloud
: al termine del test, l'interfaccia a riga di comando di 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 : l'interfaccia a riga di comando 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, consulta Interpretare i risultati di un'esecuzione di un singolo test . - File XML JUnit : l'interfaccia a riga di comando di 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 di 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 diffuso sistema di integrazione continua, per eseguire i test con Test Lab. Se desideri utilizzare un sistema CI diverso, consulta 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 di gcloud.
Abilita l'interfaccia a riga di comando di gcloud per Jenkins
Prima di poter utilizzare Test Lab con Jenkins, devi abilitare le API richieste e configurare un account di servizio che Jenkins può utilizzare per l'autenticazione con l'interfaccia a riga di comando di gcloud.
Aggiungi un account di servizio Google Cloud per Jenkins
Gli account di servizio sono account limitati destinati alle integrazioni dei servizi. Questi account offrono un controllo granulare per servizi specifici e non sono soggetti a controlli antispam o richieste captcha, che potrebbero altrimenti bloccare le tue build CI.
Per creare un account di servizio, procedi nel seguente modo:
- Apri la pagina Account di servizio in Google Cloud Console.
- Fare clic su Crea account di servizio , aggiungere un nome e una descrizione , quindi fare clic su Crea e continua .
- Dall'elenco a discesa Seleziona un ruolo , seleziona Di base , quindi seleziona Editor .
- Fare clic su Continua , quindi fare clic su Fine .
Successivamente, crei e scarichi una chiave di autenticazione che Jenkins può usare per autenticarsi come account di servizio che hai creato.
Per creare e scaricare la chiave dell'account di servizio, procedi nel seguente modo:
- Dalla pagina Service Accounts in Google Cloud Console, fai clic sull'email associata all'account che hai creato.
- Selezionare Chiavi , quindi fare clic su Aggiungi chiave e Crea nuova chiave .
- Seleziona JSON , quindi fai clic su Crea .
- Quando viene richiesto di scaricare il file, fare clic su OK. Scarica il file in un posto sicuro sul tuo computer. Questo file ti servirà 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 Run a test with the gcloud CLI. L'API Cloud Tool Results ti consente di accedere in modo programmatico ai risultati dei test.
- Apri la libreria dell'API di Google Developers Console .
- 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.
- Fai clic su Abilita API nella pagina della panoramica di ogni 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 delle barre (/) nei percorsi dei file.
Per scaricare e installare Jenkins su un computer che esegue 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 al dashboard di Jenkins utilizzando http://localhost:8080 .
Verifica i plugin installati
Jenkins supporta diversi sistemi di controllo della versione. In questo codelab, usi Git per eseguire il test precedente. E per ottenere una migliore esperienza con l'esecuzione della CLI gcloud, è necessario installare il plug-in GCloud SDK.
- Nella dashboard di Jenkins, fai clic su Gestisci Jenkins , quindi fai clic su Gestisci plug-in .
- 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 istruisci Jenkins su dove trovare Google Cloud SDK e Android SDK.
Per configurare gli SDK Google Cloud e Android per Jenkins, procedi nel seguente modo:
- Nella dashboard di Jenkins, fai clic su Gestisci Jenkins , quindi fai clic su Configurazione strumento globale .
- nella sezione Google Cloud SDK , fai clic su Aggiungi Google Cloud SDK .
- Nel campo Nome , inserisci un nome per l'istanza di Google Cloud SDK facile da ricordare, ad esempio GCloud-SDK.
- Inserisci la tua home directory di Google Cloud SDK, ad esempio
/opt/google-cloud-sdk
. - Fare clic su Salva .
- Configura le tue proprietà a livello di sistema per Android e Google Cloud SDK aprendo Dashboard > Manage Jenkins > Configure System .
- Seleziona la casella di controllo Variabili d'ambiente e fai clic su Aggiungi .
- Nel campo Nome , inserisci ANDROID_HOME . Nel campo Valore , inserisci la posizione del tuo Android SDK, ad esempio
/opt/Android/Sdk
. - Fare clic sulla casella di controllo Posizioni utensili e fare clic su Aggiungi . Dal menu a discesa Nome , seleziona il nome dell'istanza di Google Cloud SDK che hai aggiunto in Global Tool Configuration.
- Nel campo Home , inserisci la posizione del tuo Google Cloud SDK, ad esempio
/opt/google-cloud-sdk
. - Fare clic su Salva .
Aggiungi le credenziali del tuo account di servizio a Jenkins
Ora aggiungi le credenziali dell'account di servizio dell'interfaccia a riga di comando gcloud a Jenkins in modo che Jenkins possa autenticare ed eseguire correttamente i comandi dell'interfaccia a riga di comando di gcloud.
- Nella dashboard di Jenkins, fai clic su Gestisci Jenkins , quindi fai clic su Gestisci credenziali .
- Nella sezione Negozi con ambito Jenkins , fai clic sul link del dominio (globale) , quindi fai clic su Aggiungi credenziali .
- Dall'elenco a discesa Tipo , seleziona Account di servizio Google dalla chiave privata .
- Nel campo Nome progetto , inserisci il nome del tuo progetto Firebase.
- Seleziona Chiave JSON , quindi fai clic su Sfoglia e vai alla posizione in cui hai salvato la chiave dell'account di servizio.
- Fai clic su Crea .
Ora sei pronto per configurare la build automatizzata di Jenkins per Test Lab.
4. Eseguire i test di laboratorio di prova 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 della 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
- Apri la dashboard di Jenkins passando a http://localhost:8080 .
- Nella dashboard di Jenkins, fai clic su Nuovo elemento .
- Immettere un nome per il progetto nel campo Nome elemento e fare clic su Progetto Freestyle per creare un progetto che utilizza una singola configurazione di compilazione.
- Fare clic su OK . Per completare le configurazioni del progetto, completare le restanti sezioni in sequenza..
Configura la gestione del codice sorgente
- Dalla scheda Gestione del codice sorgente , seleziona Git .
- Immettere https://github.com/android/testing-samples.git nel campo URL repository .
Configurare l'ambiente di compilazione
La sezione Ambiente di compilazione consente di configurare le caratteristiche di compilazione. Abilita l'autenticazione Google Cloud seguendo questi passaggi:
- Nella scheda Build Environment , seleziona la casella di controllo Autenticazione GCloud SDK e seleziona il nome di installazione che hai scelto quando hai aggiunto le informazioni di installazione di Google Cloud.
- Dal menu a discesa Credenziali Google , seleziona le credenziali dell'account di servizio che hai configurato.
Aggiungi passaggi di build Gradle per ricostruire i pacchetti APK
- Scorri verso il basso fino alla sezione Build , fai clic su Add build step , quindi seleziona Execute shell .
- Aggiungi una fase di compilazione per eseguire i seguenti comandi nella directory principale per la tua applicazione:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Aggiungi una fase di creazione dell'interfaccia a riga di comando di gcloud a Jenkins
Ora sei pronto per aggiungere una fase di compilazione a Jenkins per eseguire Test Lab utilizzando la riga di comando dell'interfaccia a riga di comando di gcloud.
Per aggiungere il passaggio di build dell'interfaccia a riga di comando gcloud, aggiungi un nuovo passaggio di build Execute shell e inserisci 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 l'impostazione del progetto, scorrere verso il basso fino alla fine della pagina e salvare la configurazione. Si viene reindirizzati alla home page del nuovo progetto.
Esegui i test con Jenkins
Ora sei pronto per creare il progetto Jenkins ed eseguire un test come il test manuale che hai eseguito con l'interfaccia a riga di comando di gcloud.
Per eseguire il test con Jenkins, attenersi alla seguente procedura:
- Per attivare la compilazione manualmente, fai clic su Crea ora .
- Controlla lo stato di avanzamento e i risultati facendo clic su new build > Console Output .
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 vuoi eseguire molti test simultanei, segui queste best practice per assicurarti che i tuoi test vengano eseguiti in modo rapido e affidabile.
Aumenta la copertura su più configurazioni di dispositivi
Puoi facilmente aggiungere più dispositivi alla fase di creazione dell'interfaccia a riga di comando di gcloud. E puoi controllare e selezionare i dispositivi, le versioni, le impostazioni locali e gli orientamenti disponibili. Ad esempio, il seguente comando esegue i test su due dispositivi:
- Un Google Pixel 2 virtuale con livello API 30 con orientamento verticale e impostazione locale inglese
- Un Samsung Galaxy S20 fisico con livello API 29 in orientamento orizzontale e impostazioni locali 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
Utilizza un file di configurazione YAML dell'interfaccia a riga di comando di gcloud
Se preferisci gestire i tuoi argomenti in un posto o con il tuo sistema di controllo del codice sorgente, puoi specificare questi argomenti in un file di argomenti in formato YAML. Per informazioni su come utilizzare questa funzione, esegui gcloud topic arg-files
.
Shard test da eseguire in parallelo
Lo sharding dei test divide una serie di test in sottogruppi (shard) 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 Abilitare lo sharding .
Per abilitare lo sharding, utilizza il canale gcloud beta
e aggiungi il flag –num-uniform-shards o –test-targets-for-shard alla fase di creazione dell'interfaccia a riga di comando di 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 imperfezioni
I test mobili possono spesso essere traballanti. A volte i test vengono superati e altre volte potrebbero fallire, anche con la stessa configurazione. Puoi rilevare se un test non riuscito era instabile utilizzando il flag dell'interfaccia a riga di comando di gcloud –num-flaky-test-attempts . Questo flag specifica il numero di tentativi di esecuzione di un test se uno o più casi di test falliscono per qualsiasi motivo.
Ad esempio, per eseguire nuovamente i casi di test 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 di laboratorio di prova con un sistema CI!
Hai creato app e testato APK e hai eseguito un test di strumentazione con Test Lab utilizzando l'interfaccia a riga di comando di 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 CI utilizzando Firebase Emulator Suite
Ulteriori letture
- Inizia i test con i sistemi CI | Documentazione Firebase
- Inizia i test con l'interfaccia a riga di comando di gcloud | Documentazione Firebase