/[openfoncier]/trunk/tests/base.php
ViewVC logotype

Annotation of /trunk/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2699 - (hide annotations)
Thu Jan 23 12:17:11 2014 UTC (11 years ago) by softime
File size: 12897 byte(s)
Déplacement du dossier screenshots/ dans le dossier results/
Modification de base.php pour enregistrer les screenshots dans results/screenshots/

1 fmichon 1649 <?php
2     /**
3 fmichon 2258 * Ce script contient la déclaration des classes BaseTesCase et Base2TestCase.
4 fmichon 1649 *
5     * @package openfoncier
6     * @version SVN : $Id$
7     */
8    
9 fmichon 1654 class BaseTestCase extends PHPUnit_Extensions_SeleniumTestCase {
10 fmichon 1649
11     protected function setUp() {
12     $this->setBrowser("firefox");
13 fmichon 1654 $this->setBrowserUrl("http://localhost/");
14 fmichon 2218 //$this->setSleep(1);
15 fmichon 1649 }
16    
17     protected function tearDown() {
18    
19     }
20    
21     protected function connect($login, $password) {
22 fmichon 2174 $this->open("openads/");
23 fmichon 1649 $this->type("id=login", $login);
24     $this->type("id=password", $password);
25     $this->click("name=login.action.connect");
26     $this->waitForPageToLoad("30000");
27     }
28    
29     protected function deconnect() {
30     $this->click("link=Déconnexion");
31     $this->waitForPageToLoad("30000");
32     }
33    
34 fmichon 1727 protected function login($login, $password) {
35     // on commence par se connecter
36     $this->connect($login, $password);
37 fmichon 1816 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
38     $this->verifyNoErrors();
39 fmichon 1727 // On doit être connecté
40     $this->assertTrue($this->isTextPresent("Votre session est maintenant ouverte."));
41     }
42    
43     protected function logout() {
44     // puis on se déconnecte
45     $this->deconnect();
46 fmichon 1816 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
47     $this->verifyNoErrors();
48 fmichon 1727 // on doit avoir un message nous indiquant que la session est finie
49     $this->assertTrue($this->isTextPresent("Votre session est maintenant terminée."));
50     // on ne doit plus avoir de lien de déconnexion
51     $this->assertFalse($this->isElementPresent("link=Déconnexion"));
52     }
53    
54 fmichon 1674 /**
55     * Cette méthode permet de fair un assert sur la NON présence d'un message
56 fmichon 1719 * indiquant une erreur de base de données ou une notice PHP
57 fmichon 1674 */
58 fmichon 1719 public function verifyNoErrors() {
59 fmichon 1674 try {
60     $this->assertFalse($this->isTextPresent("Erreur de base de données. Contactez votre administrateur."));
61     } catch (PHPUnit_Framework_AssertionFailedError $e) {
62     array_push($this->verificationErrors, "Erreur de base de données.");
63     }
64 fmichon 1719 try {
65     $this->assertFalse($this->isTextPresent("Parse error:"));
66     } catch (PHPUnit_Framework_AssertionFailedError $e) {
67     array_push($this->verificationErrors, "PHP Parse error:");
68     }
69     try {
70     $this->assertFalse($this->isTextPresent("Fatal error:"));
71     } catch (PHPUnit_Framework_AssertionFailedError $e) {
72     array_push($this->verificationErrors, "PHP Fatal error:");
73     }
74     try {
75     $this->assertFalse($this->isTextPresent("Notice:"));
76     } catch (PHPUnit_Framework_AssertionFailedError $e) {
77     array_push($this->verificationErrors, "PHP Notice:");
78     }
79 fmichon 1674 }
80    
81 fmichon 1649 }
82    
83 softime 1990 /**
84     * Cette classe est une classe de base à utiliser par les tests (thèmes)
85     * fonctionnels utilisant Selenium2 pour avoir les méthodes communes setUp,
86     * tearDown ainsi que certaines méthodes utilitaires comme login, logout, ou
87     * verifiynoerrors...
88     */
89     class Base2TestCase extends PHPUnit_Extensions_Selenium2TestCase {
90    
91     /**
92 fmichon 2329 * Url de base
93     * @var string
94     */
95     var $url = "openads/";
96    
97     /**
98 softime 2416 * Chemin dossier des screenshots
99     * @var string
100     */
101 softime 2699 var $screenshotPath = '/var/www/openads/tests/results/screenshots/';
102 softime 2416
103     /**
104     * Option capture d'écran
105     * @var boolean
106     */
107     var $screenshotOnFailureAndError = true;
108    
109     /**
110 softime 1990 * Cette méthode est appelée avant le lancement de chaque test
111     * (fonctionnalité).
112     */
113 fmichon 2258 protected function setUp() {
114 softime 1990 // On positionne le navigateur
115     $this->setBrowser("firefox");
116     //$this->setBrowser("chrome");
117     // On positionne l'URL de base
118     $this->setBrowserUrl("http://localhost/");
119     }
120    
121     /**
122     * Cette méthode est appelée après le lancement de chaque test
123     * (fonctionnalité).
124     */
125     protected function tearDown() {
126 softime 2416
127     // Récupère le statut
128     $status = $this->getStatus();
129     // Si l'option capture d'écran est activé et qu'il y a une erreur(error)
130     // ou un echec(failure)
131     if ($this->screenshotOnFailureAndError === true
132     && ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
133     || $status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE)) {
134     // Si c'est une erreur
135     if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR) {
136     $startFilename = "error_";
137     }
138     // Si c'est un echec
139     if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
140     $startFilename = "failure_";
141     }
142     // Nom de l'image
143     $filename = $startFilename.$this->getName()."_".date("Ymd_His").".png";
144     // Ajout de l'image
145     file_put_contents($this->screenshotPath.$filename,
146     $this->currentScreenshot());
147     }
148 softime 1990 }
149    
150     /**
151 fmichon 2258 * Cette méthode permet de connecter l'utilisateur à l'application.
152 softime 1990 */
153     protected function connect($login, $password) {
154     // On ouvre l'url openexemple
155 fmichon 2329 $this->url($this->url);
156 softime 1990 // On saisit le login dans le champ login
157     $this->byName("login")->value($login);
158     // On saisit le mot de passe dans le champ mot de passe
159     $this->byName("password")->value($password);
160     // On clique sur le bouton de connexion
161     $this->byname("login.action.connect")->click();
162     }
163    
164     /**
165 fmichon 2258 * Cette méthode permet de déconnecter l'utilisateur.
166 softime 1990 */
167     protected function deconnect() {
168     // On clique sur le lien de déconnexion
169     $element = $this->bycssselector("a.actions-logout");
170     $element->click();
171     }
172    
173     /**
174     * Cette méthode permet de connecter l'utilisateur à l'application et de
175     * vérifier que la connecion s'est bien déroulée.
176     */
177     protected function login($login, $password) {
178     // On se connecte
179     $this->connect($login, $password);
180     // Allonge le temps d'attente lors de la recherche d'élément
181     $this->timeouts()->implicitWait(10000);
182 fmichon 2181 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
183     $this->verifynoerrors();
184     // On vérifie qu'un message nous indique que la session est ouverte
185     $element = $this->bycssselector("div.message span.text");
186     $this->assertequals("Votre session est maintenant ouverte.", $element->text());
187 softime 1990 }
188    
189     /**
190 softime 2605 * Cette méthode vérifier que la déconnexion s'est bien déroulée.
191 softime 1990 */
192 softime 2605 protected function verifyDeconnect() {
193 fmichon 2181 // Réduit le temps d'attente lors de la recherche d'élément
194 fmichon 2258 $this->timeouts()->implicitWait(240);
195 fmichon 2181 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
196     $this->verifynoerrors();
197     // On vérifie qu'un message nous indique que la session est terminée
198     $element = $this->bycssselector("div.message span.text");
199     $this->assertequals("Votre session est maintenant terminée.", $element->text());
200     // On vérifie que le lien de déconnexion n'est pas présent
201     try {
202     $el = $this->bycssselector("a.actions-logout");
203     $this->fail("The element shouldn't exist.");
204     } catch (RuntimeException $e) {}
205 softime 1990 //Ferme la fenêtre
206     $this->closeWindow();
207     }
208    
209     /**
210 softime 2605 * Cette méthode permet de déconnecter l'utilisateur et de vérifier que la
211     * déconnexion s'est bien déroulée.
212     */
213     protected function logout() {
214     // On se déconnecte
215     $this->deconnect();
216     // On vérifie que la déconnexion s'est bien déroulée
217     $this->verifyDeconnect();
218     }
219    
220     /**
221 softime 1990 * Cette méthode permet de fair un assert sur la NON présence d'un message
222     * indiquant une erreur de base de données ou une notice PHP.
223 fmichon 2181 * XXX Remplacer les tests par des expressions régulières pour améliorer
224     * les performances et être plus exhaustif
225 softime 1990 */
226     public function verifynoerrors() {
227     // On récupère le contenu du rendu de la page
228     $source = $this->source();
229     // On vérifie la présence du message d'erreur de base de données
230     try {
231     $this->assertNotContains("Erreur de base de données. Contactez votre administrateur.", $source);
232 fmichon 2258 $this->assertNotContains("Erreur de base de donnees. Contactez votre administrateur.", $source);
233 softime 1990 } catch (PHPUnit_Framework_AssertionFailedError $e) {
234     $this->fail("Failed asserting that the source does not contain \"Erreur de base de données\".");
235     }
236     // On vérifie la présence d'une erreur fatale PHP
237     try {
238     $this->assertNotContains("Fatal error:", $source);
239     } catch (PHPUnit_Framework_AssertionFailedError $e) {
240     $this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\".");
241     }
242 fmichon 2181 // On vérifie la présence d'une erreur fatale PHP
243     try {
244     $this->assertNotContains("<b>Fatal error</b>", $source);
245     } catch (PHPUnit_Framework_AssertionFailedError $e) {
246     $this->fail("Failed asserting that the source does not contain \"PHP Fatal error:\".");
247     }
248 softime 1990 // On vérifie la présence d'une erreur de syntaxe PHP
249     try {
250     $this->assertNotContains("Parse error:", $source);
251     } catch (PHPUnit_Framework_AssertionFailedError $e) {
252     $this->fail("Failed asserting that the source does not contain \"PHP Parse error:\".");
253     }
254 fmichon 2181 // On vérifie la présence d'une erreur de syntaxe PHP
255     try {
256     $this->assertNotContains("<b>Parse error</b>", $source);
257     } catch (PHPUnit_Framework_AssertionFailedError $e) {
258     $this->fail("Failed asserting that the source does not contain \"PHP Parse error:\".");
259     }
260 softime 1990 // On vérifie la présence d'une notice PHP
261     try {
262     $this->assertNotContains("Notice:", $source);
263     } catch (PHPUnit_Framework_AssertionFailedError $e) {
264     $this->fail("Failed asserting that the source does not contain \"PHP Notice:\".");
265     }
266 fmichon 2181 // On vérifie la présence d'une notice PHP
267     try {
268     $this->assertNotContains("<b>Notice</b>", $source);
269     } catch (PHPUnit_Framework_AssertionFailedError $e) {
270     $this->fail("Failed asserting that the source does not contain \"PHP Notice:\".");
271     }
272 softime 1990 }
273    
274     /**
275 softime 2605 * Cette fonction permet de cliquer sur le menu si celui-ci n'est pas déjà
276     * ouvert de base en fonction de l'utilisateur
277     * @param string $menu Titre du menu
278     * @param array $utilisateur Login et mdp de l'utilisateur
279     */
280     public function openMenu($menu, $utilisateur) {
281     // Si le menu est 'Guichet Unique'
282     if ($menu == 'Guichet Unique') {
283     // Vérifie les utilisateurs
284     if ($utilisateur["login"] != "guichet") {
285     // Clique sur le menu
286     $this->byLinkText($menu)->click();
287     $this->verifyNoErrors();
288     }
289     }
290     // Si le menu est 'Instruction'
291     if ($menu == 'Instruction') {
292     // Vérifie les utilisateurs
293     if ($utilisateur["login"] != "instr"
294     || $utilisateur["login"] != "visudadi"
295     || $utilisateur["login"] != "divi"
296     || $utilisateur["login"] != "chef"
297     || $utilisateur["login"] != "adminfonct") {
298     // Clique sur le menu
299     $this->byLinkText($menu)->click();
300     $this->verifyNoErrors();
301     }
302     }
303     // Si le menu est 'Suivi'
304     if ($menu == 'Suivi') {
305     // Vérifie les utilisateurs
306     if ($utilisateur["login"] != "suivi") {
307     // Clique sur le menu
308     $this->byLinkText($menu)->click();
309     $this->verifyNoErrors();
310     }
311     }
312     // Si le menu est 'Demandes D'avis'
313     if ($menu == "Demandes D'avis") {
314     // Vérifie les utilisateurs
315     if ($utilisateur["login"] != "consu"
316     || $utilisateur["login"] != "consu1"
317     || $utilisateur["login"] != "consu2") {
318     // Clique sur le menu
319     $this->byLinkText($menu)->click();
320     $this->verifyNoErrors();
321     }
322     }
323     }
324    
325     /**
326 softime 1990 * Cette méthode est un test (fonctionnalité) qui permet de tester le
327     * fonctionnement de la classe Base2TestCase
328     */
329     //public function test_login_logout() {
330     // // On se connecte avec l'utilisateur admin
331     // $this->login("admin", "admin");
332     // // On se déconnecte
333     // $this->logout();
334     //}
335    
336     }
337    
338 fmichon 1649 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26