Monitorización WUX con WUX server y Selenium 3
Introducción
La monitorización de experiencia de usuario consiste en realizar grabaciones de tareas automatizadas tanto de navegación web (PWR/WUX) como de interacción con el escritorio y las aplicaciones del sistema Windows (PDR). Estas grabaciones pueden consistir desde un clic de un ratón sobre un navegador web, escribir un texto o realizar una búsqueda en la web, hasta abrir una aplicación en el escritorio. Esto permite configurar las funciones y grabarlas de manera automática para su posterior ejecución en busca de resultados.
Diferencias entre monitorización UX y WUX
Ambos sistemas de monitorización sirven para la ejecución de tareas automatizadas de navegación web mediante el sistema Pandora Web Robot Daemon (PWRD).
El sistema UX realiza estas monitorizaciones mediante el Agente Software instalado en una máquina, mientras que la monitorización WUX (Web User Experience) se basa en un servidor integrado dentro de Pandora FMS.
PWRD es un servicio que provee las herramientas necesarias para automatizar las sesiones de navegación web. Para ello utiliza un archivo que contiene una lista de las acciones necesarias para navegar por el portal web a monitorizar.
Adicionalmente, la monitorización UX permite la ejecución de tareas automatizadas que interactúan con el escritorio y las aplicaciones del sistema MS Windows®. Este tipo de tareas no se pueden realizar con WUX.
Pandora FMS UX es un sistema que ejecuta tareas automatizadas, entregando a Pandora FMS un informe con los resultados de las ejecuciones, tiempos empleados y capturas de pantalla con los posibles errores encontrados.
Si dispone de un sistema de automatización de tareas, Pandora FMS UX también permite ejecutar los guiones (scripts) que ya tenga realizados y monitorizar su ejecución.
Es importante concretar el uso de este tipo de monitorización. Ambos métodos se basan en la ejecución de las monitorizaciones mediante complemento (plugin) en los Agentes Software instalados en las máquinas correspondientes.
Monitorización PWR UX
Teniendo en cuenta las diferencias entre monitorización UX y WUX, a grandes rasgos la monitorización UX debe seguir una serie de prerrequisitos relacionados al entorno a monitorizar, con los siguientes pasos previos:
- Instalar Java®.
- Configurar un perfil en Mozilla Firefox®.
- Instalar un servicio Selenium®.
- Distribuir PWR en el sistema.
- Instalar el IDE de Selenium® para Mozilla Firefox®.
- Grabar una sesión PWR.
Para la ejecución estándar de sesiones pregrabadas utilice el Plugin Pandora UX en su última versión 28-04-2022.
Experiencia de Usuario Web (WUX) con Selenium 3
Para el despliegue de Selenium en los servidores WUX se utilizará un pila o stack de contenedores para un rápido despliegue y un fácil escalado.
Configuraciones previas
Deben estar instalados Docker y Docker Compose; se recomienda el uso de Rocky Linux 8 como sistema operativo base.
Para instalar Docker siga la documentación, de acuerdo a su sistema operativo:
Para Selenium utilice las imágenes oficiales para la instalación y despliegue del stack:
En el repositorio de Selenium están disponibles distintas imágenes con navegadores. Para Pandora FMS se recomienda contenedores de Mozilla Firefox® y Google Chrome®.
Despliegue del stack de Selenium
Para desplegar el stack de Selenium debe crear un fichero en formato YAML con la configuración necesaria:
# To execute this docker-compose yml file use `docker-compose -f up`
# Add the `-d` flag at the end for detached execution
version: "3"
services:
selenium-hub:
image: pandorafms/pandorafms-selenium-hub
mem_limit: 2G
container_name: selenium-hub-v3
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "4m"
mode: "non-blocking"
environment:
- TZ=Europe/Amsterdam
ports:
- "4444:4444"
chrome:
image: pandorafms/pandorafms-selenium-node-chrome
mem_limit: 2G
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "4m"
mode: "non-blocking"
environment:
- TZ=Europe/Amsterdam
- HUB_HOST=selenium-hub
- HUB_PORT=4444
firefox:
image: pandorafms/pandorafms-selenium-node-firefox
mem_limit: 2G
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "4m"
mode: "non-blocking"
environment:
- TZ=Europe/Amsterdam
- HUB_HOST=selenium-hub
- HUB_PORT=4444
En el ejemplo anterior debe realizar las modificaciones necesarias para cada caso, tales como límite de memoria, zona horaria, cantidad de nodos, etcétera.
Se puede guardar el fichero con el nombre docker-compose.yml para hacer más fácil su identificación.
Para levantar el contenedor con la configuración que se ha definido, basta con ejecutar (sustituya <compose-file> con el nombre que se escogió para el archivo):
docker-compose -f <compose-file> up -d
Para comprobar los servicios corriendo en el contenedor:
docker-compose -f <compose-file> ps
Para ver el estado y los logs de los servicios de Selenium:
docker-compose -f <compose-file> logs
Una vez realizadas las comprobaciones pertinentes, para verificar que el grid está funcionando correctamente y los workers se han registrado tal y como se ha definido en el fichero de configuración, será necesario acceder a la siguiente URL:
http://<ip_selenium_server>:4444/grid/console
Si se necesita aumentar el número de workers:
docker-compose -f <compose-file> scale chrome=X firefox=Y
Infraestructura del servicio Selenium
Selenium funciona como un HUB en el que se levanta un contenedor que actúa como grid o cuadrícula donde desplegar los contenedores worker que se necesiten.
Configuración de Pandora FMS
Para la utilización del modo centralizado (WUX) es necesario aplicar la siguiente configuración al Pandora FMS server.
Independientemente del modo elegido, una vez iniciado se puede empezar a asignar ejecuciones de sesiones de navegación, agregando los parámetros de configuración de WUX Server al fichero de configuración del Pandora FMS server.
Agregar la siguiente configuración al final del fichero /etc/pandora/pandora_server.conf (sustituir <ip_wux_host> por la dirección IP del servidor, si es el mismo servidor que corre el Servidor Pandora FMS, 127.0.0.1):
wuxserver 1 wux_host <ip_wux_host> wux_port 4444
El fichero de configuración del servidor cuenta con un nuevo token para limpiar las sesiones que puedan estar encoladas cada vez que se inicia el Pandora FMS server.
clean_wux_sessions 1 #(default)
Gestión de hilos de Pandora FMS
- La gestión de los hilos del
wuxserverse hace automáticamente al iniciar el servicio depandora_server. - Se realiza teniendo en cuenta el número de nodos de un navegador MENOR que haya en el hub de Selenium. Por ejemplo:
- Si en el hub hay configurados 2 nodos de Firefox y 2 de Chrome, el número de hilos del
wuxserverserá de 2. - Si en el hub hay configurados 1 nodo de Firefox y 4 de Chrome, el número de hilos será de 1.
- Si en el hub hay configurados 6 nodos de Firefox, el número de hilos será de 6.
Tenga en cuenta que cada hilo indica las sesiones que pueden enviarse de manera simultánea desde el wuxserver al hub de Selenium.
Anexo: Añadir workers para Internet Explorer y Microsoft Edge
En caso de ser necesario lanzar transacciones web contra navegadores de Microsoft®, es necesario configurar una máquina (física o virtual) con la versión de MS Windows® deseada y configurar el controlador o driver siguiendo la documentación oficial.
Documentación para la instalación del driver de MS Internet Explorer®:
github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
Se recomienda el uso del driver 3.141 en su versión de 32 bits para evitar los problemas de rendimiento de la versión de 64 bits.
Documentación para la instalación del driver de Microsoft Edge®:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Para la ejecución de Selenium, será necesario tener instalado Java® en el dispositivo Windows®.
Para comprobar si se dispone de Java®, ejecutar:
java -version
Se debe obtener una salida parecida a la siguiente:
Es necesario también el fichero JAR de Selenium para ejecutar el servidor localmente y registrarlo en el grid. Se puede obtener en:
https://www.selenium.dev/downloads/
Para iniciar el servidor Microsoft Edge® se debe ejecutar en una terminal en el directorio donde tengamos el fichero JAR lo siguiente:
java -jar selenium-server-standalone-<VER>.jar -port 5555 -role node -hub http://<ip_selenium_server>:4444/grid/register -browser "browserName=MicrosoftEdge, platform=WINDOWS, maxInstances=1"
Para iniciar el servidor Internet Explorer® el comando es similar, pero se debe especificar la ruta <PATH> del driver que ha descargado:
java -Dwebdriver.ie.driver=<PATH>IEDriverServer.exe -jar selenium-server-standalone<VER>.jar -port 5555 -role node -hub http://ip_selenium_server:4444/grid/register -browser "browserName=internet explorer, platform=WINDOWS, maxInstances=1"
Se debe configurar el cortafuegos de MS Windows® para permitir el tráfico en los puertos especificados en el comando de ejecución. En el caso de los ejemplos anteriores: 5555 y 4444.
Grabación
Para la versión 3 de Selenium serán compatibles tanto las grabaciones antiguas como las nuevas, aunque no se garantiza la compatibilidad total con versiones antiguas.
Para poder grabar una nueva sesión, se deberá instalar la extensión Selenium IDE en el navegador que se desee.
Firefox
https://addons.mozilla.org/es/firefox/addon/selenium-ide/
Chrome
https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd
El icono
será el que permita iniciar el entorno de grabación una vez instalada la extensión.
Al hacer clic abrirá un menú que permite iniciar nuevos proyectos de grabación.
Una vez realizada la grabación se tendrá como resultado algo parecido a esto:
Aparte de la funcionalidad provista por Selenium, Pandora FMS dispone de comandos personalizados para extraer información del objetivo a monitorizar.
Comandos
La lista de comandos compatibles para usarlos en Pandora FMS se puede encontrar en el siguiente enlace.
Recomendaciones y sugerencias al realizar las grabaciones
A continuación se detalla una serie de recomendaciones y consejos a la hora tanto de realizar la grabación de las transacciones con Selenium IDE como para integrar con Pandora FMS los comandos más complejos:
- Dividir la transacción en fases siempre que sea posible. De esta forma los módulos que se crearán tanto de estado como tiempos y las capturas de pantalla estarán segmentados y será más sencillo localizar dónde ha fallado la transacción.
- Utilizar el comando de Selenium
set speedywait forpara evitar falsos negativos. Al ejecutar una transacción, los comandos de Selenium no tienen ningún retraso o delay por defecto desde que termina uno hasta que se ejecuta el siguiente, y algunos tampoco tienen tiempo de finalización o timeout. Esto hace que la transacción se ejecute muy rápidamente en el menor tiempo posible, pero al hacerlo tan rápidamente, si la web es algo lenta o tarda un segundo de más en cargar es posible que el chequeo termine en fallo. Por ejemplo, tras ejecutar un comandoclicky cambiar de página, si después tiene un comando que interactúe con un elemento a la nueva página y la carga de esta se retrasa un segundo, no encontrará el elemento en la nueva página y el chequeo acabará en fallo. Para evitar estas situaciones, existe el comandoset speed, que añade un delay con la cantidad de milisegundos que se le indique en el objetivo o Target entre cada comando. Se recomienda establecerlo al inicio de la transacción. También existen, para los casos en los que es sabido que la carga de una página o aparición de un elemento se puedan demorar unos segundos, los comandoswait for element present,wait for visibleywait for texten los que puede establecer el tiempo en milisegundos que esperará para que el elemento aparezca en la página antes de marcar la transacción como fallo. Es importante destacar que el uso de estos comandos, si bien aumentan sobremanera la fiabilidad del chequeo, también incrementarán el tiempo que se tarda en ejecutar la transacción. - Realizar comprobaciones de los elementos. Para esto se usarán comandos como
assertyverify, en sus distintas vertientes. Acabar una transacción con un clic, por ejemplo, no nos garantiza que la nueva página que deba abrir el elemento en el que se hace clic se abra, solo que es posible hacer clic en el elemento. Si después del clic introducimos unverify texta un texto que se sepa que solo se va a cargar después de realizar el clic, esa sí sería una forma de comprobar que la página a la que nos manda el clic está disponible. - Utilizar
store window handleen transacciones en las que se vaya a cambiar de ventanas. El cambio de ventana (con unselect window) puede dar fallo si no se ha almacenado previamente un identificador a la ventana inicial. - Utilizar
xpathcuando falle el Target por identificador de CSS o cuando quiera buscar contenido en la página. Por defecto el grabador de Selenium IDE introduce en el Target del elemento el localizador del CSS, pero también graba el localizador porxpath, por tanto es posible ver todos los localizadores que guarda si pulsa en la caja del Target en el grabador:
Además, utilizando rutas por xpath, es posible buscar textos dentro de las etiquetas de las páginas para realizar grabaciones mucho más dinámicas. En la captura de pantalla anterior observe que es posible usar un xpath que busque el texto “Innovadores de la monitorización” en todas las etiquetas span de la página, no en un locator en concreto.
- Uso correcto del comando
execute script. Este comando ejecuta un fragmento de código de JavaScript en la ventana en la que está ubicado en la transacción. Se recomienda leer la guía para conocer su uso y las diferentes opciones que ofrece: https://ui.vision/rpa/docs/selenium-ide/executescript . No obstante, el uso de las variables almacenadas previamente (por un comandostore textpor ejemplo) debe ir entre comillas dobles para que el webdriver de Pandora FMS las interprete correctamente. Aquí hay un ejemplo de una variable almacenada constore texty su posterior uso enexecute scriptde forma que el servidor de Pandora FMS la interpreta correctamente. Note que este uso de la variable entre comillas fallará al ejecutar el script en el grabador de Selenium IDE:
Gestión y visualización de datos
Crear un módulo de análisis web en Pandora FMS Console
Una vez tenga una sesión de navegación grabada, es hora de desplegarlo como Módulo en la Consola de Pandora FMS.
Para ello acceda a cualquier agente asociado a un servidor con la funcionalidad WUX habilitada y cree un Módulo de tipo Análisis web seleccionando la opción Create a new web analysis module:
Haga clic en el botón Create y luego debe rellenar todos los campos que presenta el formulario:
Name
Módulo WUX (Padre); recuerde que todos los submódulos con los resultados de la monitorización serán dependientes de este nuevo módulo.
Run performance tests
Especifica el lanzar pruebas de rendimiento, es decir, monitorizar no solo la experiencia de navegación, sino también las estadísticas de rendimiento del acceso al sitio web objetivo.
Execute tests from
Indica el servidor WUX que ejecutará el chequeo.
Browser
Navegador web con el cual ejecutar el chequeo.
El navegador indicado debe figurar en el grid o servidor de Selenium utilizado por el servidor WUX.
User data dir
(Versión 764 o posterior) Opcional: Permite especificar un directorio para datos.
La opción User data dir solamente trabaja en Google Chrome web browser.
Profile
(Versión 764 o posterior) Opcional: Permite especificar un perfil de usuario. Si el nombre de perfil no existe, utiliza el perfil por defecto.
La opción Profile solamente trabaja en Google Chrome web browser.
Accept insecure certificates
Si se habilita se aceptará cualquier certificado no seguro (autofirmado, expirado, etc.) que forme parte de la navegación.
Esta opción solo está disponible para los navegadores Google Chrome® y Mozilla Firefox®, y solo tendrá efecto si el chequeo es ejecutado por un servidor de Selenium 3.
Historical data
Guarda o no la información histórica de los módulos que monitorizan esta experiencia de usuario.
Área de texto
Copie (o cargue con el botón Browse…) el contenido de los ficheros de la sesión de navegación que ha grabado previamente.
Intervalo de tiempo de ejecución del módulo (en segundos).
Retries
Número de reintentos de lanzamiento del módulo.
Macros personalizadas
El funcionamiento de las macros personalizadas implica la sustitución de determinadas cadenas de texto presentes en el fichero de sesión de navegación por ciertos valores personalizables.
En el caso de módulos de análisis web, se ha mejorado esta funcionalidad, permitiendo macros dinámicas que permiten que estos valores se traduzcan en fechas y horas variables.
¿Por qué esta funcionalidad?
Suponga que necesita monitorizar, mediante una sesión de navegación, el correcto funcionamiento de una aplicación web de reserva de salas de reuniones.
Si estableciera una fecha y hora fija a la hora de rellenar los datos del formulario, es posible que el sistema cancelase la reserva porque en algún momento quede en el pasado; por ejemplo, podría estar intentando reservar una sala para la semana pasada.
También es posible que encontremos con un máximo de tiempo para poder efectuar esa reserva, y que el sistema nos obligue a reservar la sala dentro de un periodo de tiempo concreto, por ejemplo no superior al mes vigente.
Para evitar tener que editar la macro cada pocos días, y despreocuparse del apartado de configuración, puede usar las macros dinámicas, indicando al sistema que reserve la sala siempre para el día siguiente al momento de realizar el test.
Para poder usar esta funcionalidad, los valores deberán tener un formato específico, logrando las siguientes sustituciones posibles:
@DATE_FORMAT: fecha/hora actual con formato definido por el usuario.@DATE_FORMAT_nh: horas.@DATE_FORMAT_nm: minutos.@DATE_FORMAT_nd: días.@DATE_FORMAT_ns: segundos.@DATE_FORMAT_nM: mes.@DATE_FORMAT_nY: años.
Donde “n” puede ser un número sin signo (positivo) o negativo.
Y FORMAT sigue el estándar de strftime de Perl
Ejemplos:
@DATE_%Y-%m-%d %H:%M:%S @DATE_%H:%M:%S_300s @DATE_%H:%M:%S_-1h
Visualización de los datos
La información generada por WUX se visualizará en forma de módulos de la siguiente forma. El habilitar la vista en modo jerárquico, en la lista de módulos, ayudará a visualizar la información de forma mucho más clara:
Dentro de esta jerarquía encontraremos los siguientes módulos:
- módulo_Global_Status: Indicará el estado global de la navegación completa.
- En el caso de que exista una grabación da el estado de la grabación WUX.
- En el caso que se habilite los run performance Test pero no se incluya la grabación, el estado del módulo Global Status es el de la comprobación que se realiza al obtener estos módulos.
- módulo_Global_Time: Indicará el tiempo global empleado en la navegación completa.
- módulo_Global_Screenshot: Contiene una imagen con el resultado del error de navegación, solo se generará en caso de error.
- módulo_Phase X: Nombre de fase_Status: Indicará el estado de la navegación durante la fase X.
- módulo_Phase X: Nombre de fase_Time: Indicará el tiempo empleado en la fase X.
Ejemplo: Vista de captura de error.
Atención: Si ha actualizado desde versiones anteriores a Pandora FMS 7.0NG 712 debe realizar un pequeño cambio.
Para poder almacenar las capturas de pantalla generadas por WUX Server, deberá lanzar las siguientes operaciones en su esquema de base de datos:
alter table tagente_estado modify column datos mediumtext; alter table tagente_datos_string modify column datos mediumtext;
Si no realiza estas acciones las capturas podrían verse cortadas.
Accediendo a la sección WUX del agente puede ver detalles adicionales de la transacción y sus fases:
Las estadísticas del sitio web se resumen en los siguientes conceptos:
- Stats_TT: Tiempo total en obtener el sitio web.
- Stats_TDNS: Tiempo total en resolver la dirección IP del objetivo.
- Stats_TTCP: Tiempo empleado en conectar vía TCP.
- Stats_TSSL: Tiempo empleado en establecer comunicación SSL.
- Stats_TST : Tiempo transcurrido hasta que inició la transferencia de datos.
- Stats_TTC: Tiempo transfiriendo datos; agrupará todos los tiempos de transferencia de recursos.
- Stats_TTR: Tiempo empleado en transferir el contenido de la página.
- Stats_TTR_main: Tiempo empleado en transferir el código HTML.
- Stats_TTR_image: Tiempo empleado en transferir los recursos de tipo imagen (
png|jpg|jpeg|bmp|tiff|gif|webp|svg). - Stats_TTR_css: Tiempo empleado en transferir las hojas de estilo.
- Stats_TTR_js: Tiempo empleado en transferir los ficheros JavaScript.
Asignar alertas a un módulo de análisis web
Las alertas asociadas a los módulos de análisis web siguen la misma dinámica de funcionamiento que todo el sistema de alertas en Pandora FMS.
Por compatibilidad se recomienda asignar las plantillas de alertas sobre los subelementos autogenerados por el módulo de análisis web, como por ejemplo:
- El estado de la navegación global.
- Alertas sobre umbrales de tiempos.
- Alertas con plantilla de aviso puesta en “siempre” para los módulos captura de imagen de resultados.
Nuevos widgets para Dashboards
Para poder representar la información de la navegación de usuario, se han agregado dos nuevos tipos de widget:
Widget de estado de las fases de navegación
Widget de estadísticas del sitio web
Lista de comandos compatibles
Comandos internos
- run: Ejecuta un test.
- build_transaction: Preconstruye una transacción en base al test pasado (interna)
- get_transaction: Devuelve la transacción actual, siempre se usa para recuperar los resultados, el orden de las fases y las variables.
- sessions: Recupera la lista de sesiones presentes en el hub.
- kill_sessions: Elimina todas las sesiones existentes en el hub.
Comandos Extra
- extract: Combina source y código propio para extracción.
- storeExtraction: Almacena el resultado de extract en una variable.
- dispatchEvent: Dispara un evento JavaScript sobre un elemento dado.
- takeElementScreenshot: Realiza una captura de pantalla de un elemento específico.
- phase_start: Inicia una fase y transforma el test en una transacción WUX.
- phase_end: Completa una fase.
Comandos que generan módulos
- getValue: Extrae un valor.
getValue;nombre_modulo;tipo_modulo;REGEX_de_captura
- getVariable: Extrae un valor específico de una variable.
getVariable;nombre_modulo;tipo_modulo;nombre_variable
- getScreenshot: Extrae una captura de pantalla.
getScreenshot;nombre_modulo
Todos los comandos propios deben aparecer en el fichero de test (.side) como comentarios. En caso contrario, fallará a la hora de probar el test en la extensión de Selenium.
Comandos proporcionados por la extensión de grabación (v3)
- addSelection
- answerOnNextPrompt
- assert
- assertAlert
- assertChecked
- assertConfirmation
- assertEditable
- assertElementPresent
- assertElementNotPresent
- assertNotChecked
- assertNotEditable
- assertNotSelectedValue
- assertNotText
- assertPrompt
- assertSelectedValue
- assertSelectedLabel
- assertText
- assertTitle
- assertValue
- check
- chooseCancelOnNextConfirmation
- chooseCancelOnNextPrompt
- chooseOkOnNextConfirmation
- click
- clickAt
- close
- doubleClick
- doubleClickAt
- dragAndDropToObject
- echo
- editContent
- else
- elseIf
- end
- executeScript
- executeAsyncScript
- if
- mouseDown
- mouseDownAt
- mouseOver
- mouseUp
- mouseUpAt
- open
- pageLoadTimeout
- pause
- removeSelection
- select
- selectFrame
- selectWindow
- sendKeys
- setSpeed
- setWindowSize
- store
- storeAttribute
- storeJson
- storeText
- storeTitle
- storeValue
- storeWindowHandle
- storeXpathCount
- submit
- type
- uncheck
- verify
- verifyChecked
- verifyEditable
- verifyElementPresent
- verifyElementNotPresent
- verifyNotChecked
- verifyNotEditable
- verifyNotSelectedValue
- verifyNotText
- verifySelectedLabel
- verifySelectedValue
- verifyText
- verifyTitle
- verifyValue
- waitForElementEditable
- waitForElementNotEditable
- waitForElementNotPresent
- waitForElementNotVisible
- waitForElementPresent
- waitForElementVisible
- waitForText
- webdriverAnswerOnVisiblePrompt
- webdriverChooseCancelOnVisibleConfirmation
- webdriverChooseOkOnVisibleConfirmation

















