Usualmente cuando hablamos de pruebas funcionales nos imaginamos una interfaz gráfica en la cual se ejecutan casos de prueba, en esta oportunidad voy a contar sobre un proyecto de pruebas funcionales del sistema financiero, complementando de esta manera un post anterior de pruebas de performance, en el cual la interfaz del sistema es un servidor “escuchando” en una ip y un puerto.
La aplicación se comunica mediante el protocolo ISO 8583 (utilizado por los ATM y POS). Este estándar es adaptado por cada organización a sus necesidades. El sistema que probamos utiliza mensajes ISO 8583 para solicitar/responder autorizaciones a transacciones bancarias.
La entrada y la salida a la funcionalidad a probar era un archivo cuyo formato se define en el estándar para transacciones financieras ISO 8583. Cada mensaje ISO8583 consta de una lista de campos, cada campo tiene un identificador y un valor asociado, tanto para el mensaje ISO enviado como para el mensaje ISO recibido (respuesta), cada organización define qué campos usará y define qué valores pueden tomar.
Cómo en cualquier proyecto de pruebas fue necesario comprender el protocolo, identificar los campos relevantes, los campos adaptados por la organización y para cada tipo de transacción, qué conjunto de campos están involucrados y qué valores pueden tomar.
El problema al cual nos enfrentamos tiene un gran número de variables de entrada y de salida y estas variables a su vez tienen un gran número de valores posibles. Cada campo del mensaje es considerado una variable, por ejemplo el campo del mensaje recibido que contiene el código de respuesta (si la autorización fue aprobada o rechazada) tiene 66 posibles valores.
Se diseñaron casos de prueba utilizando las técnicas valores limites, clases de equivalencia y combinación por pares y luego se crearon manualmente algunos casos relevantes para el problema planteado. Luego de tener el diseño de casos todavía teníamos que generar los mensajes ISO 8583, enviarlos y recibirlos.
Para enviar y recibir estos mensajes se debía invocar una funcionalidad en un servidor conocido que escucha en un puerto conocido. Debido a que no se cuenta con interfaz gráfica nos vimos obligados a implementar una herramienta (cliente) para lograr la comunicación con el servidor mencionado.
La herramienta fue llamada “ISO Test tool”. Brinda una interfaz amigable para establecer comunicación con un servidor y enviar/recibir mensajes mediante el protocolo ISO8583, la herramienta crea y mantiene un log histórico de transacciones enviadas y recibidas para su posterior análisis.
De esta forma utilizando “ISO Test tool” cada caso de prueba se transformó manualmente en un mensaje ISO 8583 de salida y cada mensaje ISO de entrada (respuesta) se interpretó como el resultado obtenido, que luego se comparó con el resultado esperado para evaluar el caso de prueba y determinar si el mensaje de respuesta es el esperado. Cabe destacar que si bien este proceso de generación de mensajes ISO de salida y revisión de mensajes ISO de entrada se hizo manualmente, la interfaz brindada por “ISO Test tool” facilitó mucho el trabajo.
Este proyecto que en sus inicios parecía de una complejidad extrema culminó en forma exitosa, logrando testear funcionalidades que se exponen mediante el protocolo ISO8583, gracias a “ISO Test tool” y a un adecuado diseño de casos de prueba.