Flutter: Automazione ed End-to-End Testing
03.05.2023
Ottimizza il workflow di testing con Flutter e Gherkin: ecco come automatizzare gli E2E Test
Problema
Una delle principali differenze tra le applicazioni mobile e quelle web riguarda il processo di aggiornamento.
Nel caso delle app mobile, infatti è necessario caricare la nuova versione sul relativo store e attendere i tempi di revisione, che di solito richiedono uno o due giorni.
Ma questo non è l'unico ostacolo: una volta effettuato l'aggiornamento, è necessario che raggiunga tutti gli utenti, ma alcuni di loro potrebbero scegliere di non aggiornare le app in modo automatico e, di conseguenza, non riceverlo immediatamente.
Questi fattori rendono il processo di aggiornamento delle applicazioni mobile particolarmente lungo e delicato.
Processo QA
Per prevenire tali problemi, è indispensabile un processo di QA (Quality Assurance), finalizzato all'identificazione e correzione di eventuali difetti, bug o problemi che possano compromettere la qualità dell'app.
È particolarmente importante testare le applicazioni nel loro complesso, esaminando il loro comportamento in vari flussi, dalla grafica alle funzionalità sottostanti.
Tuttavia, affidarsi a una persona che esegue manualmente i test sull'applicazione può risultare in un processo inefficiente e dispendioso in termini di tempo.
La soluzione: End-to-End Test
L’End-To-End (E2E) è una tecnica di testing che verifica il funzionamento completo di un’applicazione, dalla sua interfaccia utente all’infrastruttura di backend.
In pratica, l’E2E testing simula il comportamento degli utenti finali attraverso una serie di scenari di test che coprono diversi aspetti dell’applicazione.
Questi test verificano se l’applicazione funziona correttamente dal punto di vista dell’utente finale, come ad esempio se le pagine si caricato correttamente, se tappando su un bottone i dati variano come ci si aspetta o se le funzionalità funzionano come previsto.
Come si scrivono questi test in Flutter?
Il package integration_test in Flutter fornisce un framework per la definizione, l’esecuzione e l’automazione di test di integrazione (E2E).
Questo framework di test si basa sulla libreria Flutter Driver, che consente di controllare l'applicazione dall'esterno, simulando le azioni dell'utente come la pressione di un pulsante o l'inserimento di testo in un campo di input.
Esistono diverse librerie di Flutter che possono essere utili per la scrittura e l'esecuzione dei test, semplificando notevolmente il processo di testing dell'applicazione:
E se automatizzassimo anche il processo di scrittura dei test?
Scrivere i test può richiedere tempo agli sviluppatori, che spesso si trovano a ripetere le stesse parti di test per flussi diversi.
Per risolvere questo problema, viene in nostro soccorso Gherkin!
🥒 Gherkin
Gherkin è un linguaggio di specifica che descrive il comportamento di un software in un formato leggibile sia dagli essere umani sia da un computer.
Il formato Gherkin è basato su un testo semplice, strutturato in scenari, che descrivono le azioni e le reazioni del sistema in modo chiaro e conciso. Un esempio di scenario Gherkin potrebbe essere il seguente:
In questo esempio, il test descrive lo scenario di un utente registrato che vuole effettuare il login nel suo account. Il test descrive lo stato iniziale del sistema, l'azione eseguita dall'utente e il risultato atteso dell'azione.
Gherkin e processi di test automatizzati!
Il processo di automazione dei test a partire da file Gherkin è resa possibile da Oleksandr Leushchenko, Google Dev Expert in Flutter e Dart.
Non solo ha sviluppato il package bdd_widget_test, ma ha anche tenuto un talk al FlutterVikings sull'argomento.
N.B. Per approfondire meglio consiglio la visione di questi video:
Per riassumere, è possibile automatizzare anche la scrittura stessa dei test utilizzando 3 package di Flutter insieme:
integration_test: ci permette di eseguire i test
bdd_widget_test: ci permette di scrivere i test con sintassi Gherkin
build_runner: genera i test e gli step a partire dai file Gherkin
Andiamo a vedere il nostro processo di scrittura ed automazione dei test E2E. Come esempio utilizzeremo l’app di default di Flutter CounterApp.
Per prima cosa definiamo il nostro scenario in Gherkin:
I file Gherkin hanno estensione .feature
In questo esempio il test descrive lo scenario in cui, dopo essersi assicurati che l’app sia in esecuzione, l’utente tappa 3 volte sul widget addButton e fatto ciò dovrebbe vedere a video il testo “3” (l’ultima istruzione in cui si aspetta 1 secondo è opzionale).
A partire da questo file Gherkin, verrà generato automaticamente il file contenente il Test che andremo ad eseguire:
Gli step che vengono eseguiti nei test sono generati automaticamente e possono essere riutilizzati in più test diversi, senza andarli a definire ogni volta
A questo punto non resta che eseguire il test. Possiamo verificarne l’andamento direttamente sul simulatore:
L’app si sta testando da sola, senza bisogno di azioni da parte dello sviluppatore
Possiamo notare le fasi che vengono eseguite, esattamente come nel Gherkin:
Facciamo partire l’app
Aspettiamo di vedere il widget addButton
Una volta che questo è visibile, lo andiamo a tappare 3 volte
Una volta tappato, l’utente deve vedere a schermo il testo 3
Ed ecco che abbiamo il nostro Integration Test completamente automatizzato, pronto per essere eseguito ogni volta che viene apportata una modifica per verificare che il flusso funzioni ancora correttamente!
Grazie per aver dedicato del tempo alla lettura di questo articolo. Spero di aver fornito spunti interessanti sul tema e di non essere risultato noioso. Se hai bisogno di ulteriori consigli o desideri approfondire questa metodologia di testing, non esitare a contattarci. Saremo felici di aiutarti. 😄 A presto! 👋🏻