web_tester_documentation.html.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 567 行 · 第 1/2 页

SVN-BASE
567
字号
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Documentation SimpleTest : tester des scripts web</title><link rel="stylesheet" type="text/css" href="docs.css" title="Styles"></head><body><div class="menu_back"><div class="menu"><a href="index.html">SimpleTest</a>                |                <a href="overview.html">Overview</a>                |                <a href="unit_test_documentation.html">Unit tester</a>                |                <a href="group_test_documentation.html">Group tests</a>                |                <a href="mock_objects_documentation.html">Mock objects</a>                |                <a href="partial_mocks_documentation.html">Partial mocks</a>                |                <a href="reporter_documentation.html">Reporting</a>                |                <a href="expectation_documentation.html">Expectations</a>                |                <a href="web_tester_documentation.html">Web tester</a>                |                <a href="form_testing_documentation.html">Testing forms</a>                |                <a href="authentication_documentation.html">Authentication</a>                |                <a href="browser_documentation.html">Scriptable browser</a></div></div><h1>Documentation sur le testeur web</h1>        This page...        <ul><li>            R茅ussir 脿 <a href="#telecharger">t茅l茅charger une page web</a>        </li><li>            Tester le <a href="#contenu">contenu de la page</a>        </li><li>            <a href="#navigation">Naviguer sur un site web</a> pendant le test        </li><li>            M茅thodes pour <a href="#requete">modifier une requ锚te</a> et pour d茅boguer        </li></ul><div class="content">        <p><a class="target" name="telecharger"><h2>T茅l茅charger une page</h2></a></p>            <p>                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.            </p>            <p>                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.            </p>            <p>                SimpleTest comprend une forme sp茅ciale de sc茅nario                de test pour tester les actions d'une page web.                <span class="new_code">WebTestCase</span> 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 脿 <span class="new_code">UnitTestCase</span>...<pre><strong>class TestOfLastcraft extends WebTestCase {}</strong></pre>                Ici nous sommes sur le point de tester                le site de <a href="http://www.lastcraft.com/">Last Craft</a>.                Si ce sc茅nario 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...<pre>&lt;?phprequire_once('simpletest/autorun.php');<strong>require_once('simpletest/web_tester.php');</strong>SimpleTest::prefer(new TextReporter());class WebTests extends TestSuite {    function WebTests() {        $this-&gt;TestSuite('Web site tests');<strong>        $this-&gt;addFile('lastcraft_test.php');</strong>    }}?&gt;</pre>                J'utilise ici le rapporteur en mode texte                pour mieux distinguer le contenu au format HTML                du r茅sultat du test proprement dit.            </p>            <p>                Rien n'est encore test茅. Nous pouvons t茅l茅charger                la page d'accueil en utilisant la m茅thode <span class="new_code">get()</span>...<pre>class TestOfLastcraft extends WebTestCase {    <strong>    function testHomepage() {        $this-&gt;assertTrue($this-&gt;get('http://www.lastcraft.com/'));    }</strong>}</pre>                La m茅thode <span class="new_code">get()</span> 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 <span class="new_code">get()</span> renverrait encore un succ猫s.            </p>            <p>                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...<pre class="shell">Web site testsOKTest cases run: 1/1, Failures: 0, Exceptions: 0</pre>                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.            </p>                <p><a class="target" name="contenu"><h2>Tester le contenu d'une page</h2></a></p>            <p>                Pour obtenir la confirmation que la page t茅l茅charg茅e                est bien celle que nous attendions,                nous devons v茅rifier son contenu.<pre>class TestOfLastcraft extends WebTestCase {        function testHomepage() {<strong>        $this-&gt;get('http://www.lastcraft.com/');        $this-&gt;assertWantedPattern('/why the last craft/i');</strong>    }}</pre>                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.            </p>            <p>                Voici une liste possible d'assertions sur le contenu...                <table><tbody>                    <tr><td><span class="new_code">assertWantedPattern($pattern)</span></td><td>V茅rifier une correspondance sur le contenu via une expression rationnelle Perl</td></tr>                    <tr><td><span class="new_code">assertNoUnwantedPattern($pattern)</span></td><td>Une expression rationnelle Perl pour v茅rifier une absence</td></tr>                    <tr><td><span class="new_code">assertTitle($title)</span></td><td>Passe si le titre de la page correspond exactement</td></tr>                    <tr><td><span class="new_code">assertLink($label)</span></td><td>Passe si un lien avec ce texte est pr茅sent</td></tr>                    <tr><td><span class="new_code">assertNoLink($label)</span></td><td>Passe si aucun lien avec ce texte est pr茅sent</td></tr>                    <tr><td><span class="new_code">assertLinkById($id)</span></td><td>Passe si un lien avec cet attribut d'identification est pr茅sent</td></tr>                    <tr><td><span class="new_code">assertField($name, $value)</span></td><td>Passe si une balise input avec ce nom contient cette valeur</td></tr>                    <tr><td><span class="new_code">assertFieldById($id, $value)</span></td><td>Passe si une balise input avec cet identifiant contient cette valeur</td></tr>                    <tr><td><span class="new_code">assertResponse($codes)</span></td><td>Passe si la r茅ponse HTTP trouve une correspondance dans la liste</td></tr>                    <tr><td><span class="new_code">assertMime($types)</span></td><td>Passe si le type MIME se retrouve dans cette liste</td></tr>                    <tr><td><span class="new_code">assertAuthentication($protocol)</span></td><td>Passe si l'authentification provoqu茅e est de ce type de protocole</td></tr>                    <tr><td><span class="new_code">assertNoAuthentication()</span></td><td>Passe s'il n'y pas d'authentification provoqu茅e en cours</td></tr>                    <tr><td><span class="new_code">assertRealm($name)</span></td><td>Passe si le domaine provoqu茅 correspond</td></tr>                    <tr><td><span class="new_code">assertHeader($header, $content)</span></td><td>Passe si une ent锚te t茅l茅charg茅e correspond 脿 cette valeur</td></tr>                    <tr><td><span class="new_code">assertNoUnwantedHeader($header)</span></td><td>Passe si une ent锚te n'a pas 茅t茅 t茅l茅charg茅</td></tr>                    <tr><td><span class="new_code">assertHeaderPattern($header, $pattern)</span></td><td>Passe si une ent锚te t茅l茅charg茅e correspond 脿 cette expression rationnelle Perl</td></tr>                    <tr><td><span class="new_code">assertCookie($name, $value)</span></td><td>Passe s'il existe un cookie correspondant</td></tr>                    <tr><td><span class="new_code">assertNoCookie($name)</span></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 "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".            </p>            <p>                A pr茅sent nous pourrions effectu茅 le test sur le titre uniquement...<pre><strong>$this-&gt;assertTitle('The Last Craft?');</strong></pre>                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...<pre><strong>$this-&gt;assertMime(array('text/plain', 'text/html'));</strong></pre>                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...<pre>class TestOfLastcraft extends WebTestCase {        function testHomepage() {        $this-&gt;get('http://simpletest.sourceforge.net/');<strong>        $this-&gt;assertResponse(200);</strong>    }}</pre>                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 <em>http://simpletest.sourceforge.net/</em>,                脿 la place le serveur renverra une redirection vers                <em>http://www.lastcraft.com/simple_test.php</em>.                <span class="new_code">WebTestCase</span> 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...<pre>class TestOfLastcraft extends WebTestCase {        function testHomepage() {<strong>        $this-&gt;setMaximumRedirects(0);</strong>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?