Skip to main content
Jenkins Selenium

Pruebas de regresión a través de Jenkins y Selenium: Lecciones aprendidas

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Las herramientas Jenkins y Selenium hacen posible la programación de pruebas de regresión dentro de un entorno de integración continua de una compañía.

Para su realización se ha empleado Selenium como herramienta de desarrollo de scripts de automatización y Jenkins como herramienta integradora encargada de ejecutar de forma programada los scripts Selenium.

La imagen siguiente presenta el caso de estudio de este artículo, donde se muestra la secuencia de “ataque”, pruebas de regresión a realizar sobre “la estrella de la muerte” y el entorno de pruebas. Jenkins Selenium 1

Jenkins, encargado de realizar despliegues automáticos dentro de la plataforma de integración continua, detecta cuando se ha realizado un despliegue con éxito en el entorno sobre el que deseemos lanzar las pruebas. Una vez detectado el despliegue, la tarea encargada de la ejecución de pruebas de regresión es programada.

Para evitar sobrecargar el entorno con este tipo de pruebas, Jenkins nos permite configurar cuándo realizar la ejecución de las pruebas. Mediante esta estrategia, las pruebas se realizarán de forma desatendida y los consultores de pruebas revisarán y analizarán los resultados, informando de los daños causados en el “ataque”.

Este artículo describe las lecciones aprendidas en la instalación, configuración e implementación de pruebas de regresión automáticas en el entorno de trabajo real de una organización, utilizando Jenkins y Selenium sobre máquinas Windows.

Lecciones aprendidas

Lección 1: Utiliza nodos dedicados y etiquetas

En función del entorno y la problemática encontrada en el cliente, optamos por la configuración del modo maestro-esclavo, como aconseja Jenkins. El modo maestro-esclavo, o también denominado nodos distribuidos, permite distribuir la carga de trabajo de Jenkins. Además, permite asignar nodos de ejecución a nivel de Job.

Jenkins Selenium master slaveEl nodo maestro usará sus recursos únicamente para manejar peticiones http y gestionar el entorno de integración continua. Las ejecuciones de los Jobs serán delegadas a los nodos esclavo. Con esta configuración es posible realizar un escalado horizontal de la arquitectura, permitiendo una instalación única de Jenkins dando servicio a un gran número de proyectos y de entornos de construcción.

En nuestro caso particular, utilizaremos esta configuración para delegar en un nodo esclavo la ejecución de los Jobs que lanzan pruebas de regresión.

Jenkins utiliza etiquetas para asociar Jobs y que éstos sean ejecutados en un nodo, por lo que utilizaremos este parámetro en todos los Jobs que ejecuten pruebas de regresión automática.

Lección 2: Utiliza la conexión que mejor se adapte a tu arquitectura.

Para que una máquina sea reconocida como nodo esclavo, necesita ejecutar un programa agente específico que establecerá una comunicación bidireccional con el nodo maestro.

Hay diferentes formas de establecer una conexión entre el nodo maestro y el nodo esclavo: Conexión SSH, Conexión JNLP-HTTP, Conexión JNLP-TCP.

Todas las conexiones ofrecen la configuración maestro /esclavo y tienen ventajas e inconvenientes. La selección de una de ellas debe estar basada en la arquitectura existente y las restricciones de conectividad que pueda haber. En nuestro caso de estudio, el entorno se basa en servidores Windows, a continuación se detallan las ventajas e inconvenientes que hemos detectado para cada tipo de conexión:

Conexión a través de SSH

Esta configuración es la escogida en la mayoría de los casos ya que permite establecer una comunicación estable entre maestro y esclavo. Inicialmente optamos por SSH para comunicar los dos nodos pero en Windows, SSH no aparece disponible de forma nativa y para utilizarlo hay que instalar el servicio a través de alguna herramienta que instale un servidor SSH en Windows, como por ejemplo sshd con cygwin, FreeSSHd,..

  • Ventajas:
    • Conexión segura.
    • Gestión del nodo esclavo desde el maestro.
  • Inconvenientes:
    • Uso de usuario/contraseña para la conexión.
    • Requiere la instalación de un servidor ssh en Windows.

Conexión a través de conexión remota nativa de Windows DCOM y WMI

Según la documentación de Jenkins, para esclavos Windows, Jenkins puede usar conexión remota de Windows disponible desde Windows 2000 (WMI+DCOM). De este modo, solo serán necesarias las credenciales del usuario administrador del sistema, que serán utilizadas por Jenkins para crear remotamente un servicio Windows, iniciarlo y apagarlo.

En la web de Jenkins se indica como la mejor opción en nodos Windows, pero se advierte que no permite ejecutar programas que requieran interacción a través de consola como es el caso que nos ocupa.

  • Ventajas:
    • Gestión del nodo esclavo desde el maestro a través de la conexión remota nativa de Windows.
  • Inconvenientes:
    • Configuración del uso de WMI + DCOM.
    • Uso de usuario para la conexión, con permisos de administración que le permitan crear, iniciar y parar un servicio Windows.
    • Evita interacción a través de consola.

Conexión a través de vía Java Web Start (JNLP)

En este caso, la comunicación es establecida arrancando el agente del nodo esclavo mediante Java Web Start (JNPL). Con esta conexión el programa Java Web Start tiene que estar lanzado en el esclavo de forma manual o como un servicio. La conexión se realiza por JNLP/TCP utilizando un puerto libre aleatorio, el puerto TCP a utilizar en este tipo de conexiones puede ser fijado a nivel de administración del nodo maestro de Jenkins, como muestra la imagen:Jenkins Selenium 2

  • Ventajas:
    • Solución más sencilla de implementar.
    • Elimina el tráfico de red necesario para crear/gestionar el servicio desde el nodo maestro al esclavo.
  • Inconvenientes:
    • Requiere que el programa Java Web Start esté arrancado en el nodo esclavo, pero una vez instalado puede ser configurado como servicio automático en el nodo esclavo.

Opción elegida

En nuestro caso, la conexión vía Java Web Start (JNLP) desde el maestro al esclavo, destaca por ser la más sencilla y óptima, ya que los nodos se encuentran alojados en la misma sub-red y no es necesario configurar permisos a través de ningún firewall.

Hemos utilizado la asignación aleatoria del puerto de conexión, pudiendo establecerse un puerto dedicado (si así se estima conveniente).

El agente del nodo esclavo fue instalado utilizando conexión JNLP como servicio Windows, funcionalidad que ofrece Jenkins durante el proceso de instalación mediante Java Web Start.

Lección 3: Acciones a realizar

La lista de acciones a realizar en la configuración de pruebas de regresión utilizando Jenkins y Selenium depende de cada entorno pero en base a nuestra experiencia se pueden resumir en:

  • Decidir qué tipo de comunicación existirá entre Jenkins y Selenium.
  • Identificar las herramientas y versiones necesarias en la ejecución de pruebas de regresión.
  • Definir qué tipo de herramienta utilizar, estableciendo cómo integrarla en el entorno y en la secuencia de ejecución de las pruebas.
  • Prestar especial atención a los navegadores a utilizar y las configuraciones de sesión necesarias.

Lección 4: Replica las herramientas necesarias en el nodo esclavo.

El nodo esclavo debe tener todas las herramientas que vayan a demandar las ejecuciones de sus Jobs como: versiones de Java, Maven y Groovy a utilizar.

Para evitar problemas a la hora de ejecutar los Jobs o mover Jobs entre nodos, es una buena práctica realizar una instalación lo más homogénea posible, intentando replicar, en la medida que sea posible, rutas y versiones de herramientas utilizadas en el nodo maestro.

Lección 5: Configura Selenium Server según tus necesidades

En el caso de estudio de este artículo se utilizó la herramienta Selenium Server en modo standalone. Para arrancar este servidor, en un primer momento se optó por instalarlo como servicio, algo que se puede realizar a través de la herramienta nssm, pero dado el uso que se iba a hacer del mismo, finalmente se configuró su arranque y parada a través de tareas Jenkins que son lanzadas al inicio y al final de cada Job que lo requiera.

De este modo se tiene más control sobre el servidor de selenium y se evita que esté consumiendo recursos cuando no está siendo utilizado.

Para la configuración de este recurso es interesante analizar la demanda y adaptar la configuración a las necesidades detectadas.

Lección 6: Configura los navegadores mediante sesiones de usuario

El usuario que arranca el servicio de Jenkins en el nodo esclavo es el que realiza toda la ejecución del Job y, por tanto, de las pruebas de regresión. Por ello, la configuración de los perfiles del navegador estará asociada a ese usuario. La mejor opción es utilizar un usuario dedicado en el nodo esclavo y que la sesión de este usuario sea utilizada en todas las tareas de configuración de los navegadores que se requieran: como configuración de perfiles, proxy o instalación de certificados.

Lección 7: Evita que Jenkins muestre contraseñas

La consola de Jenkins nos permite ver de forma muy detallada la secuencia de comandos y acciones ejecutadas. Esta característica puede hacer que las contraseñas pasadas como parámetros del Job de Jenkins sean mostradas sin cifrar.

Existen multitud de plugins en Jenkins para evitar que las contraseñas sean mostradas por consola y escritas en el log de ejecución del Job. En nuestro caso, hemos utilizado el plugin “EnvInject Plugin” que integrado con el paso de parámetros Maven nos ha permitido inyectar credenciales en el Job de forma segura.

Conclusiones

En este artículo se ha descrito un caso de estudio particular, pero el uso de Selenium de forma combinada con Jenkins incrementa las posibilidades de configuración y ejecución de pruebas de regresión.

El uso de Selenium como herramienta de programación permite probar de forma automática funcionalidad básica y no cambiante en una aplicación, lo que hace posible la detección de errores de forma temprana y automática.

El uso de nodos distribuidos en Jenkins nos permite ejecutar estas pruebas en entornos más complejos que el estudiado en este artículo, agrupando máquinas, sistemas operativos e incluso navegadores.

Como herramienta de auditoría, Jenkins registra la ejecución y los resultados de las pruebas de regresión. Su uso combinado con multitud de plugins que analizan resultados de pruebas lo hacen atractivo no solo a desarrolladores y equipos de pruebas, sino también a la alta dirección.

 

 

Carolina Guillén Romero

Carolina Guillén Romero

Consultor en Integración Continua/Área SQA. 9 años de experiencia Ingeniería Informática, Master en Tecnologías Web: Desarrollo de Aplicaciones y Servicios Web

Carolina Guillén Romero ha escrito 2 entradas


Carolina Guillén Romero

Carolina Guillén Romero

Consultor en Integración Continua/Área SQA. 9 años de experiencia Ingeniería Informática, Master en Tecnologías Web: Desarrollo de Aplicaciones y Servicios Web

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *