Otras herramientas de testing y automatización
Clase 3 de 24 • Curso de Introducción a Selenium con Python
Contenido del curso
Clase 3 de 24 • Curso de Introducción a Selenium con Python
Contenido del curso
David Daza
Héctor Daniel Vega Quiñones
David Daza
Cristian Adrian Ayala
Fredy Mendoza Vargas
Eduardo Sebastián Sandoval Jiménez
Marieth Astrid Castro Becerra
Miguel Andres Rendon Reyes
Usuario anónimo
Cristian David Restrepo Marin
DANIEL STEVEN SARMIENTO CUERVO
Héctor Daniel Vega Quiñones
Mauricio Gonzalez Falcon
Ninja Code
Rubens Gomez
Héctor Daniel Vega Quiñones
Gerardo Alberto Soto Alvarez del Castillo
Elvis Rafael Perez Gutierrez
John Torres
Héctor Daniel Vega Quiñones
Julio César Zaravia Paredes
Miguel Angel Reyes Moreno
Brandon Gutierrez
LEONARD CUENCA
Georgina Paulina Cuadriello Ramírez
Claudio Jesus Vázquez Villanueva
Luis Lira
Moises Abel Avila Garcia
Gabriel Valdez
Tomas Dale
Juan Carlos Ortiz Romero
Juan Carlos Ortiz Romero
Muy buena clase, Héctor. Aunque me gustaría anotar que técnicamente puppeteer se puede utilizar con Firefox Nightly. No lo digo yo, lo dice el README
Esta es una gran observación, David :D Generalmente las versiones de desarrollo de un navegador pueden incluir funciones beta que pueden interferir con algunas automatizaciones, por ello recomiendo utilizar versiones estables.
Sí, ¡totalmente de acuerdo contigo! por eso el énfasis en "técnicamente" 😅. Saludos.
Algunas herramientas de testing y automatización:
Puppeteer:
• PROS: Soporte por parte de Google, te brinda datos del Performance Analysis de Chrome y un mayor control de este navegador. No requiere archivos externos como lo hace Selenium con WebDriver.
• CONTRAS: Solo funciona para Google Chrome con JavaScript, tiene una comunidad pequeña así que el apoyo será poco.
Cypress.io:
• PROS: Tiene una comunidad emergente y va creciendo a pasos acelerados, tiene muy buena documentación para implementar Cypress en los proyectos. Es muy ágil en pruebas E2E, está orientado a desarrolladores y tiene un excelente manejo del asincronismo, logrando que las esperas sean dinámicas y también se puedan manejar fácilmente.
• CONTRAS: Solo funciona en Google Chrome con JavaScript, se pueden realizar pruebas en paralelo únicamente en la versión de pago.
Gracias compañero
Gracias por el aporte!!!
Les recomiendo mucho testcafe (https://devexpress.github.io/testcafe/documentation/getting-started/). Excelente documentación, test cross browser, pruebas en paralelo super sencillas de ejecutar, muy fácil generar screenshots y vídeos de la ejecución de las pruebas, maneja el asincronismo(no tan sencillo como en cypress) pero si sabes javascript se hace sencillo, la curva de aprendizaje es baja
Tiene alguna ventaja ante selenium?
Me motiva mucho el ánimo que le pone el profe en las clases. :)
X2
por no hay comentarios? jajaja
El curso ha sido lanzado hoy mismo ;)
fuiste el primer comentario jaja
Hola Héctor me gustaría anotar que ahora cypress ofrece más browsers donde testear.
Edge, Electron, Firefox entre otros, saludos.
toda la razón la comunidad de selenium es pequeña , nose si se deba que a la mayoria de desarrollladores no le gusta usar como testing y esta herramienta es mas usada por Devop o area Q.A.
Ciertamente aunque el uso de Selenium es general, la comunidad lo ha enfocado bastante a ciertas áreas. Que a diferencia de otras herramientas como Cypress, no está orientada a desarrolladores netamente.
Factores a tomar encenta para escoger una herramienta de automatización:
-Lenguaje con el que estas más familiarizado. -Que lenguaje de programación ocupa el equipo de trabajo. -Sí el proyecto necesita llamadas de a sincronismo, o no. -O solo hacer una automatización de una tarea repetitiva.
Excelente explicación, pero cypress.io es limitado para las pruebas E2E, solo sirve para E2E del mismo navegador (chrome)
Hola me gustaría saber cuál herramienta o programa podría utilizar para realizar pruebas automáticas enfocadas a solo datos, ejemplo validación de resultados esperados cuando 2 + 2 sea 4, estos resultados pueden estar en multiples archivos de Excel. Gracias...
Puedes utilizar Python para leer tus hojas de cálculo a manera de CSV y hacer estas validaciones mediante assertions :)
¡Hola comunidad! Siempre que me topo con cosas como "Herramienta X lo hace de esta manera" y "Herramienta Y lo hace de esta otra manera" me digo a mi mismo ¿Quién soy yo para decir cuál es mejor? 😄 . Es por eso que siempre me gusta buscar comparativas para revisar análisis similares a los que ha hecho el profesor Hector, por el momento he podido encontrar las siguientes: . Esta comparativa tiene puntos muy importantes y algunos como para seguir investigando. Lamentablemente solo cubre Puppeteer vs Cypress. . Y, esta otra, es un análisis un poco más extenso, pero lo que me gustó fue el trablero que incluye donde uno puede establecer "pesos" o prioridades a las características de cada herramienta de tal manera que ve el resultado en base al uso que vaya a hacer. . Espero les sirva la comparativa. . ¡Saludos!
Ninguna es mejor que la otra, todo depende de tus necesidades y condiciones.
Otras herramientas de testing y automatización
Puppeteer Pros 1-Soporte de parte de Google 2-Datos del performance analysis de Chrome 3-Mayor control de Chrome 4-No requiere de drivers externos
Contras 1-Funciona solo en Chrome y con JavaScript 2-Comunidad pequeña
Cypressio Pros 1-Comunidad emergente 2-Buena documentación con ejemplos 3-Bastante ágil en pruebas E2E 4-Orientado a desarrolladores 5-Excelente manejo de asincronismo
Contras 1-Funciona solo en Chrome y con JavaScript 2-Pruebas en paralelo solo en versión de pago
## Clase 03: 🛠️ Otras herramientas de testing y automatización
## Puppeteer
**Puppeteer** es una librería de Node.js que proporciona una API de alto nivel para controlar Chrome o Chromium a través del Protocolo DevTools. Es excelente para automatización centrada en Chrome/Chromium.
| Pros (Ventajas) | Contras (Desventajas) |
| :--- | :--- |
| **Integración con Chrome/Chromium:** Ofrece un control profundo y eficiente al estar desarrollado por Google. | **Soporte limitado de navegadores:** Se centra principalmente en Chrome y Chromium (soporte experimental o limitado para otros). |
| **Rendimiento y Velocidad:** Suele ser muy rápido y estable en el entorno Chrome. | **Solo soporta JavaScript/Node.js:** Los *scripts* de automatización deben escribirse en JavaScript o TypeScript. |
| **API Sencilla y Clara:** Su curva de aprendizaje es relativamente baja para desarrolladores familiarizados con Node.js. | **No es ideal para *cross-browser testing*:** La limitación de navegadores lo hace inadecuado para la cobertura total de navegadores. |
| **Casos de Uso Adicionales:** Ideal para *web scraping*, generación de PDFs y capturas de pantalla de páginas web. | **Requiere Node.js:** Es un requisito fundamental para su uso. |
***
## Cypress.io
**Cypress.io** es un *framework* de *front-end testing* que se ejecuta directamente en el navegador, en el mismo *loop* de ejecución que tu aplicación. Se enfoca en una experiencia de desarrollo y *debugging* superior.
| Pros (Ventajas) | Contras (Desventajas) |
| :--- | :--- |
| **Experiencia del Desarrollador (DX):** Fácil de configurar e instalar, con una API muy intuitiva. | **Soporte de Navegadores Limitado:** Aunque ha mejorado, tradicionalmente su soporte ha sido más limitado (principalmente Chrome, Edge, Firefox, Electron). |
| **Ejecución y *Debugging* Rápido:** Ejecuta pruebas directamente en el navegador, lo que permite depurar en tiempo real con sus DevTools. | **Solo soporta JavaScript/TypeScript:** Las pruebas deben escribirse en estos lenguajes. |
| **Auto-esperas (Automatic Waiting):** Maneja automáticamente elementos asíncronos y esperas, reduciendo la inestabilidad (*flakiness*) de las pruebas. | **No soporta múltiples pestañas/ventanas:** No puede interactuar con múltiples pestañas o navegadores simultáneamente (limitación arquitectónica). |
| **Capturas y Videos Integrados:** Genera capturas de pantalla y videos automáticamente al fallar las pruebas. | **No soporta automatización de aplicaciones móviles nativas.** |
***
## Selenium
**Selenium** (principalmente Selenium WebDriver) es un conjunto de herramientas de código abierto ampliamente reconocido para la automatización de navegadores.
| Pros (Ventajas) | Contras (Desventajas) |
| :--- | :--- |
| **Amplio Soporte de Navegadores:** Compatible con todos los principales navegadores (*cross-browser testing* exhaustivo). | **Curva de Aprendizaje Elevada:** Su configuración inicial es más compleja y requiere gestionar *drivers* y *bindings* de lenguaje. |
| **Soporte Multi-Lenguaje:** Permite escribir *scripts* en varios lenguajes (Java, Python, C#, JavaScript, Ruby, etc.). | **Necesidad de Herramientas Externas:** Carece de características integradas como informes, auto-esperas robustas o un *test runner* (*frameworks* de terceros son necesarios). |
| **Comunidad Grande y Activa:** Cuenta con una de las comunidades más grandes, lo que significa mucha documentación y soporte. | **Ejecución Lenta (relativa):** Al usar el protocolo **WebDriver**, la comunicación externa entre el *script* y el navegador puede ser más lenta. |
| **Escalabilidad (Selenium Grid):** Permite ejecutar pruebas en paralelo en múltiples máquinas y entornos simultáneamente. | **Mantenimiento Alto:** Las pruebas pueden ser frágiles y requieren más mantenimiento debido a la dependencia de selectores. |
---
**¿Qué es Flakiness?**
En el contexto de la automatización y el *testing* de *software*, el término **Flakiness** (inestabilidad o fragilidad de las pruebas) se refiere a la propiedad de una prueba automatizada de producir **resultados inconsistentes** (a veces pasa, a veces falla) **sin que haya habido ningún cambio en el código fuente** de la aplicación ni en el código de la prueba.
Una prueba que pasa el lunes y falla el martes (o en la siguiente ejecución) sin una causa clara y reproducible, se considera una **"Flaky Test"** (prueba inestable).
### Consecuencias del Flakiness:
* **Pérdida de Confianza:** El equipo deja de confiar en la *suite* de pruebas, ignorando las fallas porque "probablemente sea solo una prueba inestable".
* **Ralentización del CI/CD:** Interrumpe el flujo de Integración y Entrega Continua, ya que se requiere re-ejecutar las pruebas fallidas varias veces.
* **Pérdida de Tiempo:** Los desarrolladores y *testers* gastan tiempo valioso investigando fallas que no son *bugs* reales.
### Causas Comunes del Flakiness:
1. **Problemas de Tiempo (Timing Issues):** El más común. La prueba intenta interactuar con un elemento o verificar un resultado antes de que la aplicación haya completado la operación asíncrona (como una llamada a una API, una animación o la carga del DOM).
2. **Condiciones de Carrera (*Race Conditions*):** Cuando las pruebas se ejecutan en paralelo y compiten por un recurso compartido (ej. una entrada en la base de datos).
3. **Dependencia del Orden de Ejecución:** Una prueba depende del estado o los datos que dejó una prueba anterior (lo que viola el principio de aislamiento).
4. **Inestabilidad del Entorno:** Factores externos como latencia de red variable, lentitud del servidor de pruebas o entornos de prueba inconsistentes.
---
| Concepto Relacionado | Descripción | Relación con Flakiness |
| :--- | :--- | :--- |
| **Non-Deterministic Test** (*Prueba No Determinista*) | Es el nombre técnico para una **Flaky Test**. Se refiere a que la prueba no siempre produce el mismo resultado para el mismo código. | **Es la definición técnica de *Flakiness*.** |
| **Fragile Test** (*Prueba Frágil*) | Una prueba que falla ante cambios menores en la aplicación que no deberían afectar la funcionalidad (*ej. un pequeño cambio en el CSS*). | Es una causa común de *Flakiness*. Una prueba frágil a menudo se convierte en una *Flaky Test* cuando el entorno es inestable. |
| **Brittle Test** (*Prueba Quebradiza*) | Similar a Frágil. Una prueba que es difícil de mantener y que requiere constantes ajustes de código (ej. por usar selectores de UI muy específicos). | Su alto coste de mantenimiento y la facilidad con la que se rompe la hacen propensa a ser inestable. |
| **Slow Test** (*Prueba Lenta*) | Una prueba que tarda mucho tiempo en ejecutarse, generalmente debido a una alta complejidad, esperas fijas (*sleeps*) o interacciones excesivas. | No es Flaky, pero a menudo se vuelve Flaky. Las pruebas lentas amplifican los problemas de *timing* e inestabilidad del entorno, y son candidatas a ser deshabilitadas si se vuelven inestables. |
| **Order-Dependent (OD) Flakiness** | Un tipo específico de Flakiness donde la prueba solo falla cuando se ejecuta justo antes o justo después de otra prueba en particular. | Es una **causa raíz específica de Flakiness**, generalmente debido a recursos o estados compartidos no limpiados correctamente. |
| **Greedy Test** (*Prueba Codiciosa*) | Una prueba que consume demasiados recursos del sistema (memoria, CPU, red), lo que puede afectar a otras pruebas que se ejecutan en paralelo. | Puede **inducir Flakiness** en otras pruebas al causar escasez de recursos y ralentización inesperada en el entorno de ejecución. |
En resumen, cuando una prueba no es **determinista** (el resultado varía) o es demasiado **frágil** (se rompe fácilmente), se está enfrentando al gran problema de la **Flakiness**.
A que te refieres con llamadas de asincronismo?
Esto.quiere decir.que puede.realizar.varias pruebas o tareas al mismo tiempo, sin necesidad de esperar respuesta para ejecutar otra.
Hola!
El asincronismo se refiere a que no hará todas las tareas al mismo, es decir que se harán varias tareas en paralelo o que aunque vayan de forma secuencial no debes esperar para poder seguir haciendo algo más.
Puedes leer un poco más sobre sincroniso y asincronismo en este artículo
muy buena clase hector
Buena comparativa, no sabia que existían otras alternativas, bueno. probare selenium y luego veré las otras
Me toco automatizar una web tool que solo corria en IE, y lo que use fue WaTIN fue como Espanol a Italiano ( Selenium - WaTIN)
Puppeteer: • PROS: Soporte por parte de Google, te brinda datos del Performance Analysis de Chrome y un mayor control de este navegador. No requiere archivos externos como lo hace Selenium con WebDriver. • CONTRAS: Solo funciona para Google Chrome con JavaScript, tiene una comunidad pequeña así que el apoyo será poco.
Tipos de pruebas: 🤖🤖🤖 Pruebas de aceptación. Este tipo de prueba se realiza para determinar si una funcionalidad o un sistema cumple con las expectativas y requerimientos del cliente. Pruebas funcionales. ... Pruebas de rendimiento. ... Pruebas de regresión. ... Desarrollo guiado por pruebas (TDD) ... Desarrollo guiado por comportamiento (BDD)