Este proyecto implementa un sistema de gestión de reclamos, quejas y solicitudes para los usuarios de una empresa de telecomunicaciones, desarrollado utilizando Django Rest Framework.
El principal objetivo del proyecto es aplicar los conocimientos adquiridos en el curso de Verificación y Validación de Software, garantizando que la aplicación cumpla con los estándares de calidad, seguridad y desempeño requeridos.
A través del desarrollo del sistema, se integran técnicas de pruebas unitarias, pruebas de rendimiento, análisis estático de código y pruebas de seguridad. Adicionalmente, se automatizan procesos mediante la implementación de un pipeline en Jenkins, lo que asegura un flujo de trabajo eficiente y confiable.
La aplicación permite a los usuarios realizar operaciones CRUD para gestionar reclamos, quejas y solicitudes, además de interactuar con endpoints RESTful que han sido probados exhaustivamente. Para las pruebas de seguridad y rendimiento se utilizan herramientas especializadas como ZAP y Locust, mientras que la calidad del código es evaluada mediante SonarQube.
#Crear el entorno virtual
python -m venv venv
# Activar el entorno virtual
venv\Scripts\activate # En Windows
# source venv/bin/activate # En macOS/Linux
# Instalar las dependencias
pip install -r requirements.txt
# Correr el proyecto
python manage.py runserver
# Docs: http://127.0.0.1:8000/docs/
# 1. Verificar la configuración del archivo pytest.ini:
[pytest]
DJANGO_SETTINGS_MODULE = core.settings
python_files = test_*.py
# Este archivo configura:
# El módulo de configuración, en este caso core.settings
# El patrón que tendrán los nombres de los archivos para los test, en este caso: test_*.py
# 2. Solo es necesario ejecutar:
pytest -rP
# en la raíz del proyecto
# Instalar locust si no esta instalado
pip install locust
# Crear una variable de entorno con el host de la API
export API_HOST=http://localhost:8000
# Correr las pruebas de rendimiento
locust -f performance_test.py --headless \
--users 100 --spawn-rate 10 \
--run-time 1m --host $API_HOST
Este repositorio contiene el script de Jenkins para la ejecución de pruebas automatizadas en un proyecto Django, incluyendo análisis estático con SonarQube, pruebas de seguridad con ZAP, pruebas de rendimiento con Locust, y ejecución de pruebas unitarias con pytest.
El script completo se encuentra en el archivo pipeline_script.txt
.
Para ejecutar el pipeline, asegúrate de tener instaladas las siguientes dependencias y herramientas:
Este pipeline usa herramientas y dependencias de Python, las cuales deben ser instaladas en el entorno virtual.
Newman: Para ejecutar las colecciones de Postman desde la línea de comandos.
pip install newman
Locust: Para ejecutar pruebas de rendimiento.
pip install locust
pytest: Para ejecutar pruebas unitarias.
pip install pytest
Este pipeline también requiere las siguientes herramientas externas para funcionar correctamente:
SonarQube (Análisis Estático):
ZAP (Pruebas de Seguridad):
zap-2.15.0.jar
, el cual se usa para ejecutar un escaneo rápido de la aplicación.Java (para ejecutar ZAP):
JAVA_HOME
esté correctamente configurada.Locust (Pruebas de rendimiento):
El pipeline de Jenkins está estructurado en varias etapas, cada una con una función específica. A continuación se describen las etapas y su funcionamiento:
Git Checkout
git checkout
del branch develop
desde el repositorio de GitHub para obtener la última versión del código.SonarQube Static Analysis
Setup and Install Dependencies
requirements.txt
.Check Django Installation
Start Django Server
Wait for Django Server
Run Postman Tests
ZAP Security Scan
Performance Test and Archive Results
Stop Django Server
Unit Tests
Post Actions
El script de Jenkins es altamente personalizable y permite ajustar diversas configuraciones para adaptarlo a tus necesidades específicas. A continuación se describe cómo personalizar algunas de las variables clave:
SONAR_TOKEN: Token de autenticación para SonarQube.
SONAR_TOKEN = 'su_token_sonar' // Se puede crear en Administration > Security > Users
Este token es necesario para autenticar el análisis de código en SonarQube. Asegúrate de crear un token en la sección correspondiente de SonarQube y reemplazar el valor de la variable.
ZAP_JAR_PATH: Ruta del archivo JAR de ZAP (Zed Attack Proxy).
ZAP_JAR_PATH = "${env.ZAP_HOME}\\zap-2.15.0.jar" // Ruta configurable
Si ZAP está instalado en una ubicación diferente, asegúrate de actualizar esta ruta con la ubicación correcta del archivo zap-2.15.0.jar en tu sistema.
ZAP_API_KEY: Clave API de ZAP.
ZAP_API_KEY = 'su_token_zap' // Se puede encontrar en Tools > Options > API
Este es el token de API que ZAP usa para realizar el escaneo de seguridad. Puedes generar o copiar este token desde la interfaz de ZAP en la sección de opciones de API.
PYTHON_PATH: Ruta donde Python está instalado en tu sistema.
PYTHON_PATH = "ruta_python" // Ruta configurable para Python
Si tienes Python instalado en una ubicación diferente, modifica esta ruta para reflejar la instalación correcta en tu máquina.
DJANGO_MANAGE_PATH: Ruta al script de activación del entorno virtual de Django.
DJANGO_MANAGE_PATH = "${env.PYTHON_PATH}\\Scripts\\activate.bat"
Asegúrate de que esta ruta apunte correctamente al archivo de activación del entorno virtual de Python que usas para tu proyecto Django.
Si alguna de las rutas o variables de entorno no está configurada correctamente, el pipeline fallará en la etapa correspondiente, por lo que es importante verificar cada variable antes de ejecutar el pipeline.
Este script está diseñado para ser compatible tanto con sistemas operativos Windows como Linux. Si estás utilizando un sistema operativo diferente, asegúrate de ajustar las rutas y configuraciones de acuerdo con el sistema operativo que estás usando.
Este pipeline es completamente personalizable para que se ajuste a las necesidades específicas de tu proyecto Django. No dudes en modificar las rutas, los tokens y las configuraciones de herramientas según tu entorno y flujo de trabajo. Archivos Generados
El pipeline genera los siguientes archivos durante su ejecución:
Resultados de las pruebas de Postman en formato HTML.
Reportes de seguridad generados por ZAP en formato HTML.
Resultados de pruebas de rendimiento de Locust en formato CSV.
Resultados de las pruebas de Locust en formato CSV.