Solo quería agregar y dar más contexto sobre por qué tenemos estos niveles de prueba, qué significan realmente con ejemplos
A Mike Cohn en su libro "Triunfar con Agile" se le ocurrió la "Pirámide de prueba" como una forma de abordar las pruebas automatizadas en los proyectos. Hay varias interpretaciones de este modelo. El modelo explica qué tipo de pruebas automatizadas deben crearse, qué tan rápido pueden dar retroalimentación sobre la aplicación bajo prueba y quién escribe estas pruebas. Básicamente, se necesitan 3 niveles de pruebas automáticas para cualquier proyecto y son los siguientes.
Pruebas unitarias:
prueban el componente más pequeño de su aplicación de software. Esto podría ser literalmente una función en un código que calcula un valor basado en algunas entradas. Esta función es parte de varias otras funciones de la base de código de hardware / software que conforma la aplicación.
Por ejemplo: tomemos una aplicación de calculadora basada en la web. Los componentes más pequeños de esta aplicación que necesitan ser probados en unidades podrían ser una función que realiza la suma, otra que realiza la resta y así sucesivamente. Todas estas pequeñas funciones juntas forman la aplicación de la calculadora.
Históricamente, el desarrollador escribe estas pruebas ya que generalmente están escritas en el mismo lenguaje de programación que la aplicación de software. Para este propósito se utilizan marcos de prueba de unidad como JUnit y NUnit (para java), MSTest (para C # y .NET) y Jasmine / Mocha (para JavaScript).
La mayor ventaja de las pruebas unitarias es que se ejecutan muy rápido debajo de la interfaz de usuario y podemos obtener comentarios rápidos sobre la aplicación. Esto debería abarcar más del 50% de sus pruebas automatizadas.
API / Pruebas de integración: prueban juntos
varios componentes del sistema de software. Los componentes pueden incluir bases de datos de prueba, API (interfaz de programación de aplicaciones), herramientas y servicios de terceros junto con la aplicación.
Por ejemplo: en nuestro ejemplo de calculadora anterior, la aplicación web puede usar una base de datos para almacenar valores, usar API para hacer algunas validaciones del lado del servidor y puede usar una herramienta / servicio de terceros para publicar resultados en la nube para que esté disponible en diferentes plataformas.
Históricamente, un desarrollador o un QA técnico escribirían estas pruebas usando varias herramientas como Postman, SoapUI, JMeter y otras herramientas como Testim.
Estos se ejecutan mucho más rápido que las pruebas de IU, ya que todavía se ejecutan debajo del capó, pero pueden consumir un poco más de tiempo que las pruebas unitarias, ya que tiene que verificar la comunicación entre varios componentes independientes del sistema y garantizar que tengan una integración perfecta. Esto debería comprender más del 30% de las pruebas automatizadas.
Pruebas de IU:
finalmente, tenemos pruebas que validan la IU de la aplicación. Estas pruebas generalmente se escriben para probar flujos de extremo a extremo a través de la aplicación.
Por ejemplo: en la aplicación de la calculadora, un flujo de extremo a extremo podría ser, abrir el navegador-> Ingresar la URL de la aplicación de la calculadora -> Iniciar sesión con nombre de usuario / contraseña -> Abrir la aplicación de la calculadora -> Realizar algunas operaciones en la calculadora -> verificar esos resultados desde la interfaz de usuario -> Cerrar sesión en la aplicación. Este podría ser un flujo de extremo a extremo que sería un buen candidato para la automatización de la interfaz de usuario.
Históricamente, los QA técnicos o los probadores manuales escriben pruebas de IU. Utilizan marcos de código abierto como Selenium o plataformas de prueba de IU como Testim para crear, ejecutar y mantener las pruebas. Estas pruebas brindan más comentarios visuales, ya que puede ver cómo se ejecutan las pruebas, la diferencia entre los resultados esperados y reales a través de capturas de pantalla, registros e informes de pruebas.
La mayor limitación de las pruebas de IU es que son relativamente lentas en comparación con las pruebas de nivel de Unidad y API. Por lo tanto, debe comprender solo el 10-20% de las pruebas automatizadas generales.
Los siguientes dos tipos de pruebas pueden variar según su proyecto, pero la idea es:
Pruebas de humo
Esto puede ser una combinación de los 3 niveles de prueba anteriores. La idea es ejecutarlo durante cada registro de código y garantizar que las funcionalidades críticas del sistema sigan funcionando como se esperaba; después de que se fusionen los nuevos cambios de código. Por lo general, deben ejecutarse con 5 a 10 minutos para obtener comentarios más rápidos sobre fallas
Pruebas de regresión
Por lo general, se ejecutan al menos una vez al día y cubren diversas funcionalidades del sistema. Se aseguran de que la aplicación siga funcionando como se esperaba. Son más detalles que las pruebas de humo y cubren más escenarios de la aplicación, incluidos los no críticos.