SlideShare a Scribd company logo
1 of 43
Download to read offline
DEPLOYER AVEC LES TESTS


      Christophe Villeneuve



        30 Janvier 2013
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... »



      nAcademy – 30 Janvier 2013
L'importance des Tests


     Pourquoi c'est utile ?        Et L'intérêt...
 ✔
     Le code peut casser           ✔
                                       Coûte du temps au début
 ✔
     Changer le nom d'un
     fichier                       ✔
                                       En fait gagner ensuite


                                   ✔
                                       Nécessite de la rigueur et
 ✔
     Pas le temps d'en                 de la constante
     faire
 ✔
     C'est long
     manuellement

      nAcademy – 30 Janvier 2013
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 Automatisés
         ✔
             Détecter les régressions, c'est rapide
         ✔
             Le faire à chaque livraison de lots
 ✔
     Tests de charges
 ✔
     Tests d'ergonomie
 ✔
     Tests de sécurité
      nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests unitaires


     Déroulement                       Quoi tester ?
 ✔
     Ecrire un test qui échoue     ✔
                                       Un module
 ✔
     Ecrire un test qui est bon    ✔
                                       Une classe
 ✔
     Un test de sécurité           ✔
                                       Une méthode
 ✔
     Un test de contrôle
                                   ✔
                                       Tester
                                           ✔
                                               Ce qui est important
                                           ✔
                                               Le risque de casser
                                           ✔
                                               Les parties que vous
                                               touchez souvent



      nAcademy – 30 Janvier 2013
Tests unitaires : utilisation


     Outils
 ✔
     jUnit
 ✔
     SimpleTest
 ✔
     Zend_test
 ✔
     PHPUnit
 ✔
     Atoum
 ✔
     ...




       nAcademy – 30 Janvier 2013
Tests unitaires : cas pratique PHPUnit




    nAcademy – 30 Janvier 2013
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                  Avec IDE
 - Windows                         - Eclipse PDT
 - Linux                           - Netbeans
 - Mac



      nAcademy – 30 Janvier 2013
Tests Unitaires : 1


   Du code...                                   +ieurs commentaires
                                     <?php
   <?php
                                     class calculs
   class calculs                     {
                                     /**
   {
                                           * @assert (0, 0) == 0
       public function add($a, $b)         * @assert (0, 1) == 1
                                           * @assert (1, 0) == 1
       {
                                           * @assert (1, 1) == 2
           return $a + $b;                 * @assert (1, 2) == 4
                                           */
       }
                                           public function add($a, $b)

   }                                       {
                                                return $a + $b;
   ?>                                      }
                                     }
                                     ?>



       nAcademy – 30 Janvier 2013
Tests Unitaires : 1


   1 commentaire                             Passer au test
   <?php                               <?php
   class calculs                            /**
   {                                        * Generated from @assert (1, 1) == 2
   /**                                      */
  * @assert (0, 0) == 0                 public function testAdd4()
  */                                    {
         public function add($a, $b)             $this->assertEquals(
         {                                        2,
             return $a + $b;                      $this->object->add(1, 1)
         }                                       );
   }                                    }
   ?>                                  ?>


         nAcademy – 30 Janvier 2013
Tests Unitaires : 2

 <?php                                       function test_insert_user() {

 session_start();                            $html = new html() ;

 require_once '/config.php';                 $formulaire = new Form('data');

                                             $data= array (

 class tests_user extends                                  'user' => array (
 PHPUnit_Framework_TestCase {
                                                             'login' => 'admin',
      function __construct() {
                                                             'nom' => 'nom',
             $this->bdd = new BDD();
                                                             'prenom' => 'prenom',
             $this->bdd->connect();
                                                             'email' => 'email@xxx.com',
           $this->bdd->requete("DROP TABLE
                                                             'id_profil' => 115,
 IF EXISTS `user`");
                                                       )
           $this->bdd->requete("CREATE
                                                  );
 TABLE `user`...");

      }
                                             add($this->bdd,$formulaire,$html,$data);

                                             }

                                             ?>



         nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests fonctionnels


     Déroulement                       Quoi tester ?
 ✔
     Prépare outil & API           ✔
                                       Nous... Rien
 ✔
     On le partage                 ✔
                                       C'est le client
 ✔
     On récupère le résultat




      nAcademy – 30 Janvier 2013
Tests fonctionnels : utilisation


     Outils
 ✔
     Sélénium
 ✔
     Behat
 ✔
     Fitness
 ✔
     Cucumber
 ✔
     GreenPepper




      nAcademy – 30 Janvier 2013
Test fonctionnels : cas pratique avec
GreenPepper




    nAcademy – 30 Janvier 2013
Installation

 Logiciel (*.jar)
 Avec IDE : Eclipse PDT / Netbeans




     nAcademy – 30 Janvier 2013
Tests fonctionnels : cas pratique avec
    GreenPepper




1



2




3




        nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests d'intégrations


     Déroulement                       Pourquoi ?
 ✔
     1 Navigation de la prod.      ✔
                                       Simulation d'un être
                                       humain
 ✔
     Générer le script pour
     repérer les modifications     ✔
                                       Détection des problèmes
     de comportement                   éventuels
 ✔
     1 exécution sur le
     nouveau serveur




      nAcademy – 30 Janvier 2013
Tests d'intégrations : utilisation


     Outils
 ✔
     Sélénium
 ✔
     Sikuli
 ✔
     Hudson
 ✔
     Jenkins
 ✔
     PhpUnderControl




      nAcademy – 30 Janvier 2013
Tests d'intégrations : cas pratique avec
Selenium




    nAcademy – 30 Janvier 2013
Utilisation Selenium

 A partir d'un *.jar




     nAcademy – 30 Janvier 2013
Utilisation PHP Unit & Selenium

 # sudo apt-get install phpunit
 # sudo apt-get install php5-curl
 # sudo apt-get install php-selenium



 En mode assistée                 Avec IDE
 - Windows                        - Eclipse PDT
 - Linux                          - Netbeans
 - Mac



     nAcademy – 30 Janvier 2013
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());
                          }


    nAcademy – 30 Janvier 2013
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('jeff_way');
$password->value('1234');


$this->assertTrue($submit->enabled());


$username->clear();
$password->clear();
$username->value(' ');


$this->assertFalse($submit->enabled());
}
?>


        nAcademy – 30 Janvier 2013
nAcademy – 30 Janvier 2013
Tests de charge


     Déroulement                       Pourquoi ?
 ✔
     Préparer un scénario          ✔
                                       Générer une charge
                                       réaliste avec 1 scénario
 ✔
     Saisir le nombre de
     connexion simultané           ✔
                                       Superviser un test de
                                       charge
 ✔
     Voir le résultat
                                   ✔
                                       Analyser les résultats




      nAcademy – 30 Janvier 2013
Tests de charge : utilisation


     Outils
 ✔
     Java EE
 ✔
     Tsung
 ✔
     jMeter




      nAcademy – 30 Janvier 2013
Tests de charge : cas pratique avec jMeter




    nAcademy – 30 Janvier 2013
Installation

 Logiciel (*.jar)
 Avec IDE : Eclipse PDT / Netbeans




     nAcademy – 30 Janvier 2013
Préparer un scénario fonctionnel




    nAcademy – 30 Janvier 2013
Préparer un scénario fonctionnel




    nAcademy – 30 Janvier 2013
Afficher le scénario




    nAcademy – 30 Janvier 2013
Déployer avec les tests




    nAcademy – 30 Janvier 2013
Le début du commencement
 ✔
     Suivre une procédure claire
 ✔
     Faire un essai sur un serveur de tests/preprods
          ✔
              Pas de production du 1er coup
 ✔
     Prévoir des versions identiques
          ✔
              OS / Serveur / Logiciels...
 ✔
     Contrôler la validation des sources
          ✔
              tar.gz + clef




      nAcademy – 30 Janvier 2013
Automatiser les tâches : Déroulement


  Développements


  Serveur Intégration


  Tests & validation

                                              Serveur
                                              Serveur
  Production + tag                            Préprod
                                              Préprod

  Déploiement
                                               Serveur
                                               Serveur
                                              Test client
                                              Test client

                              Déploiement
  Tests                       serveur prod.


                                                            Les noeuds

     nAcademy – 30 Janvier 2013
Automatiser les tâches


     Outils
 ✔
     Shell-scripts
 ✔
     Pear
 ✔
     Ant
 ✔
     Phing
 ✔
     Weploy




      nAcademy – 30 Janvier 2013
Automatiser les tâches : cas pratique avec
Phing




    nAcademy – 30 Janvier 2013
Principe de fonctionnement



✔
    Checkout du projet


✔
    Lancement des tests (ex : tests unitaires)


✔
    Création d'une archive


✔
    Transfert et déploiement en ssh / ftp


✔
    Possible Rollback
                                                 Valider l'étape
      nAcademy – 30 Janvier 2013
Au niveau du code

      # pear channel-discover pear.phing.info
      # pear install phing/phingdocs

    <?xml version="1.0" ?>
    <project name="demo" basedir="." default="example">
      <target name="example">
        <echo message="yep, I will create a directory" />
        <mkdir dir="/mon/chemin/" />
      </target>
    </project>

      Exécution :
      # phing
✔
      Si c'est nécessaire → création du dossier

          nAcademy – 30 Janvier 2013
Presque intégration continue




    nAcademy – 30 Janvier 2013
Questions ?




    NAcademy – 30 Janvier 2013

More Related Content

Similar to Déployer avec les tests

Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalChristophe Villeneuve
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalneuros
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratiqueFrederic Hardy
 
Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDDDavid Bottiau
 
La qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesLa qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesGauthier Delamarre
 
Javascript in a continuous integration environment
Javascript in a continuous integration environmentJavascript in a continuous integration environment
Javascript in a continuous integration environmentFrederic Dewinne
 
Tableau objetjava
Tableau objetjavaTableau objetjava
Tableau objetjavaMoez Moezm
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptxManalAg
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitairesPHPPRO
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...fdussert
 
TDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitTDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitEspritAgile
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaHeads France
 

Similar to Déployer avec les tests (20)

Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
 
La qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesLa qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitaires
 
Javascript in a continuous integration environment
Javascript in a continuous integration environmentJavascript in a continuous integration environment
Javascript in a continuous integration environment
 
Tableau objetjava
Tableau objetjavaTableau objetjava
Tableau objetjava
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
J Unit
J UnitJ Unit
J Unit
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
 
Tests de performances
Tests de performancesTests de performances
Tests de performances
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 
Bilan jeux TDD php
Bilan jeux TDD phpBilan jeux TDD php
Bilan jeux TDD php
 
Test logiciel
Test logicielTest logiciel
Test logiciel
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
TDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitTDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroit
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 

More from neuros

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)neuros
 
Le service workers
Le service workersLe service workers
Le service workersneuros
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internetneuros
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internetneuros
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesneuros
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursneuros
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le webneuros
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessibleneuros
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamonneuros
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réelsneuros
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)neuros
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQLneuros
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5neuros
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informationsneuros
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internetneuros
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHPneuros
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OSneuros
 
Un CRM...sugarCRM
Un CRM...sugarCRMUn CRM...sugarCRM
Un CRM...sugarCRMneuros
 

More from neuros (20)

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
 
Le service workers
Le service workersLe service workers
Le service workers
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internet
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internet
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertes
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeurs
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessible
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamon
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réels
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQL
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internet
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHP
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OS
 
Un CRM...sugarCRM
Un CRM...sugarCRMUn CRM...sugarCRM
Un CRM...sugarCRM
 

Déployer avec les tests

  • 1. DEPLOYER AVEC LES TESTS Christophe Villeneuve 30 Janvier 2013
  • 2. 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... » nAcademy – 30 Janvier 2013
  • 3. L'importance des Tests Pourquoi c'est utile ? Et L'intérêt... ✔ Le code peut casser ✔ Coûte du temps au début ✔ Changer le nom d'un fichier ✔ En fait gagner ensuite ✔ Nécessite de la rigueur et ✔ Pas le temps d'en de la constante faire ✔ C'est long manuellement nAcademy – 30 Janvier 2013
  • 4. 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 Automatisés ✔ Détecter les régressions, c'est rapide ✔ Le faire à chaque livraison de lots ✔ Tests de charges ✔ Tests d'ergonomie ✔ Tests de sécurité nAcademy – 30 Janvier 2013
  • 5. nAcademy – 30 Janvier 2013
  • 6. Tests unitaires Déroulement Quoi tester ? ✔ Ecrire un test qui échoue ✔ Un module ✔ Ecrire un test qui est bon ✔ Une classe ✔ Un test de sécurité ✔ Une méthode ✔ Un test de contrôle ✔ Tester ✔ Ce qui est important ✔ Le risque de casser ✔ Les parties que vous touchez souvent nAcademy – 30 Janvier 2013
  • 7. Tests unitaires : utilisation Outils ✔ jUnit ✔ SimpleTest ✔ Zend_test ✔ PHPUnit ✔ Atoum ✔ ... nAcademy – 30 Janvier 2013
  • 8. Tests unitaires : cas pratique PHPUnit nAcademy – 30 Janvier 2013
  • 9. 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 Avec IDE - Windows - Eclipse PDT - Linux - Netbeans - Mac nAcademy – 30 Janvier 2013
  • 10. Tests Unitaires : 1 Du code... +ieurs commentaires <?php <?php class calculs class calculs { /** { * @assert (0, 0) == 0 public function add($a, $b) * @assert (0, 1) == 1 * @assert (1, 0) == 1 { * @assert (1, 1) == 2 return $a + $b; * @assert (1, 2) == 4 */ } public function add($a, $b) } { return $a + $b; ?> } } ?> nAcademy – 30 Janvier 2013
  • 11. Tests Unitaires : 1 1 commentaire Passer au test <?php <?php class calculs /** { * Generated from @assert (1, 1) == 2 /** */ * @assert (0, 0) == 0 public function testAdd4() */ { public function add($a, $b) $this->assertEquals( { 2, return $a + $b; $this->object->add(1, 1) } ); } } ?> ?> nAcademy – 30 Janvier 2013
  • 12. Tests Unitaires : 2 <?php function test_insert_user() { session_start(); $html = new html() ; require_once '/config.php'; $formulaire = new Form('data'); $data= array ( class tests_user extends 'user' => array ( PHPUnit_Framework_TestCase { 'login' => 'admin', function __construct() { 'nom' => 'nom', $this->bdd = new BDD(); 'prenom' => 'prenom', $this->bdd->connect(); 'email' => 'email@xxx.com', $this->bdd->requete("DROP TABLE 'id_profil' => 115, IF EXISTS `user`"); ) $this->bdd->requete("CREATE ); TABLE `user`..."); } add($this->bdd,$formulaire,$html,$data); } ?> nAcademy – 30 Janvier 2013
  • 13. nAcademy – 30 Janvier 2013
  • 14. Tests fonctionnels Déroulement Quoi tester ? ✔ Prépare outil & API ✔ Nous... Rien ✔ On le partage ✔ C'est le client ✔ On récupère le résultat nAcademy – 30 Janvier 2013
  • 15. Tests fonctionnels : utilisation Outils ✔ Sélénium ✔ Behat ✔ Fitness ✔ Cucumber ✔ GreenPepper nAcademy – 30 Janvier 2013
  • 16. Test fonctionnels : cas pratique avec GreenPepper nAcademy – 30 Janvier 2013
  • 17. Installation Logiciel (*.jar) Avec IDE : Eclipse PDT / Netbeans nAcademy – 30 Janvier 2013
  • 18. Tests fonctionnels : cas pratique avec GreenPepper 1 2 3 nAcademy – 30 Janvier 2013
  • 19. nAcademy – 30 Janvier 2013
  • 20. Tests d'intégrations Déroulement Pourquoi ? ✔ 1 Navigation de la prod. ✔ Simulation d'un être humain ✔ Générer le script pour repérer les modifications ✔ Détection des problèmes de comportement éventuels ✔ 1 exécution sur le nouveau serveur nAcademy – 30 Janvier 2013
  • 21. Tests d'intégrations : utilisation Outils ✔ Sélénium ✔ Sikuli ✔ Hudson ✔ Jenkins ✔ PhpUnderControl nAcademy – 30 Janvier 2013
  • 22. Tests d'intégrations : cas pratique avec Selenium nAcademy – 30 Janvier 2013
  • 23. Utilisation Selenium A partir d'un *.jar nAcademy – 30 Janvier 2013
  • 24. Utilisation PHP Unit & Selenium # sudo apt-get install phpunit # sudo apt-get install php5-curl # sudo apt-get install php-selenium En mode assistée Avec IDE - Windows - Eclipse PDT - Linux - Netbeans - Mac nAcademy – 30 Janvier 2013
  • 25. 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()); } nAcademy – 30 Janvier 2013
  • 26. 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('jeff_way'); $password->value('1234'); $this->assertTrue($submit->enabled()); $username->clear(); $password->clear(); $username->value(' '); $this->assertFalse($submit->enabled()); } ?> nAcademy – 30 Janvier 2013
  • 27. nAcademy – 30 Janvier 2013
  • 28. Tests de charge Déroulement Pourquoi ? ✔ Préparer un scénario ✔ Générer une charge réaliste avec 1 scénario ✔ Saisir le nombre de connexion simultané ✔ Superviser un test de charge ✔ Voir le résultat ✔ Analyser les résultats nAcademy – 30 Janvier 2013
  • 29. Tests de charge : utilisation Outils ✔ Java EE ✔ Tsung ✔ jMeter nAcademy – 30 Janvier 2013
  • 30. Tests de charge : cas pratique avec jMeter nAcademy – 30 Janvier 2013
  • 31. Installation Logiciel (*.jar) Avec IDE : Eclipse PDT / Netbeans nAcademy – 30 Janvier 2013
  • 32. Préparer un scénario fonctionnel nAcademy – 30 Janvier 2013
  • 33. Préparer un scénario fonctionnel nAcademy – 30 Janvier 2013
  • 34. Afficher le scénario nAcademy – 30 Janvier 2013
  • 35. Déployer avec les tests nAcademy – 30 Janvier 2013
  • 36. Le début du commencement ✔ Suivre une procédure claire ✔ Faire un essai sur un serveur de tests/preprods ✔ Pas de production du 1er coup ✔ Prévoir des versions identiques ✔ OS / Serveur / Logiciels... ✔ Contrôler la validation des sources ✔ tar.gz + clef nAcademy – 30 Janvier 2013
  • 37. Automatiser les tâches : Déroulement Développements Serveur Intégration Tests & validation Serveur Serveur Production + tag Préprod Préprod Déploiement Serveur Serveur Test client Test client Déploiement Tests serveur prod. Les noeuds nAcademy – 30 Janvier 2013
  • 38. Automatiser les tâches Outils ✔ Shell-scripts ✔ Pear ✔ Ant ✔ Phing ✔ Weploy nAcademy – 30 Janvier 2013
  • 39. Automatiser les tâches : cas pratique avec Phing nAcademy – 30 Janvier 2013
  • 40. Principe de fonctionnement ✔ Checkout du projet ✔ Lancement des tests (ex : tests unitaires) ✔ Création d'une archive ✔ Transfert et déploiement en ssh / ftp ✔ Possible Rollback Valider l'étape nAcademy – 30 Janvier 2013
  • 41. Au niveau du code # pear channel-discover pear.phing.info # pear install phing/phingdocs <?xml version="1.0" ?> <project name="demo" basedir="." default="example"> <target name="example"> <echo message="yep, I will create a directory" /> <mkdir dir="/mon/chemin/" /> </target> </project> Exécution : # phing ✔ Si c'est nécessaire → création du dossier nAcademy – 30 Janvier 2013
  • 42. Presque intégration continue nAcademy – 30 Janvier 2013
  • 43. Questions ? NAcademy – 30 Janvier 2013