Cypress ha sido capaz de hacer tambalear el reinado de Selenium entre las herramientas de automatización web por méritos propios. Nos atrevemos a realizar una comparativa entre Zahorí y Cypress, pero al final más que una comparativa objetiva será un artículo de opinión basado en mi experiencia con ambas herramientas 🙂
“¿Por qué debería elegir Zahorí antes que Cypress [que lo está petando]?”
Esta es la pregunta que nos han realizado muchas veces cuando hemos ido a contar a algún sitio qué es Zahorí, aunque reconozco que la parte del final de la pregunta se suele omitir. Los que quieren profundizar más nos piden una tabla comparativa Zahorí vs Cypress, y si vosotros habéis venido buscando esta tabla para saber cuál es mejor, os recomiendo la lectura del siguiente artículo en medium.com, donde Juan de Jesús Fernández Graciano realiza la comparativa (tabla incluida) de Selenium VS Cypress de forma resumida pero eficiente.
Poner Selenium en lugar de Zahorí no ha sido un gazapo, el framework de Zahorí que empleamos para automatizar un proceso web utiliza Selenium WebDriver, por tanto muchas de las posibilidades que nos otorga el framework Zahorí las hemos heredado al estar basado en Selenium WebDriver. Entonces la siguiente cuestión es … ¿por qué debería utilizar el framework Zahorí en lugar de Selenium directamente? la respuesta más simple es que Zahorí nos brinda funcionalidad adicional y facilidades para automatizar procesos que no tendríamos utilizando WebDriver sin más. Y tampoco nos impide utilizar directamente Selenium si así lo deseamos.
Si sigues leyendo intentaré arrojar algo de luz sobre la cuestión Zahorí VS Cypress comparando algunos aspectos de ellas. Aunque me repita quiero insistir en que las siguientes afirmaciones están basadas en mi experiencia con estas herramientas de automatización y que seguramente meta la pata en algún aspecto (si queréis sacarme de mi/s error/es, utilizad los comentarios por favor!!!).
Zahorí VS Cypress – Round 1: ¿En qué es Zahorí mejor que Cypress?
Ha llegado el momento de mojarse y lo vamos a hacer a lo grande: me voy a poner a criticar a Cypress (abro paraguas):
- Cypress está pensado para automatizar pruebas web (navegador y servicios web). Aunque un porcentaje muy alto de nuestros proyectos de automatización son sobre procesos web puros en un navegador, Zahorí es una herramienta que nos dará capacidad de automatizar otro tipo de procesos que se tengan que ejecutar en sitios diferentes: APPs móviles Android y iOS, aplicaciones de escritorio, aplicaciones CICS (pantalla negra) y también procesos que utilicen invocaciones a servicios web SOAP y REST. Incluso podríamos ir un paso más allá y pensar en combinar en un proceso E2E subprocesos de distinta naturaleza.
Un proceso Zahorí a día de hoy es un proyecto programado en Java, por lo que como dice mi compañero David, “el límite es tu imaginación”. Podemos pensar en integrar herramientas externas especializadas en cierto tipos de pruebas (JMeter, SoapUI, etc). Por ello, próximamente publicaremos un ejemplo de un proyecto SoapUI explotado por un proceso Zahorí, de modo que con un único test SoapUI tenemos N casos en Zahorí con distintos datos de entrada.
- Cypress es muy restrictivo, en el sentido que limita a la hora de realizar determinadas acciones. Por ejemplo:
- No intentes manejar diferentes pestañas / ventanas de navegador. Si tienes un test que requiera utilizar más de una ventana de navegador, Cypress no es tu herramienta. Con Zahorí hemos automatizado pruebas de regresión de un sistema de clases online que requerían la ejecución simultánea de los roles del profesor y N alumnos, cada uno con su navegador.
- Si tienes que interactuar vía web con un sistema de terceros, creo que otra vez Cypress no es tu herramienta. Imagina un sistema que realice login en una pestaña / ventana diferente, o un proceso E2E que requiera realizar pago en Paypal u otro site externo … no podrás realizarlo ya que Cypress no permite cambiar a otra URL que no sea de tu aplicación.
Es posible que puedas salvarlo mediante API REST u otro workaround, pero ya no estás realizando la acción tal y como la realizaría un usuario real. Eso implica que ya no estamos probando exactamente lo que queríamos probar en un inicio. - Cierto tipo de acciones como realizar un hover, o el propio manejo de iframes se volverán una auténtica tortura con Cypress. El framework Zahorí incorpora herramientas para manejar los iframes y en caso de necesitar una funcionalidad que no esté cubierta, puedes utilizar Selenium directamente.
- La automatización de un proceso E2E complejo requiere incluir una lógica de negocio para tomar decisiones en tiempo de ejecución. En Zahorí es muy natural comprobar durante la ejecución de un proceso si se cumplen determinadas condiciones para realizar una acción u otra, pero Cypress no te pone nada fácil realizar estas comprobaciones ni tampoco realizar tests condicionales (If X, then Y, else Z).
- Cypress ha mejorado la compatibilidad con otros navegadores que no sean Chrome y Electron, y ha incorporado Edge y Firefox (además de Chromium). Con Zahorí el desarrollo se abstrae del navegador en el que se va a ejecutar el proceso automático ya que se delega en el driver de Selenium a través del JSON Wire Protocol. Esta característica nos permite ampliar el abanico de navegadores disponibles y tener además Safari, Internet Explorer (:O) y Opera (creo que debo ser el único usuario a día de hoy).
- Zahorí nace hace más de 6 años con el objetivo de realizar la abstracción de la capa técnica, que evoluciona a una velocidad vertiginosa, para lograr que nuestros proyectos de automatización tengan un menor coste de mantenimiento, el talón de Aquiles de los proyectos de automatización.
Con esa filosofía de ‘abstraer’, hemos logrado además poner la automatización al servicio de las personas que la necesitan, tengan conocimientos técnicos o no, de modo que personas con conocimiento funcional puedan parametrizar y ejecutar sus tests y sus procesos automáticos (aunque en alguna ocasión hayan tenido que pedir auxilio). Cypress realiza una mejora de la usabilidad en su Dashboard (de pago), y aunque desde ella no se requiera un perfil tan técnico como desde la versión gratuita, considero que la herramienta está orientada únicamente a desarrolladores. - Varias veces me he visto buscando cómo podría realizar X acción en Cypress y al final he acabado en el foro de GitHub viendo a la gente pedir / comentar lo bien que estaría poder hacer lo mismo que estaba buscando. La respuesta del equipo de desarrollo de Cypress en estos casos ha sido indicar que eso que quieres hacer no debes hacerlo por los motivos X, Y, Z.
Aunque los argumentos son buenos en ocasiones y siempre me han parecido respetables, esa falta de libertad la considero un aspecto negativo. No es sólo que no me dejes usar la herramienta como yo considere bajo mi responsabilidad; lo más grave es que no estás escuchando a tus usuarios. Me parece imperdonable.
Desde el equipo Zahorí estamos deseando escuchar a los usuarios del producto y saber si podemos mejorar o incluir algo para atender esas necesidades que todavía no han pasado por nuestras cabezas.
- Zahorí proporciona de forma muy simple un entorno de ejecución desatendida para ejecutar tus tests / tus procesos. No necesitas otras herramientas CI/CD (a no ser que las quieras para integrar los tests en tu ciclo de construcción SW).
- A día de hoy Zahorí ya permite explotar un proceso automatizado de forma sencilla en su frontal realizando las siguientes acciones:
- Añadir casos nuevos.
- Definir nuevos datos parametrizables en un proceso.
- Etiquetar casos para realizar agrupaciones que faciliten el uso de los mismos.
- Gestionar configuraciones de ejecución en un frontal web.
- Lanzar un mismo caso en distintos navegadores con distintas resoluciones de pantalla.
- Visualizar los resultados y las evidencias de ejecución desde el mismo panel.
- Ver la ejecución en tiempo real.
- Y mucho más que omito para no alargarnos más (si quieres descubrirlo, ¡anímate y pruébalo!).
- A futuro además permitirá:
- Planificar ejecuciones periódicas
- Configurar la integración de distintos sistemas de gestión de pruebas para guardar resultados y evidencias de ejecución.
- Gestionar grupos, usuarios y sus permisos para visualizar, modificar y ejecutar procesos.
- Muchas más funcionalidades que seguramente me estaré dejando en el teclado.
- En cuanto a evidencias de ejecución, Cypress permite generar vídeo de la ejecución y capturas de pantalla de los tests sin mayor esfuerzo que la configuración pertinente. Zahorí amplía esta generación automática de evidencias sin mayor esfuerzo:
- Permite visualizar la ejecución en el navegador web en tiempo real desde el frontal Zahorí. En el futuro se permitirá almacenar el vídeo de la ejecución de cada caso por separado (Cypress genera un vídeo único por spec ejecutada con todos los tests dentro sin dividirlo).
- Genera un fichero log de acciones realizadas a bajo nivel, indicando cada acción realizada sobre cada elemento web, su descripción, el dato involucrado y el objeto página al que corresponde.
- Genera un documento con los pasos funcionales de alto nivel que se haya marcado en el proceso, incluyendo en cada paso capturas de pantalla, descripciones y datos de entrada/salida correspondientes, de modo que resulta muy sencillo localizar el punto del flujo E2E en el que se ha producido el error.
- Captura de las peticiones de servicios web realizadas por el navegador durante la ejecución (fichero HAR) y filtrar las mismas por diferentes criterios (métodos HTTP y expresiones regulares sobre la URL).
- Zahorí permite paralelizar la ejecución de tests / procesos según resistan tus recursos HW si hablamos de infraestructura propia o tu cartera si jugamos en entornos Cloud. Con Cypress la paralelización debes manejarla de forma externa vía herramienta CI/CD, utilizar la versión de pago o buscar alguna alternativa … sorry-cypress 😉 😉
Zahorí VS Cypress – Round 2: ¿En qué es Cypress mejor que Zahorí?
No todos los halagos van a ser para Zahorí ni todas las críticas para Cypress. A Cypress hay que reconocerle sus bondades que son las que han posicionado a la herramienta en el lugar que ocupa actualmente:
- A pesar de que Zahorí aporta un conjunto de evidencias más amplio, Cypress tiene una cosa MUY interesante cuando se ejecuta en modo interactivo, que nuestro compañero Sergio Sáez me descubrió en su Panel 101 Tech Days sobre Cypress: los viajes en el tiempo. Puedes consultar cómo estaba la página web antes y después de cada interacción realizada sobre un elemento (que además se resalta sobre la pantalla). Todo ello se realiza a golpe de click, lo que es tremendamente útil cuando tienes algún problema y no tienes claro qué está sucediendo.
- La velocidad de ejecución en Cypress es increíblemente rápida al realizarse en el motor del navegador y no delegarla en el driver de Selenium. Es espectacular, y si ves un vídeo de una ejecución en el navegador en modo headless es probable que se active el “condensador de fluzo” de tu DeLorean.
- Hay infinidad de plugins para ampliar la capacidad de Cypress, pero por defecto trae una serie de herramientas que son muy potentes en una automatización. Comento algunas que hasta la fecha me han resultado de mucha utilidad:
- Facilidad tremenda para hacer una petición HTTP a un endpoint.
- Posibilidad de interceptar peticiones de servicios web para conocer el contenido de la respuesta, modificar la respuesta de un servicio web antes de que sea procesada por el navegador.
- Espiar y capturar el contenido de la consola.
- Un largo etc y cosas que me quedan por descubrir.
Ni que decir tiene que aunque a día de hoy Zahorí se ha focalizado mucho en la interacción con la web y no ha profundizado tanto en los aspectos mencionados en el listado anterior, Cypress nos está proporcionando ideas muy interesantes para la evolución del framework Zahorí.
- La integración con herramientas CI/CD es un must que debe incorporar Zahorí más pronto que tarde. A día de hoy sólo se puede crear una ejecución desde el frontal Zahorí, pero es algo que debe cambiar cuanto antes para permitir su uso en otros escenarios.
Zahorí VS Cypress – Round 3: Entonces … ¿qué me recomiendas? ¿Cypress o Zahorí?
A pesar de tanta comparativa, lo que queremos contaros en este artículo es por qué creemos que es un error pensar que Zahorí y Cypress son competencia, ya que ambas herramientas son excelentes y nuestra elección por una de ellas en un proyecto debería estar basada en nuestras necesidades y el uso que vayamos a realizar de la automatización.
¿Cuándo elegiría yo Cypress? cuando estuviera en alguno de los siguientes escenarios:
- Soy un desarrollador de front que trabaja con proyectos JS.
- El tiempo de ejecución es un aspecto vital ya que necesito ejecutar mis tests en muy poco tiempo (pipelines para hacer Merge Requests / Pull Requests, etc).
- No necesito realizar una gestión centralizada de tests, bien porque el volumen de tests no sea muy elevado o porque mi parametrización de datos sea estática y no tenga que mantenerla.
- No tengo necesidades específicas de paralelización.
- Otros escenarios que no se me ocurren en este momento….
Y siempre y cuando, javascript y la programación asíncrona no supongan un problema! (reconozco que todavía no he empezado a trastear con Typescript y sólo utilizo JS).
https://i.stack.imgur.com/LlIQj.jpg
Si por el contrario:
- El tiempo de ejecución es importante pero no algo vital.
- Necesito gestionar fácilmente la parametrización de los datos de prueba y los casos.
- Aporta valor poder poner a un usuario sin perfil de desarrollo a ejecutar e incluso gobernar la automatización.
- Necesito automatizar un proceso E2E complejo.
- Necesito paralelizar la ejecución de procesos / casos.
Entonces me decantaría por Zahorí sin duda. Por supuesto también elegiría Zahorí si eres un/a javer@ fanátic@ de Selenium como yo 🙂
Zahorí VS Cypress – Final Round: ¿Y si no tuviera que escoger sólo uno?
El framework Zahorí es el resultado de varios años realizando proyectos de automatización y nos brinda utilidades que nos facilitan mucho la vida a la hora de automatizar un proceso. Todavía le queda mucho recorrido y seguirá mejorando con el paso del tiempo, pero la siguiente vuelta de tuerca nos exige que una vez más convirtamos a Zahorí en esa capa de abstracción que permita al usuario automatizar con la herramienta que prefiera, y si ésta se lo permite, en el lenguaje de programación que prefiera. ¿Por qué vamos a obligar a los usuarios a utilizar nuestro framework o a prescindir de otras herramientas maravillosas como Cypress?
Estoy convencido de que esa capacidad de integración con múltiples herramientas de automatización es la evolución natural de Zahorí (y también sea dicho, es lo que nos pide el cuerpo a los miembros del equipo Zahorí).
Así que sí … estoy diciendo que veremos en no mucho tiempo unos tests automáticos hechos con Cypress ejecutándose desde / en Zahorí.
0 comentarios