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.

https://docs.flutter.dev/cookbook/testing/integration/introduction
docs.flutter.dev

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:

https://pub.dev/packages/flutter_gherkin
pub.dev
https://pub.dev/packages/bdd_widget_test
pub.dev

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:

https://www.youtube.com/watch?v=Kwvsc31FE_8&t=1317s
www.youtube.com
https://www.youtube.com/watch?v=oLFVcUqVV28
www.youtube.com
https://www.youtube.com/watch?v=7c5xy6ltjFQ&t=262s
www.youtube.com

Per riassumere, è possibile automatizzare anche la scrittura stessa dei test utilizzando 3 package di Flutter insieme:

  1. integration_test: ci permette di eseguire i test

  2. bdd_widget_test: ci permette di scrivere i test con sintassi Gherkin

  3. 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:

  1. Facciamo partire l’app

  2. Aspettiamo di vedere il widget addButton

  3. Una volta che questo è visibile, lo andiamo a tappare 3 volte

  4. 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! 👋🏻

Hai un’idea o vuoi conoscerci meglio?

In alternativa possiamo giocare a calcio balilla o fare una partita di ping pong in ufficio. Abbiamo anche una macchina per fare le granite. Insomma, contattaci per qualsiasi cosa, no televendite però.

Iscriviti alla newsletter

Niente Spam! Di tanto in tanto condivideremo con te articoli del nostro blog, playlist, foto e aneddoti sulla vita in ufficio.

Inserendo il tuo indirizzo confermi di aver letto la privacy policy e ci dai il permesso di aggiornarti via email per le finalità di marketing descritte nell’informativa.

Where we are

Via Cadorna 2,
Albignasego Padova,
35020 Italia

Copyright 2024 - Mabiloft SRL - P.IVA 05157070284 - C.SOCIALE €10.000 I.V.