Pruebas Automáticas

Director's Cut: Now with unicorns!


y Despliegue Continuo

Fuente: PLF

Vuestro 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 Navy

Pruebas Unitarias

¿Haces pruebas Unitarias?


Pufff...


No, si tengo que hacerlas...


Es que... señooo... no he hecho la tarea...


El día que me ponga...

Foto no relacionada

Fuente: Alex E. Proimos
#facepalm

Foto no relacionada


Fuente: S.H.I.T.



#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


git@github.com:alexfernandez/demo-deployment.git

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: NPCC

Pruebas 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


Apache ab


node loadtest

STOP


Demo Time!

Prueba Integrada


http://localhost:12322/3/4


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?


#EpicFail

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


Jenkins CI (Java)


Atlassian Bamboo (propietario)

Travis CI (Ruby)

STOP


Demo Time!

Integración Continua


Travis CI:

https://travis-ci.org/profile


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

http://remote:12322/5/6

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



Diseña tu sistema para que sea monitorizable

¡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:

https://console.aws.amazon.com/cloudwatch/home?region=eu-west-1#c=CloudWatch&s=Metrics&graph=!ST0!ET1!NS2!MN3!SS4!PD5!D06!E07!VA-PT6H~-PT0H~AWS%252FEC2~CPUUtilization~Average~300~InstanceId~i-ad0f24e1

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 roto

Recomendaciones 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