Informe del problema: al ejecutar Nightwatch con GGR y Selenoid algunos informes finales no aparecían. Las pruebas llegaban a su fin pero, al generar el reporte, faltaban el ultimo o los ultimos dos o tres resultados.

Investigación inicial: se descartaron promesas no resueltas dentro de las pruebas como causa del problema. Nightwatch gestiona bien la cola de comandos, de modo que incluso si una promesa no se espera, el siguiente comando solo empieza cuando termina el anterior. Tampoco explicaba el fallo que las sesiones se cerraran antes de que llegara el informe, y forzar llamadas largas en los after de cada prueba tampoco provocó la pérdida de datos.

Análisis profundo: al forkar el repositorio y estudiar el flujo encontré la causa raiz. En ejecuciones paralelas se crean varias promesas que representan procesos hijo. En el cierre de cada suite esos procesos hijo envían datos al proceso padre mediante mensajes IPC y emiten el evento test-end antes de terminar. El proceso padre espera a que todas las promesas se resuelvan y entonces pasa a la fase de reportes. El problema es que el envio de mensajes IPC no garantiza la entrega inmediata, solo el envio. Esto genera una condicion de carrera en la que:

1. El proceso hijo envia el mensaje IPC con datos de la prueba

2. El proceso hijo emite el evento test-end y finaliza

3. Todas las promesas se consideran resueltas y el proceso padre inicia la etapa de reporte

En casos raros el contenido del mensaje IPC llega despues de que el proceso padre ya ha recogido los datos disponibles y generado el informe, por eso faltan los ultimos resultados.

Solucion propuesta: puesto que no existe una forma nativa de asegurar la entrega del mensaje IPC antes de que el proceso hijo termine, propuse un mecanismo de confirmacion. El proceso hijo envia su mensaje y espera una respuesta de confirmacion por parte del proceso padre indicando que el mensaje fue recibido correctamente. Solo tras recibir ese acuse de recibo el proceso hijo puede finalizar. Alternativamente, el proceso padre puede retrasar la fase de reporte hasta recibir confirmaciones de todos los hijos. Esta aproximacion convierte el envio en un pequeño protocolo de handshake que elimina la condicion de carrera y garantiza que los datos siempre esten disponibles para el reporte.

Impacto practico y recomendaciones: implementar la confirmacion reduce la posibilidad de perder reportes en infraestructuras que usan GGR y Selenoid, especialmente en ejecuciones paralelas y contenedorizadas. Asimismo conviene instrumentar logs adicionales y comprobar los tiempos de entrega de IPC en entornos con alta latencia.

Sobre Q2BSTUDIO: en Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones robustas para pruebas automatizadas, despliegues en la nube y seguridad. Podemos ayudar a integrar esta mejora en pipelines de CI, optimizar contenedores y orquestadores y desplegar infraestructuras en cloud con enfoque en fiabilidad. Si necesita desarrollo a medida o desea optimizar su entorno de pruebas y despliegue podemos apoyarle con servicios de desarrollo de aplicaciones y software a medida en este enlace desarrollo de aplicaciones y software a medida y con migraciones y despliegues en la nube en servicios cloud aws y azure.

Ademas de pruebas y automatizacion, en Q2BSTUDIO ofrecemos inteligencia artificial, ciberseguridad, servicios inteligencia de negocio, ia para empresas, agentes IA y soluciones en power bi para mejorar la trazabilidad y el analisis de resultados. Si su proyecto requiere software a medida, seguridad avanzada o analitica con Power BI estamos listos para colaborar y diseñar una solucion que garantice integridad y disponibilidad de los informes.