Ya llevamos algunos post sobre testing, TDD, PHPUnit, etc. vamos a seguir tocando un poco este tema hablando de las pruebas funcionales. Sé que me dejo cosas atrás, pero me gustaría dar una pasada a casi todo lo de testing para más adelante poder ir hablando un poco más sobre cada tema.
Hoy vamos a tratar el tema del testing funcional, para el que no lo conozca el testing funcional a grandes rasgos verifica que la aplicación software cumple todos los requisitos especificados. Estas pruebas son normalmente de caja negra, es decir no es necesario conocer el código fuente de la aplicación.
Las pruebas funcionales están muy ligadas a los tests de aceptación, a las pruebas de interfaz de usuario y por tanto existen multitud de herramientas para este fin, y voy a centrarme en testing de aplicaciones web, así que entre las más populares están Watir(http://watir.com/), Sahi (http://sahi.co.in/), Canoo(http://webtest.canoo.com/webtest/manual/WebTestHome.html) y como no Selenium (http://docs.seleniumhq.org/)
Selenium
Es la Suite de Herramientas que más me gusta, aunque he de decir que la documentación aunque es muy extensa es a veces confusa, por ello voy a explicar un poco que es esto de Selenium y como incorporar el testing funcional a las aplicaciones.
Selenium es una herramienta automatización para hacer testing de aplicaciones web. Está compuesto por una herramienta para grabar/reproducir pruebas sin usar un lenguaje de scripting (Selenium IDE), aunque incluye también Selenese un lenguaje de scripting para escribir pruebas en lenguajes como Java, C#, Python.
Con Selenium puedes simular lo que haría una persona navegando por una aplicación web.
Entendiendo el proyecto Selenium
Selenium es un proyecto Open Source que tiene ya un largo recorrido. Nació en 2004 como una herramienta que permitía incrustar código JavaScript en el navegador para “ir haciendo clic” en los distintos elementos de la página (Selenium IDE), este proyecto siguió creciendo hasta convertirse en Selenium RC. Por otro lado Google liberó una aplicación llamada WebDriver que intentaba suplir algunos problemas de Selenium RC.
Así llegamos a 2012 en donde se fusionan ambos proyectos y nace “Selenium 2 WebDriver”.
¿Por qué cuento todo esto? Porque cuando empiezas a buscar documentación, a leer stackoverflow, a mirar blogs y ejemplos te haces un lío, bueno mejor dicho, yo me hice un lío y hasta que no me quedó claro todo esto no entendí bien todo.
Ahora mismo tenemos Selenium 2 Web Driver para ejecutar pruebas de aplicaciones web en distintos navegadores. Para ello podemos escribir las pruebas en Java, C#, Python, o incluso podemos grabarlas/reproducirlas con Selenium IDE. Si hacemos muchas baterías quizás nos convenga lanzar varis pruebas en paralelo, así que para ello está Selenium Grid.
Aunque no es todo tan bonito, una de las dificultades que tiene Selenium es trabajar con Ajax, por ejemplo, trabajar con popups que se abren, aunque existen muchos trucos para que esto no sea un impedimento, desde esperar x segundos a que aparezca el popup hasta ir chequeando que aparece el popup.
Instalando Selenium IDE
Selenium IDE es un addon de Firefox con el que poder grabar eventos e interaccionar con aplicaciones web. Así que solo tenemos que ir a la página de Selenium (navegando con Firefox) y descargarlo.
*En estos momentos hay algunas incompatibilidades entre Selenium IDE y Firefox 22, así que como recomendación personal, sería mejor que bajes de versión Firefox a la versión 21.
Como vemos Selenium IDE es muy intuitivo, tiene un botón para grabar y otro para reproducir, así como un control para la velocidad a la que queremos ejecutar los clics.
Para poder observar un poco mejor los elementos en los que hacemos clic sería bueno instalar un par de addons de Firefox como son Firebug y FirePath.
Selenium para reconocer los elementos de una página web puede hacerlo mediante su ID, mediante su atributo Name, también pueden obtenerse mediante parte del nombre o con su ruta Xpath.
Creando un test
Pues solo tenemos que hacer clic en grabar e interactuar con la web que queramos.
Podemos ver aquí que los comandos son bastante intuitivos, como open para abrir la página o type para escribir texto.
El formato de salida del test es muy sencillo, al guardar un test vemos que es una página html con una tabla de 3 columnas command, target y value.
Sacando un poco más de partido
Si alguna interacción se nos resiste podemos utilizar uno de las docenas de comandos que trae selenium, además como auto completa podemos idear nuevas secuencias hasta conseguir nuestro objetivo.
Por ejemplo aquí tenemos esta página que lanza un alert Ajax. SI ejecutamos un test normal, justo grabar y reproducir vemos que devuelve error.
Así que podemos insertar un nuevo comando (clic derecho sobre los comandos) y decir que espere (wait) a que aparezca el popup.
Otra opción podría ser bajar la velocidad del test, pero lo que buscamos con estas pruebas es ir más rápido que haciéndolas a mano.
Algunos comandos más
- Echo: Con este comando podemos imprimir algunos valores, amenos el nombre del test para saber que estamos ejecutando
- Open: Indica al navegador que abra una página específica.
- Type / TypeKeys: Escriben texto en un input.
- VerifyTextPresent: Es muy útil para saber si se ha cargado un popup, o si estamos en la página que queremos estar.
- ClickAndWait: Hace clic en un elemento y espera después, útil sobre todo para los formularios o los cambios de página.
- Select: Para seleccionar una de las opciones en un elemento select
- Pause: Realiza una pausa de X mili segundos.
- waitForVisible: Sobre todo para elementos escondidos que aparecen cuando se les hace clic (Ajax por ejemplo).
Existen muchos más comandos que puedes ver en la documentación de selenium, esto es solo una introducción 😉
Más adelante veremos cómo exportar estos test a Java, Python,… para poder ejecutarlos no solo desde Mozilla Firefox, sino desde otros navegadores como Chrome o incluso desde navegadores móviles como el del Android.
Genial! clarito clarito.. muy buena intro!
Me gustaMe gusta