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 --- .../simpletest/docs/fr/browser_documentation.html | 446 +++++++++++++++++++++ 1 file changed, 446 insertions(+) create mode 100755 vendors/simpletest/docs/fr/browser_documentation.html (limited to 'vendors/simpletest/docs/fr/browser_documentation.html') diff --git a/vendors/simpletest/docs/fr/browser_documentation.html b/vendors/simpletest/docs/fr/browser_documentation.html new file mode 100755 index 000000000..62abbbbb9 --- /dev/null +++ b/vendors/simpletest/docs/fr/browser_documentation.html @@ -0,0 +1,446 @@ + + + +Documentation SimpleTest : le composant de navigation web scriptable + + + + +

Documentation sur le navigateur scriptable

+ This page... + +
+ +

+ Le composant de navigation web de SimpleTest peut être utilisé + non seulement à l'extérieur de la classe WebTestCase, + mais aussi indépendamment du framework SimpleTest lui-même. +

+ +

Le navigateur scriptable

+

+ Vous pouvez utiliser le navigateur web dans des scripts PHP + pour confirmer que des services marchent bien comme il faut + ou pour extraire des informations à partir de ceux-ci de façon régulière. + Par exemple, voici un petit script pour extraire + le nombre de bogues ouverts dans PHP 5 à partir + du site web PHP... +

+<?php
+    require_once('simpletest/browser.php');
+    
+    $browser = &new SimpleBrowser();
+    $browser->get('http://php.net/');
+    $browser->clickLink('reporting bugs');
+    $browser->clickLink('statistics');
+    $browser->clickLink('PHP 5 bugs only');
+    $page = $browser->getContent();
+    preg_match('/status=Open.*?by=Any.*?(\d+)<\/a>/', $page, $matches);
+    print $matches[1];
+?>
+
+ Bien sûr Il y a des méthodes plus simple pour réaliser + cet exemple en PHP. Par exemple, vous pourriez juste + utiliser la commande PHP file() sur ce qui est + ici une page fixe. Cependant, en utilisant des scripts + avec le navigateur web vous vous autorisez l'authentification, + la gestion des cookies, le chargement automatique des fenêtres, + les redirections, la transmission de formulaires et la capacité + d'examiner les entêtes. De telles méthodes sont fragiles dans + un site en constante évolution et vous voudrez employer une méthode + plus directe pour accéder aux données de façon permanente, + mais pour des tâches simples cette technique peut s'avérer + une solution très rapide. +

+

+ Toutes les méthode de navigation utilisées dans WebTestCase sont présente dans la classe SimpleBrowser, mais les assertions sont remplacées par de simples accesseurs. Voici une liste complète des méthodes de navigation de page à page... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addHeader($header)Ajouter une entête à chaque téléchargement
useProxy($proxy, $username, $password)Utilise ce proxy à partir de maintenant
head($url, $parameters)Effectue une requête HEAD
get($url, $parameters)Télécharge une page avec un GET
post($url, $parameters)Télécharge une page avec un POST
clickLink($label)Suit un lien par son étiquette
isLink($label)Vérifie l'existance d'un lien par son étiquette
clickLinkById($id)Suit un lien par son attribut d'identification
isLinkById($id)Vérifie l'existance d'un lien par son attribut d'identification
getUrl()La page ou la fenêtre URL en cours
getTitle()Le titre de la page
getContent()Le page ou la fenêtre brute
getContentAsText()Sans code HTML à l'exception du text "alt"
retry()Répète la dernière requête
back()Utilise le bouton "précédent" du navigateur
forward()Utilise le bouton "suivant" du navigateur
authenticate($username, $password)Retente la page ou la fenêtre après une réponse 401
restart($date)Relance le navigateur pour une nouvelle session
ageCookies($interval)Change la date des cookies
setCookie($name, $value)Lance un nouveau cookie
getCookieValue($host, $path, $name)Lit le cookie le plus spécifique
getCurrentCookieValue($name)Lit le contenue du cookie en cours
+ Les méthode SimpleBrowser::useProxy() et + SimpleBrowser::addHeader() sont spéciales. + Une fois appelées, elles continuent à s'appliquer sur les téléchargements suivants. +

+

+ Naviguer dans les formulaires est similaire à la navigation des formulaires via WebTestCase... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setField($name, $value)Modifie tous les champs avec ce nom
setFieldById($id, $value)Modifie tous les champs avec cet identifiant
getField($name)Accesseur de la valeur d'un élément de formulaire
getFieldById($id)Accesseur de la valeur de l'élément de formulaire avec cet identifiant
clickSubmit($label)Transmet le formulaire avec l'étiquette de son bouton
clickSubmitByName($name)Transmet le formulaire avec l'attribut de son bouton
clickSubmitById($id)Transmet le formulaire avec l'identifiant de son bouton
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)Transmet le formulaire par son identifiant propre
+ Au jourd d'aujourd'hui il n'existe aucune méthode pour lister + les formulaires et les champs disponibles : ce sera probablement + ajouté dans des versions successives de SimpleTest. +

+

+ A l'intérieur d'une page, les fenêtres individuelles peuvent être + sélectionnées. Si aucune sélection n'est réalisée alors + toutes les fenêtres sont fusionnées ensemble dans + une unique et grande page. + Le contenu de la page en cours sera une concaténation des + toutes les fenêtres dans l'ordre spécifié par les balises "frameset". + + + + + + + + + + + + + + + + + + + + + +
getFrames()Un déchargement de la structure de la fenêtre courante
getFrameFocus()L'index ou l'étiquette de la fenêtre en courante
setFrameFocusByIndex($choice)Sélectionne la fenêtre numérotée à partir de 1
setFrameFocus($name)Sélectionne une fenêtre par son étiquette
clearFrameFocus()Traite toutes les fenêtres comme une seule page
+ Lorsqu'on est focalisé sur une fenêtre unique, + le contenu viendra de celle-ci uniquement. + Cela comprend les liens à cliquer et les formulaires à transmettre. +

+ +

Où sont les erreurs ?

+

+ Toute cette masse de fonctionnalités est géniale + lorsqu'on arrive à bien télécharger les pages, + mais ce n'est pas toujours évident. + Pour aider à découvrir les erreurs, le navigateur a aussi + des méthodes pour aider au débogage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setConnectionTimeout($timeout)Ferme la socket avec un délai trop long
getRequest()L'entête de la requête brute de la page ou de la fenêtre
getHeaders()L'entête de réponse de la page ou de la fenêtre
getTransportError()N'importe quel erreur au niveau de la socket dans le dernier téléchargement
getResponseCode()La réponse HTTP de la page ou de la fenêtre
getMimeType()Le type Mime de la page our de la fenêtre
getAuthentication()Le type d'authentification dans l'entête d'une provocation 401
getRealm()Le realm d'authentification dans l'entête d'une provocation 401
setMaximumRedirects($max)Nombre de redirections avant que la page ne soit chargée automatiquement
setMaximumNestedFrames($max)Protection contre des framesets récursifs
ignoreFrames()Neutralise le support des fenêtres
useFrames()Autorise le support des fenêtres
+ Les méthodes SimpleBrowser::setConnectionTimeout(), + SimpleBrowser::setMaximumRedirects(), + SimpleBrowser::setMaximumNestedFrames(), + SimpleBrowser::ignoreFrames() + et SimpleBrowser::useFrames() continuent à s'appliquer + sur toutes les requêtes suivantes. + Les autres méthodes tiennent compte des fenêtres. + Cela veut dire que si une fenêtre individuelle ne se charge pas, + il suffit de se diriger vers elle avec + SimpleBrowser::setFrameFocus() : ensuite on utilisera + SimpleBrowser::getRequest(), etc. pour voir ce qui se passe. +

+ +

Tests unitaires complexes avec des navigateurs multiples

+

+ Tout ce qui peut être fait dans + WebTestCase peut maintenant + être fait dans un UnitTestCase. + Ce qui revient à dire que nous pouvons librement mélanger + des tests sur des objets de domaine avec l'interface web... +


+class TestOfRegistration extends UnitTestCase {
+    function testNewUserAddedToAuthenticator() {
+        $browser = &new SimpleBrowser();
+        $browser->get('http://my-site.com/register.php');
+        $browser->setField('email', 'me@here');
+        $browser->setField('password', 'Secret');
+        $browser->clickSubmit('Register');
+        
+        $authenticator = &new Authenticator();
+        $member = &$authenticator->findByEmail('me@here');
+        $this->assertEqual($member->getPassword(), 'Secret');
+    }
+}
+
+ Bien que ça puisse être utile par convenance temporaire, + je ne suis pas fan de ce genre de test. Ce test s'applique + à plusieurs couches de l'application, ça implique qu'il est + plus que probable qu'il faudra le remanier lorsque le code changera. +

+

+ Un cas plus utile d'utilisation directe du navigateur est + le moment où le WebTestCase ne peut plus suivre. + Un exemple ? Quand deux navigateurs doivent être utilisés en même temps. +

+

+ Par exemple, supposons que nous voulions interdire + des usages simultanés d'un site avec le même login d'identification. + Ce scénario de test le vérifie... +

+class TestOfSecurity extends UnitTestCase {
+    function testNoMultipleLoginsFromSameUser() {
+        $first = &new SimpleBrowser();
+        $first->get('http://my-site.com/login.php');
+        $first->setField('name', 'Me');
+        $first->setField('password', 'Secret');
+        $first->clickSubmit('Enter');
+        $this->assertEqual($first->getTitle(), 'Welcome');
+        
+        $second = &new SimpleBrowser();
+        $second->get('http://my-site.com/login.php');
+        $second->setField('name', 'Me');
+        $second->setField('password', 'Secret');
+        $second->clickSubmit('Enter');
+        $this->assertEqual($second->getTitle(), 'Access Denied');
+    }
+}
+
+ Vous pouvez aussi utiliser la classe SimpleBrowser + quand vous souhaitez écrire des scénarios de test en utilisant + un autre outil que SimpleTest. +

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