Test di applicazioni Ionic con Appium

Mike Cohn nel suo libro Succeeding with Agile: Software Development Using Scrum introduce un concetto che è ormai diventato famosissimo nel mondo degli sviluppatori: la piramide del testing.

La piramide del testing

Photo by https://www.scrumalliance.org/

Il concetto è abbastanza semplice: i test delle vostre applicazioni dovrebbero essere formati in gran parte da test unitari, superando di molto il numero di test UI o anche detti end-to-end. Questo principio, anche se corretto, ha secondo me portato il mondo degli sviluppatori a concentrarsi in maniera preponderante sui test unitari. Trascurando o, in alcuni casi tralasciando del tutto, i test end-to-end.

Un esempio lampante di questo fenomeno è la community Ionic. Nella maggior parte dei casi questa tipologia di test sono delegati a Protractor, approccio ereditato dal “fratello maggiore” AngularJS. Ritengo questi test alquanto inutili perché girano all’interno di un browser sui vostri computer o in un server di continuous integration. Ma in realtà quella che voi state sviluppando è un’applicazione mobile che girerà all’interno di una webview. Quello che andrebbe testato sono le due app Android e iOS all’interno dei device reali o dei simulatori. In questo modo replichiamo, quanto più fedelmente possibile, le operazioni dei nostri utenti.

Appium

In nostro soccorso arriva Appium tool di testing end-to-end per Android e iOS sviluppato da Sauce Labs: la famosa piattaforma cloud di testing. Appium ci permette di testare le nostri applicazioni mobile, siano esse native che ibride. Tramite un apposito web driver è perfettamente compatibile con Protractor, quando la nostra app utilizza una webview. Possiamo quindi utilizzare lo strumento principe del testing end-to-end delle applicazioni AngularJS, ma li faremo girare all’interno di un sistema quanto più possibile simile a quello reale. Appium si installa tramite npm digitando il seguente comando:

Vediamo ora come configurare Protractor per farlo funzionare con Appium.

Tramite la proprietà capabilities andiamo a definire sistema operativo e modello del device. Definiamo inoltre il path del file .app da lanciare all’interno del simulatore iOS durante i test. Andiamo poi a collegare Protractor con il web driver di Appium nella funzione onPrepare. Altra grossa differenza rispetto alla configurazione di un Protractor classico è l’assenza del baseUrl. Il motivo è che nei test Appium non abbiamo un concetto di URL in quanto stiamo testando un’app e quindi non possiamo forzare l’url di partenza.

Al momento dell’uscita di questo post, Appium è compatibile anche con Android ma di fatto risulta inutilizzabile per progetti Ionic in quanto non compatibile con Crosswalk ma solo con la webview nativa. Gli interessati possono consultare questa issue su GitHub per seguire gli sviluppi.

Il nostro primo test

Scriviamo ora il nostro primo test, sfruttando come caso d’uso una semplice todo-list fatta in Ionic di cui ho scritto su Coding Jam. L’unica cosa che andremo a testare sarà che all’avvio l’applicazione atterri effettivamente sul controller “list”.

Per aiutarci nel lancio dei test andiamo a creare anche un task di gulp, task runner presente di default nelle applicazioni Ionic.

Notate che prima dei l’avvio dei test viene lanciata una build iOS. In questo modo il nostro codice sarà sempre allineato con l’app che andremo effettivamente a testare.

Per avviare i test quindi aprite due shell e nella prima digitate:

mentre nella seconda invocate il comando gulp scrivendo:

Et voilà! vedrete i vostri test girare all’interno del simulatore iOS che si chiuderà automaticamente una volta conclusi.

Ecco i nostri test che girano sul simulatore iOS

Ecco i nostri test che girano sul simulatore iOS

Conclusioni

Questi test rispetto ai normali test con Protractor sono molto lenti, basti pensare che ad ogni lancio di una suite bisogna tirar su un’istanza del simulatore iOS e installarci sopra la nostra app preventivamente buildata. Ma credo che sia meglio far girare meno test end-to-end a patto che quelli che ci sono siano per quanto possibile vicini alla realtà. La scrittura di questi test è simile a quelli standard di Protractor, ma non esattamente identici. In un prossimo articolo vedremo insieme una suite completa di test per la nostra app todo-list per capire meglio quali sono le caratteristiche dei test Protractor+Appium.

La canzone di questo post è Ghiaccio Bollente del mio caro amico Martello, tratto dal suo primo album omonimo. Buon Ascolto.

Flattr this!

Pubblicato in AngularJS, Ionic Taggato con: , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.