non-regression testing in web app development
TRANSCRIPT
![Page 2: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/2.jpg)
Finalité
• Garantir le fonctionnement intégral d’une application web en production
• Eviter les régressionslors de l’évolution de l’application
[email protected] 2014
![Page 3: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/3.jpg)
Manifest Agile
« Notre plus haute priorité est de satisfaire le client en livrant rapidement et régulièrement
des fonctionnalités à grande valeur ajoutée. »
http://agilemanifesto.org/iso/fr/principles.html
[email protected] 2014
![Page 5: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/5.jpg)
![Page 8: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/8.jpg)
Architecture d’une web app
Model
View
Controllerrequêtes
réponses
tests unitaires
tests d’intégration
tests unitaires
tests d’intégration
tests d’intégration
tests fonctionnels
[email protected] 2014
![Page 9: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/9.jpg)
La quête de la couverture totale
On peut absolument TOUT tester
(et cela cache un piège sournois)
[email protected] 2014
![Page 10: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/10.jpg)
Différents types de test
Type Cible Domaine
Tests fonctionnels Utilisateurs Fonctionnalités
Test d’intégration Développeurs Inter-connexion des composants
Tests unitaires Développeurs Architecture de l’application
… … …
[email protected] 2014
![Page 13: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/13.jpg)
Vue en boîte noire
Model
View
Controllerrequêtes
réponses
App
APPLICATION
tests fonctionnels
[email protected] 2014
![Page 14: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/14.jpg)
Test fonctionnels
• Ce que l’utilisateur fait et voit
• Test l’ensemble des couches de l’application
[email protected] 2014
![Page 15: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/15.jpg)
Exemple de scénario
# Création d’un enregistrement par utilisateur lambda
1. Un utilisateur lambda s’authentifie sur l’application
2. Il accède à la page du formulaire
3. Il rempli 2 champs et valide le formulaire
• Il doit voir un message de succès
• Il doit voir son [email protected] 2014
![Page 18: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/18.jpg)
‣ Lourd à utiliser surtout à plusieurs et en production
‣ Attention au mode « enregistrement live » privilégier la sélection des composant par attributs HTML (classe, ID ou autre attribut)
Simulation des scénarios par le navigateur
[email protected] 2014
![Page 19: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/19.jpg)
Moteurs de rendu « headless » Selenium, PhantomJS, Webkit, etc.
• Simulations complètes sans navigateur « lourd »
• En ligne de commande
• Multi-environnement
[email protected] 2014
![Page 21: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/21.jpg)
Objectifs
• Ecrire les tests dans un format compréhensible par les acteurs concernés
• Inclure les tests dans le SCM
• Déployer en qualification (pas en production -> préserver intégrité)
[email protected] 2014
![Page 23: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/23.jpg)
Ecriture des scénarios dans un DSL(Cucumber, Gherkin, etc.)
Etantdonné /^que je suis sur la page de connexion du wiki$/ do @browser.goto('http://example.com/start?do=login') end
Quand /^je m'identifie en tant que "([^"]*)" \ avec le mot de passe "([^"]*)"$/ do |id, password| @browser.text_field(:name, 'u').set(id) @browser.text_field(:name, 'p').set(password) @browser.button(:value, 'Connexion').click end
Alors /^je devrais voir "([^"]*)"$/ do |text| @browser.text.include?(text).should == true end
ENVOL 2014 - Tests d’une web app
![Page 24: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/24.jpg)
Ecriture des scénarios dans un DSL
• On écrit :
• les scénarios (langage non technique)
• les tests associés (code)
• les jeux de données (code)
• L’outil interprète et exécute l’ensemble des tests
[email protected] 2014
![Page 25: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/25.jpg)
Ecriture des scénarios dans un DSL(RSpec / JUnit / Jasmine / unittest / NUnit )
[email protected] 2014
![Page 30: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/30.jpg)
Échouez tôt, échouez souvent
• Une défaillance est plus facilement réparable juste après son apparition
• Il vaut mieux être alerté par un indicateur, que par un utilisateur furieux.
[email protected] 2014
![Page 32: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/32.jpg)
Implémentation en 3 étapes
Ecritured’une
spécification
Faire réussirle test Vérifier
le test échoue le test réussi tous les tests doivent passer
coder améliorer
[email protected] 2014
![Page 33: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/33.jpg)
Bilan
• Beaucoup d’aprioris
• Finalement plutôt passionnant
• Amélioration significative de la qualité globale (code + fonctionnement)
• Plus aisé de partager (confiance en son code)
[email protected] 2014
![Page 34: Non-regression testing in web app development](https://reader034.vdocuments.site/reader034/viewer/2022042707/58794c671a28abb1418b5083/html5/thumbnails/34.jpg)
Références• http://betterspecs.org/fr/
(bonnes pratiques tests RSPEC)
• http://phantomjs.org/ (headless web rendering)
• http://shcatula.wordpress.com/2013/02/21/java-rspec-alternative/(alternative à RSPEC pour Java)
• http://blog.octo.com/jai-limpression-decrire-mes-tests-en-double/(gestion doublons dans les tests)
[email protected] 2014