Pruebas Automáticas
Director's Cut: Now with unicorns!
y Despliegue Continuo
Fuente: PLFVuestro anfitrión esta noche
Desarrollador impenitente y cacharreador rampante
Vicios declarados: cerveza, JavaScript, DevOps
Senior developer en MediaSmart Mobile y freelancer
alejandrofer, @pinchito, alexfernandez
Lo que vamos a ver
Pruebas unitarias
Pruebas de integración
Pruebas de carga
Despliegue
Despliegue continuo
Monitorización
Demo completa
Lo que no vamos a ver
Ni añadir pruebas a lo loco
... ni porque sí (TDD)
Ni paquetes propietarios
Ni múltiples lenguajes de programación
Y definitivamente sin trucos dependientes del lenguaje
PARTE PRIMERA
Fuente: United States NavyPruebas Unitarias
¿Haces pruebas Unitarias?
Pufff...
No, si tengo que hacerlas...
Es que... señooo... no he hecho la tarea...
Foto no relacionada
Fuente: Alex E. Proimos#facepalm
Foto no relacionada
#fail
Fotos no relacionadas
Fuentes: Centro de Estudios Borjanos, blog.heraldo.es
#EpicFail
Pruebas sin Pereza
Prueba usando código
Guarda las pruebas
Córrelas todas juntas
Evita los errores de regresión
¡Automatiza!
Guardamos todos los tests y los lanzamos
Tres reglas básicas:
- Un único botón
- Errores llamativos
- Sin intervención humana
Múltiples Librerías
JUnit, CppUnit, xUnit
JavaScript: NodeUnit, Jasmine, mocha
Pruebas asíncronas: QUnit (cliente)
Opción bricolage
Haz tu vida más fácil
Diseña tu sistema para que sea testable
STOP
Demo Time!
Añade prueba
¿Funciona para tres valores?
https://github.com/alexfernandez/demo-deployment
Mete fallo a propósito
Haz tu propia librería
https://github.com/alexfernandez/testing
ok(), nok(), assert(), assertEquals()
Suite de prueba
Success!
Fuente: Rubens (Museo del Louvre)
Ahora eres atractivo/a
PARTE SEGUNDA
Fuente: NPCCPruebas de Integración
Prueba Integrada
Prueba del sistema completo
Debe pasar por todos los puntos del sistema:
Petición → Servidor web → Base de datos
Ortogonales con pruebas de sistema
¿Cuántas suites de prueba? Cuantas más mejor
Entorno de Pruebas
Llamado a veces: maqueta, preproducción, staging...
Simulación de datos
Pruebas autocontenidas
(limpieza al terminar)
Certificación final
Prueba de Carga
Lanzamos peticiones sintéticas contra un servidor
Medimos la respuesta (tiempo total, latencia...)
En condiciones lo más realistas posibles
Benchmark < Petición real < Flujo real < Producción
Peticiones por segundo
Peticiones por segundo vs concurrencia
Fuente: LoadStorm
Latencia
Latencia vs Peticiones / segundo
Latencia Divergente
Fuente: TorqueBox
Percentil de latencia
Fuente: BitCurrent
¡Automatiza!
Diseña un API de control
Arranca y para el sistema completo usando el API
Pruebas autocontenidas: limpia al terminar
Siguen aplicando las tres reglas básicas:
- Un único botón
- Errores llamativos
- Sin intervención humana
Paquetes Libres
STOP
Demo Time!
Prueba Integrada
Automática:
https://github.com/alexfernandez/demo-deployment/blob/master/lib/integration.js
Prueba de Carga
https://github.com/alexfernandez/loadtest
$ node index.js
$ loadtest -n 10000 -c 10 http://localhost:12322/3/4
Automática:
https://github.com/alexfernandez/demo-deployment/blob/master/lib/loadtest.js
Success!
Fuente: Łukasz Golowanow
PARTE TERCERA
Fuente: Norman Rockwell
Despliegue Continuo
Despliegue de código
Poner el código en producción
O de cómo hacer que el código tenga valor
Los aficionados hablan de programación;
los profesionales se preocupan del despliegue
Anónimo
Pasos de un despliegue
Actualización de código
Instalación de librerías
Pruebas
Puesta en producción
Despliegue tradicional
Puesta en producción de código nuevo
Nuevas funcionalidades o cambios
Acumulación de fallos
¡Una pesadilla!
Conclusión: cuantos menos despliegues, mejor
Foto no relacionada
Fuente: comicvine?
#facepalm
Foto no relacionada
Fuente: Super Pirulo Txou
#fail
Foto no relacionada
Fuente: arte.about.com?
Contra corriente
¿Qué tal si desplegamos más a menudo?
- Menos complicación
- Menos código cambiado
- Menos posibilidad de fallo
- Menos sitios donde buscar
Mejor muchos cambios pequeños que uno grande
Reducción de entropía
Ciclos más cortos → mayor eficiencia
No nos alejamos del equilibrio
Entropía mínima: Proceso reversible
Menos entropía → menos lío
La felicidad...
es un despliegue bien hecho
Fuente: twotsi.com
Despliegue Distribuido
Repositorio de código
Una máquina para integrar
Entorno de pruebas
Muchas máquinas para desplegar
¡Automatiza!
Despliegue integrado con el repositorio
Cada cambio lanza una integración (CI)
Cada integración lanza un despliegue (CD)
De nuevo las tres reglas básicas:
- Un único botón (opcional)
- Errores llamativos
- Sin intervención humana
Esquema
Paquetes
STOP
Demo Time!
Integración Continua
Travis CI:
Demo deployment:
https://github.com/alexfernandez/demo-deployment
[![Build Status](https://secure.travis-ci.org/alexfernandez/demo-deployment.png)](http://travis-ci.org/alexfernandez/demo-deployment)
Despliegue Continuo
https://github.com/alexfernandez/deployment
https://console.aws.amazon.com/ec2/v2/home?region=eu-west-1#Instances:
$ deployment-server --token gs9f03tkddmi23wi --testdir . --timeout 20 --name demo --exec "echo success"
$ supervisor index.js
http://remote:3470/deploy/gs9f03tkddmi23wi/manual
https://github.com/alexfernandez/demo-deployment/settings/hooks
Explicación
Servidor que suma (supervisor)
Servidor de despliegue
Acceso a despliegue manual
Webhook en GitHub
Cambio de código → integración → despliegue
Despliegue Distribuido
https://console.aws.amazon.com/ec2/v2/home?region=eu-west-1#Instances:
http://remote:3470/deploy/nn0zwyqgx3ek5qqz/manual
$ git clone https://github.com/alexfernandez/demo-deployment.git
$ deployment-server --token nn0zwyqgx3ek5qqz --name prod --dir .
Success!
Fuente: diario íntimo de un clown
Atajos en la demo
Usa lo que proporciona el entorno: git pull, npm install, npm test
No reinicia el servicio: supervisor, forever, Upstart, systemd
Notificación
Cuarta PARTE
Fuente: bleedingcool
MONITORIZACIÓN
¿Qué Monitorizar?
Dale visibilidad a las tripas de tu software
Monitorización técnica: peticiones/segundo, latencia
Monitorización de negocio: el software hace lo que debe
Cuanto más monitorices, ¡mejor!
Monitorización reactiva
Guarda un rastro de todo
Guarda logs específicos
Archiva o borra
¡Revisa el log!
No Bajes la Guardia
(Fuente: Wikipedia)
¿He sido yo?
Monitorización Proactiva
Verifica el sistema a intervalos
Haz que los errores vengan a ti
Crea alarmas
Envía los errores que requieran intervención humana
Evita que la señal se ahogue en el ruido
Haz tu vida más fácil
¡Automatiza!
Sistema de correo
Intervalos de monitorización variables:
cada cinco minutos
cada hora
cada día
Cron o similar
STOP
Demo Time!
¡Os engañé!
Fuente: Rachel C
Algo podemos ver
Amazon EC2:
https://console.aws.amazon.com/ec2/v2/home?region=eu-west-1#Instances:
Amazon CloudWatch:
Juntándolo todo
Pruebas unitarias
↓
Pruebas de integración
↓
Pruebas de carga
↓
Despliegue de código
↓
Monitorización
Cambio Cultural
El despliegue continuo está preparado para tu organización
¿Está tu organización preparada para el despliegue continuo?
Se requiere un "integrador" boss
Los problemas de build tienen máxima prioridad:
Nadie se va a casa con el build rotoRecomendaciones finales
Ve poco a poco
Cada mejora debe dar valor al negocio
Y todas juntas deben amplificarse
Mantén la velocidad del equipo
Tu pregunta aquí
¡Gracias!
Pruebas asíncronas:
http://www.godtic.com/blog/2013/07/11/pruebas-asincronas-en-node-js/
Pruebas de carga:
http://www.godtic.com/blog/2013/08/27/pruebas-de-carga/
Librería deployment:
https://npmjs.org/package/deployment
Presentación disponible en:
https://slid.es/alexfernandez/pruebas-automaticas-y-despliegue-continuo
Pruebas Automáticas y Despliegue Continuo
By Alex Fernández
Pruebas Automáticas y Despliegue Continuo
Charla para el GUL de la UC3M: http://cursos.gul.es/index.php/lectures/view/762. Automatización de pruebas unitarias, de integración y de carga. Despliegue continuo distribuido.
- 5,906