Skip to content

Python + Flask + Json Web Token + Test Unitarios (pytest) + Test de Aceptación (behave) + Test de Rendimiento (locust)

License

Notifications You must be signed in to change notification settings

byron-villegas/python-flask

Repository files navigation

Python Flask

Proyecto base para aplicaciones Flask con ejemplos de configuración, testing y buenas prácticas.

Tabla de Contenidos

Instalación

Instalar Python

Para instalar python debemos bajarlo e instalarlo de la siguiente pagina https://www.python.org/downloads/

Crear Entorno Virtual

Para crear el entorno virtual debemos ejecutar el siguiente comando

python3 -m venv .venv

Instalar Dependencias

Para instalar las dependencias debemos ejecutar el siguiente comando

pip install -r requirements.txt

Dependencias Exclusivas Windows

Cuando nos encontremos con una depencia exclusiva para windows debemos agregarle ;sys_platform == 'win32' al final de la version de la dependencia en el archivo requirements.txt

Ejemplo

pywin32==306;sys_platform == 'win32'

Entonces cuando instalemos las dependencias del proyecto en un sistema operativo como linux, macOS excluira esa libreria

Actualizar Dependencias

Para actualizar las dependencias en el archivo requeriments.txt debemos ejecutar el siguiente comando

pip freeze > requirements.txt

Crear Archivo Dependencias Formato JSON

Para crear el archivo de dependencias en formato JSON debemos ejecutar el siguiente comando

pip list --format json > requirements.json

Listar Dependencias Formato JSON

Se debe ejecutar el siguiente comando

pip list --format json

Variables de Entorno

Este proyecto utiliza dotenv por lo que podemos crear el archivo .env con las siguientes variables

SECRET_KEY=sasfdfsdsdf
JWT_SECRET_KEY=sasfdfssas

Estas variables son las llaves secretas que se obtienen por variable de entorno, internamente las usa flask por defecto

Ejecutar Aplicación

Se debe ejecutar el siguiente comando

flask --app app run

Docker

A continuacion dejo los comandos a utilizar para generar la imagen y posteriormente ejecutarla

Imagen

Para generar la imagen debemos utilizar el siguiente comando

docker build -t python-flask .

Ejecutar

Para ejecutar la imagen debemos utilizar el siguiente comando

docker run -p 5000:5000 python-flask

Testing

Configuración

Se debe crear un archivo pyproject.toml con el siguiente contenido

[tool.pytest.ini_options]
testpaths = ["tests"]

[tool.coverage.run]
branch = true
source = ["config", "app"]

Esta configuracion permite definir la ruta de los tests, las carpetas que debe considerar el reporte de cobertura de codigo

Ejecutar

Se debe ejecutar el siguiente comando

pytest

Ejecutar con Cobertura

Se debe ejecutar el siguiente comando

coverage run -m pytest

Generar Reporte Cobertura Formato Consola

Se debe ejecutar el siguiente comando

coverage report

Generar Reporte Cobertura Formato HTML

Se debe ejecutar el siguiente comando

coverage html

Tests de Aceptación

Configuración

Se debe crear un archivo behave.ini con el siguiente contenido

[behave.formatters]
html = behave_html_formatter:HTMLFormatter

Esto nos permite definir el formato de salida de reporte de los tests de aceptación

Ejecución

Se debe ejecutar el siguiente comando

behave acceptance-test/features -f html -o behave-report.html

Esta configuracion permite definir donde se encuentran los features, el formato html y el nombre del archivo del reporte

Al finalizar generara un reporte behave-report.html

Tests de Rendimiento

Configuración

Se debe crear un archivo con el nombre que deseemos, en este caso particular utilice el del mismo proyecto python-flask.py con el siguiente contenido

from locust import HttpUser, task, between

wait_time = between(1, 2)

class Product(HttpUser):
    @task
    def get_products(self):
        self.client.get("/products")
    
    @task
    def get_product_by_sku(self):
        self.client.get("/products/15207410")

Como podemos ver definimos la tarea, la funcion y a que endpoint deseamos validar

Ejecución

Se debe ejecutar el siguiente comando

locust -f performance-test/locust/python-flask.py -H http://localhost:5000 -u 5 -r 10 -t 40 --headless --html locust-report.html

Al finalizar generara un reporte locust-report.html

Swagger

Documentar Endpoints

Para documentar los endpoints debemos hacerlo de forma manual mediante un archivo /static/swagger.yml

Configurar Swagger UI

Para configurar Swagger UI simplemente agregamos el siguiente codigo al archivo init.py

swaggerui_blueprint = get_swaggerui_blueprint(Config.SWAGGER_URL, f'{Config.SWAGGER_FILE}')

La variable SWAGGER_URL esta configurada con /swagger-ui y la variable SWAGGER_FILE con /static/swagger.yml

Cuando ejecutemos a la aplicacion debemos entrar a la pagina /swagger-ui/

Links de Referencia

A continuación dejo links utilizados para realizar este proyecto

Python Naming Conventions

Configuring Your Flask App

Flask How To Make Validation On Request JSON

Change Host and Port Of Flask On Run

Performance Testing in Python: A Step-by-Step Guide with Locust

How To Run Locust

Behave

About

Python + Flask + Json Web Token + Test Unitarios (pytest) + Test de Aceptación (behave) + Test de Rendimiento (locust)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published