Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

Automazione dei test per le applicazioni web attraverso l'interazione con i browser: Watir e Selenium

Come faccio ad eseguire un test automatico dell'interfaccia utente di una applicazione web, o un test su sito che fa uso intensivo di Ajax?

Esiste a proposito una famiglia di strumenti per l'automazione dei test basati sull'interazione con i browser, con i quali è possibile simulare le operazioni che un utente compie sulla pagina web nella quale sta navigando.

In base alla mia esperienza, tra i toolkit appartenenti a questa famiglia, solo due sono veramente all'altezza, Watir e Selenium.

Watir e Selenium

Watir (si pronuncia come la parola inglese "water") è un prodotto maturo, nato nel 2004, scritto in Ruby. Fondamentalmente è una libreria open source corredata di una serie di metodi che permettono di pilotare i browser internet più comuni sul mercato, Internet explorer, Firefox, Chrome, Safari e Opera. 

L'esempio che segue, in linguaggio Ruby, apre un browser Internet Explorer, va alla home page di Google e clicca sul link "Ricerca avanzata", aspettando che quest'ultima operazione venga eseguita prima di terminare il test:

1
2
3
4
5
6
7
8
browser = Watir::IE.start_process
browser.goto("http://www.google.com")
browser.link(:text, "Ricerca avanzata").click

# attende la visualizzazione del primo campo testo
browser.text_field(:name, "as_q").wait_until_present

puts "Operazione eseguita"

Watir è un ottima scelta se si vuole uno strumento leggero ed affidabile per eseguire dei test automatizzati. Il progetto ha una lunga storia ed è tutt'ora vivo e vegeto, anzi negli ultimi aggiornamenti le pagine del sito parlano di una integrazione sempre più stretta con l'altro grande strumento per l'automazione dei test, Selenium.

Selenium, nato come libreria javascript per l'interazione con i browser, ha subito ultimamente una fusione con Webdriver, un toolkit sviluppato da un ingegnere di Google, Simon Stewart, il quale nel suo progetto ha implementato metodi più diretti per pilotare i browser (una extensione per firefox, IE automation controls per IE, etc.). A questo link è possibile trovare maggiori informazioni sulla storia di Webdriver.

La fusione è recente ed il risultato è una versione ancora beta di Selenium, ma le premesse sono ottime. E' possibile sviluppare test automatici in c#, java, ruby e python. Di seguito lo stesso esempio ma scritto in c# per Selenium e Google Chrome:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
IWebDriver driver = new ChromeDriver()
driver.Navigate().GoToUrl("http://www.google.com");
driver.FindElement(By.LinkText("Ricerca avanzata")).Click();

// attende la visualizzazione del primo campo testo
WebDriverWait w = new WebDriverWait(driver, new System.TimeSpan(0, 0, 60));
w.Until<IWebElement>(delegate(IWebDriver dr) 
  { 
    return dr.FindElement(By.Name("as_q"));
  }
);

Console.WriteLine("Operazione terminata");

Watir, Selenium: non adatti per il load testing

Per chi avesse pensato di usare Watir o Selenium per mettere sotto stress di carico le proprio applicazioni web, ci sono brutte notizie: sia Watir che Selenium sono ottimi per automatizzare i test delle interfacce, ma sono in generale poco adatti ad eseguire test di carico. Il motivo è che hanno bisogno di aprire un browser ad ogni istanza del test, esaurendo molto presto le risorse del pc.

Un buon riferimento per chi volesse fare test di carico a livello professionale è Browsermob, un sito che offre servizi di Web Monitoring e Load Testing professionali. 

In conclusione

Watir, è solido e potente, per chi ha dimestichezza con Ruby può essere un valido strumento per l'automazione dei test, ma ha la limitazione di essere disponibile solo in questo linguaggio. In effetti, esistono vari porting di Watir: WatiN (porting di Watir in .net), Watij (porting in Java), Win32-Watir (porting in Perl), ma nessuno è supportato come Watir.

La beta 2 di Selenium, è molto promettente, malgrado abbia ancora qualche buco tale da renderne frustrante l'utilizzo in fase di produzione, ma fornisce API per c# e Java, ed ha un largo pubblico (siti con forum tecnici come StackOverflow abbondano di post su tutte le versioni di Selenium). Non è escluso che con l'uscita della versione definitiva e con la sempre più stretta collaborazione con Watir, Selenium diventi il tool principe per l'automazione dei test attraverso l'interazione con i browser.

Comments