Monkey Testing con gremlins.js

Un tipo di test di cui si sente parlare poco è il Monkey Testing. È una sorta di stress test per applicazioni frontend, intese come tutte quelle applicazioni che hanno a che fare gli input da parte degli utenti. In pratica un sistema automatizzato simula tutti i possibili input degli utenti (click, tastiera, tap, etc.) per un determinato periodo. Se l’applicazione non va in crash il test è superato.

Questi test per applicazioni con flussi complessi possono portare un valore molto alto con un costo implementativo davvero basso. A differenza dei test end-to-end, di cui ho parlato in un precedente articolo, qui non cerchiamo di capire cosa farà l’utente scrivendo un test. Il valore infatti di questi test è proprio sul gestire i corner case inaspettati che possono scaturire dall’interazione dell’utente.

gremlins.js

Una piccola libreria che può essere utile per effettuare questa tipologia di test su applicazioni web è gremlins.js. Un che a mio avviso è abbastanza azzeccato, infatti come vedremo basteranno poche righe di codice per scatenare contro le vostre applicazioni un’orda di Gremlins e Mogwai.

Pronti a scatenare questi esserini contro la vostra applicazione?

Pronti a scatenare questi esserini contro la vostra applicazione?

Entriamo subito in azione. Una volta installata la libreria tramite npm, bower o linkando direttamente il file remoto nella vostra index.html potete scatenare i gremlins con questi semplici comandi:

Il risultato, che potete vedere nel video qui sotto, sono una serie di comandi casuali. Tra questi possiamo notare eventi quali click, inserimento di valori di campi di una form e scrolling. Di default l’orda si arresta dopo 1000 comandi, intervallati da 10ms di attesa. L’attacco quindi dura circa 1 minuto. Potete modificare il numero di attacchi tramite un parametro del metodo unleash oppure invocare in maniera esplicita this.horde.stop()

Potete inoltre fare un test in questa demo. Vi basterà cliccare su Start per vedere l’orda in azione.

Logging

Se aprite i dev tools durante l’attacco dei gremlins noterete che sulla console avrete un report dettagliato delle interazioni con la pagina.

report gremlins.js

report gremlins.js

Ma un log in console non è sempre la soluzione desiderata. Per fortuna gremlins.js ci permette di modificare il logger esistente. Vediamo come nel prossimo esempio:

In questo caso prendiamo l’oggetto originario tramite horde.logger. Ne creiamo poi una versione enhanced in modo tale che ogni errore venga salvato su localStorage. In questo modo dopo l’attacco può essere facilmente esportato o inviato ad un server di monitoring.

Personalizzare l’orda

Spesso per avere un test più accurato abbiamo bisogno di restringere il campo di azione della nostra orda. Anche in questo caso gremlins.js ci viene in aiuto, dandoci la possibilità di personalizzarne totalmente il comportamento.

In questo caso abbiamo scelto un’orda composta da un solo gremlin: il clicker. Come il nome fa intuire questo gremlin si occupa di effettuare click random in giro per l’applicazione. Abbiamo poi specificato ulteriormente il comportamento forzando il click solo sui link e distribuendo un evento ogni 50ms. tramite il metodo horde.gremlin possiamo poi aggiungere tutti i gremlin che riteniamo opportuni.

Conclusioni

In realtà quello che abbiamo visto non rende gremlins.js una libreria completa per il monkey testing. A mio avviso manca un’integrazione con dei test runner per poter effettuare dei test automatici in un sistema di continous integration come Travis CI o codeship. Ma è sicuramente un ottimo punto di partenza dal quale partire. Se volete giocare con il codice degli esempi trovate tutto in questo repository GitHub.

Vi lascio con Computer Love dei Kraftwerk, tratta dall’album Computer Wolrd. Buon Ascolto.

Pubblicato in Javascript Taggato con: , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.