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

Contents of /trunk/tests/base.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2699 - (show 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 <?php
2 /**
3 * Ce script contient la déclaration des classes BaseTesCase et Base2TestCase.
4 *
5 * @package openfoncier
6 * @version SVN : $Id$
7 */
8
9 class BaseTestCase extends PHPUnit_Extensions_SeleniumTestCase {
10
11 protected function setUp() {
12 $this->setBrowser("firefox");
13 $this->setBrowserUrl("http://localhost/");
14 //$this->setSleep(1);
15 }
16
17 protected function tearDown() {
18
19 }
20
21 protected function connect($login, $password) {
22 $this->open("openads/");
23 $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 protected function login($login, $password) {
35 // on commence par se connecter
36 $this->connect($login, $password);
37 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
38 $this->verifyNoErrors();
39 // 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 // On vérifie qu'il n'y a pas d'erreur sur l'élément affiché
47 $this->verifyNoErrors();
48 // 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 /**
55 * Cette méthode permet de fair un assert sur la NON présence d'un message
56 * indiquant une erreur de base de données ou une notice PHP
57 */
58 public function verifyNoErrors() {
59 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 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 }
80
81 }
82
83 /**
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 * Url de base
93 * @var string
94 */
95 var $url = "openads/";
96
97 /**
98 * Chemin dossier des screenshots
99 * @var string
100 */
101 var $screenshotPath = '/var/www/openads/tests/results/screenshots/';
102
103 /**
104 * Option capture d'écran
105 * @var boolean
106 */
107 var $screenshotOnFailureAndError = true;
108
109 /**
110 * Cette méthode est appelée avant le lancement de chaque test
111 * (fonctionnalité).
112 */
113 protected function setUp() {
114 // 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
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 }
149
150 /**
151 * Cette méthode permet de connecter l'utilisateur à l'application.
152 */
153 protected function connect($login, $password) {
154 // On ouvre l'url openexemple
155 $this->url($this->url);
156 // 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 * Cette méthode permet de déconnecter l'utilisateur.
166 */
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 // 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 }
188
189 /**
190 * Cette méthode vérifier que la déconnexion s'est bien déroulée.
191 */
192 protected function verifyDeconnect() {
193 // Réduit le temps d'attente lors de la recherche d'élément
194 $this->timeouts()->implicitWait(240);
195 // 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 //Ferme la fenêtre
206 $this->closeWindow();
207 }
208
209 /**
210 * 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 * 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 * XXX Remplacer les tests par des expressions régulières pour améliorer
224 * les performances et être plus exhaustif
225 */
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 $this->assertNotContains("Erreur de base de donnees. Contactez votre administrateur.", $source);
233 } 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 // 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 // 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 // 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 // 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 // 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 }
273
274 /**
275 * 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 * 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 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26