Mi experiencia: Cypress Vs Playwright
Artículo de Daniel Balletbó
Mi experiencia utilizando Cypress y Playwright. Pros y contras tras años de uso.
Como ingeniero QA, una de mis principales responsabilidades al iniciar un proyecto es definir el framework de automatización. Para ello, he trabajado con distintos frameworks, desde Selenium y WebdriverIO hasta herramientas más actuales como Cypress y Playwright.
Hoy en día utilizo principalmente Cypress y Playwright. Ambas son grandes opciones, pero a su vez, tienen ciertas particularidades que considero importante saber antes de decantarse por una u otra. Aquí van los puntos clave para mí:
1. Configuración y primeros pasos
Ninguno de los dos es difícil de configurar, y ambos cuentan con abundante documentación para comenzar.
Cada uno cuenta con su documentación oficial [Cypress Doc, Playwright Doc], la cual aconsejo consultar en primer lugar. Otros lugares recomendables para búsqueda de información y soporte son sus repositorios de GitHub [Cypress GitHub, Playwright GitHub] para ver ejemplos de código y sus canales oficiales en distintas plataformas (Cypress Discord, Playwright Discord) que permiten comunicarse con otros desarrolladores.
Aun así, considero que Cypress, al tener más años en el mercado, destaca por la cantidad de documentación existente y por su comunidad más amplia en comparación con Playwright.
2. Escenarios simples vs. avanzados
Hoy en día, los escenarios de prueba suelen ser cada vez más complejos, incluyendo múltiples pestañas en el navegador, interacciones con distintos contextos y elementos iframe.
Si esto te resulta familiar, Playwright es ideal para escenarios avanzados, ya que maneja de forma nativa testing multipage y permite lanzar varios contextos en una misma instancia. ¿Qué queremos decir con esto? Pongamos un ejemplo:
Queremos probar un chat entre dos usuarios. Gracias a esta funcionalidad, podemos lanzar una única instancia del navegador y crear dos contextos de usuario con sus respectivas sesiones, para comprobar que los mensajes enviados por uno le llegan al otro.
También facilita la gestión de iframes haciéndola muy intuitiva, a diferencia de Cypress que puede llegar a ser un verdadero dolor de cabeza al requerir emplear ciertos workarounds poco amigables.
Por otro lado, Cypress funciona mejor para flujos sencillos que no requieran múltiples pestañas o iframes.
3. Velocidad
Ambas herramientas son rápidas, ya que no requieren un webdriver para interactuar con el navegador. Aun así, hay un aspecto que le da ventaja a Playwright: el paralelismo.
Playwright controla los navegadores desde fuera, lo que permite ejecutar tests paralelos y multi-contexto de forma nativa, aprovechando mejor los recursos del sistema.
Cypress, en cambio, no cuenta con esta capacidad en su versión gratuita de escritorio. En versiones de pago si es posible disfrutar la paralelización aunque con limitaciones de ejecuciones por mes en función del plan escogido.
4. Depuración (debugging)
Ambas herramientas incluyen sistemas de depuración propios. Para mí, Cypress destaca por su interfaz más amigable e interactiva, la posibilidad de realizar capturas y vídeos, y un timeline de ejecución muy visual.
Playwright también ofrece capturas y vídeos de las ejecuciones, pero su trazado de errores es más técnico, basado en logs y trace viewer.
5. Soporte de navegadores
Si buscamos un framework versátil, Playwright es la opción más completa, dando soporte a navegadores basados en el motor Chromium (Chrome, Edge), Firefox y Webkit (Safari). Además, configurando el parámetro executablePath con la ruta del ejecutable, es posible lanzar pruebas a navegadores menos conocidos como Brave, Opera o Vivaldi.
Cypress, en cambio, se centra más en Chrome, Edge, Electron y Firefox, pudiendo presentar problemas con navegadores diferentes a los citados.
6. Inteligencia Artificial
Ambos frameworks han comenzado a incorporar funcionalidades basadas en IA para facilitar la creación y mantenimiento de pruebas.
Playwright viene incluído con 3 agentes llamados planner, generator y healer. Puedes generarlos en tu proyecto, y mediante un asistente de código como GitHub Copilot, puedes indicar comandos para ellos. Sus funciones principales son:
Planner: explora la aplicación y hace una planificación de la ejecución de las pruebas.
Generator: genera los test de forma automática.
Healer: repara los test que han fallado, ya sea por selectores rotos o cambios en la UI.
Cada agente se puede lanzar de forma independiente según lo que necesitemos y su uso es totalmente gratuito.
Por otro lado, Cypress ha hecho Cypress Prompt, una función que permite generar tests a partir de instrucciones en lenguaje natural. La parte negativa es que requiere de una cuenta a Cypress Cloud, y el número de usos es limitado en el plan gratuito.
Un ejemplo real sería lo siguiente:
Desde mi punto de vista, sólo por las prestaciones de IA, no considero que merezca la pena la versión de pago de Cypress, ya que el propio framework es completamente gratuito de usar, y herramientas como cypress.prompt() no son perfectas y para escenarios complejos puede causar errores.
Sin embargo, si una organización busca un dashboard que muestra los resultados, necesita almacenaje en la nube o paralelizar las ejecuciones, puede merecer la pena echarle un vistazo.
Respecto al futuro, relacionado con la IA ambos frameworks todavía necesitan mejorar pero se nota que van por buen camino. Un gran valor añadido sería que el propio framework pudiera analizar y registrar los flujos más utilizados por los usuarios, con el objetivo de priorizar y enfocar la cobertura de tests en las áreas más críticas del sistema.