<commit_before><?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur le testeur web" here="Le testeur web">
    <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
    <long_title>Documentation SimpleTest : tester des scripts web</long_title>
    <content>
        <section name="telecharger" title="Tlcharger une page">
            <p>
                Tester des classes c'est trs bien.
                Reste que PHP est avant tout un langage
                pour crer des fonctionnalits  l'intrieur 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 constitue que de texte,
                nous devrions pouvoir les examiner exactement
                comme n'importe quelle autre donne de test.
            </p>
            <p>
                Cela nous amne  une situation dlicate.
                Si nous testons dans un niveau trop bas,
                vrifier des balises avec un motif ad hoc par exemple,
                nos tests seront trop fragiles. Le moindre changement
                dans la prsentation pourrait casser un grand nombre de test.
                Si nos tests sont situs trop haut, en utilisant
                une version fantaisie du moteur de template pour
                donner un cas prcis, alors nous perdons compltement
                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 extrmement fastidieux
                et plutt sensibles aux erreurs.
            </p>
            <p>
                SimpleTest comprend une forme spciale de scnario
                de test pour tester les actions d'une page web.
                <code>WebTestCase</code> inclut des facilits pour la navigation,
                des vrifications sur le contenu
                et les cookies ainsi que la gestion des formulaires.
                Utiliser ces scnarios de test ressemble
                fortement  <code>UnitTestCase</code>...
<php><![CDATA[
<strong>class TestOfLastcraft extends WebTestCase {
}</strong>
]]></php>
                Ici nous sommes sur le point de tester
                le site de <a href="http://www.lastcraft.com/">Last Craft</a>.
                Si ce scnario de test est situ dans un fichier appel
                <em>lastcraft_test.php</em> alors il peut tre charg
                dans un script de lancement tout comme des tests unitaires...
<php><![CDATA[
<?php
require_once('simpletest/autorun.php');<strong>
require_once('simpletest/web_tester.php');</strong>
SimpleTest::prefer(new TextReporter());

class WebTests extends TestSuite {
    function WebTests() {
        $this->TestSuite('Web site tests');<strong>
        $this->addFile('lastcraft_test.php');</strong>
    }
}
?>
]]></php>
                J'utilise ici le rapporteur en mode texte
                pour mieux distinguer le contenu au format HTML
                du rsultat du test proprement dit.
            </p>
            <p>
                Rien n'est encore test. Nous pouvons tlcharger
                la page d'accueil en utilisant la mthode <code>get()</code>...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    <strong>
    function testHomepage() {
        $this->assertTrue($this->get('http://www.lastcraft.com/'));
    }</strong>
}
]]></php>
                La mthode <code>get()</code> renverra &quot;true&quot;
                uniquement si le contenu de la page a bien t tlcharg.
                C'est un moyen simple, mais efficace pour vrifier
                qu'une page web a bien t dlivr par le serveur web.
                Cependant le contenu peut rvler tre une erreur 404
                et dans ce cas notre mthode <code>get()</code> renverrait encore un succs.
            </p>
            <p>
                En supposant que le serveur web pour le site Last Craft
                soit oprationnel (malheureusement ce n'est pas toujours le cas),
                nous devrions voir...
<pre class="shell">
Web site tests
OK
Test cases run: 1/1, Failures: 0, Exceptions: 0
</pre>
                Nous avons vrifi qu'une page, de n'importe quel type,
                a bien t renvoye. Nous ne savons pas encore
                s'il s'agit de celle que nous souhaitions.
            </p>
        </section>
        <section name="contenu" title="Tester le contenu d'une page">
            <p>
                Pour obtenir la confirmation que la page tlcharge
                est bien celle que nous attendions,
                nous devons vrifier son contenu.
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {<strong>
        $this->get('http://www.lastcraft.com/');
        $this->assertWantedPattern('/why the last craft/i');</strong>
    }
}
]]></php>
                La page obtenue par le dernier tlchargement est
                place dans un buffer au sein mme du scnario de test.
                Il n'est donc pas ncessaire de s'y rfrer directement.
                La correspondance du motif est toujours effectue
                par rapport  ce buffer.
            </p>
            <p>
                Voici une liste possible d'assertions sur le contenu...
                <table><tbody>
                    <tr><td><code>assertWantedPattern($pattern)</code></td><td>Vrifier une correspondance sur le contenu via une expression rationnelle Perl</td></tr>
                    <tr><td><code>assertNoUnwantedPattern($pattern)</code></td><td>Une expression rationnelle Perl pour vrifier une absence</td></tr>
                    <tr><td><code>assertTitle($title)</code></td><td>Passe si le titre de la page correspond exactement</td></tr>
                    <tr><td><code>assertLink($label)</code></td><td>Passe si un lien avec ce texte est prsent</td></tr>
                    <tr><td><code>assertNoLink($label)</code></td><td>Passe si aucun lien avec ce texte est prsent</td></tr>
                    <tr><td><code>assertLinkById($id)</code></td><td>Passe si un lien avec cet attribut d'identification est prsent</td></tr>
                    <tr><td><code>assertField($name, $value)</code></td><td>Passe si une balise input avec ce nom contient cette valeur</td></tr>
                    <tr><td><code>assertFieldById($id, $value)</code></td><td>Passe si une balise input avec cet identifiant contient cette valeur</td></tr>
                    <tr><td><code>assertResponse($codes)</code></td><td>Passe si la rponse HTTP trouve une correspondance dans la liste</td></tr>
                    <tr><td><code>assertMime($types)</code></td><td>Passe si le type MIME se retrouve dans cette liste</td></tr>
                    <tr><td><code>assertAuthentication($protocol)</code></td><td>Passe si l'authentification provoque est de ce type de protocole</td></tr>
                    <tr><td><code>assertNoAuthentication()</code></td><td>Passe s'il n'y pas d'authentification provoque en cours</td></tr>
                    <tr><td><code>assertRealm($name)</code></td><td>Passe si le domaine provoqu correspond</td></tr>
                    <tr><td><code>assertHeader($header, $content)</code></td><td>Passe si une entte tlcharge correspond  cette valeur</td></tr>
                    <tr><td><code>assertNoUnwantedHeader($header)</code></td><td>Passe si une entte n'a pas t tlcharg</td></tr>
                    <tr><td><code>assertHeaderPattern($header, $pattern)</code></td><td>Passe si une entte tlcharge correspond  cette expression rationnelle Perl</td></tr>
                    <tr><td><code>assertCookie($name, $value)</code></td><td>Passe s'il existe un cookie correspondant</td></tr>
                    <tr><td><code>assertNoCookie($name)</code></td><td>Passe s'il n'y a pas de cookie avec un tel nom</td></tr>
                </tbody></table>
                Comme d'habitude avec les assertions de SimpleTest,
                elles renvoient toutes &quot;false&quot; en cas d'chec
                et &quot;true&quot; si c'est un succs.
                Elles renvoient aussi un message de test optionnel :
                vous pouvez l'ajouter dans votre propre message en utilisant &quot;%s&quot;.
            </p>
            <p>
                A prsent nous pourrions effectu le test sur le titre uniquement...
<php><![CDATA[
<strong>$this->assertTitle('The Last Craft?');</strong>
]]></php>
                En plus d'une simple vrification sur le contenu HTML,
                nous pouvons aussi vrifier que le type MIME est bien d'un type acceptable...
<php><![CDATA[
<strong>$this->assertMime(array('text/plain', 'text/html'));</strong>
]]></php>
                Plus intressant encore est la vrification sur
                le code de la rponse HTTP. Pareillement au type MIME,
                nous pouvons nous assurer que le code renvoy se trouve
                bien dans un liste de valeurs possibles...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {
        $this->get('http://simpletest.sourceforge.net/');<strong>
        $this->assertResponse(200);</strong>
    }
}
]]></php>
                Ici nous vrifions que le tlchargement s'est
                bien termin en ne permettant qu'une rponse HTTP 200.
                Ce test passera, mais ce n'est pas la meilleure faon de procder.
                Il n'existe aucune page sur <em>http://simpletest.sourceforge.net/</em>,
                 la place le serveur renverra une redirection vers
                <em>http://www.lastcraft.com/simple_test.php</em>.
                <code>WebTestCase</code> suit automatiquement trois
                de ces redirections. Les tests sont quelque peu plus
                robustes de la sorte. Surtout qu'on est souvent plus intress
                par l'interaction entre les pages que de leur simple livraison.
                Si les redirections se rvlent tre digne d'intrt,
                il reste possible de les supprimer...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {<strong>
        $this->setMaximumRedirects(0);</strong>
        $this->get('http://simpletest.sourceforge.net/');
        $this->assertResponse(200);
    }
}
]]></php>
                Alors l'assertion choue comme prvue...
<pre class="shell">
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
</pre>
                Nous pouvons modifier le test pour accepter les redirections...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {
        $this->setMaximumRedirects(0);
        $this->get('http://simpletest.sourceforge.net/');
        $this->assertResponse(<strong>array(301, 302, 303, 307)</strong>);
    }
}
]]></php>
                Maitenant a passe.
            </p>
        </section>
        <section name="navigation" title="Navigeur dans un site web">
            <p>
                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...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    ...
    function testContact() {
        $this->get('http://www.lastcraft.com/');<strong>
        $this->clickLink('About');
        $this->assertTitle('About Last Craft');</strong>
    }
}
]]></php>
                Le paramtre est le texte du lien.
            </p>
            <p>
                Il l'objectif est un bouton plutt qu'une balise ancre,
                alors <code>clickSubmit()</code> doit tre utilis avec
                le titre du bouton...
<php><![CDATA[
<strong>$this->clickSubmit('Go!');</strong>
]]></php>
            </p>
            <p>
                La liste des mthodes de navigation est...
                <table><tbody>
                    <tr><td><code>get($url, $parameters)</code></td><td>Envoie une requte GET avec ces paramtres</td></tr>
                    <tr><td><code>post($url, $parameters)</code></td><td>Envoie une requte POST avec ces paramtres</td></tr>
                    <tr><td><code>head($url, $parameters)</code></td><td>Envoie une requte HEAD sans remplacer le contenu de la page</td></tr>
                    <tr><td><code>retry()</code></td><td>Relance la dernire requte</td></tr>
                    <tr><td><code>back()</code></td><td>Identique au bouton &quot;Prcdent&quot; du navigateur</td></tr>
                    <tr><td><code>forward()</code></td><td>Identique au bouton &quot;Suivant&quot; du navigateur</td></tr>
                    <tr><td><code>authenticate($name, $password)</code></td><td>Re-essaye avec une tentative d'authentification</td></tr>
                    <tr><td><code>getFrameFocus()</code></td><td>Le nom de la fentre en cours d'utilisation</td></tr>
                    <tr><td><code>setFrameFocusByIndex($choice)</code></td><td>Change le focus d'une fentre en commenant par 1</td></tr>
                    <tr><td><code>setFrameFocus($name)</code></td><td>Change le focus d'une fentre en utilisant son nom</td></tr>
                    <tr><td><code>clearFrameFocus()</code></td><td>Revient  un traitement de toutes les fentres comme une seule</td></tr>
                    <tr><td><code>clickSubmit($label)</code></td><td>Clique sur le premier bouton avec cette tiquette</td></tr>
                    <tr><td><code>clickSubmitByName($name)</code></td><td>Clique sur le bouton avec cet attribut de nom</td></tr>
                    <tr><td><code>clickSubmitById($id)</code></td><td>Clique sur le bouton avec cet attribut d'identification</td></tr>
                    <tr><td><code>clickImage($label, $x, $y)</code></td><td>Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")</td></tr>
                    <tr><td><code>clickImageByName($name, $x, $y)</code></td><td>Clique sur une balise input de type image par son attribut (name="*")</td></tr>
                    <tr><td><code>clickImageById($id, $x, $y)</code></td><td>Clique sur une balise input de type image par son identifiant (id="*")</td></tr>
                    <tr><td><code>submitFormById($id)</code></td><td>Soumet un formulaire sans valeur de soumission</td></tr>
                    <tr><td><code>clickLink($label, $index)</code></td><td>Clique sur une ancre avec ce texte d'tiquette visible</td></tr>
                    <tr><td><code>clickLinkById($id)</code></td><td>Clique sur une ancre avec cet attribut d'identification</td></tr>
                </tbody></table>
            </p>
            <p>
                Les paramtres dans les mthodes <code>get()</code>, 
                <code>post()</code> et <code>head()</code> sont optionnels.
                Le tlchargement 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.
            </p>
            <p>
                Les commandes <code>retry()</code>, <code>back()</code>
                et <code>forward()</code> fonctionnent exactement comme
                dans un navigateur. Elles utilisent l'historique pour
                relancer les pages. Une technique bien pratique pour
                vrifier les effets d'un bouton retour sur vos formulaires.
            </p>
            <p>
                Les mthodes sur les fentres mritent une petite explication.
                Par dfaut, une page avec des fentres est traite comme toutes
                les autres. Le contenu sera vrifi  travers l'ensemble de
                la &quot;frameset&quot;, par consquent un lien fonctionnera,
                peu importe la fentre qui contient la balise ancre.
                Vous pouvez outrepass ce comportement en exigeant
                le focus sur une unique fentre. Si vous ralisez cela,
                toutes les recherches et toutes les actions se limiteront
                 cette unique fentre, y compris les demandes d'authentification.
                Si un lien ou un bouton n'est pas dans la fentre en focus alors
                il ne peut pas tre cliqu.
            </p>
            <p>
                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 vrifier l'tat de l'application.
                Pour la plupart des applications cependant,
                la logique vraiment dlicate se situe dans la gestion
                des formulaires et des sessions.
                Heureusement SimpleTest aussi inclut
                <a local="form_testing_documentation">
                des outils pour tester des formulaires web</a>.
            </p>
        </section>
        <section name="requete" title="Modifier la requte">
            <p>
                Bien que SimpleTest n'ait pas comme objectif
                de contrler des erreurs rseau, il contient quand mme
                des mthodes pour modifier et dboguer les requtes qu'il lance.
                Voici une autre liste de mthode...
                <table><tbody>
                    <tr><td><code>getTransportError()</code></td><td>La dernire erreur de socket</td></tr>
                    <tr><td><code>getUrl()</code></td><td>La localisation courante</td></tr>
                    <tr><td><code>showRequest()</code></td><td>Dverse la requte sortante</td></tr>
                    <tr><td><code>showHeaders()</code></td><td>Dverse les enttes d'entre</td></tr>
                    <tr><td><code>showSource()</code></td><td>Dverse le contenu brut de la page HTML</td></tr>
                    <tr><td><code>ignoreFrames()</code></td><td>Ne recharge pas les framesets</td></tr>
                    <tr><td><code>setCookie($name, $value)</code></td><td>Initie un cookie  partir de maintenant</td></tr>
                    <tr><td><code>addHeader($header)</code></td><td>Ajoute toujours cette entte  la requte</td></tr>
                    <tr><td><code>setMaximumRedirects($max)</code></td><td>S'arrte aprs autant de redirections</td></tr>
                    <tr><td><code>setConnectionTimeout($timeout)</code></td><td>Termine la connexion aprs autant de temps entre les bytes</td></tr>
                    <tr><td><code>useProxy($proxy, $name, $password)</code></td><td>Effectue les requtes  travers ce proxy d'URL</td></tr>
                </tbody></table>
            </p>
        </section>
    </content>
    <internal>
        <link>
            Russir  <a href="#telecharger">tlcharger une page web</a>
        </link>
        <link>
            Tester le <a href="#contenu">contenu de la page</a>
        </link>
        <link>
            <a href="#navigation">Naviguer sur un site web</a> pendant le test
        </link>
        <link>
            Mthodes pour <a href="#requete">modifier une requte</a> et pour dboguer
        </link>
    </internal>
    <external>
        <link>
            La page du projet SimpleTest sur
            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
        </link>
        <link>
            La page de tlchargement de SimpleTest sur
            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
        </link>
        <link>
            <a href="http://simpletest.org/api/">L'API du dveloppeur pour SimpleTest</a>
            donne tous les dtails sur les classes et les assertions disponibles.
        </link>
    </external>
    <meta>
        <keywords>
            dveloppement logiciel,
            programmation php pour des clients,
            php orient client,
            outils de dveloppement logiciel,
            framework de test de recette,
            scripts php gratuits,
            architecture,
            ressources php,
            HTMLUnit,
            JWebUnit,
            test php,
            ressource de test unitaire,
            test web
        </keywords>
    </meta>
</page><commit_msg>French translation back in synch X<commit_after><?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur le testeur web" here="Le testeur web">
    <synchronisation lang="en" version="1876" date="08/06/2011" maintainer="pp11" />
    <long_title>Documentation SimpleTest : tester des scripts web</long_title>
    <content>
        <section name="telecharger" title="Tlcharger une page">
            <p>
                Tester des classes c'est trs bien.
                Reste que PHP est avant tout un langage
                pour crer des fonctionnalits  l'intrieur 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 constitue que de texte,
                nous devrions pouvoir les examiner exactement
                comme n'importe quelle autre donne de test.
            </p>
            <p>
                Cela nous amne  une situation dlicate.
                Si nous testons dans un niveau trop bas,
                vrifier des balises avec un motif ad hoc par exemple,
                nos tests seront trop fragiles. Le moindre changement
                dans la prsentation pourrait casser un grand nombre de test.
                Si nos tests sont situs trop haut, en utilisant
                une version fantaisie du moteur de template pour
                donner un cas prcis, alors nous perdons compltement
                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 extrmement fastidieux
                et plutt sensibles aux erreurs.
            </p>
            <p>
                SimpleTest comprend une forme spciale de scnario
                de test pour tester les actions d'une page web.
                <code>WebTestCase</code> inclut des facilits pour la navigation,
                des vrifications sur le contenu
                et les cookies ainsi que la gestion des formulaires.
                Utiliser ces scnarios de test ressemble
                fortement  <code>UnitTestCase</code>...
<php><![CDATA[
<strong>class TestOfLastcraft extends WebTestCase {
}</strong>
]]></php>
                Ici nous sommes sur le point de tester
                le site de <a href="http://www.lastcraft.com/">Last Craft</a>.
                Si ce scnario de test est situ dans un fichier appel
                <em>lastcraft_test.php</em> alors il peut tre charg
                dans un script de lancement tout comme des tests unitaires...
<php><![CDATA[
<?php
require_once('simpletest/autorun.php');<strong>
require_once('simpletest/web_tester.php');</strong>
SimpleTest::prefer(new TextReporter());

class WebTests extends TestSuite {
    function WebTests() {
        $this->TestSuite('Web site tests');<strong>
        $this->addFile('lastcraft_test.php');</strong>
    }
}
?>
]]></php>
                J'utilise ici le rapporteur en mode texte
                pour mieux distinguer le contenu au format HTML
                du rsultat du test proprement dit.
            </p>
            <p>
                Rien n'est encore test. Nous pouvons tlcharger
                la page d'accueil en utilisant la mthode <code>get()</code>...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    <strong>
    function testHomepage() {
        $this->assertTrue($this->get('http://www.lastcraft.com/'));
    }</strong>
}
]]></php>
                La mthode <code>get()</code> renverra &quot;true&quot;
                uniquement si le contenu de la page a bien t tlcharg.
                C'est un moyen simple, mais efficace pour vrifier
                qu'une page web a bien t dlivr par le serveur web.
                Cependant le contenu peut rvler tre une erreur 404
                et dans ce cas notre mthode <code>get()</code> renverrait encore un succs.
            </p>
            <p>
                En supposant que le serveur web pour le site Last Craft
                soit oprationnel (malheureusement ce n'est pas toujours le cas),
                nous devrions voir...
<pre class="shell">
Web site tests
OK
Test cases run: 1/1, Failures: 0, Exceptions: 0
</pre>
                Nous avons vrifi qu'une page, de n'importe quel type,
                a bien t renvoye. Nous ne savons pas encore
                s'il s'agit de celle que nous souhaitions.
            </p>
        </section>
        <section name="contenu" title="Tester le contenu d'une page">
            <p>
                Pour obtenir la confirmation que la page tlcharge
                est bien celle que nous attendions,
                nous devons vrifier son contenu.
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {<strong>
        $this->get('http://www.lastcraft.com/');
        $this->assertWantedPattern('/why the last craft/i');</strong>
    }
}
]]></php>
                La page obtenue par le dernier tlchargement est
                place dans un buffer au sein mme du scnario de test.
                Il n'est donc pas ncessaire de s'y rfrer directement.
                La correspondance du motif est toujours effectue
                par rapport  ce buffer.
            </p>
            <p>
                Voici une liste possible d'assertions sur le contenu...
                <table><tbody>
                    <tr><td><code>assertWantedPattern($pattern)</code></td><td>Vrifier une correspondance sur le contenu via une expression rationnelle Perl</td></tr>
                    <tr><td><code>assertNoUnwantedPattern($pattern)</code></td><td>Une expression rationnelle Perl pour vrifier une absence</td></tr>
                    <tr><td><code>assertTitle($title)</code></td><td>Passe si le titre de la page correspond exactement</td></tr>
                    <tr><td><code>assertLink($label)</code></td><td>Passe si un lien avec ce texte est prsent</td></tr>
                    <tr><td><code>assertNoLink($label)</code></td><td>Passe si aucun lien avec ce texte est prsent</td></tr>
                    <tr><td><code>assertLinkById($id)</code></td><td>Passe si un lien avec cet attribut d'identification est prsent</td></tr>
                    <tr><td><code>assertField($name, $value)</code></td><td>Passe si une balise input avec ce nom contient cette valeur</td></tr>
                    <tr><td><code>assertFieldById($id, $value)</code></td><td>Passe si une balise input avec cet identifiant contient cette valeur</td></tr>
                    <tr><td><code>assertResponse($codes)</code></td><td>Passe si la rponse HTTP trouve une correspondance dans la liste</td></tr>
                    <tr><td><code>assertMime($types)</code></td><td>Passe si le type MIME se retrouve dans cette liste</td></tr>
                    <tr><td><code>assertAuthentication($protocol)</code></td><td>Passe si l'authentification provoque est de ce type de protocole</td></tr>
                    <tr><td><code>assertNoAuthentication()</code></td><td>Passe s'il n'y pas d'authentification provoque en cours</td></tr>
                    <tr><td><code>assertRealm($name)</code></td><td>Passe si le domaine provoqu correspond</td></tr>
                    <tr><td><code>assertHeader($header, $content)</code></td><td>Passe si une entte tlcharge correspond  cette valeur</td></tr>
                    <tr><td><code>assertNoUnwantedHeader($header)</code></td><td>Passe si une entte n'a pas t tlcharg</td></tr>
                    <tr><td><code>assertHeaderPattern($header, $pattern)</code></td><td>Passe si une entte tlcharge correspond  cette expression rationnelle Perl</td></tr>
                    <tr><td><code>assertCookie($name, $value)</code></td><td>Passe s'il existe un cookie correspondant</td></tr>
                    <tr><td><code>assertNoCookie($name)</code></td><td>Passe s'il n'y a pas de cookie avec un tel nom</td></tr>
                </tbody></table>
                Comme d'habitude avec les assertions de SimpleTest,
                elles renvoient toutes &quot;false&quot; en cas d'chec
                et &quot;true&quot; si c'est un succs.
                Elles renvoient aussi un message de test optionnel :
                vous pouvez l'ajouter dans votre propre message en utilisant &quot;%s&quot;.
            </p>
            <p>
                A prsent nous pourrions effectu le test sur le titre uniquement...
<php><![CDATA[
<strong>$this->assertTitle('The Last Craft?');</strong>
]]></php>
                En plus d'une simple vrification sur le contenu HTML,
                nous pouvons aussi vrifier que le type MIME est bien d'un type acceptable...
<php><![CDATA[
<strong>$this->assertMime(array('text/plain', 'text/html'));</strong>
]]></php>
                Plus intressant encore est la vrification sur
                le code de la rponse HTTP. Pareillement au type MIME,
                nous pouvons nous assurer que le code renvoy se trouve
                bien dans un liste de valeurs possibles...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {
        $this->get('http://simpletest.sourceforge.net/');<strong>
        $this->assertResponse(200);</strong>
    }
}
]]></php>
                Ici nous vrifions que le tlchargement s'est
                bien termin en ne permettant qu'une rponse HTTP 200.
                Ce test passera, mais ce n'est pas la meilleure faon de procder.
                Il n'existe aucune page sur <em>http://simpletest.sourceforge.net/</em>,
                 la place le serveur renverra une redirection vers
                <em>http://www.lastcraft.com/simple_test.php</em>.
                <code>WebTestCase</code> suit automatiquement trois
                de ces redirections. Les tests sont quelque peu plus
                robustes de la sorte. Surtout qu'on est souvent plus intress
                par l'interaction entre les pages que de leur simple livraison.
                Si les redirections se rvlent tre digne d'intrt,
                il reste possible de les supprimer...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {<strong>
        $this->setMaximumRedirects(0);</strong>
        $this->get('http://simpletest.sourceforge.net/');
        $this->assertResponse(200);
    }
}
]]></php>
                Alors l'assertion choue comme prvue...
<pre class="shell">
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
</pre>
                Nous pouvons modifier le test pour accepter les redirections...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    
    function testHomepage() {
        $this->setMaximumRedirects(0);
        $this->get('http://simpletest.sourceforge.net/');
        $this->assertResponse(<strong>array(301, 302, 303, 307)</strong>);
    }
}
]]></php>
                Maitenant a passe.
            </p>
        </section>
        <section name="navigation" title="Navigeur dans un site web">
            <p>
                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...
<php><![CDATA[
class TestOfLastcraft extends WebTestCase {
    ...
    function testContact() {
        $this->get('http://www.lastcraft.com/');<strong>
        $this->clickLink('About');
        $this->assertTitle('About Last Craft');</strong>
    }
}
]]></php>
                Le paramtre est le texte du lien.
            </p>
            <p>
                Il l'objectif est un bouton plutt qu'une balise ancre,
                alors <code>clickSubmit()</code> doit tre utilis avec
                le titre du bouton...
<php><![CDATA[
<strong>$this->clickSubmit('Go!');</strong>
]]></php>
            </p>
            <p>
                La liste des mthodes de navigation est...
                <table><tbody>
                    <tr><td><code>get($url, $parameters)</code></td><td>Envoie une requte GET avec ces paramtres</td></tr>
                    <tr><td><code>post($url, $parameters)</code></td><td>Envoie une requte POST avec ces paramtres</td></tr>
                    <tr><td><code>head($url, $parameters)</code></td><td>Envoie une requte HEAD sans remplacer le contenu de la page</td></tr>
                    <tr><td><code>retry()</code></td><td>Relance la dernire requte</td></tr>
                    <tr><td><code>back()</code></td><td>Identique au bouton &quot;Prcdent&quot; du navigateur</td></tr>
                    <tr><td><code>forward()</code></td><td>Identique au bouton &quot;Suivant&quot; du navigateur</td></tr>
                    <tr><td><code>authenticate($name, $password)</code></td><td>Re-essaye avec une tentative d'authentification</td></tr>
                    <tr><td><code>getFrameFocus()</code></td><td>Le nom de la fentre en cours d'utilisation</td></tr>
                    <tr><td><code>setFrameFocusByIndex($choice)</code></td><td>Change le focus d'une fentre en commenant par 1</td></tr>
                    <tr><td><code>setFrameFocus($name)</code></td><td>Change le focus d'une fentre en utilisant son nom</td></tr>
                    <tr><td><code>clearFrameFocus()</code></td><td>Revient  un traitement de toutes les fentres comme une seule</td></tr>
                    <tr><td><code>clickSubmit($label)</code></td><td>Clique sur le premier bouton avec cette tiquette</td></tr>
                    <tr><td><code>clickSubmitByName($name)</code></td><td>Clique sur le bouton avec cet attribut de nom</td></tr>
                    <tr><td><code>clickSubmitById($id)</code></td><td>Clique sur le bouton avec cet attribut d'identification</td></tr>
                    <tr><td><code>clickImage($label, $x, $y)</code></td><td>Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")</td></tr>
                    <tr><td><code>clickImageByName($name, $x, $y)</code></td><td>Clique sur une balise input de type image par son attribut (name="*")</td></tr>
                    <tr><td><code>clickImageById($id, $x, $y)</code></td><td>Clique sur une balise input de type image par son identifiant (id="*")</td></tr>
                    <tr><td><code>submitFormById($id)</code></td><td>Soumet un formulaire sans valeur de soumission</td></tr>
                    <tr><td><code>clickLink($label, $index)</code></td><td>Clique sur une ancre avec ce texte d'tiquette visible</td></tr>
                    <tr><td><code>clickLinkById($id)</code></td><td>Clique sur une ancre avec cet attribut d'identification</td></tr>
                </tbody></table>
            </p>
            <p>
                Les paramtres dans les mthodes <code>get()</code>, 
                <code>post()</code> et <code>head()</code> sont optionnels.
                Le tlchargement 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.
            </p>
            <p>
                Les commandes <code>retry()</code>, <code>back()</code>
                et <code>forward()</code> fonctionnent exactement comme
                dans un navigateur. Elles utilisent l'historique pour
                relancer les pages. Une technique bien pratique pour
                vrifier les effets d'un bouton retour sur vos formulaires.
            </p>
            <p>
                Les mthodes sur les fentres mritent une petite explication.
                Par dfaut, une page avec des fentres est traite comme toutes
                les autres. Le contenu sera vrifi  travers l'ensemble de
                la &quot;frameset&quot;, par consquent un lien fonctionnera,
                peu importe la fentre qui contient la balise ancre.
                Vous pouvez outrepass ce comportement en exigeant
                le focus sur une unique fentre. Si vous ralisez cela,
                toutes les recherches et toutes les actions se limiteront
                 cette unique fentre, y compris les demandes d'authentification.
                Si un lien ou un bouton n'est pas dans la fentre en focus alors
                il ne peut pas tre cliqu.
            </p>
            <p>
                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 vrifier l'tat de l'application.
                Pour la plupart des applications cependant,
                la logique vraiment dlicate se situe dans la gestion
                des formulaires et des sessions.
                Heureusement SimpleTest aussi inclut
                <a local="form_testing_documentation">
                des outils pour tester des formulaires web</a>.
            </p>
        </section>
        <section name="requete" title="Modifier la requte">
            <p>
                Bien que SimpleTest n'ait pas comme objectif
                de contrler des erreurs rseau, il contient quand mme
                des mthodes pour modifier et dboguer les requtes qu'il lance.
                Voici une autre liste de mthode...
                <table><tbody>
                    <tr><td><code>getTransportError()</code></td><td>La dernire erreur de socket</td></tr>
                    <tr><td><code>getUrl()</code></td><td>La localisation courante</td></tr>
                    <tr><td><code>showRequest()</code></td><td>Dverse la requte sortante</td></tr>
                    <tr><td><code>showHeaders()</code></td><td>Dverse les enttes d'entre</td></tr>
                    <tr><td><code>showSource()</code></td><td>Dverse le contenu brut de la page HTML</td></tr>
                    <tr><td><code>ignoreFrames()</code></td><td>Ne recharge pas les framesets</td></tr>
                    <tr><td><code>setCookie($name, $value)</code></td><td>Initie un cookie  partir de maintenant</td></tr>
                    <tr><td><code>addHeader($header)</code></td><td>Ajoute toujours cette entte  la requte</td></tr>
                    <tr><td><code>setMaximumRedirects($max)</code></td><td>S'arrte aprs autant de redirections</td></tr>
                    <tr><td><code>setConnectionTimeout($timeout)</code></td><td>Termine la connexion aprs autant de temps entre les bytes</td></tr>
                    <tr><td><code>useProxy($proxy, $name, $password)</code></td><td>Effectue les requtes  travers ce proxy d'URL</td></tr>
                </tbody></table>
            </p>
        </section>
    </content>
    <internal>
        <link>
            Russir  <a href="#telecharger">tlcharger une page web</a>
        </link>
        <link>
            Tester le <a href="#contenu">contenu de la page</a>
        </link>
        <link>
            <a href="#navigation">Naviguer sur un site web</a> pendant le test
        </link>
        <link>
            Mthodes pour <a href="#requete">modifier une requte</a> et pour dboguer
        </link>
    </internal>
    <external>
        <link>
            La page du projet SimpleTest sur
            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
        </link>
        <link>
            La page de tlchargement de SimpleTest sur
            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
        </link>
        <link>
            <a href="http://simpletest.org/api/">L'API du dveloppeur pour SimpleTest</a>
            donne tous les dtails sur les classes et les assertions disponibles.
        </link>
    </external>
    <meta>
        <keywords>
            dveloppement logiciel,
            programmation php pour des clients,
            php orient client,
            outils de dveloppement logiciel,
            framework de test de recette,
            scripts php gratuits,
            architecture,
            ressources php,
            HTMLUnit,
            JWebUnit,
            test php,
            ressource de test unitaire,
            test web
        </keywords>
    </meta>
</page>
{'fraction_non_alphanumeric': 0.11740428734432279, 'fraction_numerical': 0.0030589206380034475, 'mean_word_length': 2.090172543135784, 'pattern_counts': {'":': 0, '<': 1177, '<?xml version=': 2, '>': 1217, 'https://': 0, 'lorem ipsum': 0, 'www.': 12, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4728953', 'n_tokens_mistral': 12055, 'n_tokens_neox': 11555, 'n_words': 3612}