© ZENIKA 2021 All rights reserved - Proprietary & confidential Flaky tests Ces 🐛 qui nous empoisonnent la vie

Les tests, un nouveau concept super stylé

Voici une reprĂ©sentation de la pyramide des tests de Mike Cohn Chaque couche peut avoir sa propre boucle de feedback. Plus on descend, plus c’est facile de comprendre pourquoi c’est cassĂ© Plus on remonte et plus c’est compliquĂ©!

L'équilibre du domaine

On vit un monde magnifique, on créé des fonctionnalitĂ©s en TDD, parfois on avait pas prĂ©vu qqch et ca casse. On corrige, et puis parfois ça se corrige tout seul
et puis ca rĂ©pĂšte et puis c’est la cata

Patatras ⛈ Les tests sont imprĂ©visible ⛈ On a plus le contrĂŽle ⛈ On perd l’idempotence qui rĂ©git tout l’équilibre des tests

Le comic sans ms, ça fait peur đŸ«Ł

Les timeouts ⏱

Principalement sur les e2e/acceptance On tombe principalement sur des faux negatifs. Principalement ce sont:

  • Problemes de rĂ©seaux
  • DOM non chargĂ©s
  • RequĂȘtes trop lentes
  • Deadlock 💀

Problùme d'environnement 🌍

Les diffĂ©rence d’environnement peuvent poser des problĂȘmes: Setup/installation (OS, ecran, version java/node/python) Ressources (RAM) Variables d’environnement Docker peut aider pour ça (mais ne rĂšgle pas tout)

ProblĂšme de donnĂ©es 💿

Un test peut en impacter un autre (mais ne devrait pas) Les donnĂ©es peuvent ĂȘtre par exemple:

  • BDD

  • RAM

  • SystĂšme de fichier Cache

  • Tri dans le code et/ou dans le test

  • Tri dans le test/tri dans le code

  • On peut tester le contenu sans l’ordre

Le (pseudo) random đŸ’©

Le random n’est l’est pas toujours autant qu’on l’espĂšre ProblĂšmes avec des bibliothĂšque (par exemple Faker) pour l’unicitĂ©

ProblĂšme de modules importĂ©s 🛾

Les rÚgles du SEMVER ne sont pas toujours respectés. Exemple: Ua-parser-js (publication de version avec du cryptomining)

Problùme de date 📆

Les dates et les fuseaux horaires, le cauchemar des devs! Les dates changent en permanence, ce qui semble ĂȘtre fixe ne l’est pasPB sur des dates, dĂ©calage horaires/heure d’étĂ© il faut mocker la date Il faut mocker la timezone

Problùme d'asynchronisme ⚡

En asynchrone, on peut ĂȘtre dans les temps et on peut ne pas
 Si on attend pas la rĂ©solution de l’asynchrone on ne sais pas quand le code sera exĂ©cutĂ© (possible que ca fonctionne)

Comment qu'on reproduit quand y'a un flaky?

  • On run les tests seul/avec d’autres tests
  • On run dans le dĂ©sordre
  • On vĂ©rifie l’état des stockages avant/aprĂ©s le test
  • On limite la qualitĂ© du reseau
  • Sur diffĂ©rents environnements
  • On debug

Pour reperer ces petites bĂȘtes?

En runnant et rerunnant les tests, sur tout pleins d’environnements! Avec des outils: Circle-ci Gitlab-ci Datadog Les CI permettent de repĂ©rer les flaky et donner de nombreuses informations pertinentes.

Les tests Flakys Ces 🐛 qui nous empoisonnent la vie Antoine Ceol twitter @boombaprealm github @aceol