Testing con Django (más alla de unittest)

Django tiene una serie de utilidades muy interesantes para el testeo de webs desarrolladas con el framework, podemos aprender sobre como usarlas aquí. En la documentación de Django, menciona además dos utilidades para testeo desde el navegador Twill y Selenium. Así, que ni corto ni perezoso, he dedicado varias horas del fin de semana a probar estas dos aplicaciones. Mi primera impresión con ambas fue: “esto es imprescindible”. Twill y Selenium son un lenguaje de comandos para realizar las acciones más habituales de navegación web, que nos permiten ejecutar una secuencia de forma automática sobre una página.

En el caso de Twill, su uso es sencillo y potentente, pero requiere conocimientos de Python y se ejecuta desde linea de comandos. Selenium, es el sueño de un programador web. Es un add-on de Firefox, que graba los clicks, textos y demás acciones sobre la página y después podemos reproducirlas tantas veces como sea necesario, sin necesidad de volver a realizar el proceso, Selenium lo hace por nosotros. Además, permite realizar algunas comprobaciones, como por ejemplo que el titulo de la página es el esperado, que existe determinado texto en la página, un id, etc. Además, podemos convertir nuestros guiones a varios lenguajes, para que se usen como test unitarios, uno de ellos es Python.

Hemos empezado a usar esta herramienta para generar nuestros tests funcionales, la solución completa ofrecida por SeleniumHQ, es SeleniumIDE y Selenium Remote Control. Selenium RC, es un servidor que ejecuta los scripts de test creados desde el IDE.  Como podeis ver una solución más que completa.

Instalar la aplicación es trivial, una vez instalada, vamos a Herramientas/Selenium IDE y ponernos a grabar (botón rojo de la parte superior derecha). Todo lo que hagamos en nuestro Firefox a partir de este momento hasta que paremos la grabación (con el mismo botón rojo) queda registrado y puede volver a ejecutarse. La grabación genera un código que podemos manipular fácilmente y que nos permitirá controlar el flujo de ejecución del test.

Aqui tenemos un ejemplo (ya en python) del guión que se genera para ir desde la página de inicio de djangoproject.com hasta la primera página del tutorial (http://docs.djangoproject.com/en/dev/intro/tutorial01/#intro-tutorial01), donde comprobamos que el texto “Writing your first Django app, part 1”  esta presente.

    sel = self.selenium
    sel.open("/")
    self.assertEqual("Django | The Web framework for perfectionists with deadlines", sel.get_title())
    sel.click("link=Documentation")
    sel.wait_for_page_to_load("30000")
    self.assertEqual("Django | Django documentation | Django Documentation", sel.get_title())
    sel.click("//div[@id='s-first-steps']/ul/li[2]/a[1]/em")
    sel.wait_for_page_to_load("30000")
    self.assertEqual("Django | Writing your first Django app, part 1 | Django Documentation", sel.get_title())
    try: self.failUnless(sel.is_text_present("Writing your first Django app, part 1"))
    except AssertionError, e: self.verificationErrors.append(str(e))

Como comentaba, usaremos Selenium para crear nuestros tests funcionales, para agilizar las pruebas que hacemos al programar, para documentar las pruebas y el funcionamiento de la aplicación, pero también para test de carga, para comprobar que el tiempo de respuesta de la aplicación es aceptable y cualquier cosa más que se nos ocurra. En los últimos meses, especialmente desde que estamos inmersos en la evaluación de SPICE, estamos prestando mucha atención a la capacidad de predecir y documentar (en la medida de lo posible) nuestro trabajo, los test unitarios y funcionales son una prioridad en mi agenda, creo que Selenium se convertirá en una herramienta al nivel de Subversion o Netbeans en Okkum, simplemente parte integral de nuestra forma de trabajar.


Anuncios

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