Varias formas de hacer pruebas de stress a una url

Una vez que hemos programado algo, una web, un api o cualquier otra cosa que van a utilizar muchas personas a la vez nos entra la necesidad inmediata de, después de las pruebas unitarias, poder pasarle unas pruebas de stress para ver cuanta gente puede entrar a la vez antes de que el sistema reviente o, en el peor de los casos, ver si hay algún problema de programación que nos impide tener peticiones concurrentes con seguridad.

Servidor bajo asedio... Imagen generada por AI

Solo os voy a presentar los más sencillos, aunque luego hay herramientas mucho más completas que ya se deben usar en el momento de QA para comprobar si los requisitos del sistema se cumplen (máximo número de peticiones por minuto / curva de carga / evolución del tiempo de respuesta, etc.).. Pero vamos, que ahora mismo solo queremos ver si se puede llamar a nuestro api o web concurrentemente…

siege

Este es el comando más sencillo que he encontrado, pero a la vez es muy eficiente en lo que se puede hacer con él.

siege -c10 -r1 https://blaba.com

Tras un tiempo de ejecución (depende de los parámetros c: concurrencia y r: repeticiones) se recibirá una salida como esta:

{ "transactions": 140,
"availability": 100.00,
"elapsed_time": 3.12,
"data_transferred": 3.48,
"response_time": 0.22,
"transaction_rate": 44.87,
"throughput": 1.11,
"concurrency": 9.68,
"successful_transactions": 140,
"failed_transactions": 0,
"longest_transaction": 0.33,
"shortest_transaction": 0.04
}

Ahí ya podemos ver cual es el ratio de fallo para esa concurrencia y los tiempos máximos y mínimos para cada transacción. Guay…

Ahora bien, el problema viene de que solo podemos hacer peticiones GET (podemos poner las cabeceras que queramos, pero no hay manera de hacer una petición POST, por ejemplo). Así pues si tenemos que probar un API que tiene algo más que peticiones GET tendremos que usar otra cosa…

Sigue habiendo una infinidad de herramientas muy buenas para hacer estas cosas, como Jmeter y otras, pero para unas pruebas de carga básicas vamos a continuar con el camino «barato»

curl + bash

Si estamos en linux, tenemos suerte (el siege también es de linux, pero seguro que hay un port para tu sistema operativo). Apuntad esto:

Primero hay que instalar paralell que no está en la distribución por defecto:

sudo apt install parallel

Luego podremos escribir algo como esto:

seq 100 | parallel --max-args 0 --jobs 10 "./curl_to.sh"

Y en curl_to.sh poned el comando curl con el que vais a probar, por ejemplo este:

curl --location 'https://blabla.com/api/v1/micomando' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIU...CvuTuF30k8XEFg_XL-gJyK-8rT4htC7HTHxbtDSGN8' --data '{ "userid": "418043893","message": "Hola payo…..", "uuid": "kk"}'

Este comando de antes lo que hace, básicamente, es lanzar una petición POST con un cuerpo JSON y una cabecera de autenticación (con un token JWT por ejemplo). Este código lo podemos sacar de postman, por ejemplo diciendole que queremos generar código para curl.

Si lanzamos el comando seq, lo que hace es generar una secuencia de números (en este caso de 1 a 100, y paralell lo que hace es lanzarnos de manera paralela (10 cada vez) el comando que hemos especificado… Con esto conseguiremos lanzar 100 veces 10 peticiones paralelas.

Obviamente no es perfecto, pero habremos podido simular una carga paralela sin tener que instalar nada en nuestro ordenador. Si eso lo combinamos con el comando time (os lo dejo como ejercicio) también podríamos sacar estadísticas de las ejecuciones.

En próximas entradas veremos como usar algunas herramientas muy potentes para pruebas de carga, pero por ahora, ya podéis empezar a estresar a vuestro servidor.

Adiós 2018, Hola 2019

Yo no suelo ser de los que hacen resumen del año cuando este termina, para mi el día 1 de enero es solo el día siguiente al 31 de diciembre. Que alguien eligiese esta parte de la rotación terrestre para indicar el comienzo de un nuevo periodo solo es una anédota más de nuestra civilización. En cualquier caso, como todo el mundo sabe, cualquier punto que elijas es bueno para hacer una retrospectiva. Así que, dado que hoy es el último día de este año, creo que es bueno que me pare a ver qué he aprendido del nuevo año y me plantee unos objetivos para el siguiente. Así el año que viene, si sigo teniendo ganas de escribir, puedo usar este post como recordatorio de lo iluso que he sido…

Bye, bye 2018

Este año solo he escrito 14 post en el blog, por poco uno por mes, eso significa que he tenido poco tiempo libre o, al menos, poco tiempo para reflexionar sobre cualquier cosa que no fuese urgente… Lo anoto como deseo para el año nuevo: escribir, al menos, dos post al mes. No es que sea la repanocha, pero eso significará que dedico un ratito más a pensar.

Lo que he aprendido

Este año prometía ser el año en el que la ciberseguridad, por fín, entraría en los pensamientos del público en general, el nuevo RGPD atenazaba de miedo a todos los que tenían una web y se veían ya denunciados y pagando un pastón en multas… Nada de eso ha sucedido y la lección es clara: A nadie le interesa la ciberseguridad. Facebook ha sido denunciada por vender nuestros datos sin nuestro consentimiento, Twitter ha ido regalando nuestras contraseñas, miles de millones de ellas circulan por la red y, seguro, que tu has recibido un correo de extorsión con alguna de tus contraseñas. No obstante, la gente sigue en Facebook, Twitter sigue siendo la barra del odio y la mayor parte de la gente sigue usando la misma contraseña en cientos de sitios. Quizá no lo estamos haciendo lo suficientemente bien para que el público se conciencie de que su seguridad y privacidad en internet es ya más importante que la de su propio domicilio.

He aprendido mucho sobre cómo funciona la justicia. He salido bien de un concurso de acreedores y me han denunciado unos sinverguenzas que tendrán su vista oral el 14 de enero de 2020

He confirmado que hay mucha gente que solo se preocupa por ella misma y por su círculo cercano y otros que son tan maravillosos que se ofrecen sin pedir nada a cambio y que, siempre, ofrecerse da más satisfacciones que verse obligado a algo. Ampliar el círculo de personas a las que te ofreces es mucho mejor que intentar mantener a las demás fuera el mayor tiempo posible. Desgraciadamente este año ha sido uno de los peores en lo que a «borreguismo» se refiere. La gente ha perdido todo su espíritu crítico o, en el mejor de los casos, lo ha sustituido por una lista muy limitada de fuentes a las que seguir. De tal manera que, si estas fuentes no tienen objecciones en lanzar bulos o simplemente, mentir de manera descarada, habrá un rebaño de creyentes detrás haciendo de altavoz y propagando estas mentiras a amigos y conocidos que pueden picar esta vez influenciados por una persona de su confianza.

En el aspecto técnico (esto se estaba poniendo cada vez más profundo) he aprendido a hacer una placa PCB, a utilizar NFC en los teléfonos, a utilizar las librerías de autocompletado de Android, a usar eficientemente los servicios de la nube de Azure, AWS, Google Cloud e incluso IBM (bluemix). He aprendido un montón sobre displays de e-ink, he avanzado en python (cada día me gusta más), he construido mi propia alexa y estoy experimentando con domótica y, por fi, estoy usando git extensivamente. Lo que más tiempo me ha quitado este año ha sido aprender los protocolos seguros de pagos con tarjetas de crédito (no, no voy a extenderme), conocimiento que espero que me sirva mucho tiempo porque lo he adquirido a base de sangre, sudor y lágrimas.

También he descubierto que arreglar ordenadores retro no es tan sencillo pero, aún así, es algo que me sigue fascinando. Mi colección retro ha aumentado con un MSX, un C64 (dos, uno no funciona), un Atari ST y, próximamente, un Amiga 500.

En el aspecto empresarial he aprendido que da igual la calidad del servicio que ofrezcas o la confianza que tengas, nadie te paga cuando corresponde. Que más vale tener fondos propios o una buena línea de crédito y, aún así, tu negocio se puede ir al carajo por un «error administrativo» de tu cliente que, curiosamente, sucede siempre justo antes de tener que pagarte.

En el aspecto personal he descubierto hasta que punto soy capaz de auto-explotarme. Trabajar fines de semanas y fiestas, estar hasta las 5 de la mañana en la oficina sin pensar siquiera que tu cliente no se lo merece y que, total, tampoco te lo va a pagar adecuadamente. Como deseo para el año que viene me pongo el no trabajar en fin de semana para ningún cliente que no me lo pague por adelantado y, en caso de hacer esos trabajos, tomarme días libres a cambio. A nadie le importa el tiempo que dedicas a trabajar… ¡despierta!

También he aprendido que la salud es un tesoro que no valoramos lo suficiente, aunque, a pesar de los ejemplos cercanos de personas que han tenido, o tienen, problemas importantes de salud, no he sido capaz todavía de concienciarme de ello. Si, he intentado ir al gimnasio regularmente, hasta que mi auto-explotación me lo ha impedido, he intentado seguir una alimentación sana hasta que mi frustración me ha llevado a comer compulsivamente de nuevo y he dejado pasar problemas de saludo porque me iban a restar tiempo para otras actividades cuando, en realidad, cualquier inversión en salud lo que va a darte es más tiempo de mejor vida.

Lo que quiero para el 2019

Quiero estar más tiempo con mi familia. Con toda mi familia y sin sentirme obligado a ello y sin hacerlo por compromiso.

Quiero trabajar menos en cosas que solo dan dinero y trabajar más en cosas que mejoren el mundo o que enriquezcan mi vida y la de los demás.

Quiero aprender a decir que no a los clientes, hasta ahora soy demasiado «fácil» de convencer

Quiero recuperar la fe en la especie humana, espero que el sentido común y el espíritu crítico vuelvan a todos antes de que sea tarde.

Quiero poder seguir haciendo lo que me gusta y disponer de tiempo para cuidarme, cuidar de mi familia y servir de mejor ejemplo a mis hijos.

En suma, quiero que el 2019 me permita descubrir a más buenas personas y me permita tolerar mejor a los que no lo son.


Seguro que me dejo un montón de cosas, tanto en lo que he aprendido como en lo que deseo para el 2019, pero si se una cosa… Que os deseo un Feliz y Próspero 2019.

Historias de un viejo informático

Aunque supongo que alguno de vosotros ya conoce la página a la que me refiero, no me queda más remedio que compartir con vosotros esta rara pieza de nostalgia informática que nos regala Macluskey.

En este enlace encontrareis la página de el cedazo con el resumen de todas las entradas de las historias de un viejo informático.

Estas amenas lecturas nos mostrarán como evolucionó la informática en nuestro país, vista desde la perspectiva de un informático de los tiempos heroicos.

Una lectura imprescindible para todos aquellos que han pasado algo de tiempo en esto de la informática o que pretenden dedicarse a ello en el futuro… Os la recomiendo encarecidamente.

Gracias Macluskey