Looking for Computer Science & Information Technology online
courses ?
Check my new web site: https://www.yesik.it !
SimpleTest est un framework de test pour PHP. Non seulement SimpleTest permet de faire des tests unitaires sur vos méthodes et fonctions, mais surtout il offre des fonctionnalités avancées pour les tests fonctionnels des applications web: navigation, formulaires, authentification, etc.
L'installation est triviale et peut se résumer à "décompressez l'archive dans le répertoire du projet". Néanmoins, dans l'optique d'une utilisation de SimpleTest pour plusieurs projets, ou de son installation sur un serveur de test, un minimum d'organisation s'impose, histoire de ne pas se retrouver avec 36 versions de SimpleTest installées sur la même machine.
Avertissement
SimpleTest est écrit en PHP et fonctionne sur toute architecture supportant ce langage. Les instructions données ici concernent une machine Linux dotée d'un serveur web Apache2. Cependant, elles doivent pouvoir se transposer facilement à d'autres systèmes d'exploitation ou d'autres serveurs web.
Pré-requis
TestNG est un outil destiné au développeur web utilisant PHP. Il va donc sans dire que vous devez avoir accès à une machine équipée d'un serveur web supportant PHP (comme apache httpd avec son module php, par exemple).
Installation
Téléchargez la dernière version stable de SimpleTest à partir du site http://simpletest.org
Lors de la rédaction de ce texte, il s'agissait du fichier simpletest_1.0.1.tar.gz
Décompressez l'archive dans votre répertoire /usr/local/lib
sh# cd /usr/local/lib sh# tar xzf /path/to/simpletest_1.0.1.tar.gz
Cela va créer le répertoire correspondant:
sh# ls -ld /usr/local/lib/simpletest* drwxr-sr-x 5 root staff 4096 2008-11-24 15:05 /usr/local/lib/simpletest
Si tout comme dans mon cas, SimpleTest s'est décompressé dans un dossier ne faisant pas apparaître son numéro de version, renommez-le (en utilisant le numéro de version de votre SimpleTest!):
sh# pwd /usr/local/lib sh# mv simpletest simpletest_1.0.1
Toujours à partir du répertoire /usr/local/lib, nous allons créer un lien symbolique qui nous évitera de systématiquement rappeler la version de SimpleTest utilisée. Par ailleurs, cela permettra une migration aisée vers une autre version, simplement en changeant la destination du lien:
sh# pwd /usr/local/lib sh# ln -s simpletest_1.0.1 simpletest sh# ls -ld simpletest* lrwxrwxrwx 1 root staff 16 2008-11-24 15:29 simpletest -> simpletest_1.0.1 drwxr-sr-x 5 root staff 4096 2008-11-24 15:05 simpletest_1.0.1
Configuration
La configuration se résume à configurer le serveur http pour qu'il informe nos scripts PHP de l'emplacement où se trouve SimpleTest.
Selon votre serveur web, les choses peuvent très largement varier. Avec Apache2, cela se résume à ajouter la ligne suivante à votre fichier /etc/apache2/envvars:
export SIMPLETEST_HOME=/usr/local/lib/simpletest

Note:
Si vous envisagez d'utiliser PHP avec l'interface en ligne de commande (CLI), il vous faudra ajouter la même ligne à l'un ou l'autre de vos scripts de démarrage shell: .bashrc, .profile, etc. Reportez-vous au manuel de votre shell pour plus d'informations.
Pour que cette modification soit prise en compte, il vous faut redémarrer apache:
sh# /usr/sbin/apache2ctl stop sh# env -i LANG=C PATH="/bin:/usr/bin" /usr/sbin/apache2ctl start

Remarque:
J'utilise ici deux commandes séparées apache2ctl stop puis start car les modifications ne semblent pas immédiatement prise en compte par un apache2ctl restart...
Test
Pour vérifier que SimpleTest est correctement installé, nous allons imaginer que vous voulez tester la page d'un site chargée de rapporter une erreur à l'utilisateur. Le code ci-dessous est le code "à tester". Je suis d'accord avec vous, il n'est pas forcément des plus beaux. Raison de plus de le tester. D'autant plus que lorsque l'on disposera d'une couverture de test satisfaisante, il sera possible de le refactoriser sans craindre de casser quelque chose.
<?php $errcode = (array_key_exists("code", $_GET)) ? $_GET["code"] : 501; switch($errcode) { case 404: $errmsg = "Page non trouvée"; break; default: $errmsg = "Erreur interne"; } header("HTTP/1.0 $errcode $errmsg"); ?> <html><head><title>Erreur</title></head> <body> <h1>Erreur <?php echo $errcode; ?>: <?php echo $errmsg; ?></h1> <p>Une erreur est survenue. Merci de continuer votre navigation à partir de notre <a href="/">page d'accueil</a>.</p> </body> </html>
Pour cette rapide démonstration, nous allons nous contenter de créer deux tests fonctionnels (WebTestCase). Afin de vérifier:
- que la page d'erreur s'affiche de façon satisfaisante
- que le code de réponse http renvoyé signale bien une erreur
Et nous allons tester cela dans deux cas: pour l'erreur par défaut (qui doit être 501 Internal Server Error), et pour l'erreur 404 (Page Not Found).
Voici le code de test:
<?php require_once($_ENV["SIMPLETEST_HOME"] . '/autorun.php'); require_once($_ENV["SIMPLETEST_HOME"] . '/web_tester.php'); class TestOfErrorPage extends WebTestCase { public function testDefaultErrorPage() { $this->get("http://localhost/stt2/error.php"); $this->assertTitle("Erreur"); $this->assertResponse(501); } public function test404ErrorPage() { $this->get("http://localhost/stt2/error.php?code=404"); $this->assertTitle("Erreur"); $this->assertResponse(404); $this->assertText("Page non trouvée"); } } ?>
Si vous chargez la page du script de test (sur mon ordinateur, http://localhost/stt2/error_test.php), vous devriez voir apparaître une belle barre verte, signe que tout va bien.
Si vous avez configuré PHP pour être utilisable en ligne de commande, vous pouvez aussi vérifier que tout est OK ainsi:
sh$ php error_test.php error_test.php OK Test cases run: 1/1, Passes: 5, Failures: 0, Exceptions: 0
Le reste est sur le site http://simpletest.org ou sur votre ordinateur, dans le répertoire $SIMPLETEST_HOME/docs.