Ejemplo práctico con Gatling Pruebas de carga web Las Palmas DevOps Jonathan Araña Cruz
Ejemplo práctico con Gatling
Pruebas de carga web
Las Palmas DevOps Jonathan Araña Cruz
Jonathan Araña Cruz (aka jonhattan)
Sysadmin en la onda DevOpsDrupal developer
http://atlantic-canary.nethttp://github.com/jonhattan
@_jonhattan_
Cuestiones
¿Qué respuesta da una web? Número de visitantes, tiempos de generación, tasa de errores,...
➜ Monitorización, Analytics,...
¿Cómo variará ante cambios…?● En el código● En el volumen de contenido● En la configuración de la infraestructura● En los recursos hardware● En el número de visitantes
➜ Pruebas de carga
Pruebas de carga
● Diseñar planes de carga○ Ej: cuantas visitas por segundo quiero simular
● Diseñar escenarios○ Simulación de la interacción de los usuarios en la web
● Medir:○ Tiempos de respuesta, peticiones fallidas,...○ Estrés del servidor: carga máxima/media, ram, swap…
● Interpretar datos, sacar conclusiones
Reproducibilidad de los tests
● Condiciones iniciales● Definir pasos necesarios para la reproducibilidad (volver a las condiciones
iniciales)○ Cargar bbdd de referencia○ Reiniciar servidor web / bbdd / memcache / …○ Flushear memoria (cachés, buffers..)○ Esperar a que disminuya la carga del sistema, etc
Variabilidad
● Factores fuera de nuestro control○ Servicios externos○ Red (control de congestión, anti flood/dos...)○ Eventos del sistema (origen o destino)○ Complejidad○ Timing
● Apache Bench - http://httpd.apache.org/docs/2.2/programs/ab.html● JMeter - http://jmeter.apache.org● Gatling http://gatling.io● …
Herramientas
Gatling
● Open-source load testing framework based on Scala, Akka and Netty
● High performance
● Ready-to-present HTML reports
● Scenario recorder and developer-friendly DSL
Gatling: Escenarios
● Codificar desde cero● Capturar una sesión real con un navegador● Ajustar escenarios para su reproducción
gatling/bin/recorder.sh &
chromium --proxy-server=http://127.0.0.1:8000 &
Gatling: Prueba de carga
● https://gitlab.faita.net/jonhattan/gatling-example/commits/master
ssh s01.surgery.sbit.io -o "ServerAliveInterval=30" sudo tail -f /var/log/apache2/acme.s01.surgery.sbit.io_access.log | logstalgia -x --paddle-mode vhost -
USERS=100 TIME=10 ./bin/gatling.sh
Caso real
● Web para preinscripción y reserva de plazas en eventos● Fecha de apertura de inscripción● ~ 2000 inscritos
https://docs.google.com/spreadsheets/d/1YT7WxqCJM5mqZBVoOf9tBp-2s06Uwy95T218KRKQUGg/edit#gid=0
Bola extra