samedi 27 mars 2010

Yii : création d'un environnement de test




Bon, on va essayer de mettre en place un petit environnement de test autour de la dernière version du framework Yii. Comme l'indique la documentation, des tests unitaires et fonctionnels peuvent s'intégrer facilement à Yii. Voyons voir si c'est vrai ! Est-il facile d'installer PHPUnit et Selenium sur Wamp ? A vrai dire j'ai déjà vu plus simple, et le temps passé à faire fonctionner les différents modules m'a incité à écrire ce post afin de me souvenir de la marche à suivre, et éventuellement d'éviter au lecteur les heures de galères que peut rencontrer un novice qui se lance dans l'aventure du test.

1. Environnement

Avant de commencer, un petit aperçu de l'existant :
  • wampServer : pour le server HTTP ( WampServer 2.0i [11/07/09]) - il est installé dans le répertoire c:\wamp
  • Yii Framework 1.1.3 : dernière version (Juillet 2010) du framework
  • windows XSP sp3
Avant d'aller plus loin, j'ai mis à jour la version de php livrée avec WampServer 2.0i, la 5.3.0. En effet, mon hébergeur utilisant la version 5.2.13 je vais donc télécharger cette version et l'installer dans WampServer. Hélas, pas de 5.2.13 disponible chez WampServer ! Tant pis, je prendrais la 5.2.11. L'installation est automatique, il suffit d'exécuter le programme téléchargé.

Ensuite, rajoutons dans la variable d'environnement PATH de Windows, le chemin vers php.exe.... Pour cela il est possible d'utiliser un éditeur de variable d'environnement comme Rapid Environment Editor, qui rendra la tâche plus agréable (mais il n'y a rien d'obligatoire).
Pour cet exemple on aura donc PATH=C:\wamp\bin\php\php5.2.11.

Pour vérifier que tout est bien, ouvrez une ligne de commande (cmd.exe) tapez

> php -version

C'est bon ? la version de PHP s'affiche ? Moi j'obtiens ceci :

PHP 5.2.11 (cli) (built: Sep 16 2009 19:39:46)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

...ce qui correspond bien à mon environnement. Ok, passons aux choses sérieuses. L'objectif est d'installer et de configurer :
Ce n'est pas au hasard que ces outils ont été choisis, mais bien parce qu'ils sont référencé dans la documentation de Yii concernant les tests.

2. Installer PEAR

Pour pouvoir installer PHPUnit, il faut avant tout avoir installé PEAR.
L'installation de PEAR se fait depuis la ligne de commande. Placez vous dans le répertoire PEAR (C:\wamp\bin\php\php5.2.11\PEAR) puis entrez la commande suivante :

> php -d phar.require_hash=0 go-pear.phar

La programme d'installation de PEAR vous propose alors les répertoires par défaut dans lesquels seront copiés ses différents composants. Par défaut, tout ce qui va être installé, le sera dans le répertoire courant, et c'est bien comme ça.
Si vous souhaitez changer de répertoire, sachez que l'installateur de PEAR n'aime pas du tout les noms de dossier contenant des espaces.



ATTENTION : si vous aviez déjà installé PEAR sur cette machine, mais dans un autre répertoire, vous devres prendre bien soin de supprimer les variables d'environnement PEAR, et de relancer la machine.
Lorsque les téléchargements sont terminés, j'autorise la modification automatique du php.ini (modification du include_path) : l'installation se termine. A la racine du répertoire d'installation, le fichier PEAR_ENV.reg a été créé. Il contient des clefs de registres définissant les différents répertoires de PEAR. Double-cliquer sur ce fichier afin d'ajouter ces valeurs à la base de registre.

Dernier point : rajouter le nom du répertoire d'installation (C:\wamp\bin\php\php5.2.11\PEAR) dans le PATH Windows. Le script PEAR.bat est désormais accessible depuis n'importe où. Pour vérifier que tout est en ordre tapez :

> pear -help

...et normalement, l'aide en ligne de PEAR s'affiche.

ouf, première étape terminée ! ... enfin presque. Pour être complétement sûr que la toute dernière version de PEAR est installée, on peut demander de mettre à jour PEAR. Cela peut être nécessaire si par la suite, lors de l'installation de PHPUnit, un message d'erreur vous informe que le PEAR Installer que vous utilisez, n'est pas la dernière version.

> pear upgrade pear
Cette fois c'est bon, on peut passer à la suite.

3. PHPUnit

A partir d'une installation PEAR à jour, et d'un environnement correctement configuré (en particulier concernant les PATH), l'installation de PHPUnit est hyper simple. Depuis la ligne de commande, tapez :

> pear channel-discover pear.phpunit.de
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded

> pear install phpunit/PHPUnit
Unknown remote channel: pear.symfony-project.com
Did not download optional dependencies: pear/Image_GraphViz,pear/Log, channel://pear.symfony-project.com/YAML, use --alldeps to download automatically
phpunit/PHPUnit can optionally use package "pear/Image_GraphViz" (version >= 1.2.1)
phpunit/PHPUnit can optionally use package "pear/Log"
phpunit/PHPUnit can optionally use package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2)
phpunit/PHPUnit can optionally use PHP extension "soap"
phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.5)
downloading PHPUnit-3.4.15.tgz ...
Starting to download PHPUnit-3.4.15.tgz (255,036 bytes)
.....................................................done: 255,036 bytes
install ok: channel://pear.phpunit.de/PHPUnit-3.4.15

Là c'est bon. Vous devriez trouver un répertoire PHPunit dans le répertoire C:\wamp\bin\php\php5.2.11\PEAR\pear. Si vous tapez phpunit depuis la ligne de commande, l'aide de phpunit s'affiche! C'est pas super ?
En cas d'erreur, lisez bien les messages qui apparaissent durant l'installation de PHPUnit. En particulier il se peut que certaines extension PHP indispensables (comme curl par exemple) soient manquantes, ou plus précisément, ne soit pas activées. Dans ce cas, rendez-vous dans le fichier php.ini correspondant, pour activation. Relancez ensuite l'installation.
Une autre cause possible d'erreur concerne la version de PHP qui doit correspondre à la version de PHPUnit que vous installez. Sur cette page, vous trouverez toutes les versions de php unit disponible. Pour installer la version PHPUnit 3.4.15 vous taperez :

pear install --alldeps phpunit/PHPUnit-3.4.15

L'option -alldeps permet d'installer également les dépendances...

4. XDEBUG


L'installation de cette extension PHP n'est pas obligatoire, mais elle est bien utile si vous voulez que PHPUnit soit capable de générer des rapports de couverture de code, lors de vos tests unitaires. Ces rapports de couverture de code (code coverage) existent en différent format, dont le HTML, et permet de voir facilement quelles sont les portions de code qui ont été testées, et celles qui ont été oubliées.
  • Téléchargez la DLL correspondant à votre version de PHP. Dans notre cas, avec PHP 5.2.11 nous avons le choix entre plusieurs version. On va choisir XDebug 2.1.0 - 5.2 VC6 (32 bit). Pourquoi ? ... parce que ! Si vous utilisez PHP 5.3.x, vous choisirez un fichier dont le nom commence par 5.3. C'est astucieux, mais pas évident au début.
  • copiez la DLL dans le répertoire ext de PHP (avec les autres extensions)
  • modifier le fichier php.ini présent dans C:\wamp\bin\php\php5.2.11 (et pas celui utilisé par apache)
A la fin du fichier C:\wamp\bin\php\php5.2.11\php.ini, rajoutez :

[XDebug]
zend_extension_ts=C:/wamp/bin/php/php5.2.11/ext/php_xdebug-2.1.0-5.2-vc6.dll
xdebug.remote_enable=true
xdebug.remote_host=localhost
xdebug.remote_port=10000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir=C:/temp/xdebug


ATTENTION : si vous utilisez un version de PHP 5.3.x la syntaxe n'est pas la même. Remplacez zend_extension_ts par zend_extension (plus de 'ts'). En cas de problème, allez jeter un oeil à la documentation ... si vous êtes anglophone !

XDebug sera disponible lors de l'appel à PHP depuis la ligne de commande, mais pas depuis Apache. Si vous voulez en profiter pour installer XDebug pour qu'il soit accessible depuis Apache, il suffit de rajouter les lignes ci-dessus dans le fichier php.ini utilisé par Apache. Dans notre exemple il s'agit du fichier C:\wamp\bin\apache\Apache2.2.11\bin\php.ini

Pour vérifier que XDebug est bien installé dans le serveur Apache relancer-le et affichez un phpinfo(). Vous devriez y trouver un section décrivant la configuration actuelle de XDebug.
Pour vérifier que XDebug est correctement installé dans PHP en ligne de commande ... ben je sais pas comment faire, là tout de suite. On verra après ok ?
..allez !! , c'est presque fini !

5. Selenium

Selenium permet de créer des tests fonctionnels. En gros, une fois correctement installé, la suite d'outils Selenium vous permettra :
  • d'enregistrer des actions sur vos pages web (cliquer ici, cliquer là, remplir en formulaire,etc ...)
  • de rejouer automatiquement ces actions afin de les valider sur différents navigateurs
Rendez-vous à la page de téléchargement, et récupérez Selenium RC ainsi que Selenium IDE , une extensions Firefox bien utile pour enregistrer des tests d'interface Web.

Installer Selenium RC
Selenium RC est fourni sous la forme d'un fichier ZIP contenant tout plein de répertoires et de fichiers. Nous allons tout décompresser dans le répertoire C:\selenium-remote-control-1.0.3. Comme nous sommes en présence d'une application Java, j'espère que vous avez mis à jour votre environnement Java, sinon c'est le moment.

Pour vérifier que Java est disponible dans votre environnement, tapez la commande suivante :

> java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

Comme vous le voyez, chez moi c'est la version 1.6.0_20 qui est installé. Le minimum requis pour Selenium est la 1.5 .. donc je suis à l'aise sur le coup ! Pour lancer le serveur Selenium tapez :

> java -jar C:\selenium-remote-control-1.0.3\selenium-server-1.0.3\selenium-server.jar

Par la suite vous pourrez créer le petit fichier bat qui va bien ... Pour arrêter le serveur, c'est Ctrl+C.
A noter : il existe une distribution beaucoup plus conviviale de Selenium RC, c'est Sauce RC. J'ai essayé et c'est pas mal, beaucoup moins roots que l'original. SauceRC propose une belle interface depuis votre navigateur favori, pour lancer/stopper le serveur Selenium ... enfin, je vous laisse vous faire votre idée.

Installer Selenium IDE
C'est trop simple : lancez Firefox et glissez le fichier selenium-ide-1.0.7.xpi téléchargé, dans la fenêtre principale de Firefox. Ensuite, laissez vous guider. En 30 secondes le Selenium IDE est prêt (c'est juste une extension FF).
Ensuite, lancez l'IDE depuis le menu Outils de Firefox et enregistrez vos actions sur n'importe quelle page HTML de n'importe quel site. Vous pourrez rejouer vos actions, et les exporter dans différents format dont le plus intéressant pour nous est PHP.

5. Conclusion

Tout est prêt ... ya plus qu'à !
La suite va consister à configurer Yii pour les tests unitaires (PHPUnit) et fonctionnels (Selenium) et bien sûr à les développer Alors en attendant un prochain article, vous pouvez dés à présent suivre la documentation Yii sur le sujet.