SlideShare une entreprise Scribd logo
Optimisez votre CI
Ou les fabuleuses aventures de
princesse CI au pays des tests
À propos de l’auteur
Hubert LENOIR
Lead Dev @ SensioLabs
https://github.com/Jean-Beru
Il était une fois...
Contexte
2 API • 2 applications front
● API “users”
● API “medias”
● Front en ReactJS
● Admin en ReactJS
Tome 1 : Visite des lieux
Tests API
PhpCS • Security-checker •
PhpUnit • Behat
Fixtures (base + spécifique)
Behat suite
Behat profiles (Chrome, IE, WIP)
Behatch
Tags with parenthesis
Fixtures
Tests API
PhpCS • Security-checker •
PhpUnit • Behat
Behat profiles
Tests API
PhpCS • Security-checker •
PhpUnit • Behat
Tags with parenthesis
Tests API
PhpCS • Security-checker •
PhpUnit • Behat
Tags with parenthesis
Tests API
PhpCS • Security-checker •
PhpUnit • Behat
Tests Front
ESLint • Yarn audit • Jest
Enzyme
Mount / Shallow
Tests end-to-end
Behat • Selenium • BrowserStack
Selenium
Tests sur IE11 ou Edge
Tests end-to-end
Behat • Selenium • BrowserStack
BrowserStack
Intégration
Continue
CircleCI
Artifacts : Screenshots
Artifacts : Logs API
Tag @wip via API
Auto-cancel redundant builds
Artifacts
Intégration
Continue
CircleCI
API CircleCI
Intégration
Continue
CircleCI
Tome 2 : Regrouper pour mieux tester
Regrouper les tests par sous-projet
Héberger les images Docker
Tome 3 : Trahison
Isolation des tests end-to-end
Splitter et prioriser les tests
Gérer l’asynchrone
ElasticSearch
?refresh=wait_for
RabbitMQ
SwarrotSwarrotBundleBrokerBlackholePublisher
Call API (interne / externe)
CsaGuzzleBundle
Tome 4 : Sleeping CI
Ça fonctionne mais...
Zzz...
CIDév Sommeil profond
Contourner l’authentification
Via le formulaire de login
POST /login
Stocker le token côté client en JS
Tester le formulaire
Dump/restore des fixtures
Premier test :
Chargement des fixtures
Dump MongoDB
Snapshot ES
Tests suivants :
Restore MongoDB
Restore ES snapshot
Tome 5 : La revanche
Grouper ses containers
Prod
2 Nginx
2 API
2 MongoDB
2 ReactJS
1 Redis
1 ElasticSearch
1 LogStash
Test
2 Nginx
2 API
2 MongoDB
2 ReactJS
1 Redis
1 ElasticSearch
1 LogStash
Test
2 ReactJS
Chrome headless + facebook/php-webdriver
Chrome plus léger
facebook/php-webdriver : aucune dépendance à Selenium !
Chrome headless + facebook/php-webdriver
-10% *
* Offre soumise à conditions, sous réserve d'éligibilité. Gain moyen observé pour une step CircleCI donnée. Ce slide ne garantit pas un tel gain si vous faites
de même sur votre projet. Ne mangez pas trop gras, trop sucré, trop salé.
Chrome headless + facebook/php-webdriver
The end (to end)
Et ils vécurent heureux et eurent plein
d’autres tests
The end
Artifacts
Grouper les tests “rapides”
Prioriser
Isoler
Héberger ses images Docker
Exporter ses fixtures
Utiliser Panther / FacebookWebDriver
Merci de votre attention
Prochainement....
Prochainement...
Utiliser tmpfs
Ne plus bypasser RabbitMQ ou LogStash (auto-consume, reply middleware...)
Avoir du cache Docker ($$$)
Lancer les tests en fonction des fichiers modifiés (front / back)
Environnement test !== e2e
Merci de votre attention
Et cette fois-ci c’est bel et bien fini !

Contenu connexe

Tendances

Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
Hugo Hamon
 
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOSCocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
Claire Reynaud
 
TDD for DevOps with Chef
TDD for DevOps with ChefTDD for DevOps with Chef
TDD for DevOps with Chef
Olivier BAZOUD
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
Horacio Gonzalez
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
Nicolas Lœuillet
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
Arnaud Héritier
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
Xavier Leune
 
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsPetit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
OCTO Technology
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
laurent bristiel
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
Amélie DUVERNET
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
gilleslenfant
 
MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action
Denys Chamberland
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
Maxime Gréau
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
Habib MAALEM
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
13p
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 

Tendances (18)

Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOSCocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
 
TDD for DevOps with Chef
TDD for DevOps with ChefTDD for DevOps with Chef
TDD for DevOps with Chef
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 
Selenium
SeleniumSelenium
Selenium
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
 
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsPetit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
 
MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Upload - Download
Upload - DownloadUpload - Download
Upload - Download
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 

Similaire à Princesse CI au pays des tests

Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
Marc Nazarian
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
Jonathan Bonzy
 
20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system
LeClubQualiteLogicielle
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015
Wisembly
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
TheFamily
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720
Romain Linsolas
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
Oswald De Riemaecker ☁
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
Michael Akbaraly
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
Julien Dubois
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
François Petitit
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
Nicolas Mussat
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)
Camille Roux
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
pierredargham
 
Les tests en PHP
Les tests en PHPLes tests en PHP
Les tests en PHP
Jean-Philippe Chateau
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
Guillaume Sautereau
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017
AFUP_Limoges
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
Guillaume Collic
 
Docker.
Docker.Docker.
Docker.
Willy Lambert
 

Similaire à Princesse CI au pays des tests (20)

Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
 
Les tests en PHP
Les tests en PHPLes tests en PHP
Les tests en PHP
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Docker.
Docker.Docker.
Docker.
 

Princesse CI au pays des tests