Testing con Selenium RC

Vediamo come un prodotto opensource come Selenium ci permette di testare la nostra web application simulando una vera e propria navigazione tramite browser. 

Selenium

Selenium è una suite di tool che ci permette di effettuare dei test sulle nostre applicazioni web. Dalla seguente immagine che troviamo sul sito di Selenium (http://selenium.seleniumhq.org/) è possibile capire il funzionamento di questa serie di tool

Selenium

 

Installando il Selenium IDE, che è un plugin per il browser Firefox, è possibile “registrare” i passi che vengono eseguiti sulla nostra applicazione web, inserendo anche dei check sui valori attesi. Ad esempio se ci aspettiamo che ad un certo passo del nostro test è presente il testo “PIPPO”, dobbiamo selezionare questa stringa e tramite il tasto destro accedere al menu del plugin che ci permette di memorizzare il test “assertTextPresent PIPPO”. Una volta completata una serie di passi nella nostra web application, avremo nel Selenium IDE la descrizione dei test che stiamo effettuando

Selenium Firefox plugin

 

Questi test possono poi essere esportati nel linguaggio che vogliamo, per integrarli in un nostro programma di test. Attualmente sono supportati direttamente da Selenium IDE i seguenti linguaggi

  • C#
  • Java
  • Perl
  • PHP
  • Python
  • Ruby

 

I test che vengono generati da Selenium si devono appoggiare poi su un server, Selenium Remote Control, che permette di avviare un vero e proprio browser ed eseguire i nostri test in automatico. Oltre a questo possiamo configurare un Selenium Grid, che è semplicemente una rete di Selenium Remote Control la quale ci permette di eseguire nello stesso momento gli stessi test su diverse piattaforme.

Chiaramente rispetto alle tante librerie che ci permettono di effettuare dei test “simulando” un browser, con Selenium abbiamo la possibilità di simulare il vero e proprio utente. In questo modo possiamo memorizzare tutta una serie di test per la nostra web application ed eseguirli in maniera automatica.

 

Una semplice webapp

Per vedere come utilizzare nel dettaglio Selenium andiamo prima di tutto a scrivere una semplice webapp, con una JSP e una Servlet. Nella JSP è presente un form che dobbiamo riempire e la Servlet stampa semplicemente quello che abbiamo inserito. Qui di seguito trovate la JSP

<html>
	<head>
		<title>testSelenium</title>
	</head>
	<body>
		<center>
			<h3>Test Selenium</h3>
			<form action='/testSelenium/test'>
			<input type="text" name="testParam" size="5" />
			<input type="submit" name="submit" value="Submit" />
			</form>
		</center>
	</body>
</html>

e quindi la Servlet che stampa il valore

package com.javastaff.testselenium;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println(request.getParameter("testParam"));
        out.flush();
        out.close();
    }
}

 

Il nostro test

Per fare un semplice test relativo alla nostra applicazione, ne dobbiamo effettuare il deploy e successivamente tramite il Selenium IDE definire un controllo per il quale il valore stampato dalla Servlet deve essere uguale a quello che abbiamo inserito (tutto in maniera visuale tramite il plugin).

Successivamente nel plugin possiamo selezionare Options->Format->Java Selenium RC. In questo modo otteniamo il caso di test che estende junit.framework.TestCase di JUnit e che possiamo tranquillamente integrare nei nostri test case. Qui di seguito vedere un caso di test leggermente differente da quello classico, nel quale vengono specificati una serie di parametri tramite variabili di istanza e due diversi casi test

package com.javastaff.testselenium;

import com.thoughtworks.selenium.Selenium;
import com.thoughtworks.selenium.DefaultSelenium;
import junit.framework.TestCase;
import org.openqa.selenium.server.SeleniumServer;

public class TestApp extends TestCase {

    private static final String MAX_WAIT_TIME_IN_MS = "60000";
    private static final String BASE_URL = "http://localhost:7001";
    private Selenium selenium = new DefaultSelenium("localhost", 4444, 
                                "*firefox", BASE_URL);
    private SeleniumServer seleniumServer;

    public void setUp() throws Exception {
        seleniumServer = new SeleniumServer();
        seleniumServer.start();
        selenium.start();
    }

    public void tearDown() throws Exception {
        selenium.stop();
        seleniumServer.stop();
    }

    public void testCorrect() throws Exception {
        selenium.open("/testSelenium/");
        selenium.type("testParam", "5");
        selenium.click("submit");
        selenium.waitForPageToLoad("30000");
        assertTrue(selenium.isTextPresent("5"));
    }

    public void testWrong() throws Exception {
        selenium.open("/testSelenium/");
        selenium.type("testParam", "5");
        selenium.click("submit");
        selenium.waitForPageToLoad("30000");
        assertTrue(selenium.isTextPresent("6"));
    }
}

Inserendo questa classe nella nostra test suite, vedremo che verrà avviato il browser Firefox e verranno emulati i due test (testCorrect e testWrong). Selenium RC supporta anche Internet Explorer, Opera e Safari. Qui di seguito vedete il risultato dei test all’interno dell’IDE Netbeans

Risultato test

 

Conclusioni

Selenium è un vero gioiellino per effettuare test sulle nostre applicazioni web. Il fatto di generare un caso di test direttamente nel codice che utilizziamo è una cosa molto utile perchè possiamo integrarli nei nostri casi di test. Avendo la possibilità di definire un test tramite JUnit, possiamo anche integrare il tutto nella configurazione Maven del nostro progetto ed avviare tutta una serie di test nella fase relativa ai test d’integrazione della nostra piattaforma.

Selenium Homepage
Utilizzare Selenium tramite Ant
Integrare Selenium con Maven

Federico Paparoni

Looking for a right "about me"...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.