Selenium permet d’automatiser les tests de navigation et de soumission de ses applications web comme dis précédemment. Mais ici je vais parler de la mise en place du serveur Selenium. Celui-ci permet de mettre à disposition un daemon utilisable pour :

  • exécuter un scénario en console
  • via tâche cron
  • via l’intégrer dans ses propres outils

Cela permet d’exécuter une multitude de scénario de manière régulière.

Il faut donc mettre en place un environnement xvfb avec un navigateur web (iceweasel). Le serveur va écouter sur le port 4444 et utiliser le navigateur pour simuler la navigation. Tout cela avec des scripts de démarrage automatique.

Pour créer les scénarios, voici l’article sur le plugin de Firefox.

Installer fake-X XVFB

Installation des dépendances nécessaires. Java pour Selenium server, xvfb pour émuler un serveur X afin de lancer firefox/iceweasel sans installer toute les dépendances de X. Et le navigateur choisi.

apt-get install sun-java6-jre xvfb icexeasel
mkdir /opt/selenium
cd /opt/selenium/
wget http://selenium-release.storage.googleapis.com/2.42/selenium-server-standalone-2.42.2.jar

Attention il n’y a pas de script d’init fourni avec le paquet xvfb. Soit on l’utilise dans le script selenium, soit on fait propre avec un script init dédié. Voir le script init de gmonfort pour xvfb.

On le met dans /opt/selenium/xvfb-init.d.sh avec un lien dans init.d et on met à jour les rc.d :

vim xvfb-init.d.sh
chmod +x xvfb-init.d.sh
cd /etc/init.d/
ln -s /opt/selenium/xvfb-init.d.sh xvfb
update-rc.d xvfb defaults

Installer le daemon Selenium

Pour le script d’init.d, j’ai repris le script de robinhoode et je l’ai modifié.

On le met dans /opt/selenium/selenium-init.d.sh avec un lien dans init et update des rc :

vim selenium-init.d.sh
chmod +x selenium-init.d.sh
cd /etc/init.d/
ln -s /opt/selenium/selenium-init.d.sh selenium
update-rc.d selenium defaults

 Le script est à modifier selon la version du JAR_FILE.

selenium.sh

#!/bin/bash
### BEGIN INIT INFO 
# Provides:             selenium
# Required-Start:       $remote_fs $syslog $xvfb
# Required-Stop:        $remote_fs $syslog $xvfb
# Default-Start:        2 3 4 5 
# Default-Stop:         0 1 6
# Short-Description:    Selenium server
### END INIT INFO

# TODO: http://wiki.debian.org/LSBInitScripts
 
DESC="Selenium server"
RUN_AS=root
JAVA_BIN=/usr/bin/java
 
SELENIUM_DIR=/opt/selenium/
PID_FILE="$SELENIUM_DIR/selenium.pid"
JAR_FILE="$SELENIUM_DIR/selenium-server-standalone-2.42.2.jar"
LOG_FILE="$SELENIUM_DIR/selenium.log"
 
MAX_MEMORY="-Xmx500m"
STACK_SIZE="-Xss1024k"
 
DAEMON_OPTS=" -client $MAX_MEMORY $STACK_SIZE -jar $JAR_FILE -log $LOG_FILE"
 
NAME=selenium
 
# TODO: Put together /etc/init.d/xvfb
export DISPLAY=:99.0
 
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon -c $RUN_AS --start --background --pidfile $PID_FILE --make-pidfile --exec $JAVA_BIN -- $DAEMON_OPTS
echo "$NAME."
;;
 
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --pidfile $PID_FILE
echo "$NAME."
;;
 
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --pidfile $PID_FILE
sleep 1
start-stop-daemon -c $RUN_AS --start --background --pidfile $PID_FILE --make-pidfile --exec $JAVA_BIN -- $DAEMON_OPTS
echo "$NAME."
;;
 
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

On démarre les 2 services. On peut voir que le serveur écoute bien sur le port 4444.

Test de selenium

On va le faire via un client python : https://pypi.org/project/selenium/

Les autres clients sont disponibles sur : https://www.selenium.dev/downloads/

Les prérequis :

apt-get install python-setuptools

Installation des libraires python de Selenium :

wget https://pypi.python.org/packages/source/s/selenium/selenium-2.42.1.tar.gz
tar -xzf selenium-2.42.1.tar.gz
cd selenium-2.42.1
python setup.py install

On test un script :

# python /opt/selenium/scripts-test/test.py

.

----------------------------------------------------------------------

Ran 1 test in 6.597s


OK