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