Seminario web destacado: MISRA C++ 2023: todo lo que necesita saber | Vea ahora

Cómo arreglar el selenio en su canalización de CI / CD

Logotipo del cubo de Parasoft
Marzo 19, 2020
6 min leer

¿Cómo optimiza Selenium en su canalización de CI/CD? Aquí, descubrimos cómo puede modificar la canalización de CI/CD para resolver automáticamente los problemas de prueba de Selenium causados ​​por CI/CD.

Ejecutar pruebas automatizadas de forma continua puede parecer una obviedad. Un sistema de CI es clave, ya que proporciona a los equipos de desarrollo ágiles una visibilidad rápida del estado de sus aplicaciones. Si las pruebas automatizadas están pasando, entonces la aplicación está en buen estado. Si las pruebas fallan, entonces la aplicación está rota de alguna manera. ¿O es eso?

La desafortunada realidad es que las pruebas automatizadas no siempre nos brindan tanta confianza, especialmente cuando se ejecutan pruebas de Selenium. Las pruebas de Selenium pueden fallar por muchas razones diferentes, independientemente de si la aplicación está rota de alguna manera o si cambió. Estos problemas están muy bien detallados en una publicación de blog anterior. Aquí, explicaré cómo modificar la canalización de CI / CD para solucionar automáticamente esos problemas, mejorando la confianza en los resultados de las pruebas del sistema de CI.

Dolor de selenio CI

CI / CD amplifica los problemas de prueba de selenio. Veamos cómo sucede esto. Primero, el desarrollo aterriza algunos cambios en el código. El sistema CI detecta el cambio y activa la canalización de compilación. Los módulos se compilan, las pruebas unitarias se ejecutan y pasan (¡yay!), Y luego la aplicación se empaqueta para su implementación. La canalización de implementación se activa a continuación, poniendo en escena un entorno de prueba, implementando la aplicación bajo prueba y luego inicia las pruebas de integración, muchas de las cuales están escritas con Selenium. No todas las pruebas de Selenium pasan, momento en el que el sistema CI notifica a varias personas de las fallas de la prueba por correo electrónico. Esas personas responden, a veces gastando una cantidad significativa de tiempo investigando y solucionando problemas. Los propietarios de productos, gerentes y otras partes interesadas también ven las fallas en sus paneles de control que desvían su atención de otras cosas. Sabiendo que las pruebas de selenio en sí mismas son inestables, ¿cómo puede alguien tener la confianza de que CI / CD reportó una regresión o defecto real? ¿Cuánto tiempo se pierde solucionando problemas de falsos positivos?

La simple mejora de las pruebas de Selenium puede no ser trivial, a veces implica prueba y error, especialmente cuando los problemas son intermitentes o difíciles de reproducir. De una construcción a otra hay fallas que pueden moverse, donde no hay una única prueba a la que culpar. Pueden ser problemas sistémicos o ambientales que van y vienen. El sistema CI puede utilizar ejecutores VM o basados ​​en la nube que tienen características de rendimiento inconsistentes. Las pruebas se ejecutan y pasan a las estaciones de trabajo de los desarrolladores, pero fallan en la automatización de CI. ¿Suena familiar?

Selenio CI resuelto

Parasoft Selénic fue desarrollado para ayudar a combatir tales desafíos. Selenic automatiza el análisis y la corrección de los problemas de prueba de Selenium, brinda soluciones o información sobre esos problemas, y hace que esos hallazgos estén disponibles para el momento en que el sistema de CI notifique a los humanos. La carga se traslada al sistema de CI, lejos de los humanos que reaccionan a las notificaciones del sistema de CI. Con solo dos sencillos pasos, puede automatizar el proceso de corrección de las pruebas de Selenium como parte de la canalización de CI / CD utilizando Parasoft Selenic.

Optimice las pruebas de selenio con Parasoft Selenic.

Inyectar el agente selenico

Para integrar Parasoft Selenic, realice un cambio de una línea en su script de ejecución de prueba existente. Digamos que tengo un paso de ejecución de Maven en proceso que está impulsando mis pruebas de Selenium basadas en Java. Normalmente, estoy especificando dos objetivos de Maven, "limpiar" y "probar", que se pasan como argumentos de línea de comando a Maven. Aquí, solo está agregando un argumento adicional de línea de comando de Maven:

-DargLine = -javaagent: $ {SELENIC_HOME} /selenic_agent.jar=selfHealing=true,sessionId = $ {BUILD_TAG}

En Jenkins CI, esto podría verse así:

El Agente Selenic ahora se inyecta en el proceso de ejecución de la prueba, siempre que Selenic esté instalado y tenga licencia en la ubicación a la que hace referencia la variable “SELENIC_HOME”. El agente selenico puede hacer varias cosas, pero con el propósito de estabilizar las pruebas, solo estoy habilitando la función de "autocuración" que intenta identificar y solucionar los problemas de las pruebas de selenio sobre la marcha.

Una cosa que debe considerar cuidadosamente es si todas sus pruebas de Selenium se encuentran en un módulo o si hay pruebas en varios módulos. Es común que las pruebas se dividan en varios módulos con fines organizativos. Para que Selenic agregue información de varios módulos de prueba, se debe configurar un argumento "sessionId". En el ejemplo anterior, estoy usando "BUILD_TAG", que es una variable predefinida en el sistema de CI de Jenkins que funciona muy bien para este propósito. Independientemente del sistema de CI que esté utilizando, mi recomendación es construir un identificador de sesión único utilizando variables proporcionadas por su sistema de CI.

Después de realizar este cambio de una línea, Selenic identifica y corrige automáticamente los problemas de estabilidad de la prueba, lo que brinda a todos mucha más confianza en los resultados de las pruebas publicados por el sistema CI. Sin embargo, hay un componente más de Selenic que recomiendo integrar.

Ejecute el analizador selenico

¿Cómo sabemos qué problemas encontró Selenic o qué corrigió? ¿Debo hacer cambios en las pruebas de selenio para evitar los tipos de problemas que encuentra Selenic? Para obtener esta información, debe ejecutar Selenic Analyzer como otro paso de ejecución en la canalización. Este es un segundo cambio de una línea, pero aún es trivial:

java -jar $ SELENIC_HOME / selenic_analyzer.jar -report target / selenic-reports -sessionId $ {BUILD_TAG}

En Jenkins CI, esto podría verse así:

Selenic Analyzer recopila información que el agente Selenic registró anteriormente, realiza un análisis adicional de los datos y luego crea algunos informes que luego pueden ser archivados por el sistema de CI. De forma predeterminada, el analizador procesa la información de la sesión más reciente, pero para mayor robustez recomiendo configurar explícitamente el argumento "-sessionId" con el mismo valor que se usó anteriormente al configurar el Agente Selenic.

Selenic Analyzer escribe los informes en el directorio de trabajo actual de forma predeterminada. Sin embargo, para facilitar el archivo de los informes, debe agregar un argumento "-report" para indicarle a Selenic que escriba informes en una carpeta "selenic-reports" en el directorio de salida de la compilación de su proyecto. Después de hacer esto, agregaría un paso más en la canalización para archivar "target / selenic-reports / **":

Los archivos de informes ahora están disponibles para todos a través del sistema de CI. En el caso de Jenkins CI, se puede acceder cómodamente a los informes en URL estables:

http://{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.html

http://{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.json

La primera URL apunta al informe HTML de Selenic que se puede ver directamente en un navegador web. La segunda URL es el informe JSON que los desarrolladores pueden proporcionar al complemento Selenic IDE para importar las recomendaciones de la última ejecución de prueba automatizada.

Otras Consideraciones

Selenic tiene muchas otras opciones que puede considerar habilitar según su entorno de prueba y otras necesidades específicas.

Selenic registra datos para cada sesión de prueba. Los datos registrados actúan como una base de conocimientos, lo que permite a Selenic aprender y tomar mejores decisiones y recomendaciones de autocuración a lo largo del tiempo. De forma predeterminada, estos datos se almacenan en la máquina donde se ejecuta la prueba. Por lo tanto, si tiene un grupo de ejecutores, entonces querrá que estos datos estén en una carpeta compartida que sea accesible para todos sus ejecutores. La ubicación de los datos se puede configurar explícitamente pasando un parámetro "data = {ruta}" al Agente Selenic y un argumento "-data {ruta}" al Analizador Selenic, donde "{ruta}" sería una ruta del sistema de archivos a una carpeta compartida. En Windows, esto podría ser una ruta UNC como \\ HostName \ SharedFolder. Los datos registrados también se acumularán indefinidamente a menos que estén restringidos. Eventualmente, esto puede conducir a un uso elevado del disco. Se puede configurar un límite en la cantidad de sesiones de prueba grabadas pasando un parámetro "maxSessionDaysToKeep = {num_days}" al Agente Selenic. El "{núm_días}" es la cantidad de días en los que se registraron los datos y no los días calendario. En otras palabras, Selenic no cuenta los días en los que no se registraron datos de la sesión de prueba. Esto es útil si ejecuta sus pruebas con poca frecuencia, o en intervalos inconsistentes, o si tuvo un tiempo de inactividad del servidor en el que no pudo ejecutar las pruebas durante unos días.

Selenic también se puede configurar para capturar información de diagnóstico adicional en varios niveles de granularidad. Por ejemplo, Selenic se puede configurar para capturar capturas de pantalla para cada acción de Selenium o solo para acciones fallidas. Para habilitar capturas de pantalla en pruebas fallidas, puede pasar un parámetro "captura de pantalla = fallos" al Agente Selenic. Las capturas de pantalla de las fallas están disponibles en el informe HTML producido por Selenic Analyzer.

CI/CD + Selenic = ❤

Parasoft Selenic se creó para ayudar a acelerar el desarrollo ágil utilizando Selenium como parte de CI / CD. Los desarrolladores y evaluadores pueden ser más productivos, dedicando menos tiempo a perseguir "fantasmas" de Selenium y más tiempo trabajando en cosas reales. Aumente la confianza en los resultados de su prueba de selenio con Selenic. Descarga tu prueba gratis hoy.

Optimice las pruebas de selenio con Parasoft Selenic.