RSS

Selenium, framework para pruebas de aceptación

15 Sep

selenium logo

Selenium es un framework de pruebas que permite automatizar los test de aceptación en nuestras aplicaciones web. Selenium permite probar el correcto funcionamiento de la interacción de usuario con los elementos de nuestras páginas web. Básicamente el framework Selenium nos permite dos cosas:

  • Grabar un caso de uso de interacción de usuario con la interfaz (una o varias páginas Web) de nuestra aplicación. Esta ‘grabación’ se puede realizar con la herramienta Selenium IDE.
  • Este caso de uso puede ser exportado desde Selenium IDE a un determinado framework de pruebas como JUnit o TestNG. Una vez exportado podemos arrancar este test en casi cualquier navegador Web con Selenium WebDriver. Actualmente hay implementaciones (drivers) para probar nuestros casos de uso en Internet Explorer, Firefox y Chrome. Con ello podemos probar de manera automática el correcto funcionamiento de nuestra aplicación en los diferentes navegadores Web. También existe un driver génerico llamado HtmlUnit que podrá correr en cualquier navegador.

Comentar que el framework Selenium nos permite hacer muchas cosas, como por ejemplo, probar directamente los test desde Selenium IDE, depurar la interacción del usuario con nuestra aplicación Web ó ejecutar ésta en un servidor remoto. Ésto último es especialmente útil si pretendemos utilizar alguna herramienta de integración continua como Jenkins o Hudson en nuestro desarrollo.

Pasos a seguir

En nuestro caso vamos a utilizar Selenium con la aplicación con Spring MVC y Maven que comenzamos a escribir en nuestro anterior post. Vamos a enumerar los pasos que vamos a seguir para añadir un test de aceptación de Selenium en nuestra aplicación son los siguientes:

  • Nos descargaremos el plug-in (addon) que tiene Selenium IDE para Firefox.
  • Arrancaremos nuestra aplicación Web en un servidor Jetty.
  • Abriremos la página CarForm de nuestra aplicación y rellenaremos el formulario de prueba que se presenta. Toda está interacción será grabada con Selenium IDE.
  • Exportaremos desde Selenium IDE este caso de prueba a una clase de JUnit.
  • Incluiremos esta clase de prueba dentro de la carpeta test/java de nuestro proyecto. Obviamente añadiremos las dependencias y el plug-in de Selenium necesario para ejecutar pruebas con este framework.
  • Volveremos a compilar nuestro proyecto y ejecutaremos el goal test de Maven para ver como ejecuta Selenium la prueba que recién acabamos de crear.

Descargar plug-in de Selenium IDE.

Simplemente necesitamos ir a la página de Firefox de addons y buscar Selenium IDE. Tendremos que descargar un fichero con extensión xpi, instalarlo y reiniciar Firefox. Podemos encontrar Selenium IDE desde la página oficial de Selenium también. Una vez instalado Selenium IDE tendrá este aspecto. Selenium IDE sólo está disponible para navegadores Firefox. Ésto no es un problema ya que aunque sólo pueda grabarse la interacción en este tipo de navegadores, luego puede ser probada donde quieras, IE, Chrome, …

SeleniumIDE

Grabación de un caso de uso de interacción con Selenium IDE.

Necesitaremos arrancar nuestra aplicación Spring MVC desde Maven como ya hemos visto anteriormente en nuestro servidor Jetty. Una vez arrancada navegaremos hasta la página CarForm.html.

Una vez aquí arrancaremos la grabación del Test con Selenium IDE. A partir de este momento cualquier interacción que haga el usuario (nosotros) con está página será grabada. Como vemos en las siguientes pantallas hemos introducido unos valores en el formulario y lo hemos aceptado. En el editor de Selenium IDE se nos muestra la traza de lo que hemos ido haciendo.

Terminaremos de grabar nuestro test y lo exportaremos a un fichero con el formato adecuado para el framework JUnit.

Inclusión de la clase de test en nuestro proyecto.

Lo único necesario será lo siguiente:

  • Copiaremos nuestra clase de Test a la carpeta /test/java de nuestro proyecto.
  • Añadiremos las dependencias necesarias en nuestro pom.xml para poder usar Selenium.
  • <dependency>
    			<groupId>org.seleniumhq.selenium</groupId>
    			<artifactId>selenium-firefox-driver</artifactId>
    			<version>2.5.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.seleniumhq.selenium</groupId>
    			<artifactId>selenium-chrome-driver</artifactId>
    			<version>2.5.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.seleniumhq.selenium</groupId>
    			<artifactId>selenium-server</artifactId>
    			<version>2.5.0</version>
    		</dependency>
    
  • Añadimos el plug-in de Selenium necesario para ejecutar nuestras pruebas de aceptación.

Ejecucción de los tests

De momento vamos a probar Selenium en nuestra aplicación de la siguiente forma. Abriremos dos consolas. En la primera de ellas arrancaremos nuestra aplicación con:

mvn jetty:run

En la otra invocaremos la fase de test de Maven donde será ejecutado nuestro test de Selenium .

mvn test

Veremos que se nos arrancará automáticamente una consola de administración de Selenium donde podemos configurar ciertos parámetros.

De manera automática veremos también como se abrirá una ventana en el navegador que nosotros le hayamos indicado en nuestra clase de test donde se ejecutará paso por paso las interacciones que hemos grabado previamente desde Selenium IDE.

Sobre el código

El código lo podéis encontrar en GitHub como ya comenté en Ejemplo básico de Spring MVC con Maven. De todas formas lo pongo aquí para comentar alguna cosilla:

import org.junit.Test;
import junit.framework.TestCase;
import com.thoughtworks.selenium.DefaultSelenium;

public class SeleniumCarFormTest extends TestCase {
	private DefaultSelenium selenium;

	@Override
	public void setUp() throws Exception {
		super.setUp();
		selenium = createSeleniumClient("http://localhost:9080/");
		selenium.start();
		selenium.windowMaximize();
		selenium.setSpeed("1000");
	}

	@Override
	public void tearDown() throws Exception {
		selenium.stop();
		super.tearDown();
	}

	protected DefaultSelenium createSeleniumClient(String url) throws Exception {
		return new DefaultSelenium("localhost", 4444, "*chrome", url);
	}

	@Test
	public void testCarFormSelenium() throws Exception {
		selenium.open("/spring-mvc/carForm.html");
		selenium.type("id=brand", "Renault");
		selenium.type("id=name", "Laguna");
		selenium.type("id=price", "18500");
		selenium.click("css=input[type=\"submit\"]");
		selenium.waitForPageToLoad("30000");
		assertEquals(selenium.getTitle(),"Car insert sucess");
	}
}

Como podemos ver existe un método setUp() dentro de la clase de Test que nos permite establecer la configuración deseada para nuestro test. En concreto crearemos una instancia de DefaultSelenium. Esta clase no es otra cosa que un cliente para interaccionar con la API de Selenium . A través de esta API diremos lo que nuestro test tiene que hacer (las interacciones del usuario con la página Web). En esta instancia podremos configurar, por ejemplo, la url donde ejecutar nuestro test, el navegador Web o la velocidad del test.

Así tendremos un método tearDown() que finalizará de manera ordenada nuestro cliente de Selenium una vez terminado el test.

El método de test no tiene mucha explicación a parte de ver como Selenium abre una página, rellena un campo de texto ó pincha un botón para hacer submit de un formulario. Finalmente el test será exitoso si la página que se nos abra tiene como título “Car insert sucess”.

 
Deja un comentario

Publicado por en 15 septiembre, 2011 en JEE, Selenium, Testing

 

Etiquetas: , , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: