34
Développement d’une application web Ecriture des tests de non-régression [email protected] ENVOL 2014

Non-regression testing in web app development

Embed Size (px)

Citation preview

Page 1: Non-regression testing in web app development

Développement d’une appl icat ion web

Ecriture des tests de non-régression

[email protected] 2014

Page 2: Non-regression testing in web app development

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

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 4: Non-regression testing in web app development

Anatomie d’une web app

[email protected] 2014

Page 5: Non-regression testing in web app development
Page 6: Non-regression testing in web app development

Fonctionnement d’une web app

[email protected] 2014

Page 7: Non-regression testing in web app development

Architecture d’une web app

Model

View

Controllerrequêtes

réponses

[email protected] 2014

Page 8: Non-regression testing in web app development

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

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

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 11: Non-regression testing in web app development

Test des spécifications fonctionnelles

[email protected] 2014

Page 12: Non-regression testing in web app development

Vue complète

Model

View

Controllerrequêtes

réponses

[email protected] 2014

Page 13: Non-regression testing in web app development

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

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

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 16: Non-regression testing in web app development

Simulation des scénarios par le navigateur

[email protected] 2014

Page 17: Non-regression testing in web app development

Simulation des scénarios par le navigateur

[email protected] 2014

Page 18: Non-regression testing in web app development

‣ 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

Moteurs de rendu « headless » Selenium, PhantomJS, Webkit, etc.

• Simulations complètes sans navigateur « lourd »

• En ligne de commande

• Multi-environnement

[email protected] 2014

Page 20: Non-regression testing in web app development

Ecriture des scénarios dans un langage dédié (DSL)

[email protected] 2014

Page 21: Non-regression testing in web app development

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 22: Non-regression testing in web app development

Ecriture des scénarios dans un DSL(Cucumber, Gherkin, etc.)

[email protected] 2014

Page 23: Non-regression testing in web app development

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

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

Ecriture des scénarios dans un DSL(RSpec / JUnit / Jasmine / unittest / NUnit )

[email protected] 2014

Page 26: Non-regression testing in web app development

Execution des tests en ligne de commande

[email protected] 2014

Page 27: Non-regression testing in web app development

Bonus : générer le cahier de recettes

[email protected] 2014

Page 28: Non-regression testing in web app development

Intégration dans IDE

[email protected] 2014

Page 29: Non-regression testing in web app development

Échouez tôt et échouez souvent.

[email protected] 2014

Page 30: Non-regression testing in web app development

É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 31: Non-regression testing in web app development

Faites-en un rituel

[email protected] 2014

Page 32: Non-regression testing in web app development

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

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

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