Aprendizajes del desafío de 30 días de pruebas de performance

Hace un poco más de un mes te comenté que comenzaríamos en Abstracta el desafío “30 días de pruebas de performance”, planteado por Ministry of Testing y PerfGuild. En este post quiero dejar un resumen de los principales aprendizajes de la experiencia, ¡que fueron muchos!

 

Vayamos viendo los principales aspectos de cada uno de los 30 días.

 

Día 1: Comprar o descargar un libro relacionado a performance testing y leerlo para el día 30

Aprovechamos los libros que trajimos de la conferencia Velocity, que estuvimos en San José este año. Son libros cortos, pero cada párrafo resume muy bien aspectos muy importantes del testing de performance. Yo leí uno llamado “Performance optimizations in a Cloud-centric world” de Andy Still. Pone foco en el hecho que al estar en plataformas Cloud uno pierde control muchas veces de las cosas que se pueden optimizar a bajo nivel, y por eso debe estar muy atento. Entre los desafíos que lista están los servicios de CDN, componentes de terceros, cómo la elección de los DNS afectan la performance y hasta los servidores o plataformas (IaaS y PaaS). También hace un repaso por las distintas herramientas de monitorización que se pueden utilizar, en particular los APM, prestándole atención a métricas como RUM o EUM (real user metric y end user metric respectivamente).

 

Día 2: Escuchar un podcast de performance testing

Algunos de los podcasts que escuchamos fueron:

  • Uno que recomendó Joe Colantonio con Andreas Grabner de DynatraceHabló de shift left performance testing, de cómo ha cambiado el rol del performance tester, que ahora estamos metiendo más pruebas de performance pequeñas en Jenkins que se ejecutan en cada build. Que todo tiene que estar enfocado en el pipeline e integrar constantemente. Entonces, las pruebas tienen que ejecutar rápido. Uno no necesita una prueba de performance enorme como para encontrar problemas en la arquitectura, algoritmos, etc. ¡Hay que encontrar los problemas más temprano! Contó la idea de cómo Dynatrace (incluso la versión free) puede aprovecharse desde Jenkins.
  • En este le hacen una entrevista a una tester de Songkick, y cuenta sobre las pruebas de performance que le hicieron al sitio web (cómo definieron el escenario, qué flujos automatizaron, por qué eligieron Gatling para simular la carga, etc). El podcast tiene la transcripción con la ventaja que si te perdés alguna frase lo podés leer.

Creo que más allá de los podcasts puntuales, el aprendizaje más grande que me llevé fue la costumbre de escuchar podcasts. Antes, no le había dado siquiera la oportunidad a ninguno. Ahora me agarré la rutina de tener alguno a mano para escuchar cuando tengo algún tiempo de espera, o mientras camino al trabajo.

 

Día 3: Encontrar 5 expertos de testing de performance para seguir en Twitter

Listo algunos perfiles que entre nosotros nos sugerimos para seguir:

Joe Calantonio, Andreas Grabner, Alex PodelkoRebeca Clinnard, Scoot MooreNathan Bower, Tammy Everts, Brendan Gregg, y dejé para el final mi mayor descubrimiento: Señor Performo, quien no solo comparte aspectos relacionados a performance e incluso siguió el desafío #30daysoftesting, sino que siempre lo hace con gráficos bien interesantes y a veces con cierto humor. 

En la lista de recomendados también surgieron algunos de Abstracta: David Giordano, Leticia AlmeidaFabián Baptista, Matías Reina, Sofía Palamarchuk.

 

Día 4: Compartir un problema de performance que hayas leído en las noticias recientemente

Algunas noticias que compartimos:

Lo de HBO GO con el estreno de Game of Thrones vino después, sino le ganaba a todo lo anterior.

 

Día 5: Organizar una reunión con tu equipo para hablar sobre tu enfoque actual de pruebas de performance

Esto es algo que sucede a diario en Abstracta, discutimos los enfoques de pruebas de cada proyecto entre varios. Recuerdo que esa semana en particular estuvimos viendo el enfoque para un cliente en el que estamos migrando el sistema de IaaS a PaaS, y tenemos que revisar que los tiempos de respuesta y el throughput no empeoren para el mismo escenario de carga. También estuvimos conversando sobre el enfoque en otro proyecto donde los desarrolladores irán incluyendo la ejecución de las pruebas de performance dentro del ciclo de trabajo en su enfoque de CI/CD.

 

Día 6: Pensar sobre quiénes son los stakeholders para tus pruebas de performance

Tal como compartí acá, creo que podrían ser los usuarios, los managers, el equipo, el que paga por las pruebas, y por qué no, uno mismo.

 

Día 7: Refrescar tus conocimientos sobre las bases de la arquitectura de sistemas web

En lugar de volver a revisar las bases me fui a lo más actual, y algo más complejo, compartiendo lo que escribimos sobre la charla en TestingUY, donde se repasan algunos conceptos como CDN, protocolo HTTP2, etc. Les recomiendo ver el video de la charla de Leticia y Pablo. 

 

Día 8: Encontrar las 10 transacciones de API o base de datos más lentas de tu aplicación

Lo que tenía a mano para revisar era este mismo sitio, y en lugar de revisar API revisé los requests desde el browser, donde pude ver que en el top 10 solo 2 requests son a mi dominio, lo cual deja claro que la performance de un sitio web depende muchísimo de los componentes de terceros que uno agrega, a veces sin darse cuenta del impacto que están generando.

 

Día 9: Leer un blog de testing de performance y compartirlo con alguien

Acá hay mucha info bien interesante 🙂 https://abstracta.us/blog/

 

Día 10: Analizar la diferencia entre load testing y stress testing

Hace un tiempo había escrito al respecto al hablar de cómo armar un plan de pruebas de performance.

 

Día 11: Inspeccionar y documentar las diferencias entre tu base de datos de producción y la de testing

Esto en cada cliente/proyecto es un mundo aparte. Lo más interesante sea tal vez pensar el caso de Shutterfly, donde tanto el volumen de la base de datos como la infraestructura en el ambiente de pruebas era más reducida a propósito (generalmente los equipos de testing se quejan que sus ambientes de prueba no son iguales y que eso es un problema). El objetivo de este enfoque, entre otros, era el de poder llegar al punto de quiebre de la infraestructura con una sola máquina generadora de carga, para facilitar la prueba de performance y el análisis de los resultados.

 

Día 12: Diseñar una prueba de performance para tu sitio más visitado o API más usada

También, trabajo diario. El diseño de las pruebas generalmente se hace considerando no solo las más usadas, también las más críticas para el negocio o las que tienen mayores riesgos tecnológicos. El diseño implica la selección de los casos de prueba, así como los datos que se utilizarán, el modelo de carga, y las métricas a recolectar. 

 

Día 13: Compartir una foto que muestre el uso del CPU de tus aplicaciones en producción

No tengo acceso a publicar eso. Lo compartimos regularmente entre los integrantes del equipo, de un proyecto a otro, los distintos resultados de monitorización para obtener otras opiniones, ideas, etc.

 

Día 14: Instalar una herramienta de testing de performance opensource, y familiarizarse con ella

Considero que aún tengo mucho para aprender de estas dos que son mis preferidas al momento:

En este mes la herramienta opensource que estuve probando y familiarizándome con ella fue GoAccess, que es útil para analizar access logs, generando un reporte muy bueno y útil para en análisis, en forma muy sencilla. 

 

Día 15: Mirar y compartir un video de pruebas de performance

Esta fue una charla que di el año pasado en el meetup de TestingUY, comparando la ejecución de pruebas al final del proyecto de desarrollo, o realizarlo durante (o sea, ¡shift left testing!)

 

Día 16: Comparar y contrastar lo que es pruebas de performance y monitorización

 

 

Día 17: Pensar qué tan fácil sería para ti crear datos para una prueba de performance con 10.000 usuarios concurrentes sobre tu aplicación

En un proyecto en el que estoy preparando las pruebas ahora, se analizaron las alternativas y lo que se decidió hacer fue:

  • Para una funcionalidad que crea nuevas instancias de un elemento, y recibe por parámetro un identificador, se crearon strings aleatorios para los ID que se envían desde el cliente, generándolos con una planilla de cálculo (para que cumplan determinado formato).
  • Para otra funcionalidad que es una consulta de esas instancias, se generarán los datos en la base de datos con una SQL que prepararán los desarrolladores, tomando como base los datos a partir de la base de producción.

Estas dos son estrategias bastante comunes al generar datos para una prueba de carga.

 

Día 18: Investigar modelos de carga para pruebas de performance, y compartir los hallazgos

Con respecto a modelar una prueba de carga, yo aprendí hace más de 10 años a partir de los artículos de Scott Barber, y aún siguen siendo mis favoritos: User Experience, Not Metrics. Acá está la serie completa:

 

Día 19: Usar un sniffer o proxy para monitorear el tráfico de una aplicación web

La herramienta que más usamos nosotros es Fiddler, y en ocasiones que esa herramienta no captura el tráfico, Wireshark.

 

Día 20: Analizar la diferencia entre causalidad y correlación

Me encantó este artículo donde explican claramente las diferencias y la importancia de conocer esas diferencias al momento de hacer un análisis.  

 

Día 21: Compartir tu herramienta de pruebas de performance favorita y por qué lo es

Día 22: Probar una herramienta de pruebas de performance online

Mi consejo acá es BlazeMeter.

 

Día 23: Calcular las estadísticas básicas para tus resultados de tiempos de respuesta

Les recomiendo leer esto antes. Estuve revisando un poco las herramientas que me dejan información sobre tiempos de respuesta de este mismo sitio. Acá algunas capturas:

 

Google Analytics

 

Cloudflare

 

New Relic

 

Día 24: ¿Sabes qué fue lo que causó el último pico en la performance de tu aplicación?

Día 25: Compartir tres beneficios de monitorizar tu aplicación en producción

Día 26: Analizar las diferencias entre tu entorno de testing y el de producción. ¿Puede tener impacto en los tests de performance?

Sí, mientras más diferencias haya entre testing y performance entonces mayor será la incertidumbre sobre los resultados. Esto no significa que no sea válido hacer pruebas en un ambiente distinto al de producción…

 

Día 27: ¿Cómo compartes los resultados de las pruebas de performance con el resto del equipo?

En algunos casos reportes extensos y profundos, en otros un simple mail puntualizando algún hallazgo. Context-driven.

 

Día 28: Diseñar, dibujar y compartir tu dashboard ideal para performance

Según la plataforma, tecnología, requerimientos, etc., será el dashboard más útil. No hay algo ideal único. Muy de acuerdo con Sr Performo.

Día 29: Analizar cómo el concepto de Service Virtualization puede ayudar en las pruebas de performance

De la misma forma que ayuda en cualquier tipo de testing. Fundamental en pruebas donde no se cuenta con el control total de todos los servicios, o costaría mucho replicar el ambiente, o incluso, si se quisiera probar cómo reaccionaría nuestro sistema bajo pruebas ante distintos comportamientos del servicio que se está virtualizando.

 

Día 30: Compartir algún desafío relacionado a la performance que identifiques en el área de las aplicaciones móviles o en Internet de las Cosas

Bonus: Revisar el programa de la conferencia online de testing de performance llamada PerfGuild

Me encanta la idea de poder acceder a una conferencia sin los costos de tiempo y tickets que implican las conferencias tradicionales. Automation Guild, ahora PerfGuild, e incluso una de QAninja en Brasil, cada vez se vuelve una alternativa más considerada.

 

Cerrando

Los desafíos implican siempre un aprendizaje, este fue un buen ejemplo de cómo en el equipo nos motivamos para seguir aprendiendo cosas nuevas y compartirlas entre todos.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *