• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Effectuer des tests modernes pour drupal
 

Effectuer des tests modernes pour drupal

on

  • 914 views

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

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

Statistics

Views

Total Views
914
Views on SlideShare
868
Embed Views
46

Actions

Likes
0
Downloads
2
Comments
0

4 Embeds 46

http://www.drupagora.com 39
http://neuros.fr 4
http://www.neuros.fr 2
http://localhost 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Effectuer des tests modernes pour drupal Effectuer des tests modernes pour drupal Presentation Transcript

    • 2013 Effectuer des tests modernes pour Drupal @hellosct1
    • Qui ? Christophe Villeneuve @hellosct1
    • 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... »
    • 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
    • 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é
    • Tests unitaires... En pratique
    • 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
    • Tests unitaires : Les API D8 ✔ ✔ ✔ ✔ ✔ ✔ jUnit SimpleTest Zend_test PHPUnit Atoum ...
    • Cas pratique avec PHPUnit
    • 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
    • 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; } } ?>
    • 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; } } ?> ); } ?>
    • 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
    • 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); } } ?>
    • Résultat . Le test est réussi F l'assertion a échoué E Erreur Exécution S Problème inconnu I Test incomplet
    • Module & PHPUnit & Drupal
    • 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; } } ✔
    • 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'),
    • Résultat
    • Tests Fonctionnels... En pratique
    • 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
    • Tests Fonctionnels : utilisation Outils ✔ ✔ ✔ ✔ ✔ Selenium Behat Fitness Cucumber GreenPepper
    • Cas pratique avec Selenium
    • Tests Fonctionnels : utilisation
    • Utilisation de Selenium Selenium *.jar Selenium IDE... Extension Firefox Selenium HQ... Compatible avec les browsers
    • Utilisation de Selenium
    • Selenium et Drupal ✔ Module selenium ✔ S'appuie sur SimpleTest
    • Tests Intégrations... En pratique
    • 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
    • Tests Intégrations : utilisation Outils ✔ ✔ ✔ ✔ ✔ ✔ Selenium Sikuli Hudson Jenkins PhpUnderControl ...
    • Cas pratique avec PHPUnit & Selenium
    • 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
    • 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()); }
    • 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()); } ?>
    • 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'); }
    • PHPUnit / Selenium / Drupal public function testOuverturePageTypeMenu() { $this->open ( "http://localhost/drupal7/admin/menus/diner" ); $this->assertElementValueEquals ( 'name', '' ); }
    • Au final... les tests associés $ cd votreSite $ phpunit sites/all/modules/menus/menus.test.php
    • Ils ont été Ils ont été abordés abordés toute la toute la journée journée Les autres Tests ….
    • Merci @neuros_paris http://www.neuros.fr @hellosct1 http://www.webriver.eu http://blog.hello-design.fr