Tests distribuidos mediante jMeter y SeleniumGrid


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 :

vi /etc/portage/package.use/xorg-server
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
emerge -av x11-base/xorg-server
Xvfb :0 -ac -screen 0 1024x768x24 &

Ahora ya podemos unir el nodo a la red:

su selenium -l
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

Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 15/03/2020 22:29:52 -- Categoria: Benchmarking