Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau 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:

  1. que la page d'erreur s'affiche de façon satisfaisante
  2. 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.