Per tal de construir proves funcionals utilitzant el WebDriver de Selenium, requereix entendre els seus components. Igual que amb tot el programari, diferents perfils utilitzant diferents terminologies per la mateixa idea. A continuació es mostra una definició de termes amb descripció, per tal d’evitar ambigüitats.
Terminologia
API: interfície de programació d’aplicacions. Aquest és el conjunt d’ordres que s’utilitza per controlar els WebDriver.
Biblioteca: Un mòdul de codi que conté les API i el codi necessari per implementar-les. p. ex. fitxers .jar per a Java, fitxers .dll per a .NET, etc.
Driver: responsable de controlar el navegador real. La majoria dels controladors son creats pels mateixos fábricants dels navegadors.
Framework: Una biblioteca addicional que s’utilitza com a suport per a entorns de WebDriver. Aquests marcs de treball poden ser marcs de prova com JUnit o NUnit. També donen suport a característiques del llenguatge natural com poden ser Cucumber o Robotium. Igualment es poden utilitzar per a tasques com manipular o configurar el sistema sota prova, creació de dades, proves oracle, etc.
Components de Selenium
Els WebDriver es comuniquen amb els navegadors a través de controladors. La comunicació és bidireccional: els WebDriver passen ordres al navegador a través del controlador, i rep informació de nou a través de la mateixa ruta.
Els controladors són específics dels navegador, per exemple ChromeDriver simula Google Chrome/Chromium o GeckoDriver simula Mozilla Firefox. El controlador s’executa en el mateix sistema que el navegador.
Selenium Grid és un servidor proxy intel·ligent que facilita l’execució de proves en paral·lel en diverses màquines. Això es fa mitjançant la creació d’instàncies remotes de navegadors web a un servidor remot que actua com a concentrador i orquestrador. Aquest concentrador balanceja les peticions a diferents executors distribuïts.
És una solució de programari que serveix per a executar múltiples proves web desde diferents entorns, permetent llançar proves en paral·lel amb diferents versions de navegadors i sistemes operatius.
L’objectiu de Selenium Grid és:
Proporcionar una forma senzilla d’executar proves en paral·lel en múltiples màquines.
Permetre la realització de proves en diferents versions de navegadors.
Permetre la realització de proves en diferents plataformes.
AVANTATGES
Selenium Grid ens permet llançar múltiples tests a través de diferents navegadors i màquines en paral·lel. Això assegura que l’aplicació que s’està testant tingui compatibilitat amb un ampli rang de combinacions de navegadors, elevant d’aquesta manera, a un altre nivell, les nostres proves sobre la compatibilitat de l’aplicació en qualsevol entorn. Això suposa un augment significatiu tant en velocitat com l’assegurament de la qualitat.
· Executa múltiples test de manera concurrent.
· Executa múltiples navegadors concurrentment.
· Executa múltiples màquines en paral·lel, augmentant la velocitat d’execució exponencialment.
Selenium Grid ens permet crear una xarxa de màquines connectades, a les quals anomenarem nodes, que estarà controlada per un balancejador (Grid) mitjançant el qual podrem executar el nostre conjunt de proves en els diferents nodes de la nostra xarxa.
- Encaminador (Router): És el punt d'entrada del Grid on s'envien totes les sol·licituds externes. La primera tasca de l'encaminador és verificar la sessió. Si es tracta d'una sol·licitud de sessió nova, l'encaminador l'agregarà a la cua de sessions. Si la sol·licitud pertany a una sessió existent, l'encaminador enviarà la identificació de la sessió al mapa de sessió, el mapa de sessió retornarà el node on s'està executant la sessió.
- Distribuïdor (Distributor): La seva funció principal és rebre una nova sol·licitud de sessió i trobar un Node adequat on es pugui crear la sessió. Una vegada que es crea la sessió, assigna la identificació de la sessió amb el node on s'executa la sessió en el Mapa de sessió.
- Nodes: És la màquina de proves on es duen a terme les execucions de les prova. El Node es registra en el Distribuïdor a través del Event Bus, i la seva configuració s'envia com a part del missatge de registre. De manera predeterminada, el Node registra automàticament tots els controladors de navegador disponibles en la ruta de la màquina on s'executa.
- Mapa de sessió (Session Map): és un magatzem de dades que guarda la informació de la identificació de la sessió i el node on s'executa la sessió.
Cua de nova sessió (Session Queue): conté totes les sol·licituds de nova sessió en un ordre FIFO.
Bus d'esdeveniments: el bus d'esdeveniments serveix com una ruta de comunicació entre els nodes, el distribuïdor, la cua de nova sessió i el mapa de sessió. Grid realitza la major part de la seva comunicació interna a través de missatges, evitant costoses anomenades HTTP. En iniciar Grid en la seva manera totalment distribuïda, Event Bus és el primer component que ha d'iniciar-se.
- Cua de sessions (Session Queue): conté totes les sol·licituds de nova sessió en un ordre FIFO.
- Bus d'esdeveniments: el bus d'esdeveniments serveix com una ruta de comunicació entre els nodes, el distribuïdor, la cua de nova sessió i el mapa de sessió. Grid realitza la major part de la seva comunicació interna a través de missatges, evitant costoses anomenades HTTP. En iniciar Grid en la seva manera totalment distribuïda, Event Bus és el primer component que ha d'iniciar-se.
Els enginyers de proves han d’utilitzar Selenium Grid en les següents casuístiques:
Per a executar proves en múltiples navegadors i versions, diferents dispositius i sistemes operatius
Per a reduir el temps que triga un conjunt de proves a completar l’execució.
Per a executar suites de proves en paral·lel contra múltiples màquines (anomenades Nodes).
Per a conjunts de proves grans i de llarga execució, això escurça el temps d’execució.
Es pot comprovar la millora en el temps d’execució dels scripts basant-nos en un càlcul simple:
Nombre de proves * Temps mitjà de prova / Nombre de nodes = Temps total d’execució
Per exemple:
15 * 45s / 1 = 11m 15s // Sense usar Selenium Grid
15 * 45s / 5 = 2m 15s // Amb 5 Nodes
15 * 45s / 15 = 45s // Amb 15 Nodes
100 * 120s / 15 = 13m 20s // Aquesta execució prendria més de 3 hores sense Grid
· Java 11 o superior instal·lat.
· Els navegadors que volem provar han d’estar instal·lats.
Els requisits de màquina per a instal·lar Selenium Grid poden variar segons la grandària i la complexitat de les proves, així com la quantitat de nodes “webdriver” que volem utilitzar.
Els requisits de maquinari dependran de la càrrega de proves i el nombre de nodes “webdriver” que planegis executar simultàniament. En general, es recomana:
Mínims | Recomenable | |
---|---|---|
RAM | 4GB | 16GB |
CPU | 1 processador de doble nucli | 4 processadors |
Emmagatzematge | Suficient per a emmagatzemar registres icaptures de pantalla | Suficient per a emmagatzemar registres icaptures de pantalla |
Instal·lar Docker:
Assegureu-vos que teniu Docker Compose instal·lat al vostre sistema. Podeu descarregar-lo des del lloc web oficial de Docker o utilitzar un gestor de paquets si està disponible per al vostre sistema operatiu.
Per Windows:
Docker Desktop (recomanat per a Windows 10 Pro, Enterprise o Education): Docker Desktop per a Windows ofereix una interfície gràfica fàcil d’utilitzar per gestionar contenidors a Windows. També inclou Docker Compose. Baixeu i instal·leu Docker Desktop des del lloc web oficial de Docker: Docker Desktop per a Windows.
Docker Toolbox (per a Windows Home o versions anteriors de Windows): Si utilitzeu Windows Home Edition o una versió anterior de Windows, podeu utilitzar Docker Toolbox. Baixeu i instal·leu Docker Toolbox des del lloc web oficial de Docker: Docker Toolbox.
Per MacOs:
Per linux:
Els passos d’instal·lació de Docker a Linux poden variar segons la vostra distribució. Aquí hi ha instruccions generals per a algunes distribucions de Linux habituals:
Obriu un terminal.
sudo apt-get update
Actualitzeu la base de dades de paquets:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
Instal·leu les dependències necessàries:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
Afegeix la clau GPG oficial de Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Afegiu el repositori Docker:
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Torneu a actualitzar la base de dades de paquets:
sudo apt-get update
Instal·leu Docker:
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
Inicieu i activeu el servei Docker:
sudo systemctl start docker
sudo systemctl enable docker
Instal·lar JDK:
Si encara no ho heu fet, descarregueu i instal·leu un Java Development Kit (JDK) al vostre sistema. Podeu descarregar el JDK des del lloc web d’Oracle o utilitzar un JDK de codi obert com OpenJDK. Download the latest Jave LTS Free.
Estableix la variable d’entorn JAVA_HOME
JAVA_HOME
.C:\Program Files\Java\jdk1.8.0_301
, establiu el valor variable en aquest camí.Actualitzeu la variable d’entorn PATH:
%JAVA_HOME%\bin
al principi de la llista. Això garanteix que el directori bin del JDK estigui al PATH del sistema.Verifiqueu la configuració:
java -version
per verificar que Java està instal·lat correctament i que fa servir el JDK (no el JRE). Tradicionalment, Grid s'ha executat com dues peces conceptuals: el Hub i un o més Nodes. Hi ha diferents maneres d'executar les imatges i crear el GRID amb un hub i nodes.
Utilizant Docker Compose [recomanació]
Creeu un fitxer docker-compose.yml
al directori del vostre projecte. Aquest fitxer definirà els serveis, xarxes i volums necessaris per a la vostra aplicació. Aquí teniu un exemple bàsic:
Creeu un fitxer Docker Compose:
version: "3"
services:
chrome:
image: selenium/node-chrome:4.10.0
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_INSTANCES=5
- SE_NODE_MAX_SESSIONS=5
- SE_NODE_SESSION_TIMEOUT=180
edge:
image: selenium/node-edge:4.10.0
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_INSTANCES=1
- SE_NODE_MAX_SESSIONS=1
- SE_NODE_SESSION_TIMEOUT=180
firefox:
image: selenium/node-firefox:4.10.0
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_INSTANCES=3
- SE_NODE_MAX_SESSIONS=3
- SE_NODE_SESSION_TIMEOUT=180
selenium-hub:
image: selenium/hub:4.10.0
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
Els valors
SE_NODE_MAX_INSTANCES=5
SE_NODE_MAX_SESSIONS=5
Indiquen el nombre d'instàncies de cada navegador i el nombre de sessions màximes actives per cada navegador en paral·lel.
Aixeca la arquitectura de serveis definida en el YAML anterior:
anar a la direcció on es troba en fitxer .yml i executar docker-compose -f docker-compose-v3.yml up -d --scale chrome=3 --scale firefox=3 --scale edge=1
Els valors de cada navegador indiquen el nombre de nodes (contenidors) per cada navegador.
Amb la següent ordre es pot veure els contenidors aixecats a la teva màquina local:
Accedir a la WebUI de Selenium Grid Ir a la dirección: http://localhost:4444/ui
Elimina els serveis prèviament aixecats
docker-compose -f docker-compose-v3.yml down
Encara que no és necessari per a un entorn de ‘testing’, si es requereix desplegar l’arquitectura completa descrita en el apartat anterior, s’hauria d’utilitzar el següent .yaml:
version: "3"
services:
selenium-event-bus:
image: selenium/event-bus:4.12.1-20230920
container_name: selenium-event-bus
ports:
- "4442:4442"
- "4443:4443"
- "5557:5557"
selenium-sessions:
image: selenium/sessions:4.12.1-20230920
container_name: selenium-sessions
ports:
- "5556:5556"
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-session-queue:
image: selenium/session-queue:4.12.1-20230920
container_name: selenium-session-queue
ports:
- "5559:5559"
selenium-distributor:
image: selenium/distributor:4.12.1-20230920
container_name: selenium-distributor
ports:
- "5553:5553"
depends_on:
- selenium-event-bus
- selenium-sessions
- selenium-session-queue
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_SESSIONS_MAP_HOST=selenium-sessions
- SE_SESSIONS_MAP_PORT=5556
- SE_SESSION_QUEUE_HOST=selenium-session-queue
- SE_SESSION_QUEUE_PORT=5559
selenium-router:
image: selenium/router:4.12.1-20230920
container_name: selenium-router
ports:
- "4444:4444"
depends_on:
- selenium-distributor
- selenium-sessions
- selenium-session-queue
environment:
- SE_DISTRIBUTOR_HOST=selenium-distributor
- SE_DISTRIBUTOR_PORT=5553
- SE_SESSIONS_MAP_HOST=selenium-sessions
- SE_SESSIONS_MAP_PORT=5556
- SE_SESSION_QUEUE_HOST=selenium-session-queue
- SE_SESSION_QUEUE_PORT=5559
chrome:
image: selenium/node-chrome:4.12.1-20230920
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:4.12.1-20230920
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:4.12.1-20230920
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
Xarxes en entorn contenidoritzat
El Hub i els Nodes es crearan en la mateixa xarxa i es reconeixeran entre si pel nom del seu contenidor.
maOS/Linux
docker network create grid
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.10.0
- Executar la sentència ‘docker run’ per a cada node (navegadors).
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
--shm-size="2g" \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
selenium/node-chrome:4.12.1-20230912
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
--shm-size="2g" \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
selenium/node-edge:4.12.1-20230912
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
--shm-size="2g" \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
selenium/node-firefox:4.12.1-20230912
Windows PowerShell
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.12.1-20230912
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub `
--shm-size="2g" `
-e SE_EVENT_BUS_PUBLISH_PORT=4442 `
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 `
selenium/node-chrome:4.12.1-20230912
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub `
--shm-size="2g" `
-e SE_EVENT_BUS_PUBLISH_PORT=4442 `
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 `
selenium/node-edge:4.12.1-20230912
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub `
--shm-size="2g" `
-e SE_EVENT_BUS_PUBLISH_PORT=4442 `
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 `
selenium/node-firefox:4.12.1-20230912
Quan acabeu d’utilitzar la graella i els contenidors han sortit, la xarxa es pot eliminar amb la següent ordre:
# Removes the grid network
$ docker network rm grid
Quick start (Local Machine not Dockerized) STANDALONE [recomanació]
Baixeu la versió compatible amb Chrome, Firefox i Edge
Baixeu els controladors web per a cada navegador
Avís!!! Comproveu les versions compatibles entre el navegador i el controlador web.
Comprovació del fitxer d’estructura
LINUX/MAC
Per a veure quins directoris ja hi ha al PATH
, obriu un Terminal i executeu:
echo $PATH
Si la ubicació del controlador no es troba en un directori llistat, podeu afegir un directori nou al PATH
:
echo 'export PATH=$PATH:/path/to/driver' >> ~/.bash_profile
source ~/.bash_profile
Podeu provar si s’ha afegit correctament comprovant la versió del controlador:
chromedriver --version
WINDOWS
Per a veure quins directoris ja hi ha al PATH
, obriu una ordre Pregunta i executeu:
echo %PATH%
Si la ubicació del controlador no es troba en un directori llistat, podeu afegir un directori nou al PATH
:
setx PATH "%PATH%;C:\WebDriver\bin"
Podeu provar si s’ha afegit correctament comprovant la versió del controlador:
chromedriver.exe --version
Obrir un terminal i aneu on hi ha
java -jar selenium-server-4.10.0.jar standalone
Una vegada instal·lat, connectar amb la URL:
Quick start (Local Machine not Dockerized) –selenium-manager true
Aquesta opció et carrega els controladors web automàticament sense que tu tinguis que baixar prèviament. Esta version esta en fase beta, pot fallar.
Obriu un terminal i aneu on hi ha
Iniciar Selenium GRID des d’una interfície de línia de comandos (CLI)
java -jar selenium-server-4.10.0.jar standalone --selenium-manager true
Una vegada instal·lat, connectar amb la URL: