38
REX un an de testing E2E

Rex E2E

Embed Size (px)

Citation preview

REX un an de testing E2E

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

XL Release

2

• Un outil de release management • Un mélange entre Jenkins et Trello

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

3

• Début au studio en mars 2013 • V1 en septembre 2013 • Online trial en janvier 2014

Quelques dates et chiffres

• 32 sprints de deux semaines • 4000+ commits • 21 000+ lignes de Java • 8 000+ lignes de JavaScript • 8 000+ lignes de Html/Less

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

4

• Approche ATDD dès le début • ATDD : Acceptance test driven development

Le Test sur XL Release

• 400+ tests E2E • 1000+ TU Java • 900+ TU JS

E2E Unit

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

5

• CasperJS • Basé sur PhantomJS

Choix du framework E2E en 2013

• ZombieJS • Émule un navigateur web en JS

• Karma + Angular Scenario • Prévu pour AngularJS • Permet de tester sur des vrais navigateurs

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

6

Javascript ou bien ?

CoffeeScript !• Parce que c’est plus facile à lire • Parce que c’est plus facile à écrire • Parce que c’est plus simple pour faire des

classes

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

7

• Interactions minimalistes • Assertions CSS

Comment tester en E2E ?

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

8

• Mocker le backend ? • Ou bien tester aussi le backend ?

Et le backend ?

• Pour XL Release : approche ATDD • -> On teste aussi le backend

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

9

Au début un script d’insertion de données

Oui, mais alors les données ?

• Très rapidement, cela devient une gageure • Les tests dépendent entre eux • Il est impossible de lancer un seul test • Les merges des données de tests :(

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

10

Insertion des données locale à chaque test :

Oui, mais alors les données ?

Suppression automatique à la fin du test

Via une API de fixtures dédiée

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

11

• Au début : c’est très rapide • Et puis ça devient lent… 15 secondes par

test

Et ça va vite ?

• Comment aller plus vite : • Ne faire que de la navigation in-page :

pas de rafraîchissement complet • Utiliser Chrome : c’est plus rapide que

PhantomJS !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

12

Demo time !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

13

• Cauchemar de maintenance :

Quand les tests se compliquent

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

14

• À l’utilisation :

Le pattern “Page object”

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

15

Implémenter un “Page object”

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

16

Le “Page object” +BDD +Rend les tests plus lisibles +Permet de séparer le test métier de son

implémentation dans la page HTML +Facilite la factorisation des interactions et

des assertions

- Ne produit pas d’erreurs plus faciles à lire

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

17

• Formulaires

Les features qui se testent bien

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

18

• Monitoring temps réel

Les features plus difficiles à tester

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

19

• Dates

Les features plus difficiles à tester

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

20

• Le Drag & Drop

Les features très dures à tester

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

21

• Deployit/XL Deploy, Jenkins, Jira • Mocké avec un NodeJS + Express

• LDAP • Mocké avec NodeJS + LdapJS

-> Node Fake API lancé pendant les tests

Et les dépendances externes ?

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

22

La triche• Comment “hi-jacker” certains services

AngularJS pendant les tests :

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

23

Protractor ?• Fin 2013 : • Angular Scenario stagne • Protractor devient l’outil recommandé • Tous nos tests (300+) sont écrits pour

Karma / Angular Scenario • Que faire ?

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

24

Angular Scenario VS Protractor

• Angular Scenario est simple : il pilote une application AngularJS dans une IFrame via JQuery

• Protractor est basé sur WebDriverJS, lui même basé sur Selenium : il pilote le navigateur via le driver Selenium

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

25

Angular Scenario VS Protractor

• Très rapide • Simpliste

• Plus lent • Plus riche : • Permet le D&D • Permet les

captures d’écran

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

26

Protractor comment le vendre ?• Notre PO réussit à vendre le passage à

Protractor pour un nouveau besoin : • Générer automatiquement les captures

d’écran de la documentation !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

27

Protractor : les difficultés• Protractor n’aimait pas trop CoffeeScript

au début • Protractor tourne dans NodeJS : un niveau

d’asynchronisme en plus • Lenteurs :

• Pour le même test : • 3/4 secondes avec Angular Scenario • 7/10 secondes avec Protractor

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

28

Protractor : comment y passer ?• S’appuyer sur le “page object” • Ré-implémenter nos pages objects pour

Protractor • Ré-utiliser les tests

• Ré-implémenter le mécanisme de fixtures en Node

• Make it work !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

29

Demo time !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

30

Captures d’écran automatisées

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

31

Captures d’écran automatisées

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

32

Captures d’écran automatisées• Interroger les dimensions de chaque

composant via JQuery • Calculer le rectangle englobant • Capturer toute la page avec Protractor • Demander à Image Magick de retailler

l’image en fonction des dimensions

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

33

Captures d’écran automatisées• Au final ? +Un jeu de données stable : des captures

qui suivent les évolutions du produit +Des captures avec des dates à jour!

- Nécessite de refaire une vérification manuelle sur les captures.

- Race condition sur le cropping à résoudre !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

34

Notre avis sur Protractor+ Projet assez actif et réceptif aux PRs ~ Beaucoup plus réaliste : ne permet pas de

prendre des raccourcis : clic sur un élément invisible

~ Asynchronisme avec Angular JS - Déboggage assez difficile :

• Trop verbeux ou pas assez: parfois pas d’affichage du sélecteur CSS en erreur

- Performances

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

35

Le testing E2E+ Efficace

• Permet de tester les cas nominaux d’une User story

+ Assez stable aux changements dans l’interface

- Sensible aux problèmes de concurrence : • Attention aux “Heisentests” !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

36

Le testing E2E- Coûteux en temps de build :

• > 20 minutes pour 400 tests • Ne tester que les cas nominaux, les cas

particuliers sont à tester unitairement !

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

37

Questions

?

Merci!