Intégration Continue et PHP

1,716 views

Published on

Retour sur Expérience sur l'intégraion continue et PHP

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,716
On SlideShare
0
From Embeds
0
Number of Embeds
76
Actions
Shares
0
Downloads
31
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Intégration Continue et PHP

  1. 1. L’équipe ITOswald De Riemaecker, Anthony Laurain,Sebastien Retoux, Christophe Diprima,Christian Schramm16 May 2013Le Test chez atHome.luRetour sur expérienceFriday, May 17, 13
  2. 2. L’équipe atHome• Oswald De Riemaecker - Team Lead : Passionné de Linux, technologieopen source, développement web et gestion de projet/produit Agile.• Anthony Laurain - Senior Platform Developer (Zend Framework Certifieddeveloper)• Sebastien Retoux - Tactical Coordinator and Release Manager• Christophe DiPrima - UX/Intégrateur• Christian Schramm - DevOps/Linux SysAdmin (Zend Framework Certified)Friday, May 17, 13
  3. 3. La Stratégie de testFriday, May 17, 13
  4. 4. AutomatisésTests UnitairesTests de composantsTest GUIManuels & AutomatisésTests FonctionnelsExemplesTests sur StoryboardsTests de perceptionMaquettesPrototypes / SimulationOutilsTests de performanceTests de ChargeTests de sécuritéManuelsTests exploratoiresScénariosTests dutilisabilitéTests dacceptation (UAT)Orientation BusinessOrientation TechnologieSoutiendeléquipeCritiqueProduitQ1Q2 Q3Q4Les quatre quadrants du Test Agile de Brian MarickFriday, May 17, 13
  5. 5. La pyramide des tests automatisés de Mike CohnUnit TestsTests APITests d’IntégrationTests de ComposentTests GUITests ManuelOrientation TechnologieOrientationBusinessDéveloppons nous lebon système ?Développons nous lesystèmecorrectement ?Friday, May 17, 13
  6. 6. Les outilsFriday, May 17, 13
  7. 7. Linterface utilisateur avec SahiLes critères dacceptance avec BehatLe code avec PHPUnitLes outils par couchesUnit TestsTests APITests d’IntégrationTests de ComposentTests GUITests ManuelFriday, May 17, 13
  8. 8. Les tests unitaire avec PHPUnit PHPUnit est un framework de tests unitaires PHP Nouveau développement avec une approche développement par letest (TDD) Couverture maximal de nouvelle classeFriday, May 17, 13
  9. 9. BehatsFeature: Testing the RESTfulness of the immotype controllerBackground:Given I am using the rest service and I am logged with "username:password"Scenario: Fetching immotype by idGiven that I want to find a "Immotype"When I request "/immotype/24"Then the "id" property equals "24"And the "description_en" property equals "Business Takeover"Then the response is JSONThen the response status code should be 200When I request "/immotype/1000"Then the response status code should be 404Friday, May 17, 13
  10. 10. Behat Framework BDD pour PHPsFeature: Testing the RESTfulness of the immotype controllerBackground:Given I am using the rest service and I am logged with "username:password"Scenario: Fetching immotype by idGiven that I want to find a "Immotype"When I request "/immotype/24"Then the "id" property equals "24"And the "description_en" property equals "Business Takeover"Then the response is JSONThen the response status code should be 200When I request "/immotype/1000"Then the response status code should be 404Friday, May 17, 13
  11. 11. Behat Framework BDD pour PHP Orienté métiersFeature: Testing the RESTfulness of the immotype controllerBackground:Given I am using the rest service and I am logged with "username:password"Scenario: Fetching immotype by idGiven that I want to find a "Immotype"When I request "/immotype/24"Then the "id" property equals "24"And the "description_en" property equals "Business Takeover"Then the response is JSONThen the response status code should be 200When I request "/immotype/1000"Then the response status code should be 404Friday, May 17, 13
  12. 12. Behat Framework BDD pour PHP Orienté métier Utilise le Gerkhin Syntaxe "Un langage compréhensible orienté besoins métier, qui décrit lecomportement dune application sans se préoccuper des détails de limplémentation"sFeature: Testing the RESTfulness of the immotype controllerBackground:Given I am using the rest service and I am logged with "username:password"Scenario: Fetching immotype by idGiven that I want to find a "Immotype"When I request "/immotype/24"Then the "id" property equals "24"And the "description_en" property equals "Business Takeover"Then the response is JSONThen the response status code should be 200When I request "/immotype/1000"Then the response status code should be 404Friday, May 17, 13
  13. 13. Behat Framework BDD pour PHP Orienté métier Utilise le Gerkhin Syntaxe "Un langage compréhensible orienté besoins métier, qui décrit lecomportement dune application sans se préoccuper des détails de limplémentation" Basé sur les critères dacceptance dune histoire utilisateur,fonctionne très bien avec un gestion de produit agilesFeature: Testing the RESTfulness of the immotype controllerBackground:Given I am using the rest service and I am logged with "username:password"Scenario: Fetching immotype by idGiven that I want to find a "Immotype"When I request "/immotype/24"Then the "id" property equals "24"And the "description_en" property equals "Business Takeover"Then the response is JSONThen the response status code should be 200When I request "/immotype/1000"Then the response status code should be 404Friday, May 17, 13
  14. 14. SahiFriday, May 17, 13
  15. 15. Sahi C’est le haut de notre pyramide de testFriday, May 17, 13
  16. 16. Sahi C’est le haut de notre pyramide de test Outil de test pour les applications webFriday, May 17, 13
  17. 17. Sahi C’est le haut de notre pyramide de test Outil de test pour les applications web Enregistrement de scénario utilisateur dans le navigateurFriday, May 17, 13
  18. 18. Sahi C’est le haut de notre pyramide de test Outil de test pour les applications web Enregistrement de scénario utilisateur dans le navigateur Lorsque nécessaire, les scénarios principaux, peu susceptible dechanger au niveau interface mais ayant un risque de régressionimportante (Inscription d’utilisateur/Login/Alerte email)Friday, May 17, 13
  19. 19. Les outils pour lICFriday, May 17, 13
  20. 20. La gestion des branches de développementMasterBranch SprintBranch SprintTactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug FixesIntégrationContinueRemonté dela MasterFriday, May 17, 13
  21. 21. La gestion des branches de développement Logiciel de gestion de versions décentraliséMasterBranch SprintBranch SprintTactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug FixesIntégrationContinueRemonté dela MasterFriday, May 17, 13
  22. 22. La gestion des branches de développement Logiciel de gestion de versions décentralisé Branch Master, la dernière en productionMasterBranch SprintBranch SprintTactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug FixesIntégrationContinueRemonté dela MasterFriday, May 17, 13
  23. 23. La gestion des branches de développement Logiciel de gestion de versions décentralisé Branch Master, la dernière en production Branch de Goal de Sprint/Epique de produitMasterBranch SprintBranch SprintTactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug FixesIntégrationContinueRemonté dela MasterFriday, May 17, 13
  24. 24. La gestion des branches de développement Logiciel de gestion de versions décentralisé Branch Master, la dernière en production Branch de Goal de Sprint/Epique de produit Branch de prototypage pour le test rapide d’implémentation desolution techniqueMasterBranch SprintBranch SprintTactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug Fixes Tactic / Bug FixesIntégrationContinueRemonté dela MasterFriday, May 17, 13
  25. 25. Le système de buildFriday, May 17, 13
  26. 26. Le système de build Outil open source dintégration continueFriday, May 17, 13
  27. 27. Le système de build Outil open source dintégration continue Interface avec des systèmes de gestion de versionsFriday, May 17, 13
  28. 28. Le système de build Outil open source dintégration continue Interface avec des systèmes de gestion de versions Apache Ant et scripts ShellFriday, May 17, 13
  29. 29. Le système de build Outil open source dintégration continue Interface avec des systèmes de gestion de versions Apache Ant et scripts Shell Plugin Extreme feed back sur grand écran pour un retour rapide surl’état de buildFriday, May 17, 13
  30. 30. La construction sur conteneur virtuelhttp://master.athome.luhttp://dev01.athome.luhttp://dev02.athome.luhttp://dev03.athome.luhttp://dev04.athome.lu...Friday, May 17, 13
  31. 31. La construction sur conteneur virtuel OpenVZ permet à un serveur physique dexécuter de multiplesinstances de systèmes dexploitation isoléshttp://master.athome.luhttp://dev01.athome.luhttp://dev02.athome.luhttp://dev03.athome.luhttp://dev04.athome.lu...Friday, May 17, 13
  32. 32. La construction sur conteneur virtuel OpenVZ permet à un serveur physique dexécuter de multiplesinstances de systèmes dexploitation isolés Installé à la création de job jenkinshttp://master.athome.luhttp://dev01.athome.luhttp://dev02.athome.luhttp://dev03.athome.luhttp://dev04.athome.lu...Friday, May 17, 13
  33. 33. La construction sur conteneur virtuel OpenVZ permet à un serveur physique dexécuter de multiplesinstances de systèmes dexploitation isolés Installé à la création de job jenkins Copie de l’environnement de productionhttp://master.athome.luhttp://dev01.athome.luhttp://dev02.athome.luhttp://dev03.athome.luhttp://dev04.athome.lu...Friday, May 17, 13
  34. 34. Le processusFriday, May 17, 13
  35. 35. Scrum with Agile Product ManagementEpiqueEpiqueEpiqueEpiqueEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...Critère d’acceptance:............................................................................................................................Friday, May 17, 13
  36. 36. Scrum with Agile Product Management Carnet ProduitEpiqueEpiqueEpiqueEpiqueEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...Critère d’acceptance:............................................................................................................................Friday, May 17, 13
  37. 37. Scrum with Agile Product Management Carnet Produit Découpage en épiqueEpiqueEpiqueEpiqueEpiqueEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...Critère d’acceptance:............................................................................................................................Friday, May 17, 13
  38. 38. Scrum with Agile Product Management Carnet Produit Découpage en épique Découpage en histoire utilisateursEpiqueEpiqueEpiqueEpiqueEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...Critère d’acceptance:............................................................................................................................Friday, May 17, 13
  39. 39. Scrum with Agile Product Management Carnet Produit Découpage en épique Découpage en histoire utilisateurs Critère dacceptance (SEO/Code Postaux/ACL ...)EpiqueEpiqueEpiqueEpiqueEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...Critère d’acceptance:............................................................................................................................Friday, May 17, 13
  40. 40. Sprint PlanningEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...GOAL DE SPRINTCritère d’acceptance:............................................................................................................................Friday, May 17, 13
  41. 41. Sprint Planning Création de la branch de Goal de sprint GITEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...GOAL DE SPRINTCritère d’acceptance:............................................................................................................................Friday, May 17, 13
  42. 42. Sprint Planning Création de la branch de Goal de sprint GIT Création du Job JenkinsEn tant quadministrateur ...En tant quagent ..En tant que visiteur ...En tant que utilisateur ...GOAL DE SPRINTCritère d’acceptance:............................................................................................................................Friday, May 17, 13
  43. 43. Le SprintMasterBranch SprintTactic / Bug FixesIntégrationContinueRemonté dela MasterSandboxJenkinsHistoire Utilisateur 1PHP Unit / Behat DevHistoire Utilisateur 2PHP Unit / Behat DevHistoire Utilisateur 3PHP Unit / Behat DevHistoire Utilisateur 4PHP Unit / Behat DevProductionTactic / Bug FixesVZ Branch de SprintVZ Master+ Manuel Testing + Validation++ Manuel Testing++ Manuel Testing+Deploy Deploy DeployIntégrationde la branchde Sprint+++Friday, May 17, 13
  44. 44. JenkinsFriday, May 17, 13
  45. 45. Jenkins• Des Jobs de branch de Goal de sprint• Le job Branch Master avec la master Sahi si Master successful• Le job de déploiement en production• Le modèle pour la création de nouveau jobFriday, May 17, 13
  46. 46. JenkinsParamètre du buildFriday, May 17, 13
  47. 47. JenkinsParamètre du build• Synchronisation de la base de donnée de production, jenkins va chercher ladernier base en production et la réinstaller, ce paramètre est très utile pourvalider les mise à jour SQL• Rebuild solr• Réinstallation complète du conteneur virtuel (avec installation système)• Version php + mariadb• Ainsi qu’une l’utilisation d’une base de donnée lightFriday, May 17, 13
  48. 48. JenkinsExtreme Feed back• Voici un exemple• Lors du dernier build nous avons la branch highlight avec 1 test non passéFriday, May 17, 13
  49. 49. JenkinsRapport de Build avec Résultat de testFriday, May 17, 13
  50. 50. JenkinsMessage d’erreur pour le test qui n’a pas passé• Le test vérifie que le service REST en GET retourne bien les statistiques denotre offre, il y a un problème de nom de colonne dans le modèle de latable des statistique• Détection et identification du problème rapideFriday, May 17, 13
  51. 51. JenkinsEn résuméFriday, May 17, 13
  52. 52. JenkinsJenkins nous permet donc:En résuméFriday, May 17, 13
  53. 53. JenkinsJenkins nous permet donc: Construction environnement virtuelEn résuméFriday, May 17, 13
  54. 54. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développementEn résuméFriday, May 17, 13
  55. 55. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnéeEn résuméFriday, May 17, 13
  56. 56. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que SolrEn résuméFriday, May 17, 13
  57. 57. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de testEn résuméFriday, May 17, 13
  58. 58. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test UnitairesEn résuméFriday, May 17, 13
  59. 59. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test Unitaires Test BDD BehatEn résuméFriday, May 17, 13
  60. 60. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test Unitaires Test BDD Behat Rapport de buildEn résuméFriday, May 17, 13
  61. 61. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test Unitaires Test BDD Behat Rapport de build Identification de tests qui ne sont pas passéEn résuméFriday, May 17, 13
  62. 62. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test Unitaires Test BDD Behat Rapport de build Identification de tests qui ne sont pas passé Lancement dautre build (Sahi)En résuméFriday, May 17, 13
  63. 63. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test Unitaires Test BDD Behat Rapport de build Identification de tests qui ne sont pas passé Lancement dautre build (Sahi) Déploiement en productionEn résuméFriday, May 17, 13
  64. 64. JenkinsJenkins nous permet donc: Construction environnement virtuel Intégration développement Mise à jour et test de la base de donnée Mise à jour et test que Solr Installation outils de test Test Unitaires Test BDD Behat Rapport de build Identification de tests qui ne sont pas passé Lancement dautre build (Sahi) Déploiement en productionEn résuméFriday, May 17, 13
  65. 65. BehatLe fichier de fonctionnalité• Behat, le milieu de notre pyramide.• Vérifions pourquoi notre test behat n’est pas passé, nous avons ici noscritères d’acceptance sous forme de Gerkhin Syntaxe.Friday, May 17, 13
  66. 66. BehatLe test behat en ligne de commande• Nous avons donc un problème avec le contrôler REST statistiques globalFriday, May 17, 13
  67. 67. BehatIdentification rapide du problème avec Jenkins• Nous identifions rapidement sur base des derniers commits que le gatewayOmniture Property Views à été changéFriday, May 17, 13
  68. 68. BehatCorrection de notre Méthode• Nous pouvons corriger et relancer le buildFriday, May 17, 13
  69. 69. BehatNotre build passeFriday, May 17, 13
  70. 70. BehatNotre test Behat passeFriday, May 17, 13
  71. 71. BehatJeux de donnée de test• Behat et Jenkins nous permet d’avoir des jeux donnée pour les test manuelet GUIFriday, May 17, 13
  72. 72. BehatEn résuméFriday, May 17, 13
  73. 73. BehatBehat nous permet donc:En résuméFriday, May 17, 13
  74. 74. BehatBehat nous permet donc: Tester le métier, avec la même approche que le TDD, on écrit les critèred’acceptance de la fonctionnalité testée, ce qui permet de structuré sapensée et son code, on pense par le test.En résuméFriday, May 17, 13
  75. 75. BehatBehat nous permet donc: Tester le métier, avec la même approche que le TDD, on écrit les critèred’acceptance de la fonctionnalité testée, ce qui permet de structuré sapensée et son code, on pense par le test. Tester les ACL (Accès Control List)En résuméFriday, May 17, 13
  76. 76. BehatBehat nous permet donc: Tester le métier, avec la même approche que le TDD, on écrit les critèred’acceptance de la fonctionnalité testée, ce qui permet de structuré sapensée et son code, on pense par le test. Tester les ACL (Accès Control List) Tester les services RESTful et sa sécuritéEn résuméFriday, May 17, 13
  77. 77. BehatBehat nous permet donc: Tester le métier, avec la même approche que le TDD, on écrit les critèred’acceptance de la fonctionnalité testée, ce qui permet de structuré sapensée et son code, on pense par le test. Tester les ACL (Accès Control List) Tester les services RESTful et sa sécurité Injecter des données pour les tests manuel et GUIEn résuméFriday, May 17, 13
  78. 78. SahiSahi Liens manquantFriday, May 17, 13
  79. 79. SahiRapport SahiFriday, May 17, 13
  80. 80. SahiRapport de Test pour la publication d’offre• Notre lien manquantFriday, May 17, 13
  81. 81. SahiScripting SahiFriday, May 17, 13
  82. 82. SahiScripting Sahi• Nous avons ajouté un système de dictionnaire pour pouvoir tester nosdifférents sites, par exemple l’utilisation de la ville Troisvierges sur athome.luet Saarbruken sur athome.de• Nous faisons aussi des tests SEO, nous validons que les blocs SEO enbas de page redirige vers la bonne page et que celle-ci a bien les bons Titleet Meta• Ce test nous a permis de trouver un problème avec la génération desTitles SEO que nous n’aurions certainement pas pu voir autrement.Friday, May 17, 13
  83. 83. SahiEn résuméFriday, May 17, 13
  84. 84. SahiSahi nous permet donc:En résuméFriday, May 17, 13
  85. 85. SahiSahi nous permet donc: Tests sur plusieurs navigateursEn résuméFriday, May 17, 13
  86. 86. SahiSahi nous permet donc: Tests sur plusieurs navigateurs Valider les fonctionnalités utilisateur critiques (Inscription/Login/EmailAlerts)En résuméFriday, May 17, 13
  87. 87. SahiSahi nous permet donc: Tests sur plusieurs navigateurs Valider les fonctionnalités utilisateur critiques (Inscription/Login/EmailAlerts) Valider navigation utilisateurEn résuméFriday, May 17, 13
  88. 88. SahiSahi nous permet donc: Tests sur plusieurs navigateurs Valider les fonctionnalités utilisateur critiques (Inscription/Login/EmailAlerts) Valider navigation utilisateur Valider liens SEOEn résuméFriday, May 17, 13
  89. 89. SahiSahi nous permet donc: Tests sur plusieurs navigateurs Valider les fonctionnalités utilisateur critiques (Inscription/Login/EmailAlerts) Valider navigation utilisateur Valider liens SEOEn résuméFriday, May 17, 13
  90. 90. Next StepsFriday, May 17, 13
  91. 91. Ce qui nous reste encore a faire:Next StepsFriday, May 17, 13
  92. 92. Ce qui nous reste encore a faire: Ajout de métrique, Code Coverage + PHP Tools (PHPcp/md ...)Next StepsFriday, May 17, 13
  93. 93. Ce qui nous reste encore a faire: Ajout de métrique, Code Coverage + PHP Tools (PHPcp/md ...) Améliorer les tests Sahi sur plusieurs navigateursNext StepsFriday, May 17, 13
  94. 94. Ce qui nous reste encore a faire: Ajout de métrique, Code Coverage + PHP Tools (PHPcp/md ...) Améliorer les tests Sahi sur plusieurs navigateurs Implémenter des tests de performanceNext StepsFriday, May 17, 13
  95. 95. Ce qui nous reste encore a faire: Ajout de métrique, Code Coverage + PHP Tools (PHPcp/md ...) Améliorer les tests Sahi sur plusieurs navigateurs Implémenter des tests de performance Implémenter JsTestDriver dans JenkinsNext StepsFriday, May 17, 13
  96. 96. Ce qui nous reste encore a faire: Ajout de métrique, Code Coverage + PHP Tools (PHPcp/md ...) Améliorer les tests Sahi sur plusieurs navigateurs Implémenter des tests de performance Implémenter JsTestDriver dans JenkinsNext StepsFriday, May 17, 13
  97. 97. QuestionsFriday, May 17, 13
  98. 98. ?QuestionsFriday, May 17, 13
  99. 99. Je tiens à remercier Léquipe atHome pour leur travail! VA Consulting Vous !Twitter: oswald_odrEmail: oswald.odr.pm@gmail.comRemerciementFriday, May 17, 13

×