No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Cómo organizar y ejecutar pruebas en Python con UnitTest

9/20
Recursos

Cuando estamos desarrollando en Python, ejecutar todas las pruebas desde la terminal es común en entornos de desarrollo. Sin embargo, en producción o integración continua, este enfoque puede no ser ideal, especialmente cuando solo queremos ejecutar pruebas específicas o tener un mejor control sobre cómo organizamos y ejecutamos estas pruebas. Python y su módulo Unit Test nos ofrecen herramientas como las suites de pruebas para modularizar y seleccionar qué pruebas ejecutar.

¿Cómo ejecutar pruebas específicas en Python?

Para ejecutar pruebas específicas, podemos usar el comando discover del subcomando Unit Test. Este comando busca automáticamente todas las pruebas dentro de una carpeta y las agrupa en una suite. Sin embargo, este enfoque no es siempre ideal para entornos locales, donde podríamos querer ejecutar solo ciertas pruebas.

¿Qué son las suites de pruebas?

Una suite de pruebas es un grupo de pruebas que podemos ejecutar juntas. En proyectos pequeños, generalmente tenemos una sola suite, pero a medida que crece el proyecto, modularizar las pruebas por categorías o características es recomendable. Por ejemplo, podríamos tener una suite para pruebas de calculadora y otra para pruebas de banco.

¿Cómo crear y ejecutar una suite de pruebas manualmente?

  1. Crear una suite manualmente:

    • Creamos un archivo nuevo, por ejemplo, test_suites.py.
    • Importamos UnitTest y definimos una suite con suite = unittest.TestSuite().
    • Agregamos pruebas a la suite usando suite.addTest().
  2. Agregar pruebas específicas:

    • Podemos importar pruebas existentes y añadirlas a la suite. Por ejemplo, si ya tenemos una prueba llamada test_deposit, podemos agregarla a la suite con suite.addTest(bankAccountTests('test_deposit')).
  3. Ejecutar las suites con un runner:

    • Para ejecutar una suite, necesitamos un runner. Python ofrece varios tipos de runners. Un ejemplo sería el TextTestRunner, que se usa comúnmente en la terminal.
    • El código básico para ejecutar la suite sería:
      runner = unittest.TextTestRunner()
      runner.run(suite)
      

¿Cómo configurar Visual Studio Code para ejecutar pruebas?

Visual Studio Code facilita la ejecución de pruebas con su interfaz gráfica. Podemos configurar un runner y seleccionar qué pruebas ejecutar directamente desde el editor.

  1. Configurar las pruebas en Visual Studio Code:

    • En la configuración, seleccionamos Unit Test como el framework de pruebas y especificamos la carpeta donde se encuentran las pruebas.
    • Visual Studio Code lista automáticamente las pruebas, permitiéndonos ejecutarlas con un solo clic.
  2. Ejecutar pruebas individuales:

    • Al hacer clic en una prueba específica, podemos ver su resultado inmediatamente, ya sea que la prueba haya pasado, fallado o se haya omitido.

¿Cómo solucionar errores comunes al ejecutar pruebas?

Durante la ejecución de las pruebas, es común encontrarse con errores como “módulo no encontrado”. Estos errores se pueden solucionar asegurándonos de que las carpetas contienen archivos __init__.py y configurando correctamente el PYTHONPATH para que Python encuentre todos los módulos necesarios.

¿Cómo ejecutar pruebas desde la terminal?

Podemos ejecutar una prueba específica directamente desde la terminal usando la siguiente estructura de comando:

python -m unittest test_calculator.CalculatorTest.test_sum

Esto ejecuta únicamente la prueba test_sum de la clase CalculatorTest.

Aportes 8

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Por si no les funciona. La solucion esque tengan instalado el paquete de testing de pytest en su proyecto. PASO 1: Asegurarse que estan dentro del entorno virtual de su proyecto. `.\env\Scripts\activate` PASO 2: Proceden a instalar Pytest. `pip install pytest` Y listo con eso les funcionara.
Para windows: cmd /c "set PYTHONPATH=. && python tests/test\_suites.py"
Estuve revisando para el error con src y encontré esta alternativa que me funcionó. Antes del import del src, se agregan las lineas resaltadas en cada módulo de test, por ejemplo: ![]()![](https://static.platzi.com/media/user_upload/opcion_src-31537e1e-4698-4c4f-a67e-d6889e5fe9e9.jpg)
Por si acaso, VSC no me deja correr los test de forma automatica ya que tomaba a pytest por defecto, además no me dejaba cambiar "python.testing.unittestEnabled": de falso a verdadero. Para resolverlo cree una carpeta dentro del proyecto y la nombre .vscode en ese mismo directorio cree una archivo setting.json y pones la configuración del ejecutador, en este caso es "python.testing.unittestEnabled": true. Al final funcionó. ```js { "python.testing.unittestArgs": [ "-v", "-s", "./tests", "-p", "test_*.py" ], "python.testing.unittestEnabled": true, "python.testing.pytestEnabled": false } ```{ "python.testing.unittestArgs": \[ "-v", "-s", "./tests", "-p", "test\_\*.py" ], "python.testing.unittestEnabled": true, "python.testing.pytestEnabled": false}
Para los que trabajan con windows ` $env:PYTHONPATH = "."; python .\test\test_suits.py `
Esto tambien se puede hacer en PyCharm Professional ![](https://static.platzi.com/media/user_upload/image-1de87434-068c-47cc-b1c6-94f353fea8b9.jpg)
En `pytest `se puede etiquetar pruebas individuales con un marcador usando el decorador `@pytest.mark.nombre_marcador;` y luego ejecutar todas las pruebas que tienen ese marcador. ```python import pytest @pytest.mark.mi_suite def test_addition(): result = 1 + 1 assert result == 2 # Verifica que el resultado sea 2 @pytest.mark.mi_suite def test_list(): my_list = [1, 2, 3] assert 2 in my_list # Verifica que 2 esté en la lista assert 4 not in my_list # Verifica que 4 no esté en la lista ```
Para que funcione el PYTHONPATH en powershell se usa `$env:PYTHONPATH = "."; python tests/test_suites.py` y se debe usar ``return suite`` ```python import unittest from test_bank_account import BankAccountTests def bank_account_suite():    suite = unittest.TestSuite()    suite.addTest(BankAccountTests("test_deposit"))    suite.addTest(BankAccountTests("test_withdraw"))    return suite if __name__ == "__main__":    runner = unittest.TextTestRunner()    runner.run(bank_account_suite()) ```