Creación de scripts de monitoreo
realUptîme incorpora monitoreo funcional de cualquier servicio. Para permitir esta flexibilidad, el sistema incorpora compatibilidad con dos motores de pruebas: Selenium Nightwatch.JS, para pruebas basadas en navegador, y Apache Jmeter para pruebas multi protocolo.
Crear scripts de monitoreo con Selenium Nightwatch.JS
El objetivo de un script de monitoreo basado en navegador es validar el funcionamiento de una aplicación frente a un flujo de usuario interactivo. La tecnología de Selenium Nightwatch.JS permite dirigir un navegador emulando la actividad del usuario en base a interacciones con la página.
El formato de los scripts corresponde a un programa en lenguaje JavaScript, codificado como texto plano, con la extensión de archivo ".js".
Supongamos un caso de uso: somos una institución financiera, y deseamos monitorear el servicio de consulta de movimientos.
El flujo para acceder al servicio es bastante simple: el usuario se conecta a la página de la institución, ingresa sus credenciales de usuario, y luego de ingresar, selecciona la opción que le permite visualizar la información requerida.
La estructura típica de un script es similar al siguiente ejemplo:
// los comentarios pueden introducirse con 2 slash al principio de la línea
// define variables para usar en el resto del script
const TIMEOUT = 30000;
// en este caso, define un selector del DOM como variable
// es práctica recomendada para facilitar la mantención de scripts
// cuando hay cambios en la página web
const ru_doms_7= `#theSideNav > a:nth-child(3)`;
var baseUrl = `https://ua.realuptime.net/net-banking/home.php`;
// cada paso es una funcion - la descripción va entre comillas
module.exports = {
"paso 1 conectar al home page": function(browser) {
bindHelpers(browser);
bindComponents(browser);
// a continuación se hacen tres llamadas encadenadas
browser
// abre la URL con una resolución de pantalla especifica
.url(`${baseUrl}`, 1024, 768, `navegar a banco dolphin`)
// espera a que este disponible el elemento 'body' de DOM
.waitForElementVisible("body", TIMEOUT)
// a continuación captura la pantalla
// la ubicación ./reports/ es la única válida para guardar las capturas de pantalla
.saveScreenshot('./reports/home.png');
}
,
"paso 2 ingresar al banco en línea" : function (browser) {
browser
// utiliza por defecto CSS para seleccionar elementos
.useCss()
// espera que aparezca un campo de entrada
.waitForElementVisible(`body > div.flex-container-background > div:nth-child(2) > div > form > div:nth-child(2) > input[type=text]`, TIMEOUT)
// cambia el valor del campo nombre de usuario
.setValue('css selector', 'body > div.flex-container-background > div:nth-child(2) > div > form > div:nth-child(2) > input[type=text]', "racheal")
// espera un segundo
.pause(1000)
// cambia el valor del campo contraseña
.setValue('css selector', 'body > div.flex-container-background > div:nth-child(2) > div > form > div:nth-child(3) > input[type=password]', "password")
// espera un segundo
.pause(1000)
// espera que aparezca el boton de iniciar sesión
.waitForElementVisible(`body > div.flex-container-background > div:nth-child(2) > div > form > div:nth-child(4) > button`, TIMEOUT)
// hace click en el elemento
.click(`body > div.flex-container-background > div:nth-child(2) > div > form > div:nth-child(4) > button`, `CSS`, `Click Login`)
// espera tres segundos
.pause(3000)
// captura la pantalla
.saveScreenshot('./reports/after_login.png')
}
,
"paso 3 consulta transacciones" : function (browser) {
browser
.useCss()
// espera por un elemento del menú, usando la variable definida al principio
.waitForElementVisible(ru_doms_7, TIMEOUT)
// hace click en el elemento
.click(ru_doms_7, ru_domst_7, `Click my transactions`)
// espera 5 segundos
.pause(5000)
// captura evidencia
.saveScreenshot('./reports/my_transactions.png')
// cierra el navegador
.end();
}
};
Puede usar este ejemplo como plantilla para el desarrollo de sus scripts.
Cuando un script es ejecutado por el sistema, cualquier elemento que no se presente de todos aquellos requeridos por el script, generará un error y el sistema identificará el paso específico donde ocurrió el error y el error específico (típicamente 'elemento no se encuentra').
Es posible realizar validaciones del contenido de la pantalla del usuario durante la navegación, mas allá de la presencia de elementos específicos, también es posible realizar cualquier tipo de validación con los resultados que se despliegan, usando la potencia de JavaScript y la librería Nightwatch.JS.
Antes de cargar los scripts en los monitores de servicio asegúrese de probarlos exhaustivamente en forma local para asegurar que cubren adecuadamente el caso de uso. Para ello se requiere la instalación de Nightwatch.JS en su computador.
Recursos externos disponibles para apoyar la creación de scripts Nightwatch.JS
Nightwatch.JS es una tecnología de amplia utilización en la comunidad de calidad de software. Hemos recopilado algunos recursos externos que le ayudarán a crear sus propios scripts:
- Manual de referencia Nightwatch.JS
- Descarga e instalación Nightwatch.JS
- Descarga gratuita editor cotEditor (Mac)
- Descarga gratuita editor Notepad++ (Windows)
Crear scripts de monitoreo con Apache JMeter
La tecnología de JMeter es ideal para crear monitors de servicios de cualquier tipo, que no requieran de un usuario en un navegador, tales como API Rest, WebServices SOAP, RDBMS.
La verificación del servicio se define en JMeter sin importar los componentes que se usen ni la cantidad de éstos, con lo cual el monitoreo de un servicio puede ser bastante sofisticado.
Los únicos requisitos de un script JMeter para ser compatible con el sistema, es que incluya los siguientes elementos:
-
Thread Group: La prueba debe tener un thread group definido con
- Loop count: 1
- Action to be taken after a sampler error "Continue"
-
Dentro del Thread Group, incorporar un "Transaction Controller" con los parámetros por defecto.
- Agregar al transaccion Controller todos los "Samplers" que se desea usar para la prueba, Assertions y cualquier otro componente Jmeter
- Agregar al transaction Controller un Listener de tipo "Summary Report"
- En "Write results to file" agregar el nombre testresult.csv
Supongamos el siguiente caso de uso. Nuestra organización ofrece una API para consultar el estado de una solicitud de servicio realizada por los clientes. Esta API es accesible desde Internet, sin autenticación, en la dirección:
https://acme_org.com/estado_solicitud/NUMERO
si es provista de un numero válido de solicitud de servicio, retornará el estado en que se encuentra (INGRESADA o RESUELTA) o en caso que el numero no se provea, sea invalido o desconocido, retornará "DESCONOCIDA".
La estructura de la respuesta provista por la API es un JSON con el resultado de la consulta para el numero solicitado, por ejemplo:
{
"solicitud" : "12345678",
"resultado" : "RESUELTA"
}
Nuestro objetivo es asegurarnos que la API esté siempre disponible y que los resultados que provea son correctos, esto es, debe entregar una respuesta válida en un tiempo máximo de 20 segundos.
Con todos estos antecedentes, pasamos a construir el script, con los siguientes elementos:
Los componentes a incorporar son los que aparecen en la siguiente figura
La configuracion del Transaction Controller no tiene ningún parámetro definido.
Se definen los parámetros para el HTTP Request con los datos que conocemos de la API.
Notese que estamos pasando un numero de solicitud que será siempre el mismo.
En los parámetros avanzados definimos el tiempo de espera máximo en 20.000 milisegundos
La configuración del Header Manager nos permite establecer variables requeridas por el protocolo en el encabezado de cada llamada a la aPI
Se agrega un JSON extractor (Usando notación JsonPath) para recibir el valor de la variable respuesta en una variable JMeter con el mismo nombre
Se agrega un Response Assertion para evaluar el valor de la variable retornada en el JSON y compararlo con las variables conocidas.
Finalmente, se incorpora el Summary Report para que los valores sean leídos por la plataforma
Con estos elementos el script JMeter está completo. En este momento se puede cargar el archivo al definir un monitor para este servicio y detectar cualquier problema de funcionamiento en nuestra API.
Recursos externos disponibles para apoyar la creación de scripts JMeter
Apache JMeter es una tecnología de amplia utilización en la comunidad de calidad de software. Hemos recopilado algunos recursos externos que le ayudarán a crear sus propios scripts: