Te va a interesar!

6/recent/ticker-posts

Cypress: Selenium killer o una herramienta diferente?


Juro que iba a encarar este post de otra manera. Había puesto de título "Hoy le digo adios a Selenium" porque, si me siguen en Twitter, habrán notado que llevo unas semanas de uso intensivo de Cypress en mi tiempo libre, para aprenderlo y entender por qué hay tanto ruido en torno a esta herramienta. Y, si bien creo que es superior en muchísimos aspectos y va a ser mi principal arma siempre que tenga la elección a la hora de automatizar, he concluido también que no es para todo el mundo.

¿Es más rápido? Si. ¿Es más confiable? Muchísimo! ¿Es más entretenido de usar? También. Seguro es un lío configurar todo para empezar...Ni de lejos, es super sencillo! Entonces...si es todo tan maravilloso, ¿por qué no simplemente gritar a los cuatro vientos que es la mejor opción para automatizar?

Primero y principal, siento que está orientado a otro público. Como ustedes sabrán, Selenium es LA herramienta para E2E automation testing hoy en día. Es la primera palabra que se le desliza a cualquier manager, recruiter y demás cuando buscan recursos para sus equipos. Con esto quiero decir que Selenium es algo que se usa en el mundo del testing más que nada. Y ustedes me dirán "Pero Pato, obvio que es así! Si el testing lo hacen los testers!". Error mis pequeños saltamontes...error. Con las metodologías ágiles, el shift left y la filosofía de que todos en el SDLC somos responsables de la calidad del software, muchos desarrolladores Front End están empezando a tomar el testing por mano propia. Y no, no me refiero al Unit Testing o siquiera a Integration...sino también al E2E, terreno hasta ahora exclusivo de los Automation Testers. No se rasguen las vestiduras! Tranquilos! Esto es una tendencia, no algo demasiado difundido hasta ahora.

Los devs no usan Selenium, de hecho diría que lo odian. Imaginen: Tienen que bajar WebDrivers y encargarse de que estén actualizados siempre, montar todo un proyecto además del proyecto de la app, lo que termina siendo una ensalada demasiado grande para una sola persona. Para colmo de males, Selenium tiene unas manías muy poco felices...

No es bueno bailando el tango asíncrono que, hoy por hoy con el intensivo uso de JS en las webs cada vez más complejas, hace que tengamos tests que a veces pasan, otras no y así sucesivamente. Esto no solo es malo para un desarrollador que necesita testear rápido lo que está haciendo, sino que a nosotros como Testers nos demanda un esfuerzo bastante grande (generalmente en la forma de Waits de WebDriver hasta en la sopa) para evitar que la credibilidad en los resultados se desplome hasta el piso.

Cuantas veces habrá pasado que un test falló, para luego pasar segundos después lo más bien. Todo por un carga asíncrona o un elemento que no estaba en el estado que tenía que estar por unos segundos de diferencia.

Bueno, como respuesta a todo esto nació Cypress. Todo lo que es esperas asíncronas y de elementos a que estén listos para trabajar, es totalmente transparente y no van a tener que agregar nunca de los jamases un wait.

Lo que es mejor, se ejecuta directamente en el browser que tengamos instalado, removiendo la necesidad de bajar webdrivers, que estén actualizados, todo el ruido de la red que interfiere con la API de Selenium, etc.

Así es! El browser es el que está ejecutando el test, no algo externo como WebDriver. Esto lo hace rápido...muy rápido y por sobre todo, confiable. Siempre va a esperar que las cosas estén listas para seguir y no vamos a ve los famosos "noSuchElement", "staleElement" y demás simpáticas excepciones de Selenium al no poder dar pie con bola con lo que está pasando en el dom de la página.

Ahora, si sos alguien con mucha experiencia y conoces JavaScript, no va a costarte mucho familiarizarte con todo lo que trae incluido, dígase Mocha y Chai para estructurar los tests y hacer Assertions, pero puede ponerse un poco peliagudo para personas que estén comenzando o que estén demasiado arraigadas a Selenium.

Al tener este tipo de control sobre la webapp y ejecutar todo desde dentro, tenemos unas funcionalidades muy interesantes que podemos usar para cambiar el estado de las cosas, saltearnos otras y todo tipo de trucos que nos van a facilitar el testing. Pero eso lo voy a dejar para los tutoriales...porque si, planeo hacer tutoriales de Cypress en el Patreon!

En el próximo video del canal voy a mostrarles el proyecto que me monté, junto al workflow muy sencillo para tener CI con GitHub, de una manera muy similar a como hice con TestCafe. Porque si, son herramientas muy parecidas, competencia entre ellas, pero me da la sensación de que Cypress está más difundido. En mi opinión personal, ambas tienen cosas buenas y malas, pero lo que me dio Cypress hasta ahora me convenció un poquito apenita más.

Dicho todo esto, que lo terminé de escribir varios días después del primer párrafo, debo concluir en que Cypress se siente, huele y ve como el futuro en Automation. Como les contaba en algún video o post, hay dos tendencias muy interesantes que voy a desarrollar más en otro post o video: La de las herramientas codeless que apuntan al tester funcional y les da las herramientas para que creen automatizaciones sin código, y por otro lado las herramientas muy enfocadas en el código para también testing pero que apuntan al público dev que hace testing.

Bienvenido Cypress, bienvenido al bunker de Automation de The Free Range Tester...intuyo que seremos grandes amigos!




Publicar un comentario

2 Comentarios

  1. Do you prefer cypress to testcafe? I've been trying to find the differences besides testcafe already supporting all types of browsers and maybe cypress not supporting multiply tabs it's hard to see which one to keep learning in as which is going to be more widely used. Also they look to be mostly more for ui testing where as I wonder why katalon wouldn't be preferred as it can do api and ui testing.. Like to hear your thoughts.

    ResponderBorrar
  2. Hi Jo! Well, you can actually do API Testing with Cypress as well! Right now, I would say it depends on what the scope of the test. If it is a big app, with complex scenarios, I would recommend Java. Java with Rest Assured for API, Java with Selenium for UI.

    If the application can be tested only with Cypress or TestCafe, my recommendation would be to use either. Specially because of how easy is the setup and to get everybody on board.

    ResponderBorrar