Pruebas multiplataforma con Selenium GRID

3
5015

Cómo configurar Selenium GRID para realizar pruebas de aplicaciones web sobre distintos entornos.

Índice de contenidos

1. Introducción

En adictos hay disponibles múltiples tutoriales que enseñan a utilizar y configurar Selenium. Es fácil que a menudo se nos presente como requisito ejecutar la aplicación web en un sistema diferente al que utilizamos para desarrollarla. En este tutorial vamos a ver cómo configurar una máquina virtual Windows 7, con Internet Explorer 11 para ejecutar nuestros test.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core i7, 16GB DDR3)
  • Sistema Operativo: Mac OS El Capitan 10.11
  • VirtualBox 5.0.16 r105871
  • Windows 7, Internet Explorer 11 (máquina virtual)
  • Selenium Server 2.53.0
  • IntelliJ IDEA 2016.1

3. Configuración de VirtualBox y descarga de la máquina virtual

Existen multitud de gestores de máquinas virtuales, en nuestro caso utilizaremos VirtualBox, gratuito y descargable aquí.

Además, necesitaremos una máquina virtual. Microsoft pone a nuestra disposición máquinas virtuales ya creadas, gratuitas, para el uso por desarrolladores. Si bien están pensadas para pruebas, nos permiten instalar software como Java, necesario para nuestras pruebas. Podemos descargarlas desde aquí.

La configuración por defecto de la máquina es correcta para nuestros propósitos, sólo hay que modificar la configuración de los interfaces de red para que ambas máquinas puedan comunicarse. En nuestro caso, configuramos dos interfaces de red:

  • NAT para disponer de acceso a internet para, por ejemplo, instalar java y acceder a la página web de Google en los test.
  • Adaptador sólo anfitrión, para que pueda existir comunicación entre ambas máquinas.

4. Configuración de Selenium GRID

Para realizar las pruebas en remoto necesitamos dos componentes básicos, un servidor que atienda las peticiones de nuestros test (HUB), y uno o más nodos para resolverlas. En función del tipo de nodo, contará con una serie de características, y eso mismo es lo que utiliza el servidor para enrutar dichas peticiones.

Cuando realizamos una petición a Selenium HUB lo hacemos con unas DesiredCapabilities concretas, por lo que buscará en los nodos que tenga registrados y dirigirá la petición en consonancia.

4.1. Servidor autónomo local

Tendremos que ejecutar el siguiente comando en nuestro equipo para levantar la instancia de Selenium HUB que funcionará como servidor:

java -jar selenium-server-standalone-2.53.0.jar -role hub

Anotamos la dirección y el puerto en el que se ha levantado, ya que nos hará falta para indicarle al nodo a que hub debe registrarse.

4.2. Nodo remoto

En la máquina virtual, tendremos que levantar el mismo servidor para que funcione como nodo, indicando la dirección de nuestro hub, la ip con la que lo levantamos y el puerto si fuera necesario. Para evitar posteriores quebraderos de cabeza y registrar correctamente el nodo, mediante ipconfig obtenemos la dirección asignada al adaptador “sólo anfitrión”, y mediante ping desde el servidor, verificamos la conectividad.

Ejecutaremos el siguiente comando para que levante el servidor como nodo y se registre en el hub:

java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://<ip_hub>:<puerto_hub> -host <ip_máquina_virtual> -port <puerto_máquina_virtual>

5. Lanzar las pruebas

Cuando estemos seguros de que el entorno está configurado, y que ambas máquinas se ven, lanzaremos las pruebas utilizando la clase RemoteWebDriver. En el ejemplo únicamente vamos a comprobar el funcionamiento del entorno. Lo primero es añadir las dependencias en Maven:

pom.xml
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.52.0</version>
</dependency>

Y pasamos a comprobar si pasa un test sencillo en la máquina remota:

TestSeleniumHub.java
@Test
public void remoteHubTest() {
    try {
         DesiredCapabilities desiredCapabilities = DesiredCapabilities.internetExplorer();
         desiredCapabilities.setPlatform(Platform.WINDOWS);

         URL hubURL = new URL("http://localhost:4444/wd/hub");
         WebDriver webDriver = new RemoteWebDriver(hubURL, desiredCapabilities);
         webDriver.manage().window().maximize();
         webDriver.get("http://www.google.es");

         Assert.assertEquals("Google", webDriver.getTitle());
         webDriver.close();
    } catch (MalformedURLException e) {
         fail(e.getMessage());
    }
}

Si no conseguimos que se ejecute, lo más probable es que tengamos algún problema de comunicación entre nodos y servidor. Comprobar que efectivamente la ip con la que se ha levantado el nodo es visible desde la máquina servidor, y que el nodo puede comunicar con el hub.

6. Conclusiones

Siempre que nos interese desarrollar en una plataforma diferente a la que se va a utilizar como entorno de producción, o bien si nos interesa lanzar determinados test sobre una máquina diferente, tenemos la posibilidad de realizarlo fácilmente mediante el uso de Selenium HUB.

También podemos configurar un HUB común a todos los desarrolladores, de manera que todo el equipo realice los test bajo las mismas condiciones, permitiendo homogeneidad en los desarrollos.

7. Referencias

3 COMENTARIOS

  1. Hola Yair,

    Muchísimas gracias por el tutorial, de verdad, pero tengo que preguntar para ver si me ha quedado claro el Selenium Grid.

    Es decir yo podría instalar Selenium Grid en servidor linux con diferentes Hub, que estos Hub son diferentes navegadores con sus configuraciones. y a su vez lanzar desde mi equipo local pruebas hacia el servidor y obtener los resultados en mi maquinal local de nuevo?

    Espero poder haber podido coger el concepto y muchas gracias.

    • Hola Jose, encantado de poder aportar un poco a la comunidad.

      Efectivamente, puedes levantar un servidor en linux, y asociarle varios nodos. Creo que te refieres a eso cuando hablas de HUBs. Luego puedes lanzar las pruebas contra ese GRID, que actúa de pasarela y gestiona qué nodo cuenta con las desired capabilities solicitadas para ejecutar la prueba.

      Ese nodo o nodos ejecutan las pruebas y a ti te llegan los resultados.

      Espero haberte ayudado.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad