in

dotNet Umbria [DNU]

Il primo User Group in Umbria sul mondo .Net

Fabrizio Bernabei

Test automatizzato delle applicazioni WEB: Selenium o WatiN?

Ci sono casi in cui nello sviluppo di una applicazione WEB si rende necessario (o perlomeno è una comodità in più) poter effettuare test di alto livello direttamente sulla UI stessa, magari perché si deve fare refactoring su un prodotto esistente e in un primo momento è necessario avere uno strumento che “garantisca” che le macro-funzionalità continuino a funzionare, oppure per testare (e poter ripetere nel tempo) il comportamento della UI in diversi ambienti.

Per tutte queste cose esistono soluzioni specifiche (alcune che coprono diverse esigenze, altre un sottoinsieme perché per esempio non sono in grado di operare con tutti i browser) che permettono di definire dei test in grado di interagire con le pagine dell’applicazione web come farebbe un utente vero e proprio, cioè cliccando su link e bottoni e “navigando” l’applicazione in maniera completamente automatizzata.

In precedenza ho usato con soddisfazione WatiN che in sostanza è uno dei framework/strumenti che permette di eseguire test “pilotando” l’applicazione web direttamente da codice C#. In sostanza si tratta di una libreria che mette a disposizione un insieme di classi che permettono di aprire il web browser, navigare su uno specifico indirizzo, verificare quando la pagina è caricata, verificare che contenga determinati elementi ed interagire con essi sotto forma di oggetti utilizzabili da codice. Il vantaggio di tutto questo poi è la possibilità di automatizzare queste operazioni ed includere in un test (fatto col nostro framework preferito) per eseguirlo quando necessario: ma uno snippet di codice vale più di mille parole Open-mouthed

   1: [Test]
   2: public void SearchForWatiNOnGoogle()
   3: {
   4:  using (IE ie = new IE("http://www.google.com"))
   5:  {
   6:   ie.TextField(Find.ByName("q")).TypeText("WatiN");
   7:   ie.Button(Find.ByName("btnG")).Click();
   8:   
   9:   Assert.IsTrue(ie.ContainsText("WatiN"));
  10:  }
  11: } 

In questo periodo ho l’esigenza di mettere insieme dei test su un’applicazione WEB su cui sto lavorando e avrei potuto riutilizzare direttamente questo prodotto, ma incuriosito da una discussione di qualche tempo fa su UGIALT.net ho deciso di dare un’occhiata a Selenium che sulla carta è forse ancor più potente di WatiN e dispone dii strumenti evoluti per il suo utilizzo. Si descrive infatti come (testualmente dal sito web) “Selenium is a suite of tools to automate web app testing across many platforms”, un insieme di strumenti per automatizzare il testing di applicazioni web su diverse piattaforme. Vediamo un po’ di cosa si tratta…

Il primo tool da provare è sicuramente Selenium IDE, un ambiente autonomo per la scrittura, l’esecuzione, la registrazione ed il debug di test realizzato sotto forma di plug-in per FireFox. Con questo strumento è possibile registrare una sessione di navigazione e rimandarla in esecuzione in modo del tutto automatico, o addirittura eseguire passo-passo i comandi registrati “ammirando” quello che succede nella finestra del browser. Ovviamente è possibile modificare, aggiungere o rimuovere comandi allo script sia attraverso l’interfaccia visuale (in sostanza una griglia dove ad ogni riga corrisponde un’azione a sua volta definibile come “comando da eseguire-elemento da utilizzare-valore da utilizzare”) sia attraverso il sorgente vero e proprio dello script. In merito a questo ultimo punto va specificato che lo script è rappresentabile in diversi linguaggi; per default l’IDE usa un banale HTML con al suo interno un elemento <TABLE> dove le righe contenute rappresentano i comandi da esguire. Dal menu Opzioni è poi possibile scegliere la visualizzazione dello script con un altro linguaggio (fra gli altri: C#, Java, PHP, Ruby) e anche modificare direttamente dall’editor il comportamento del test.

A titolo di esempio lo stesso test visto prima per WatiN si traduce in Selenium (facendo uso solo dell’IDE con la registrazione automatica e riportando solamente il codice “saliente”) in:

   1: [Test]
   2: public void TheUntitledTest()
   3: {
   4:     selenium.Open("http://www.google.com/");
   5:     selenium.Type("q", "selenium");
   6:     selenium.Click("btnG");
   7:     selenium.WaitForPageToLoad("30000");
   8:     try
   9:     {
  10:         Assert.IsTrue(selenium.IsTextPresent("Selenium"));
  11:     }
  12:     catch (AssertionException e)
  13:     {
  14:         verificationErrors.Append(e.Message);
  15:     }
  16: }

che nella sua incarnazione in HTML diventa

   1: <tr>
   2:     <td>open</td>
   3:     <td>www.google.com</td>
   4:     <td></td>
   5: </tr>
   6: <tr>
   7:     <td>type</td>
   8:     <td>q</td>
   9:     <td>selenium</td>
  10: </tr>
  11: <tr>
  12:     <td>clickAndWait</td>
  13:     <td>btnG</td>
  14:     <td></td>
  15: </tr>
  16: <tr>
  17:     <td>verifyTextPresent</td>
  18:     <td>Selenium</td>
  19:     <td></td>
  20: </tr>

Ovviamente questa è solamente la punta dell’iceberg; ci sono ancora da vedere molte cose interessanti, a partire dagli altri strumenti ed in primis Selenium RC che permette di pilotare i test dal nostro codice e tanto altro ancora.

Per ora come introduzione penso possa bastare ma nei prossimi giorni, di pari passo con l’esplorazione più approfondita del framework, aspettatevi nuovi post con approfondimenti ed un po’ di codice in più. Wink

Only published comments... Jun 26 2009, 01:13 PM by Fabrizio Bernabei

Comments

 

pomarc said:

molto interessante, attendo le altre puntate!

June 26, 2009 11:42 PM
 

Fabrizio Bernabei said:

In un post precedente, esattamente “ Test automatizzato delle applicazioni WEB: Selenium o WatiN? ”,

September 4, 2009 3:38 PM

About Fabrizio Bernabei

Fabrizio si appassiona a tutto quello che ruota intorno ad un PC fin da piccolo; durante e dopo la laurea in Informatica, trasforma la sua passione in lavoro. Dopo alcuni anni trascorsi fra Delphi, C/C++, VB e ASP, con la prima beta della piattaforma .NET, inizia subito ad utilizzare e approfondire questa nuova tecnologia.
Appassionato di architetture e programmazione, attualmente si occupa di progettazione e sviluppo di applicazioni Web, Windows e Mobile su piattaforma .NET, dedicando buona parte del suo tempo allo studio e all'approfondimento delle nuove tecnologie e metodologie di sviluppo.

dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems