Framework de pruebas de performance siguiendo las reglas de calidad transversales de Pragma.
Este proyecto implementa un framework robusto de pruebas de performance utilizando Karate para definir escenarios de API y Gatling para ejecutar simulaciones de carga, siguiendo las reglas de calidad transversales de Pragma.
✅ Configuración por Ambientes - Soporte completo para dev/qa/prod
✅ Variables Dinámicas - Parametrización desde variables de ambiente
✅ Assertions Configurables - Umbrales de performance personalizables
✅ CI/CD Automatizado - Pipeline básico con GitHub Actions
✅ Reportes Detallados - Métricas completas de Gatling
✅ Estructura Modular - Organización siguiendo mejores prácticas
Contenidos • Tecnologías • Estructura • Configuración • Instalación • Ejecución • Reportes • CI/CD
- 🛠️ Tecnologías
- 📁 Estructura del Proyecto
- ⚙️ Configuración por Ambientes
- 🚀 Instalación y Configuración
- 📊 Ejecución de Pruebas
- 📈 Reportes y Métricas
- 🔧 CI/CD con GitHub Actions
- 📝 Variables de Configuración
- Java 20+ - Runtime environment (Amazon Corretto)
- Karate 1.5.1 - Framework de testing API con BDD
- Gatling - Motor de simulación de carga y performance
- Gradle - Herramienta de build y gestión de dependencias
- GitHub Actions - Pipeline de CI/CD automatizado
☕ JDK 20+ (Amazon Corretto recomendado)
🔧 Gradle 7.0+ (incluido wrapper)
🌐 Acceso a internet para dependencias
💾 ~100MB espacio libre para reportes
qa-performance-karate-gatling/
├── 📂 .github/workflows/ # Configuración CI/CD
│ └── performance-tests.yml # Pipeline básico GitHub Actions
├── 📂 src/test/
│ ├── 📂 java/
│ │ ├── 📂 performance/ # Simulaciones Gatling
│ │ │ └── PerformanceTestRunner.java
│ │ └── 📂 utils/ # Utilidades del proyecto
│ │ ├── PasswordEncryptor.java
│ │ └── UuidFormat.java
│ └── 📂 resources/
│ ├── 📂 config/ # ✨ Configuraciones por ambiente
│ │ ├── karate-config-dev.js # Desarrollo
│ │ ├── karate-config-qa.js # QA/Testing
│ │ └── karate-config-prod.js # Producción
│ ├── 📂 karate/ # Features de prueba
│ │ ├── config.feature # Carga configuración global
│ │ ├── testPosts.feature # Pruebas API Posts
│ │ └── testUsers.feature # Pruebas API Users
│ ├── karate-config.js # ⚙️ Configurador principal
│ └── logback-test.xml # Configuración logging
├── 📂 build/reports/gatling/ # 📊 Reportes generados
├── build.gradle # Configuración Gradle
└── README.md # Documentación del proyecto
El proyecto soporta 3 ambientes con configuraciones específicas:
| Ambiente | Archivo | Uso | Usuarios | Duración | Response Time |
|---|---|---|---|---|---|
| DEV | karate-config-dev.js |
Desarrollo | 5 | 30s | 2000ms |
| QA | karate-config-qa.js |
Testing | 10 | 60s | 1500ms |
| PROD | karate-config-prod.js |
Producción | 20 | 120s | 1000ms |
function fn() {
var env = karate.env || 'prod'; // Ambiente por defecto
var config;
// Carga configuración específica del ambiente
if (env === 'qa') {
config = karate.callSingle('classpath:config/karate-config-qa.js');
} else if (env === 'prod') {
config = karate.callSingle('classpath:config/karate-config-prod.js');
} else {
config = karate.callSingle('classpath:config/karate-config-dev.js');
}
return config;
}Cada ambiente expone estas variables desde variables de sistema:
performance: {
rampUsers: parseInt(karate.properties['rampUsers'] || '5'),
during: parseInt(karate.properties['during'] || '30'),
thresholds: {
responseTimeMax: parseInt(karate.properties['responseTimeMax'] || '2000'),
errorRateMax: parseFloat(karate.properties['errorRateMax'] || '5.0'),
requestsPerSecMin: parseFloat(karate.properties['requestsPerSecMin'] || '1.0'),
successfulRequestsMin: parseInt(karate.properties['successfulRequestsMin'] || '50')
}
}git clone https://github.com/somospragma/qa-performance-karate-gatling
cd qa-performance-karate-gatling# Verificar Java 20+
java -version
# Construir proyecto
./gradlew clean build# Linux/Mac
export KARATE_ENV=qa
export rampUsers=15
export during=60
# Windows
set KARATE_ENV=qa
set rampUsers=15
set during=60# Ejecutar con configuración por defecto (PROD)
./gradlew gatlingRun
# Ejecutar en ambiente específico
./gradlew gatlingRun -Dkarate.env=dev
# Ejecutar en QA con parámetros personalizados
./gradlew gatlingRun -Dkarate.env=qa -DrampUsers=20 -Dduring=120./gradlew gatlingRun \
-Dkarate.env=qa \
-DrampUsers=25 \
-Dduring=300 \
-DresponseTimeMax=1500 \
-DerrorRateMax=3.0 \
-DrequestsPerSecMin=10.0 \
-DsuccessfulRequestsMin=200| Escenario | Feature | Tags | Descripción |
|---|---|---|---|
| Posts API | testPosts.feature |
@posts |
CRUD operations en posts |
| Users API | testUsers.feature |
- | Gestión de usuarios |
build/reports/gatling/
├── performancetestrunner-{timestamp}/
│ ├── index.html # 🎯 Reporte principal
│ ├── req_posts-stats.html # Estadísticas Posts API
│ ├── req_users-stats.html # Estadísticas Users API
│ └── js/stats.json # Datos en JSON
✅ Response Time - Percentiles 50, 75, 95, 99
✅ Throughput - Requests por segundo
✅ Error Rate - Porcentaje de errores
✅ Success Count - Número de requests exitosos
✅ Connection Time - Tiempo de establecimiento de conexión
✅ Active Users - Usuarios concurrentes por momento
El runner valida automáticamente:
.assertions(
forAll().requestsPerSec().gte(Double.parseDouble(requestsPerSecMin)),
forAll().failedRequests().percent().lte(Double.parseDouble(errorRateMax)),
forAll().responseTime().max().lt(Integer.parseInt(responseTimeMax)),
forAll().successfulRequests().count().gte(Long.parseLong(successfulRequestsMin))
);Archivo: .github/workflows/performance-tests.yml
name: Basic CI - Performance Tests
on:
push:
branches: [ main ] # Auto-ejecución en push
pull_request:
branches: [ main ] # Validación en PR
workflow_dispatch: # Ejecución manual- Checkout - Descarga código fuente
- Setup JDK 20 - Configura Amazon Corretto
- Make gradlew executable - Permisos de ejecución
- Build project - Compilación con Gradle
- Run performance tests - Ejecución de simulaciones
- Upload reports - Almacenamiento de resultados
- Nombre:
performance-reports - Contenido: Reportes completos de Gatling
- Retención: 90 días
- Disponible: Siempre (incluso si las pruebas fallan)
- Ve a Actions en tu repositorio
- Selecciona Basic CI - Performance Tests
- Click Run workflow
- Descarga los reportes desde Artifacts
| Variable | Descripción | Default DEV | Default QA | Default PROD |
|---|---|---|---|---|
karate.env |
Ambiente de ejecución | dev |
qa |
prod |
rampUsers |
Usuarios concurrentes | 5 |
10 |
20 |
during |
Duración en segundos | 30 |
60 |
120 |
urlBase |
URL base del servicio | jsonplaceholder.typicode.com |
- | - |
| Variable | Descripción | Unidad | DEV | QA | PROD |
|---|---|---|---|---|---|
responseTimeMax |
Tiempo máximo respuesta | ms | 2000 | 1500 | 1000 |
errorRateMax |
Porcentaje máximo errores | % | 5.0 | 3.0 | 1.0 |
requestsPerSecMin |
Mínimo requests/segundo | req/s | 1.0 | 5.0 | 10.0 |
successfulRequestsMin |
Mínimo requests exitosos | count | 50 | 100 | 500 |
# Para una prueba de stress en QA
./gradlew gatlingRun \
-Dkarate.env=qa \
-DrampUsers=50 \
-Dduring=600 \
-DresponseTimeMax=3000 \
-DerrorRateMax=8.0Mauro L. Ibarra P. |
Cristian Millán |
|---|
- Karate Documentation - Framework principal
- Gatling Documentation - Motor de performance
- Pragma QA Guidelines - Reglas de calidad transversales
- Serenity BDD Project - Proyecto base Web
- Mejora Sintaxis BDD - Implementar features con mejor sintaxis Gherkin
- Datos de Prueba - Sistema de generación y gestión de test data
- Métricas Avanzadas - Dashboard en tiempo real con Grafana
- Pruebas de Seguridad - Integración con herramientas de security testing
- Multi-protocolo - Soporte para WebSockets y GraphQL
- Reportes Personalizados - Templates custom para diferentes stakeholders
¿Tienes preguntas? Abre un issue o contacta al equipo de QA
