From 322bb9cd2be9e51422cb2b82684692e825c2bfb7 Mon Sep 17 00:00:00 2001 From: brettp Date: Fri, 2 Oct 2009 18:40:04 +0000 Subject: Added simpletest and start of unit tests. git-svn-id: http://code.elgg.org/elgg/trunk@3503 36083f99-b078-4883-b0ff-0f9b5a30f544 --- .../docs/fr/web_tester_documentation.html | 566 +++++++++++++++++++++ 1 file changed, 566 insertions(+) create mode 100755 vendors/simpletest/docs/fr/web_tester_documentation.html (limited to 'vendors/simpletest/docs/fr/web_tester_documentation.html') diff --git a/vendors/simpletest/docs/fr/web_tester_documentation.html b/vendors/simpletest/docs/fr/web_tester_documentation.html new file mode 100755 index 000000000..5bb5a9e70 --- /dev/null +++ b/vendors/simpletest/docs/fr/web_tester_documentation.html @@ -0,0 +1,566 @@ + + + +Documentation SimpleTest : tester des scripts web + + + + +

Documentation sur le testeur web

+ This page... + +
+

Télécharger une page

+

+ Tester des classes c'est très bien. + Reste que PHP est avant tout un langage + pour créer des fonctionnalités à l'intérieur de pages web. + Comment pouvons tester la partie de devant + -- celle de l'interface -- dans nos applications en PHP ? + Etant donné qu'une page web n'est constituée que de texte, + nous devrions pouvoir les examiner exactement + comme n'importe quelle autre donnée de test. +

+

+ Cela nous amène à une situation délicate. + Si nous testons dans un niveau trop bas, + vérifier des balises avec un motif ad hoc par exemple, + nos tests seront trop fragiles. Le moindre changement + dans la présentation pourrait casser un grand nombre de test. + Si nos tests sont situés trop haut, en utilisant + une version fantaisie du moteur de template pour + donner un cas précis, alors nous perdons complètement + la capacité à automatiser certaines classes de test. + Par exemple, l'interaction entre des formulaires + et la navigation devra être testé manuellement. + Ces types de test sont extrêmement fastidieux + et plutôt sensibles aux erreurs. +

+

+ SimpleTest comprend une forme spéciale de scénario + de test pour tester les actions d'une page web. + WebTestCase inclut des facilités pour la navigation, + des vérifications sur le contenu + et les cookies ainsi que la gestion des formulaires. + Utiliser ces scénarios de test ressemble + fortement à UnitTestCase... +

+class TestOfLastcraft extends WebTestCase {
+}
+
+ Ici nous sommes sur le point de tester + le site de Last Craft. + Si ce scénario de test est situé dans un fichier appelé + lastcraft_test.php alors il peut être chargé + dans un script de lancement tout comme des tests unitaires... +
+<?php
+require_once('simpletest/autorun.php');
+require_once('simpletest/web_tester.php');
+SimpleTest::prefer(new TextReporter());
+
+class WebTests extends TestSuite {
+    function WebTests() {
+        $this->TestSuite('Web site tests');
+        $this->addFile('lastcraft_test.php');
+    }
+}
+?>
+
+ J'utilise ici le rapporteur en mode texte + pour mieux distinguer le contenu au format HTML + du résultat du test proprement dit. +

+

+ Rien n'est encore testé. Nous pouvons télécharger + la page d'accueil en utilisant la méthode get()... +

+class TestOfLastcraft extends WebTestCase {
+    
+    function testHomepage() {
+        $this->assertTrue($this->get('http://www.lastcraft.com/'));
+    }
+}
+
+ La méthode get() renverra "true" + uniquement si le contenu de la page a bien été téléchargé. + C'est un moyen simple, mais efficace pour vérifier + qu'une page web a bien été délivré par le serveur web. + Cependant le contenu peut révéler être une erreur 404 + et dans ce cas notre méthode get() renverrait encore un succès. +

+

+ En supposant que le serveur web pour le site Last Craft + soit opérationnel (malheureusement ce n'est pas toujours le cas), + nous devrions voir... +

+Web site tests
+OK
+Test cases run: 1/1, Failures: 0, Exceptions: 0
+
+ Nous avons vérifié qu'une page, de n'importe quel type, + a bien été renvoyée. Nous ne savons pas encore + s'il s'agit de celle que nous souhaitions. +

+ +

Tester le contenu d'une page

+

+ Pour obtenir la confirmation que la page téléchargée + est bien celle que nous attendions, + nous devons vérifier son contenu. +

+class TestOfLastcraft extends WebTestCase {
+    
+    function testHomepage() {
+        $this->get('http://www.lastcraft.com/');
+        $this->assertWantedPattern('/why the last craft/i');
+    }
+}
+
+ La page obtenue par le dernier téléchargement est + placée dans un buffer au sein même du scénario de test. + Il n'est donc pas nécessaire de s'y référer directement. + La correspondance du motif est toujours effectuée + par rapport à ce buffer. +

+

+ Voici une liste possible d'assertions sur le contenu... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
assertWantedPattern($pattern)Vérifier une correspondance sur le contenu via une expression rationnelle Perl
assertNoUnwantedPattern($pattern)Une expression rationnelle Perl pour vérifier une absence
assertTitle($title)Passe si le titre de la page correspond exactement
assertLink($label)Passe si un lien avec ce texte est présent
assertNoLink($label)Passe si aucun lien avec ce texte est présent
assertLinkById($id)Passe si un lien avec cet attribut d'identification est présent
assertField($name, $value)Passe si une balise input avec ce nom contient cette valeur
assertFieldById($id, $value)Passe si une balise input avec cet identifiant contient cette valeur
assertResponse($codes)Passe si la réponse HTTP trouve une correspondance dans la liste
assertMime($types)Passe si le type MIME se retrouve dans cette liste
assertAuthentication($protocol)Passe si l'authentification provoquée est de ce type de protocole
assertNoAuthentication()Passe s'il n'y pas d'authentification provoquée en cours
assertRealm($name)Passe si le domaine provoqué correspond
assertHeader($header, $content)Passe si une entête téléchargée correspond à cette valeur
assertNoUnwantedHeader($header)Passe si une entête n'a pas été téléchargé
assertHeaderPattern($header, $pattern)Passe si une entête téléchargée correspond à cette expression rationnelle Perl
assertCookie($name, $value)Passe s'il existe un cookie correspondant
assertNoCookie($name)Passe s'il n'y a pas de cookie avec un tel nom
+ Comme d'habitude avec les assertions de SimpleTest, + elles renvoient toutes "false" en cas d'échec + et "true" si c'est un succès. + Elles renvoient aussi un message de test optionnel : + vous pouvez l'ajouter dans votre propre message en utilisant "%s". +

+

+ A présent nous pourrions effectué le test sur le titre uniquement... +

+$this->assertTitle('The Last Craft?');
+
+ En plus d'une simple vérification sur le contenu HTML, + nous pouvons aussi vérifier que le type MIME est bien d'un type acceptable... +
+$this->assertMime(array('text/plain', 'text/html'));
+
+ Plus intéressant encore est la vérification sur + le code de la réponse HTTP. Pareillement au type MIME, + nous pouvons nous assurer que le code renvoyé se trouve + bien dans un liste de valeurs possibles... +
+class TestOfLastcraft extends WebTestCase {
+    
+    function testHomepage() {
+        $this->get('http://simpletest.sourceforge.net/');
+        $this->assertResponse(200);
+    }
+}
+
+ Ici nous vérifions que le téléchargement s'est + bien terminé en ne permettant qu'une réponse HTTP 200. + Ce test passera, mais ce n'est pas la meilleure façon de procéder. + Il n'existe aucune page sur http://simpletest.sourceforge.net/, + à la place le serveur renverra une redirection vers + http://www.lastcraft.com/simple_test.php. + WebTestCase suit automatiquement trois + de ces redirections. Les tests sont quelque peu plus + robustes de la sorte. Surtout qu'on est souvent plus intéressé + par l'interaction entre les pages que de leur simple livraison. + Si les redirections se révèlent être digne d'intérêt, + il reste possible de les supprimer... +
+class TestOfLastcraft extends WebTestCase {
+    
+    function testHomepage() {
+        $this->setMaximumRedirects(0);
+        $this->get('http://simpletest.sourceforge.net/');
+        $this->assertResponse(200);
+    }
+}
+
+ Alors l'assertion échoue comme prévue... +
+Web site tests
+1) Expecting response in [200] got [302]
+    in testhomepage
+    in testoflastcraft
+    in lastcraft_test.php
+FAILURES!!!
+Test cases run: 1/1, Failures: 1, Exceptions: 0
+
+ Nous pouvons modifier le test pour accepter les redirections... +
+class TestOfLastcraft extends WebTestCase {
+    
+    function testHomepage() {
+        $this->setMaximumRedirects(0);
+        $this->get('http://simpletest.sourceforge.net/');
+        $this->assertResponse(array(301, 302, 303, 307));
+    }
+}
+
+ Maitenant ça passe. +

+ +

Navigeur dans un site web

+

+ Les utilisateurs ne naviguent pas souvent en tapant les URLs, + mais surtout en cliquant sur des liens et des boutons. + Ici nous confirmons que les informations sur le contact + peuvent être atteintes depuis la page d'accueil... +

+class TestOfLastcraft extends WebTestCase {
+    ...
+    function testContact() {
+        $this->get('http://www.lastcraft.com/');
+        $this->clickLink('About');
+        $this->assertTitle('About Last Craft');
+    }
+}
+
+ Le paramètre est le texte du lien. +

+

+ Il l'objectif est un bouton plutôt qu'une balise ancre, + alors clickSubmit() doit être utilisé avec + le titre du bouton... +

+$this->clickSubmit('Go!');
+
+

+

+ La liste des méthodes de navigation est... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
get($url, $parameters)Envoie une requête GET avec ces paramètres
post($url, $parameters)Envoie une requête POST avec ces paramètres
head($url, $parameters)Envoie une requête HEAD sans remplacer le contenu de la page
retry()Relance la dernière requête
back()Identique au bouton "Précédent" du navigateur
forward()Identique au bouton "Suivant" du navigateur
authenticate($name, $password)Re-essaye avec une tentative d'authentification
getFrameFocus()Le nom de la fenêtre en cours d'utilisation
setFrameFocusByIndex($choice)Change le focus d'une fenêtre en commençant par 1
setFrameFocus($name)Change le focus d'une fenêtre en utilisant son nom
clearFrameFocus()Revient à un traitement de toutes les fenêtres comme une seule
clickSubmit($label)Clique sur le premier bouton avec cette étiquette
clickSubmitByName($name)Clique sur le bouton avec cet attribut de nom
clickSubmitById($id)Clique sur le bouton avec cet attribut d'identification
clickImage($label, $x, $y)Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")
clickImageByName($name, $x, $y)Clique sur une balise input de type image par son attribut (name="*")
clickImageById($id, $x, $y)Clique sur une balise input de type image par son identifiant (id="*")
submitFormById($id)Soumet un formulaire sans valeur de soumission
clickLink($label, $index)Clique sur une ancre avec ce texte d'étiquette visible
clickLinkById($id)Clique sur une ancre avec cet attribut d'identification
+

+

+ Les paramètres dans les méthodes get(), + post() et head() sont optionnels. + Le téléchargement via HTTP HEAD ne modifie pas + le contexte du navigateur, il se limite au chargement des cookies. + Cela peut être utilise lorsqu'une image ou une feuille de style + initie un cookie pour bloquer un robot trop entreprenant. +

+

+ Les commandes retry(), back() + et forward() fonctionnent exactement comme + dans un navigateur. Elles utilisent l'historique pour + relancer les pages. Une technique bien pratique pour + vérifier les effets d'un bouton retour sur vos formulaires. +

+

+ Les méthodes sur les fenêtres méritent une petite explication. + Par défaut, une page avec des fenêtres est traitée comme toutes + les autres. Le contenu sera vérifié à travers l'ensemble de + la "frameset", par conséquent un lien fonctionnera, + peu importe la fenêtre qui contient la balise ancre. + Vous pouvez outrepassé ce comportement en exigeant + le focus sur une unique fenêtre. Si vous réalisez cela, + toutes les recherches et toutes les actions se limiteront + à cette unique fenêtre, y compris les demandes d'authentification. + Si un lien ou un bouton n'est pas dans la fenêtre en focus alors + il ne peut pas être cliqué. +

+

+ Tester la navigation sur des pages fixes ne vous alerte que + quand vous avez cassé un script entier. + Pour des pages fortement dynamiques, + un forum de discussion par exemple, + ça peut être crucial pour vérifier l'état de l'application. + Pour la plupart des applications cependant, + la logique vraiment délicate se situe dans la gestion + des formulaires et des sessions. + Heureusement SimpleTest aussi inclut + + des outils pour tester des formulaires web. +

+ +

Modifier la requête

+

+ Bien que SimpleTest n'ait pas comme objectif + de contrôler des erreurs réseau, il contient quand même + des méthodes pour modifier et déboguer les requêtes qu'il lance. + Voici une autre liste de méthode... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getTransportError()La dernière erreur de socket
getUrl()La localisation courante
showRequest()Déverse la requête sortante
showHeaders()Déverse les entêtes d'entrée
showSource()Déverse le contenu brut de la page HTML
ignoreFrames()Ne recharge pas les framesets
setCookie($name, $value)Initie un cookie à partir de maintenant
addHeader($header)Ajoute toujours cette entête à la requête
setMaximumRedirects($max)S'arrête après autant de redirections
setConnectionTimeout($timeout)Termine la connexion après autant de temps entre les bytes
useProxy($proxy, $name, $password)Effectue les requêtes à travers ce proxy d'URL
+

+ +
+ References and related information... + + + + + -- cgit v1.2.3