4

Apuntes del curso

¿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
https://i.imgur.com/RqMfzjp.jpg
  • 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
https://i.imgur.com/Vn1vtkq.jpg
  • 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
https://i.imgur.com/kJu83rv.jpg
https://i.imgur.com/ve1QRQ6.jpg
https://i.imgur.com/M0y2tw8.jpg
https://i.imgur.com/cdplpwc.jpg

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
https://i.imgur.com/Eznk262.jpg

Automatización de pruebas en CI/CD

Tenemos que construir y entregar valor constante mente.
Ejempos:

https://i.imgur.com/3LS3ggP.jpg
https://i.imgur.com/VySRxPg.jpg

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
Escribe tu comentario
+ 2