Your SlideShare is downloading. ×
0
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Effectuer des tests modernes pour drupal

827

Published on

Présentation effectuée lors de la conférence Drupagora 2013

Présentation effectuée lors de la conférence Drupagora 2013

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
827
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 2013 Effectuer des tests modernes pour Drupal @hellosct1
  • 2. Qui ? Christophe Villeneuve @hellosct1
  • 3. Les tests Citations ✔ ✔ « Des fois cela plante » « On a testé, … il y a 3 mois lors de la dernière livraison... Pas eu le temps... »
  • 4. L'importance des tests Pourquoi c'est utile ? ✔ ✔ ✔ Le code peut casser Changer le nom d'un fichier Et L'intérêt... ✔ ✔ En fait gagner ensuite Pas le temps d'en faire ✔ ✔ Coûte du temps au début C'est long manuellement Nécessite de la rigueur et de la constante
  • 5. Les différents types de tests Tests Unitaires • Module / classe / méthode Tests fonctionnels • l'interface utilisateur testée par le client Tests intégrations • Tester la navigation, et l'interface utilisateur Tests Tests Tests Tests Automatisés de charges d'ergonomie de sécurité
  • 6. Tests unitaires... En pratique
  • 7. Tests unitaires Déroulement ✔ ✔ ✔ ✔ Ecrire un test qui échoue Ecrire un test qui est bon Un test de sécurité Un test de contrôle Quoi tester ? ✔ ✔ ✔ ✔ Un module Une classe Une méthode Tester ✔ ✔ ✔ Ce qui est important Le risque de casser Les parties que vous touchez souvent
  • 8. Tests unitaires : Les API D8 ✔ ✔ ✔ ✔ ✔ ✔ jUnit SimpleTest Zend_test PHPUnit Atoum ...
  • 9. Cas pratique avec PHPUnit
  • 10. Installation En ligne de commandes # sudo apt-get install phpunit # pear channel-discover pear.phpunit.de # pear channel-discover components.ez.no # pear channel-discover pear.symfony-project.com En mode assistée - Windows - Linux - Mac Avec IDE - Eclipse PDT - Netbeans
  • 11. Tests unitaires : 1 Du code... <?php class calculs { +ieurs commentaires <?php class calculs { /** * @assert (0, 0) == 0 public function add($a, $b) * @assert (0, 1) == 1 { * @assert (1, 0) == 1 return $a + $b; * @assert (1, 1) == 2 * @assert (1, 2) == 4 } */ } public function add($a, $b) ?> { return $a + $b; } } ?>
  • 12. Tests unitaires : 1 1 commentaire <?php Passer au test <?php class calculs /** { * Generated from @assert (1, 1) == 2 */ /** * @assert (0, 0) == 0 */ public function testAdd() { $this->assertEquals( public function add($a, $b) 2, { $this->object->add(1, 1) return $a + $b; } } ?> ); } ?>
  • 13. Fonctionnement PHPUnit avec Drupal ✔ Boostrap ✔ ✔ ✔ Script d'amorcage Construction autonome Etendre le Boostrap ✔ ✔ ✔ ✔ ✔ Emplacement du fichier Déclarer les SLASHs Recherche de racine Drupal Chargeons boostrap.inc Execution
  • 14. PHPUnit avec Drupal <?php define('DRUPAL_ROOT', realpath(dirname(__FILE__) ) . PATH ); set_include_path(DRUPAL_ROOT . get_include_path()); include_once DRUPAL_ROOT . 'includes' . DS . 'bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); class base_test extends PHPUnit_Framework_TestCase { public function test_one_plus_one_is_two() { $this->assertEquals(1+1,2); } } ?>
  • 15. Résultat . Le test est réussi F l'assertion a échoué E Erreur Exécution S Problème inconnu I Test incomplet
  • 16. Module & PHPUnit & Drupal
  • 17. Module & PHPUnit & Drupal (1/2) drupagora.module <?php /** * Implementation hook_help() */ function drupagora_help($path, $arg) { switch ($path) { case 'admin/help#drupagora': $output = '<h3>A propos du module : Drupagora</h3>'; $output .= '<p>Exemple de module pour le livre : Drupal Avancé aux éditions Eyrolles</p>'; return $output; } } ✔
  • 18. Module & PHPUnit & Drupal (2/2) drupagora.test.php <?php include_once DRUPAL_ROOT . 'includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); class drupagora_test extends PHPUnit_Framework_TestCase { public function test_function_help() { $output = '<h3>A propos du module : Drupagora</h3>'; $output .= '<p>Exemple de module pour le livre : Drupal Avancé aux éditions Eyrolles</p>'; $this->assertEquals( $output ); } ... menu_for_all_help('admin/help#drupagora'),
  • 19. Résultat
  • 20. Tests Fonctionnels... En pratique
  • 21. Tests Fonctionnels Déroulement ✔ ✔ ✔ Prépare outil & API On le partage On récupère le résultat Quoi tester ? ✔ ✔ Nous... Rien C'est le client
  • 22. Tests Fonctionnels : utilisation Outils ✔ ✔ ✔ ✔ ✔ Selenium Behat Fitness Cucumber GreenPepper
  • 23. Cas pratique avec Selenium
  • 24. Tests Fonctionnels : utilisation
  • 25. Utilisation de Selenium Selenium *.jar Selenium IDE... Extension Firefox Selenium HQ... Compatible avec les browsers
  • 26. Utilisation de Selenium
  • 27. Selenium et Drupal ✔ Module selenium ✔ S'appuie sur SimpleTest
  • 28. Tests Intégrations... En pratique
  • 29. Tests Intégrations Déroulement ✔ ✔ ✔ 1 Navigation de la prod. Générer le script pour repérer les modifications de comportement 1 exécution sur le nouveau serveur Pourquoi ? ✔ ✔ Simulation d'un être humain Détection des problèmes éventuels
  • 30. Tests Intégrations : utilisation Outils ✔ ✔ ✔ ✔ ✔ ✔ Selenium Sikuli Hudson Jenkins PhpUnderControl ...
  • 31. Cas pratique avec PHPUnit & Selenium
  • 32. Installation PHP Unit & Selenium # sudo apt-get install phpunit # sudo apt-get install php5-curl # sudo apt-get install php-selenium En mode assistée - Windows - Linux - Mac Avec IDE - Eclipse PDT - Netbeans
  • 33. Utilisation PHP Unit & Selenium <?php class TestLogin extends PHPUnit_Extensions_Selenium2TestCase { public function setUp() { $this->setHost('localhost'); $this->setPort(4444); $this->setBrowser('firefox'); $this->setBrowserUrl('http://localhost/seleniumTut'); } public function testHasLoginForm() { $this->url('index.php'); $username = $this->byName('username'); $password = $this->byName('password'); $this->assertEquals('', $username->value()); $this->assertEquals('', $password->value()); }
  • 34. Utilisation PHP Unit & Selenium <?php public function testSubmitButtonIsDisabledUntilFieldsAreFilled() { $this->url('index.php'); $username = $this->byName('username'); $password = $this->byName('password'); $submit = $this->byId('submit'); $this->assertFalse($submit->enabled()); $username->value('hello'); $password->value('1234'); $this->assertTrue($submit->enabled()); $username->clear(); $password->clear(); $username->value(' '); $this->assertFalse($submit->enabled()); } ?>
  • 35. PHPUnit / Selenium / Drupal <?php class drupagora_test extends PHPUnit_Extensions_Selenium2TestCase { public function setUp() { $this->setHost('localhost'); $this->setPort(4444); $this->setBrowser('firefox'); $this->setBrowserUrl('http://localhost/drupal7'); } public function testSite() { $this->setBrowserurl ('index.php'); }
  • 36. PHPUnit / Selenium / Drupal public function testOuverturePageTypeMenu() { $this->open ( "http://localhost/drupal7/admin/menus/diner" ); $this->assertElementValueEquals ( 'name', '' ); }
  • 37. Au final... les tests associés $ cd votreSite $ phpunit sites/all/modules/menus/menus.test.php
  • 38. Ils ont été Ils ont été abordés abordés toute la toute la journée journée Les autres Tests ….
  • 39. Merci @neuros_paris http://www.neuros.fr @hellosct1 http://www.webriver.eu http://blog.hello-design.fr

×