due chiacchiere

Selenium: automazione di test per il web

Finora su queste pagine mi sono sempre occupato di tecniche per sviluppare e progettare siti web, con cui ho a che fare quotidianamente. Da quando ho iniziato a lavorare per l’Università della California, ho approfondito un’altra branca di questo mondo affascinante: quello del controllo di qualità, o quality assurance come direbbero nel Paese a stelle e strisce. Già, perché costruire un’applicazione online è solo l’inizio: bisognerà poi mantenerla nel tempo, installando aggiornamenti alle piattaforme su cui è basata (dal server web ai linguaggi che utilizza), sistemando eventuali bug, ed aggiungendo nuove funzionalità. Ogni volta che si compie una di queste operazioni, bisognerebbe eseguire un test dell’intera applicazione per assicurarsi che tutto continui a funzionare correttamente. Nel nostro caso, abbiamo in organico due persone il cui compito è esclusivamente quello di conoscere tutti i nostri applicativi web a menadito, e di testare ogni aggiornamento in maniera scrupolosa. Ma non sarebbe bello se queste operazioni noiose si potessero automatizzare? Beh, a quanto pare si può.

Quelli che hanno studiato penseranno subito che ogni linguaggio di programmazione offre i cosiddetti unit test, ovvero pezzi di codice complementare che chiamano le funzioni dell’applicazione e confermano che i valori restituiti siano in linea con le aspettative. Tutto bello e sacrosanto, almeno finché hai scritto tu il codice sorgente di quell’applicazione. Ma come comportarsi nel caso in cui si tratta di aggiornare la versione di WordPress su cui girano il tema personalizzato ed una manciata di plugin che fanno funzionare il sito del negozio online? Serve qualcosa in grado di pretendere di essere un utente che naviga tra le pagine del sito e compie azioni come mettere oggetti nel carrello, in grado di pigiare pulsanti (non bottoni!) e confermare che determinati messaggi appaiano quando si verificano certi eventi sulla pagina.

Questo qualcosa esiste da qualche anno, a mia insaputa, e si chiama Selenium. Si tratta di una libreria disponibili per vari linguaggi, ad esempio Javascript e Python, che consente di controllare un browser web inviandogli comandi di vario tipo. In parole povere, con Selenium puoi dire al browser: apri questo indirizzo web, e quando la pagina è stata caricata, cerca un pulsante con ID uguale a inviamodulo, e se lo trovi, premilo, altrimenti dammi un errore. Come immagini, le potenzialità sono infinite, specialmente considerando che si può interagire con la pagina completa, e non semplicemente con il sorgente HTML, come altre soluzioni in passato consentivano di fare. Questo vuol dire poter accertarsi che se hai codice Javascript che ha il compito di manipolare il DOM, questo abbia fatto il suo dovere senza lamentarsi.

Io e lo stagista che abbiamo in ufficio ci siamo divertiti a scrivere un pezzo di codice che usiamo per confrontare due versioni dello stesso sito: quella in produzione stabile e quella di staging, a cui è stato applicato, ad esempio, l’aggiornamento di WordPress. Lo script parte dalle due pagine principali, trova tutti i link interni e comincia a seguirli uno ad uno. Per ogni coppia di pagine, salva due screenshot di come appaiono nel browser, e salva anche una differenza pixel per pixel, così da poter osservare eventuali discrepanze a colpo d’occhio. Poi un altro script si occupa di effettuare alcune operazioni, come ad esempio inserire nome utente e password, e confermare di riuscire ad entrare nel pannello di controllo senza errori, ed altre operazioni simili, come creare un post, cancellarlo, visitare la galleria media, ecc.

Insomma, da quando ho scoperto l’esistenza di Selenium, mi si è aperto un nuovo mondo nell’ambito dello sviluppo web, ed ho anche colto l’occasione per sperimentare un po’ con Python, che finora avevo usato soltanto di sfuggita. Ora il prossimo passaggio, suggerito dallo stagista, sarà quello di progettare un’interfaccia web con React da mettere davanti a questi script, così da avere una suite di test disponibili senza dover installare niente sul proprio computer. Siti che testano altri siti, cose che neppure Inception poteva immaginare 😍.

Commenti

  1. Trap ha scritto:

    Anche io uso uno strumento simile, Playwright. Questi strumenti sono molto potenti non solo perché puoi fare testing ma anche automatizzare. Ad esempio abbiamo un’interfaccia grafica per la gestione dei telefoni, che non dispone di un’API REST per esportare la rubrica. E’ bastato far creare una macro facendo gli stessi passi con il mouse, modificando poi lo script python risultante per modificare le varie opzioni.

    Risposte al commento di Trap

    1. camu ha scritto:

      Questo mi ricorda tanto i tempi in cui usavo quegli script per cliccare automaticamente sui bannerini pubblicitari per fare qualche soldo 😀

Lascia un commento

Torna in cima alla pagina