martes, mayo 26, 2009

Test funcionales para todos: Canoo WebTest + Grails.

martes, mayo 26, 2009 por Martín

Hace ya unos meses comentaba que Grails tenía sus cosas buenas y también sus cosas malas.

Pues bueno, el plugin de tests funcionales pasa a engrosar la lista de cosas que me gustan. Se trata de un plugin que integra Canoo WebTest, una fenomenal herramienta de testeo de la capa web.

Lo más importante que quiero destacar del artículo que estoy escribiendo es que no se limita a Grail. Este plugin simplemente se encarga de simular el acceso a páginas web y ejecutar un número de aserciones sobre las páginas. Los tests se escriben en Groovy y se necesita Grails para ejecutar, pero eso es todo. Es decir, podemos utilizar este sistema para testear cualquier aplicación web, ya esté hecha en Grails, en Java o en .NET. Y ya veréis que por lo sencillo que es, vale la pena.

Lo primero de todo es seguir las instrucciones del wiki, e instalar el plugin. Asumiendo que tenemos instalado Grails, tendríamos que:
  • Crear el proyecto: grails create-app tests
  • Instalar el plugin: grails install-plugin webtest
  • Crear la carpeta de tests: grails create-webtest

Una vez hecho esto tendremos una estructura de directorios con la configuración de los tests, los reports y una carpeta "tests" donde se irán colocando los tests funcionales. Crear un tests es insultántemente sencillo, y treméndamente intuitivo. Tan sólo es cuestión de saber como trasladar el conjunto de tareas de WebTest a Groovy. Pero entre los ejemplos, y lo sencillo que es, pues no debería haber ningún problema.

Fijaros en el siguiente ejemplo de un test funcional que tenemos en Jobsket para comprobar que los perfiles de Linkedin se importan correctamente:
def testLinkedinUpload() {

invoke      '/login'
verifyText  'Entra en Jobsket'
setInputField(name:'login',value:"${user}")
setInputField(name:'password',value:"${password}")
clickButton 'Entra'

invoke '/upload/linkedin'

setInputField(name:'profile',value:'http://www.linkedin.com/in/mpermar')
setCheckbox(name:'legalAccepted')
clickButton '!Sube tu CV desde Linkedin!'

verifyText 'Tu CV'
}


¿Es necesario que explique algo del test? Nada de código Java, nada de XML, nada de scripting raro. No os exagero, hacer tests funcionales con Grails y WebTest es una gozada. El código es muy sencillo de leer, y además al ser Groovy sigues teniendo la potencia que te ofrece un lenguaje orientado a objetos y puedes agrupar funcionalidad común a los tests en otras clases. Pues por ejemplo agrupar la parte de login de ahí arriba en un método login que pondríamos en una clase padre. Es un ejemplo.

Quedaría simplemente ejecutar el test:
  • grails run-webtest MiTest

Una vez se ejecutan los tests, los informes se pueden ver desde la web:



Y nada más. Simplemente resaltar lo comentado. Si estás haciendo un proyecto web, y buscas una herramienta para ejecutar tests funcionales, entonces Grails + Canoo WebTest es una opción muy recomendable. Además se integra muy bien con Hudson, pero eso lo dejo ya para otra entrada :)

comments

3 Respuestas a "Test funcionales para todos: Canoo WebTest + Grails."
jcesarperez dijo...
16:02

Hola Martin.

Tiene muy buena pinta. Yo uso SeleniumRC.

Me gustaría preguntarte un par de cosas:

1) ¿Cómo se lleva con Ajax? Por ejemplo la tipica lista que seleccionas un valor y mediante ajax recargas otra lista pero hay que esperar a que se cargue...

2) ¿Se puede configurar el navegador a utilizar?


Martín dijo...
16:47

Julio, respuestas rápidas.

1 - Ni idea :)

2 - Me imagino que sí (alias casi ni idea). Canoo WebTest está basado en HtmlUnit (son del mismo autor) y en el segundo se puede configurar como quieres que se comporte el motor (ej. firefox, internet explorer, ...)


ElJavato dijo...
22:24

Yo de momento uso HtmlUnit, mas que nada por que cuando mire Canoo eran algo limitadas las cosas que podias hacer con el.
Pero veo que han añadido bastantes más cosas, así que me lo apunto, me lo apunto :)