Afin de suivre le bon déroulement de vos projets, il est important de pouvoir tester de manière régulière que votre applications fonctionne bien.
Ceci peut être réalisé via la mise en place de tests unitaires et fonctionnels, d’analyse de code etc…

Pour suivre cela de manière optimale, la mise en place d’une plateforme d’intégration continue est la suite logique de l’évolution de votre projet dès lors qu’il atteint une taille importante, ou qu’il comporte de nombreuses fonctionnalités spécifiques.

Il existe plusieurs plateforme pour réaliser cela, mais je vais me baser sur la plus connue : Jenkins (ex Hudson )

L’objectif à la fin de ce guide est d’avoir une plateforme de tests fonctionnels opérationnelle.
Celle ci-sera basée sur phpunit et selenium et firefox en mode headless
La procédure étant assez longue, ce sujet va être séparé en 2 articles :

– Installation des éléments nécessaires aux tests fonctionnels
– Installation et configuration de jenkins pour l’exécution des tests fonctionnels

Installation des éléments nécessaires aux tests fonctionnels.

( Nous partons du principe que la plateforme lamp est déjà installée sur votre serveur, ainsi que git )

Phpunit

PHPUnit est un framework de tests unitaires open source dédié au langage de programmation PHP. Créé par Sebastian Bergmann, il intègre les concepts communs aux bibliothèques de tests unitaires xUnit.

#Téléchargement de phpunit
wget https://phar.phpunit.de/phpunit.phar
#Droits d'éxécution sur le fichier
chmod +x phunit.phar
#Déplacement dans les binaires locaux
sudo mv phpunit.phar /usr/local/bin/phpunit

Pour vérifier que Phpunit est fonctionnel, saisissez la commande suivante :

phpunit --version

Ceci doit vous afficher :
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.

Java
Si java n’est pas encore installé sur votre poste vous pouvez l’installer via la commande suivante :

sudo apt-get install default-jdk

Selenium

Selenium est un outil d’automatisation de tests navigateurs, il va nous permettre simuler les comportements utilisateurs.

Télécharger la dernière version du serveur selenium  depuis la page http://selenium-release.storage.googleapis.com/index.html
Actuellement la dernière version est la version 2.45.0

wget http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar
#droits d'exécution
chmod +x selenium-server-standalone-2.45.0.jar
#déplacement dans les binaires
mv selenium-server-standalone-2.45.0.jar /usr/local/bin/selenium-server-standalone-2.45.0.jar

Firefox
Il est nécessaire d’avoir un navigateur sur votre serveur, pour que Selenium puisse interagir avec les pages web souhaitées, ce sera le rôle de firefox.
Selenim gère de manière native firefox, mais il est également possible d’utiliser chrome, ou même internet explorer ( sur les plateforme windows )

sudo apt-get install firefox

Xvfb
Ubuntu server, ne disposant pas d’interface graphique, il va être nécessaire d’installer Xvfb qui va permettre de lancer une application graphique sans serveur X

sudo apt-get install xvfb

Tests de notre installation

Les outils nécessaires sont à présents installé sur le serveur.
Nous allons donc tester que tout fonctionne correctement.

Pour ce la nous vous pouvez télécharger le projet test_phpunit_selenium via la commande suivante

git clone https://github.com/nenes25/phpunit_selenium_sample.git test_phpunit_selenium/

Rendez-vous dans le dossier test_phpunit_selenium/ et exécuter la commande

phpunit BasicTest.php

Si le résultat suivant apparait, c’est que phpunit est opérationnel

.
Time: 236 ms, Memory: 2.75Mb
OK (1 test, 5 assertions)

Passons aux tests avec selenium
Pour commencer il faut éxécuter xvfb pour déterminer un écran d’affichage

sudo /usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 &
export DISPLAY=:99

Il faut ensuite lancer le serveur selenium via la commande suivante

java -jar /usr/local/bin/selenium-server-standalone-2.45.0.jar &

Puis lancer le test

phpunit SeleniumTest.php

Si le résultat est le suivant, tout fonctionne bien 🙂

PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
.F
Time: 14.01 seconds, Memory: 3.50Mb
There was 1 failure:
1) SeleniumTest::testTitleKo
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Wrong Title'
+'Google'
#path specifique au fichier de test
/home/jenkins/public_html/test_phpunit_selenium/SeleniumTest.php:28
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.

Les bases de notre plateforme d’intégration continue sont en place, la prochaine étape sera d’installer et de configurer jenkins pour lancer ces tests automatiquement à la fréquence souhaite.