9.3. Pruebas de integración

Son fundamentales para asegurar que diferentes módulos o componentes de un sistema funcionen correctamente cuando se combinan. A diferencia de las pruebas unitarias, que verifican el funcionamiento de componentes individuales, las pruebas de integración se centran en la interacción entre esos componentes.

Estas ayudan a identificar problemas en las interfaces entre módulos y aseguran que el sistema completo opere como se espera. Son esenciales en entornos de desarrollo ágiles y en aplicaciones grandes y complejas, donde la integración de servicios, bases de datos y APIs externas debe funcionar sin problemas para garantizar un rendimiento adecuado y una experiencia de usuario sin fallos.

Además verifican la interacción entre diferentes módulos o componentes de un software. Su objetivo es garantizar que las unidades individuales de código trabajen correctamente cuando se combinan, previniendo fallos en la comunicación entre ellas.

9.3.1. Importancia

Estas permiten identificar errores que pueden surgir cuando diferentes módulos trabajan juntos. Son esenciales para garantizar la estabilidad del software y evitar problemas en etapas avanzadas del desarrollo.

9.3.2. Tipos

  • Big Bang: Se prueban todos los módulos en conjunto después del desarrollo.

  • Top-Down: Se prueban los módulos superiores primero, integrando gradualmente los módulos inferiores.

  • Bottom-Up: Se prueban primero los módulos más básicos, integrando progresivamente los módulos superiores.

  • Sandwich: Combinación de los enfoques de pruebas Top-Down y de pruebas Bottom-Up.


9.3.3. Instalación

El módulo unittest esta incluida en librería estándar de Python, puede probar la instalación existe, ejecutando el siguiente comando:

python3 -c "import unittest ; print(unittest.__package__)"

Si muestra el nombre del módulo unittest, tiene correctamente instalado el módulo. Con esto, ya tiene todo listo para continuar.


9.3.4. Práctica - Caso real

A continuación se presenta una práctica más real de implementar el uso de proyectos con unittest, a continuación la estructura de proyecto llamado integracion:

9.3.4.1. Estructura de archivos

Para crear la estructura de archivos del proyecto unittest debe ejecutar los siguientes comandos:

Crear y acceder al directorio integracion en un solo comando, ejecutando el siguiente comando:

mkdir -p ~/proyectos/pruebas/integracion && cd $_

El comando anterior crea la siguiente estructura de directorios:

proyectos/
└── pruebas/
    └── integracion/

Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.

A continuación se presenta y explica el uso de cada archivo para este proyecto:

Archivo instagram.py

Módulo de funciones para el componente API de Instagram.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
"""Instagram API component"""


def greetings():
    """The Instagram API greeting function

    Returns:
        str: The Instagram API greeting
    """
    return "Hi, from Instagram API"

Archivo whatsapp.py

Módulo de funciones para el componente API de WhatsApp.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
"""WhatsApp API component"""


def greetings():
    """The WhatsApp API greeting function

    Returns:
        str: The WhatsApp API greeting
    """
    return "Hello, from WhatsApp API"

Archivo installation.py

Módulo de integración de componentes de redes sociales.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Social networks components integration"""

import instagram
import whatsapp


def sent_message(fun):
    """Sent message for every social networks components

    Args:
        fun (funt): The social network greeting function

    Returns:
        str: The social network greeting
    """
    return fun


def instagram_integration():
    """Sent message to Instagram component"""
    return sent_message(instagram.greetings())


def whatsapp_integration():
    """Sent message to WhatsApp component"""
    return sent_message(whatsapp.greetings())


if __name__ == "__main__":
    print(f"📜 The Instagram message is: '{instagram_integration()}'.")
    print(f"📜 The Whatapp message is: '{whatsapp_integration()}'.")

Archivo test_installation.py

Módulo de pruebas unitarias para la integración de componentes de redes sociales.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
"""Unitest for the social networks components integration"""

import unittest
from installation import instagram_integration, whatsapp_integration


class InstallationTest(unittest.TestCase):
    def test_instagram_integration(self):
        result = instagram_integration()
        self.assertEqual(result, "Hi, from Instagram API")

    def test_not_instagram_integration(self):
        result = instagram_integration()
        self.assertNotEqual(result, "Hello, from Instagram API")

    def test_whatsapp_integration(self):
        result = whatsapp_integration()
        self.assertEqual(result, "Hello, from WhatsApp API")

    def test_not_whatsapp_integration(self):
        result = whatsapp_integration()
        self.assertNotEqual(result, "Hi, from WhatsApp API")


if __name__ == "__main__":
    unittest.main()

Para ejecutar el código del proyecto llamado integracion abra una consola de comando, cree la siguiente estructura de directorio y acceda al mismo donde se encuentra el programa:

proyectos/
└── pruebas/
    └── integracion/
        ├── __init__.py
        ├── instagram.py
        ├── installation.py
        ├── test_installation.py
        └── whatsapp.py

Si tiene la estructura de archivo previa, entonces puede continuar los procesos de ejecución del código fuente.


Teniendo creada la anterior estructura de proyecto, vuelva a ejecutar ahora el módulo con el siguiente comando, el cual a continuación se presentan el correspondiente comando de tu sistema operativo:

Truco

Para ejecutar el código fuente de esta práctica debe invocar al módulo installation.py, abra una consola de comando, acceda al directorio donde se encuentra la estructura previa y ejecute el siguiente comando:

python3 installation.py

El anterior código al ejecutar debe mostrar el siguiente mensaje:

📜 The Instagram message is: 'Hi, from Instagram API'.
📜 The Whatapp message is: 'Hello, from WhatsApp API'.

Este es el funcionamiento normal del módulo installation.py. Por defecto, la API de Instagram siempre devolvera el valor Hi, from Instagram API y la API de WhatsApp siempre devolvera el valor Hello, from WhatsApp API.

Este código evalúa la integración entre la función sent_message() en el módulo installation.py y la función greetings() en cada módulo como instagram.py y whatsapp.py, verificando que funcionen correctamente juntas.

Truco

Para ejecutar el código fuente de esta práctica debe invocar al módulo test_installation.py, abra una consola de comando, acceda al directorio donde se encuentra la estructura previa y ejecute el siguiente comando:

python3 test_installation.py

El anterior código al ejecutar debe mostrar el siguiente mensaje:

..
----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK

Si la ejecución anterior muestra el mensaje anterior, quiere decir que la prueba unitaria fue exitosa.

Así de esta forma puede replicar una práctica real de un proyecto para realizar pruebas de integración usando unittest para el módulo installation.py, aplicando buenas prácticas de código funcional.

Importante

Usted puede descargar el código usado en esta sección haciendo clic en los siguientes enlaces:

Las pruebas de integración son una parte crucial del desarrollo de software. Implementarlas correctamente ayuda a garantizar que los módulos trabajen juntos sin problemas, reduciendo errores en la etapa de producción.


Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.


¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. UTM - Madrid, España.

La hora aquí es actualmente 7:35 PM UTM.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional