Pruebas con Pytest¶
Instalación/Actualización de pip¶
Antes de realizar, nada, vamos a actualizar la herramienta que nos va a permitir instalar los comandos que necesitamos. Como no viene por defecto, hay que instalarlo. Antes de instalarlo, actualizamos pip.
pip es un sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python. Muchos paquetes pueden ser encontrados en el Python Package Index (PyPI). Python 2.7.9 y posteriores (en la serie Python2), Python 3.4 y posteriores incluyen pip (pip3 para Python3) por defecto.
El comando para actualizar pip
Crear un entorno virtual¶
Las aplicaciones en Python usualmente hacen uso de paquetes y módulos que no forman parte de la librería estándar. Las aplicaciones a veces necesitan una versión específica de una librería, debido a que dicha aplicación requiere que un bug particular haya sido solucionado o bien la aplicación ha sido escrita usando una versión obsoleta de la interfaz de la librería.
Esto significa que tal vez no sea posible para una instalación de Python cumplir los requerimientos de todas las aplicaciones. Si la aplicación A necesita la versión 1.0 de un módulo particular y la aplicación B necesita la versión 2.0, entonces los requerimientos entran en conflicto e instalar la versión 1.0 o 2.0 dejará una de las aplicaciones sin funcionar.
La solución a este problema es crear un entorno virtual, un directorio que contiene una instalación de Python de una versión en particular, además de unos cuantos paquetes adicionales.
Virtualenv es una herramienta usada para crear un entorno Python aislado. Este entorno tiene sus propios directorios de instalación que no comparten bibliotecas con otros entornos virtualenv o las bibliotecas instaladas globalmente en el servidor. Virtualenv es la manera más fácil recomendada para configurar un ambiente personalizado Python.
A contiuación instalamos el modulo virtualenv, haciendo uso de pip.
Una vez instalado el modulo, podemos usarlo para crear un entorno llamado prog1
La creación del entorno, creará una carpeta con el mismo nombre: ./prog1
Una vez creado, pasamos a activar el entorno recien creado: prog1
Elminando la carpeta eliminaremos el entorno.
Una vez tenemos activo el entorno, podemos listar los módulos que tenemos disponibles en el entorno que hemos creado y activado:
Adicionalmente, si en un momento determinado necesitamos recoger los modulos instalados, podemos captura los requerimientos a un archivo.
Y posteriormente, reinstalar esos mismos modulos:
La estructura creada en el nuevo entorno, tiene por defecto los directorios bin
(ejecutables) y lib
(paquetes instalados).
Crearemos los directorios src para almacenar el codigo fuente y test para almacenar los tests. Ademas, crearemos un archivo __init__.py
vacío en cada uno de estos dos directorios.
El archivo init.py es utilizado para inicializar paquetes de Python, es decir, le indica al intérprete de Python que el directorio package contiene un módulo, y que debe tratarlo como tal (es decir, hacer que sea posible importar los archivos como parte del módulo). En general no es necesario poner nada en el archivo
__init__.py
, pero es muy común usarlo para realizar configuraciones e importar cualquier objeto necesario de nuestra librería.
Pruebas con pytest¶
Pytest es un marco de pruebas en Python que se utiliza para escribir y ejecutar pruebas de manera sencilla y eficiente. Proporciona una forma fácil de definir casos de prueba y realizar aserciones sobre el comportamiento esperado de las funciones o módulos que se están probando.
Para realizar un test sencillo con pytest, sigue los siguientes pasos:
-
Asegúrate de tener pytest instalado en tu entorno virtual. Puedes instalarlo utilizando el siguiente comando. Despues de instalar pytest, si listamos de nuevo los módulos del entorno, veremos que los modulos instalados se habŕan incrementado.
-
Suponiendo que tienes una función llamada suma en el archivo
main.py
en el directorio src de tu proyecto. Aquí tienes un ejemplo de una funciónsuma
en Python, que toma dos argumentosa
yb
y devuelve la suma de los dos números. -
Crea un archivo de prueba en el directorio "test" de tu proyecto. Por ejemplo, podrías llamarlo
test_suma.py
. -
En este archivo de prueba, importa pytest y la función que deseas probar desde tu código fuente. Por ejemplo, podrías importar la función
suma
desde el módulomain
en el directoriosrc
. -
Define una función de prueba utilizando el decorador
@pytest.mark.parametrize
. Esta función de pruebatest_suma_params
debe tomar los parámetros de entrada que deseas probar y el resultado esperado. Por ejemplo:@pytest.mark.parametrize( "input_x, input_y, expected", [ (0, 0, 0), (-1, 1, 0), (5, 5, 10) ] ) def test_suma_params(input_x, input_y, expected): assert suma(input_x, input_y) == expected
En este ejemplo, estamos probando la función "suma" con diferentes valores de entrada y comprobando si el resultado es igual al valor esperado.
-
Desde el directorio base de tu proyecto, ejecuta los tests utilizando el siguiente comando en la terminal:
Esto ejecutará todos los archivos de prueba con el prefijo "test_" en el nombre y mostrará los resultados de las pruebas.