¿Qué es la automatización de pruebas?
la automatización de pruebas consiste en el uso de un framework para controlar la ejecución de pruebas y la comparación entre los resultados obtenidos y los resultados esperados
La importancia de la automatización de pruebas es disminuir el trabajo tanto tuyo como de otros y esto por defecto, ahorra recursos para las compañías.
Ventajas:
- Mejora la eficiencia de las pruebas
- Proporcionar una cobertura de pruebas más amplia
- Reducir el coste total de las pruebas (vas a poder reutilizar la automatización N veces)
- Acortar el periodo de ejecución de la prueba (al ser automático, será más rápido que lo que tardaría en hacerlo una persona)
- Aumenta la frecuencia de prueba / reducir el tiempo requerido para los ciclos de prueba
- Se pueden ejecutar más pruebas por compilación / liberación
- Posibilidad de crear pruebas que no se pueden realizar de forma manual (p.ej: pruebas paralelas)
- Las pruebas están menos sujetas a errores del operador
Desventajas:
- Costes adicionales (requiere un coste implementar una infraestructura para automatizar las pruebas)
- Más difícil debuggear
- Conocimiento de programación (requiere que tu equipo de QA tenga estos conocimientos y por eso se hará más complicado también debuggear)
- Mantenimiento continuo
- Requiere tecnologías adicionales
- Pruebas más complejas
- Puede distraer la atención de los objetivos de prueba
Limitaciones de la automatización de pruebas
- Two Factor Authentication
- reCAPTCHA (aunque se puede montar un entorno de pruebas deshabilitando reCAPTCHA)
- Correos (mucho coste o tener en cuenta demasiados factores a la hora de automatizar y quizá no vale la pena el riesgo)
- Pruebas en dispositivos móviles: Sensores (puede ser complejo emular o imitar un comportamiento similar)
- Sólo puedes verificar resultados interpretables por la máquina (Ejemplo: no puedes medir cuan feliz es el usuario usando tu app)
- NO va a reemplazar las pruebas exploratorias realizadas por un humano (no analiza los casos a automatizar etc)
- UX no se puede “medir” de tal forma que permita automatizarlo
Automatización basada en tipos de pruebas
Pruebas funcionales y no funcionales
- Funcionales: Nos permiten analizar los requisitos comerciales (lo que el cliente va a ver, etc)
- No funcionales: Nos permiten probar las cosas que son necesarias para que el cliente vea y tenga una experiencia agradable. (Rendimiento, seguridad, alacenamiento de datos … etc)
La automatización de pruebas nos permitirá automatizar ambos tipos de pruebas.
Tipos de pruebas (funcionales y no funcionales)
- Pruebas unitarias: pequeños bloques de tu software que puedes ir automatizando y probando una funcionalidad pequeña concreta. Son las más baratas y las hacen los mismos desarrolladores.
- Pruebas de integración: nos permite probar bloques en conjunto.
- Pruebas de humo: son pruebas que se corren después de una liberación o compilación para asegurar que nada se haya “incendiado” y que todo funciona correctamente.
- Pruebas de regresión: Nos va a servir para garantizar que todo sigue funcionando correctamente cuando incluimos nuevas funcionalidades.
- Pruebas de APIs: puedes automatizar pruebas a los endPoints de una API para garantizar que funciona como debe.
- Pruebas de seguridad: su propósito es identificar las vulnerabilidades de seguridad de un sistema (también conocidas como pruebas de Pentesting)
- Pruebas de rendimiento: son un tipo de pruebas no funcionales, por que nos permiten evaluar la estabilidad y aseguran que el software funcione adecuadamente.
- Pruebas de aceptación: Intentan determinar cual es el resultado esperado del cliente
- Pruebas de UI: Son las pruebas de interfaz y nos permiten garantizar que el proyecto interacture como debería. Se pueden hacer por bloques, por funcionalidad o pruebas end-to-end.
Todas pueden ser agrupadas en tres grupos:
- Pruebas unitarias ( como desarrollador )
- Pruebas de API ( desarrollador backend, test automation o QA)
- Pruebas de UI ( pruebas end-to-end )
Tipos de framework de automatización
- Capture/Playback
Reproduce lo que hayas hecho durante la prueba- Pros: Se puede usar para el SUT (System under test / sistema probado) a nivel de GUI (interfaz) /API, inicialmente fácil de configurar y usar.
- Contras: Difícil de mantener. Implementación hasta que el sistema este disponible
- Linear Scripting
Es parecido al anterior, pero puede ir por partes y se puede comentar a nivel de código (genera el codigo)- Pros: Se puede usar a nivel GUI o API y es facil de configurar
- Contras: Cantidad de esfuerzo (se hace por partes), difícil de mantener, costo de mantenimiento lineal

- Structured Scripting
Podemos reutilizar los scripts- Pros: Reducción de mantenimiento, reutilización de secuencia de comandos, costo de construcción y mantenimiento
- Contras: mayor esfuerzo inicial, habilidades de programación, administración.
- Module based
Basado en POO, cambios pueden ser por secciones- Pros: Modular, scalable y flexible (fácil mantenimiento)
- Contras: Sin flexibilidad en datos

-
Data Driven
Tenemos mas entradas de prueba (no hardcoded)- Pros: Costo, mayor cobertura, flexibilidad en ejecución
- Contras: Mas fuentes de datos, dominio de un lenguaje de programación
-
Keyword Driven
Parecido al data driven, pero tengo palabras que toman acciones basado en pasos- Pros: Flexibilidad en creación de las pruebas, reutilización de código, no requiere conocimientos de secuencias de comando
- Contras: complejidad de aprendizaje, incremento de dificultad con mas palabras clave
-
Hybrid
Hibrido entre data driven y keyword driven- Pros: Los de los dos anteriores
- Contras: Los de los dos anteriores
-
Behavior driven development
Impulsado por el comportamiento, usa palabras reservadas en un lenguaje llamado gherkin- Pros: mayor compatibilidad entre historias de usuario y test cases, claros resultados de pruebas, reutilización de código, data driven
- Contras: Mucho tiempo, tiempo de planificación, conocimiento de Gherkin o lenguaje similar




Proceso de automatización de pruebas
Ciclo de desarrollo de una aplicación automatizada
- Análisis
- Diseño
- Desarrollo
- Test
- Deploy
- Evolución
Ciclo de Test Automation
- El Análisis de la Automatización se basa en el Diseño del Sistema de Desarrollo
- El Test requiere del despliegue de la automatización Ciclo integrando Testing Manual
- El Análisis de la Automatización se basa en el Diseño del Sistema de Desarrollo y el Deploy de las Pruebas Manuales
- El Análisis de las Pruebas manuales se basa en el Diseño del Sistema de Desarrollo
- El Test del SD requiere del despliegue de la automatización y las pruebas Manuales

Automatización de pruebas en CI/CD
Tenemos que construir y entregar valor constante mente.
Ejempos:


Beneficios:
- Agilidad: desarrollo mas rápido y los bugs se encuentran mas rápido
- Costo menor: entrega de valor mas rápido, menos testers manuales
- Seguridad: mayor confianza a la hora de desplegar y no se introdujo un bug
- Productividad
Herramientas para automatización
- Unit testing
- Jest
- Mocha
- React/Vue testing library
- Enzyme
- API Testing
- Rest Assured (JAVA)
- Postman
- Insomnia
- Web Browser testing
- Selenium
- Puppeteer (Google)
- Playwright (solución de Microsoft)
- Testcafe
- Protactor (app de angular)
- Cypress
- Mobile testing
- Appium
- Detox (react native)
- Calabash
- TestProject
- Performance
- Jmeter (stress testing, performance)
- Gatling
Curso de Introducción a la Automatización de Pruebas