Lanzando test distribuidos con Selenium Grid (parte I)

 

testing3

Nuestro compañero Antonio nos hablaba en este post sobre la importancia de las pruebas de regresión en las grandes empresas y hoy, junto a mi compañera Tere, queremos hablaros sobre otro gran aliado para nuestro propósito: Selenium Grid.

 “O te renuevas o mueres…Todo fluye; Todo cambia; Nada permanece”.

A todo el mundo nos suena esta frase tan famosa de Heráclito. Resulta curioso que un pensamiento filosófico, que ha permanecido desde el principio de los tiempos, perdure en este presente y vaya a perdurar en el resto de los tiempos.

Hoy en día, la tecnología se encuentra en un bucle infinito de renovación; en el que hardware y software van de la mano en este cambio. Desde el punto de vista de un ingeniero de pruebas, vemos constantemente este cambio. Las aplicaciones se actualizan, los navegadores se actualizan y nosotros, los testers, tenemos que actualizarnos día a día para que lo que funcionaba antes siga funcionando. Y aquí es donde entra nuestro nuevo amigo ya mencionado: Selenium Grid.

 

¿Qué nos aporta Selenium Grid?

Selenium Grid nos permite lanzar múltiples tests a través de diferentes navegadores, SO y máquinas en paralelo. Esto asegura que la aplicación que se está testeando tenga compatibilidad con un amplio rango de combinaciones de navegadores-SO, elevando de esta manera, a otro nivel, nuestras pruebas sobre la compatibilidad de la aplicación en cualquier entorno. Esto supone un antes y un después en cuanto a la calidad.

Selenium Grid nos va a permitir crear una red de máquinas conectadas, a las que llamaremos nodos, que estará controlada por un balanceador mediante el cual podremos ejecutar nuestro set de pruebas en los diferentes nodos de nuestra red. Cada uno de esos nodos puede combinar diferentes versiones de los navegadores y diferentes sistemas operativos. Esta combinación supone multitud de pruebas y, por lo tanto, mayor probabilidad de encontrar errores en nuestros aplicativos.

1

Por ejemplo, en el gráfico siguiente tenemos 5 instancias de pruebas repartidas en tres nodos; de esta manera podremos lanzar cinco tests de manera concurrente. Eso no significa que el número total de tests sea cinco: cuando un test acaba, la instancia que lo ejecutaba es liberada, pudiendo ejecutarse otro test en dicha instancia. Si quisiéramos ejecutar seis tests, Selenium Grid lanzaría los cinco primeros y esperaría a que se liberara una de las instancias para lanzar el sexto.

 

 seleniumHub

Herramientas y componentes

Selenium Grid es una herramienta para lanzar tests de Selenium de forma distribuida, que utiliza internamente Selenium Remote Control para ejecutar los test con distintos navegadores y plataformas. Selenium Grid funciona ejecutando un componente llamado Selenium Hub.

Selenium Hub: este componente recibe las órdenes de ejecución de los tests y coordina a múltiples servidores para ejecutar los test en los distintos nodos de nuestra red. Asegura que las peticiones de los tests se carguen balanceadamente y direcciona las peticiones de cada test al nodo apropiado.

Selenium Hub es escalable y es el único punto de entrada para los test.

Selenium Remote Control: este componente recibe las peticiones de cada test desde Selenium Hub y las redirecciona contra el sitio web usando el protocolo HTTP. Esto permite que nuestros test puedan ser políglotas y podamos usar cualquier lenguaje de programación que permita realizar peticiones HTTP.

En resumen, la ejecución de los tests se hace con Selenium Grid, éste ejecuta Selenium Hub, el cual controla los distintos servidores Selenium Remote Control, donde se encuentran los nodos de nuestra red (diferentes navegadores, sistemas operativos y sus respectivas versiones).

seleniumhub2

 

Selenium Grid provee la flexibilidad de ejecutar los tests en diferentes navegadores y diferentes SO al mismo tiempo.

Para arrancar Selenium Grid, en primer lugar, se deberá descargar e instalar Selenium Server. Podéis hacerlo aquí:  http://docs.seleniumhq.org/download/          

Tras descargar Selenium Grid, se debe setear una máquina como hub.

El cliente será nuestro PC así que, por medio de línea de comandos, debes posicionarte en la carpeta donde se encuentra en jar de Selenium Server recién descargado. A esta máquina le daremos el rol de hub con el siguiente comando (añadiendo el atributo -role hub).

java -jar nombre_del_jar.jar  -role hub

Ejemplo:   java –jar selenium-server-standalone.jar -role hub

Si el hub se lanza correctamente, en la pantalla de línea de comandos se debe mostrar un mensaje indicando “Selenium Grid hub is up and running”.

 text

 

Para verificar que el hub se encuentre levantado, se debe escribir en el navegador lo siguiente: http://localhost:4444/grid/console

  4

A continuación, se debe registrar una máquina como nodo. Esto es necesario para que el hub la pueda reconocer como "disponible" cuando se ejecuten los tests. En este caso, al atributo -role le indicaremos el valor "node"

java -jar nombre_del_jar.jar -role node -hub http://ip_de _la_maquina_donde_esta_el_hub_levantado:4444/grid/register -port 5555

En la pantalla de línea de comandos se debe mostrar un mensaje indicando “The node is registered to the hub and ready to use”.

  text2

 

Para verificar que el nodo se ha registrado correctamente, ejecuta en el navegador: http://localhost:4444/grid/console

 5

Se puede observar que se ha registrado el nodo al hub y tiene 5 instancias de Firefox, 1 de Safari y 5 de Chrome.

¡Y hasta aquí todo lo que necesitamos saber sobre Selenium Grid antes de pasar a la acción!

 

En el próximo capítulo, de nuevo junto a mi compañera Tere, enseñaremos cómo instalar, configurar y ejecutar un set de pruebas usando Selenium Grid... ¡¡No te lo pierdas!!