Innovando que es gerundio

Entradas clasificadas como ‘software libre’

Testing con Django (más alla de unittest)

16 Febrero 2009 · Dejar un comentario

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.


Categorías: Django · software libre
Etiquetado: , , , ,

Descubriendo aplicaciones de django

5 Diciembre 2008 · 1 comentario

Ayer tuve uno de esos raros días en los que puedo sentarme delante del ordenador a hacer lo que más me gusta: programar. Dedique toda la mañana a probar una interesante solución que han montado sobre django la gente del HotClubofFrance: Pinax.

Consiste en un conjunto de aplicaciones (en el sentido que le da django) arrejuntadas para crear una estructura básica de proyecto web 2.0, incluye, de casa, galerías de fotos, blogs, un clon de twitter, mensajes, “tribus” que vienen a ser foros, … Me gusto, porque facilita la vida del programador que quiere hacer una red social sin reinventar la rueda, pero añadiendo las singularidades del proyecto que esta creando.

En Okkum estamos empezando algo parecido, orientado a webs corporativas. De momento es nuestra propia web y a medida que se vaya consolidando lo haremos un poco más flexible, podéis echarle un vistazo y opinar.

También encontré una interesante herramienta psyco (gracias a mundogeek) que permite mejorar los tiempos de ejecución de código python y controlar el rendimiento del mismo.

Además anteayer salio Python 3.0, con novedades que a medio plazo pueden ser muy interesantes para la evolución de este lenguje y la comunidad cada día más amplia de programadores que lo usamos.

Categorías: open source · software libre · tecnología
Etiquetado: , ,