En el laboratorio de Ensayos de Plataformas del CES realizamos usualmente Performance Testing a aplicaciones web que ejecutan sobre el conocido protocolo abierto HTTP, para lo que utilizamos algunas herramientas, ya sean pagas o gratuitas, como ser Microsoft Visual Studio Team System, JMeter, OpenSTA, entre otras. Las pruebas de performance (a diferencia de las pruebas funcionales) necesitan manejarse a nivel de protocolo para poder ser más eficientes y simular cientos de usuarios en una sola máquina.
Pero, ¿qué sucede si queremos realizar pruebas de performance de aplicaciones que manejan protocolos distintos y quizás menos usuales que HTTP? En muchos casos, las herramientas que presentamos anteriormente pueden ser capaces de soportar directamente el protocolo, o al menos brindarnos la oportunidad de simularlo luego de algunas configuraciones adicionales. Si este no es el caso, no queda otra alternativa que entender en detalle las especificaciones del protocolo e implementar por cuenta propia módulos o herramientas que permitan establecer una comunicación, y en particular para las pruebas de performance, que permitan generar cierta carga parametrizable mediante este protocolo.
En varios proyectos del CES en el sector financiero nos hemos encontrado con un protocolo ampliamente difundido en estos entornos, este es el ISO8583. Este protocolo es utilizado para el intercambio de información financiera, principalmente por ATMs (Automatic Transaction Machine) y POS (Point of Sale). En definitiva, cuando realizamos un retiro de un cajero automático o una compra en un local de venta utilizando nuestra tarjeta de crédito/débito, estamos estableciendo una comunicación via ISO8583 con una institución financiera, cuyo sistema de administración de tarjetas se encargará de procesar la petición recibida y enviar una respuesta indicando el resultado de la transacción. Este componente que procesa la información, típicamente se llama Switch Financiero.
Como mencionabamos previamente, debido a que ninguna de las herramientas disponibles en nuestro laboratorio fue capaz de soportar naturalmente el ISO8583, optamos por desarrollar nuestra propia herramienta generadora de carga, la cual fue desarrollada en Java. Cabe comentar de todos modos que, en el mundo open source, se pueden encontrar diversas herramientas que implementan este protocolo, permitiendo enviar mensajes mediante el mismo hacia un switch financiero (problema también abordado en el CES y que comentaremos en futuros post sobre experiencias de Testing Funcional), pero ninguna de ellas cumple el requerimiento fundamental de toda prueba de performance: permitir la generación automática de carga masiva. Luego de varios meses en los cuales debimos entender la especificación del estándar y desarrollar la aplicación acorde al mismo, junto con posteriores modificaciones de mejora logramos obtener una herramienta estable capaz de soportar hasta 200 transacciones por segundo en una única máquina de escritorio, cifra más que aceptable en un principio.
El contar con esta herramienta, y poder utilizarla en conjunto con otras para poder simular todos los puntos de entrada de un core financiero, nos ha permitido llevar adelante exitosamente múltiples proyectos en los cuales ha estado involucrado nuestro laboratorio, logrando generar la carga requerida para poder cumplir los objetivos primordiales de una prueba de performance. En posts subsecuentes estaremos describiendo en detalle cuales son estos objetivos.