Como ya se explicó en un artÃculo anterior SeleniumGrid es un sistema remoto de ejecución de navegadores web, en esta ocasión vamos a combinar jMeter + SeleniumGrid para poder realizar los tests de forma distribuida pero aprovechando todas las faciilidades que nos brinda jMeter.
Antes de empezar con los tests montaremos una SeleniumGrid como se describe en este anterior artÃculo pero al utilizar la SeleniumGrid desde jMeter hay ciertas limitaciones como no poder pasarle los parámetros necesarios de configuración del navegador, deberÃamos enviarle los parámetros:
"args": [
"--headless",
"--no-sandbox",
"--disable-dev-shm-usage"
]
En cambio se envÃan:
"args": [
],
Parece que no hay solución, a través de jMeter no se pueden indicar los goog:chromeOptions:
https://stackoverflow.com/questions/49239525/how-to-use-chromeoption-and-desirecapabilities-in-jmeter-webdriver-sampler
Looking into ChromeDriverConfig.java it isn’t something you can currently control with the WebDriver Sampler.
En el nodo de la seleniumGrid habrá que arrancar un servidor gráfico reducido como Xvfb antes de unirse a la red, de este modo el navegador en vez de ejecutarse en modo headless se ejecutará dentro de este servidor gráfico :
x11-base/xorg-server -ipv6 -libglvnd -suid -udev -xorg -debug -dmx -doc -elogind -kdrive -libressl -minimal -selinux -static-libs -systemd -unwind -wayland -xcsecurity -xephyr -xnest xvfb
Ahora ya podemos unir el nodo a la red:
export DISPLAY=:0
java -Dwebdriver.chrome.driver=chromedriver -Dwebdriver.gecko.driver=geckodriver -jar selenium-server-standalone-3.141.59.jar -role node -hub http://{{ip or host}}:4444/grid/register/ -port 4444
Una vez tenemos la SeleniumGrid preparada para funcionar con jMeter creamos un testplan, y añadiremos un Thread Group:
Botón derecho sobre "Plan de pruebas"
Add -> Threads (Users) -> Thread Group
Añadimos un Remote Driver Config al Thread Group:
Botón derecho sobre "Thread Group"
Add -> Config Element -> jp@gc-Remote Driver Config
La configuración quedará del siguiente modo:
http://kr0mtest:4444/wd/hub
Ahora añadimos el WebDriver Sample que realizará las peticiones del test:
Botón derecho sobre "Thread Group"
Add -> Sampler -> jp@gc WebDriver Sample
El script será el siguiente:
WDS.sampleResult.sampleStart()
WDS.browser.get('http://alfaexploit.com/archive')
WDS.sampleResult.sampleEnd()
Añadimos un par de listeners para ver los resultados
Botón derecho sobre "Thread Group"
Add -> Listeners -> View Results Tree
Botón derecho sobre "Thread Group"
Add -> Listeners -> Response Time Graph
Tan solo quedará ejecutar el test(gráficamente o por CLI) y este será enviado a la SeleniumGrid donde se repartirá la carga entre los diferentes nodos.
Como nota final dejo un video muy interesante sobre jMeter + Selenium:
https://www.youtube.com/watch?v=RdPCl8yQnR4