En este artículo veremos cómo programar un test funcional automatizado utilizando la combinación de Selenium con Python. El ejemplo será la búsqueda de un texto en Google el cual no producirá resultados. La configuración, creación de test y posterior ejecución se ha hecho bajo el sistema operativo Linux.
Instalación
En primer lugar deberemos instalar las librerías de Python para Selenium. La instrucción sería la siguiente:
Una vez realizado, deberemos instalar los drivers de los navegadores con el fin de poder ejecutar nuestras pruebas. Una buena solución es el script proporcionado en el repositorio de Github de Ziadoz.
Ejecutamos el script descargado:
Con esto ya tenemos configurado todo el entorno de ejecución.
Test Unitario
Para generar nuestros tests, abrimos un editor en Linux (para este post utilizamos Sublime Text) y creamos un nuevo fichero. Le llamaremos: python_google_unittest.py.
El código fuente al completo sería el siguiente:
En primer lugar definimos el encoding en UTF-8 e importaremos las librerías necesarias para la ejecución del test:
Un TestCase se crea mediante la subclase unittest.TestCase. Creamos nuestra clase de Test y la definimos como unittest:
En nuestro primer método de setUp estableceremos aquellas acciones a realizar antes de la ejecución del test. En este caso, indicamos que el navegador será Firefox:
En el siguiente método definiremos el test en sí, la búsqueda del elemento en Google y la comprobación del resultado:
Establecemos el driver, abrimos la página de Google, accedemos al elemento web de textbox de búsqueda, realizamos la búsqueda y por último comprobamos el resultado.
El último método es el método de tearDown, en el cual cerraremos el driver utilizado:
Por último, establecemos una forma sencilla de ejecutar las pruebas, a la hora de obtener los resultados en la consola de Linux:
Ya tenemos confeccionado nuestro test. Para ejecutarlo, abrimos un Terminal de Linux y nos situamos en el directorio donde hemos ubicado nuestro test:
Se nos abrirá el navegador y ejecutará nuestro test. Si ha funcionado correctamente obtendremos un mensaje como el siguiente:
Test Funcional
Ahora realizaremos el mismo test como si de un test funcional se tratase. En este caso no definiremos el tipo de test ni diferenciaremos por métodos, sino que escribiremos todas las instrucciones de forma secuencial. Lo llamaremos python_google_test.py:
Para ejecutarlo, de la misma forma que con el test unitario, abriremos un nuevo Terminal en Linux, nos ubicaremos en la carpeta donde tenemos nuestro test y lo ejecutaremos:
Page Object Pattern
En último lugar, realizaremos el mismo test utilizando para ello Page Object Pattern.
El test tendría un aspecto como el siguiente:
Aunque tiene prácticamente el mismo aspecto que el test unitario, podemos observar cómo utiliza objetos en lugar de contener las instrucciones de forma secuencial. Podemos verlo en la cabecera, importando la clase page_google y en la definición de la variable main_page, utilizando los métodos necesarios para la realización del test.
Ahora creamos una clase "page_google.py" que tendrá el siguiente aspecto:
Tal y como indica su nombre, aquí definiremos todos aquellos elementos y acciones a realizar en la página de Google, tal como el textbox donde indicaremos el texto a buscar, el botón Buscar y la acción de click y la recuperación del resultado.
Dentro de esta clase, importamos las clases locators y element, en las cuales la primera incluirá los nombres de los localizadores de los elementos (identificador, xpath, etc.) y la segunda serán los métodos inherentes de accesibilidad a los elementos de tipo texto (acciones GET y SET).
Creamos la clase "locators.py" la cual tendrá el siguiente aspecto:
Y por último la clase "element.py":
Ejecutamos el test, nuevamente en un Terminal de Linux:
Si el test se ejecuta correctamente, obtendremos el siguiente resultado:
Conclusiones
Las pruebas funcionales son las encargadas de verificar que la funcionalidad del sistema sea la esperada automatizando desde la propia interfaz de usuario. Este tipo de pruebas, conocidas también como pruebas de caja negra, se encargan de verificar el funcionamiento correcto sin importar el lenguaje en el que ha sido desarrollado a nivel de backend. En este caso hemos aprovechado la envergadura que ofrece Selenium combinándolo con Python.
Si te ha gustado, ¡síguenos en Twitter!